В статье рассмотрено создание блока приема денег, из монетоприемника и Arduino. Блок осуществляет прием монет (и в перспективе купюр) и отправляет данные о номинале принятой монеты по последовательному порту. Вывод результата осуществляется на дисплей WH1602.
Монетоприемник CH-926 может принять до 6 видов различных монет, диаметром: 15мм ~ 32мм, толщиной 1.2mm ~ 3.8mm.
Монетоприймач CH-926
Рабочее напряжение 12В.
Выходной сигнал: импульсный. Частота импульсов устанавливается с помощью трехпозиционного переключателя – fast: 20 мс,medium: 50 мс, slow: 100 мс
На eBay можно по цене приблизительно 800 руб.
Настройка монетоприемника
Включить питание, установить переключатель 1 в позицию NC, переключателем 2 – выбрать нужную скорость обмена (fast, medium, slow)
Нажать одновременно кнопки ADD и MINUS более 3 секунд, отпустить , на индикаторе появится A;
Нажать и отпустить кнопку SET, появится E;
Кнопками ADD, MINUS установить кол-во разных монет для приема (1-6) – я установил 5 – (50 коп,1,2,5,10 руб)
Нажать кнопку SET более 3 секунд
Появилась на дисплее H1 – кол-во экземпляров монеты 1 для калибровки
Кнопками ADD, MINUS установить значение H для первой монеты
Нажать кнопку SET более 3 секунд
Появилась на дисплее P1 – кол-во выдаваемых импульсов при успешном приеме монеты 1 (1-50)
Кнопками ADD, MINUS установить значение импульсов для первой монеты (я выбирал 1 для первой, 2 – для второй, ….., 5 – для пятой)
Нажать кнопку SET более 3 секунд
Появилась на дисплее F1 -точность опознания монеты 1 (1-30) – я выбирал 10
Кнопками ADD, MINUS установить значение F для первой монеты
Нажать кнопку SET более 3 секунд
Повторить для H2-6, P2-6, F2-6
Появится A
Нажать и отпустить кнопку SET, появится E;
Теперь выключаем-включаем монетоприемник
Калибровка монетоприемника
Нажать кнопку SET более 3 секунд
Появилась на дисплее A1 – начинаем опускать в монетоприемник монеты номинала 1 в количестве H1
По загрузке последней монеты начинает мигать A1
Нажать кнопку SET – появится A2
Повторить загрузку монет для номиналов 2-5
Нажать кнопку SET более 3 секунд
Теперь выключаем-включаем монетоприемник
Монетоприемник готов к приему монет. Можем опускать монеты, на дисплее высвечивается количество импульсов. Если монеты какого-то номинала не проходят – повторяем настройку сначала.
Подключение к Arduino
Монетоприемник оснащен кабелем
Подсоединяем красный к 12В, черный к “земле”, белый к D3 платы Arduino. Ловить импульсы будем по прерыванию 1.
Подсоединим к Arduino дисплей WH1602, где будет отражаться информация по накопительной сумме.
Схема получается следующей:Вот скетч для Arduino. Вывод результатов приема монет осуществляется на дисплей WH1602. В первой строке – текущая принятая монета, во второй – накопленная сумма. Прерывание 0 – для подключения в будущем купюроприемника IC V7.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
Двадцять
21
22
23
24
25
26
Двадцять сім
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
|
// купюроприемник IC A7 V7 const int moneyPin1=2; // монетоприемник CH-926 const int moneyPin2=3; int pulse1=0; int pulse2=0; unsigned long timeAllPulse1=2000; // макс. время приема купюры unsigned long timeAllPulse2=1000; // макс. время приема монеты unsigned long timeCount1=0; unsigned long timeCount2=0; float nominals2[6]={0,0.5,1,2,10,5}; float sum=0.0; // дисплей WH1602 #include "LiquidCrystal.h" LiquidCrystal lcd(12,11,7,6,5,4); void setup() { Serial.begin(9600); pinMode(moneyPin1,INPUT); pinMode(moneyPin2,INPUT); //attachInterrupt(0,count_pulse,FALLING); attachInterrupt(1,count_pulse2,FALLING); lcd.begin(16,2); lcd.clear(); lcd.setCursor(0,0); lcd.print( "coin ok!" ); } void loop() { // прошло максимальное время приема монеты? if (pulse2>0 && (millis()-timeCount2)>timeAllPulse2) { sum+=nominals2[pulse2]; Serial.println(nominals2[pulse2]); lcd.clear(); lcd.setCursor(0,0);lcd.print( "1=" ); lcd.setCursor(2,0);lcd.print(nominals2[pulse2]); lcd.setCursor(0,1);lcd.print( "*=" ); lcd.setCursor(2,1);lcd.print(sum); pulse2=0; } } // обработка прерывания монетоприемника - получить кол-во импульсов // void count_pulse2() { //detachInterrupt(0); detachInterrupt(1); pulse2++; if (pulse2==1) timeCount2=millis(); //attachInterrupt(0,count_pulse,FALLING); attachInterrupt(1,count_pulse2,FALLING); } |
Прикріплені файли: