Рассмотрим создание разменного автомата на Arduino. Автомат будет разменивать монеты 10 руб, купюры 10, 50, 100 руб на монеты достоинством 5 руб.
Для автомата будем использовать купюроприемник ICT BL-700, монетоприемник на одну монету, хоппер Cube Hopper MK2
Рассмотрим хоппер, который хранит и выдает сдачу монетами одного номинала – так дешевле, чем ставить универсальное устройство. Новые модели хоппера Cube Hopper MK2 (datasheet) можно приобрести по цене от 3000 руб, можно найти и б/у устройства от 1500 руб. Cube Hopper MK2, один из самых распространенных, разработан всемирно известной компанией Suzo, известнейшим игроком на рынке развлекательного оборудования. Данная модель специально разработана для игровой и вендинговой индустрии и выполнена из износостойкого пластика и обладает высокой надежностью.
Количествно номиналов: 1
Есть варианты под монеты: 1р, 2р, 5р, 10р!
Скорость выдачи монет: 7монет/сек
Размер монет: 18.00mm – 31.00mm
Толщина монет: 1.50mm – 3.20mm
Питание: 12V DC ±10% or 24V DC -25% +10%
Температура работы: от 0С до +50С
Вместимость: 450 монет диаметром 24мм
В хоппере МК2 применено современное электронное управление оптическими датчиками выдачи
Хоппер МК2 работает в двух протоколах: ccTalk или параллельный
Хоппер МК2 квадратного типа, таким образом выдача монет(жетонов) может быть осуществлена с 4 различных сторон в зависимости от необходимости.
Опционально: Расширитель держателя монет можно установить до трёх расширителей, что даёт возможность загружать в бункер хоппера МК2 более 1200 монет(жетонов) диаметром 24 мм.
pin 6 – выход оптического сенсора
pin 8 – +12В
pin 9 – земля
При подаче на pin8 напряжения +12В хоппер начинает выдавать монеты. При выдаче каждой монеты на pin6 хоппер выдает отрицательный импульс длительностью 35 мс.
pin подтягиваем режиссером 10 кОм к +5В и подключаем к входу Arduino.
Приступим к созданию разменного автомата.
Схема электрическая
Скетч на Arduino:
1
2
3
4
5
Sechs
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
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
Vier und fünfzig
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
|
// купюроприемник IC A7 V7 const int moneyPin1=2; // монетоприемник CH-926 const int moneyPin2=3; // хоппер suzo mk2 const int moneyPin3=21; const int powerHopper=8; int nominal_kup=10; int nominal_hop=10; // кнопка const int pinButton=8; boolean lastButton=HIGH; boolean currentButton=HIGH; int pulse1=0; int pulse2=0; int pulse3=0; unsigned long timeAllPulse1=2000; // макс. время приема купюры unsigned long timeAllPulse2=500; // макс. время приема монеты unsigned long timeCount1=0; unsigned long timeCount2=0; int sum=0; // дисплей WH1602 #include "LiquidCrystalRus.h" LiquidCrystalRus lcd(12,11,7,6,5,4); void setup() { Serial.begin(9600); // pinMode(moneyPin1,INPUT); pinMode(moneyPin2,INPUT); pinMode(moneyPin3,INPUT); pinMode(pinButton,INPUT); Serial.println( "coin ready" ); lcd.begin(16,2); lcd.clear(); lcd.setCursor(0,0); lcd.print( "Внесите деньги" ); delay(1000); attachInterrupt(0,count_pulse1,FALLING); attachInterrupt(1,count_pulse2,FALLING); } void loop() { // нажатие кнопки currentButton=debounce(lastButton); if (lastButton==HIGH && currentButton==LOW) { doForKey(); } lastButton=currentButton; // прошло максимальное время приема монеты? if (pulse2 (больше) 0 && (millis()-timeCount2) (больше) timeAllPulse2) { sum=nominal_kup; pulse2=0; lcd.clear(); lcd.setCursor(0,0);lcd.print( "Баланс" ); lcd.setCursor(0,1);lcd.print(sum); } // прошло максимальное время приема купюры? if (pulse1 (больше) 0 && (millis()-timeCount1) (больше) timeAllPulse1) { sum+=pulse1*10; pulse1=0; lcd.clear(); lcd.setCursor(0,0);lcd.print( "Баланс" ); lcd.setCursor(0,1);lcd.print(sum); } } // обработка прерывания монетоприемника - получить кол-во импульсов // void count_pulse2() { detachInterrupt(1); pulse2++; if (pulse2==1) timeCount2=millis(); attachInterrupt(1,count_pulse2,FALLING); } // обработка прерывания купюроприемника - получить кол-во импульсов // void count_pulse1() { detachInterrupt(0); //detachInterrupt(1); pulse1++; if (pulse1==1) timeCount1=millis(); attachInterrupt(0,count_pulse1,FALLING); } // обработка прерывания хоппера void count_pulse3() { detachInterrupt(2); pulse3++; attachInterrupt(2,count_pulse3,FALLING); } // обработка нажатия кнопки void doForKey() { if (sum==0) return ; detachInterrupt(0); detachInterrupt(1); attachInterrupt(2,count_pulse3,FALLING); pulse3=0; lcd.clear(); lcd.setCursor(0,0);lcd.print( "Размен" ); digitalWrite(powerHopper,HIGH); while (pulse3<=sum/nominal_hop) { delay(50); } digitalWrite(powerHopper,LOW); detachInterrupt(2); lcd.clear(); lcd.setCursor(0,0);lcd.print( "Размен" ); lcd.setCursor(0,1);lcd.print( "произведен" ); delay(3000); lcd.clear(); lcd.setCursor(0,0); lcd.print( "Внесите деньги" ); attachInterrupt(0,count_pulse1,FALLING); attachInterrupt(1,count_pulse2,FALLING); sum=0; } // проверка на дребазг boolean debounce(boolean last) { boolean current=digitalRead(pinButton); if (last!=current) { delay(5); current=digitalRead(pinButton); } return current; } |
Angehängte Dateien:
Список радиоэлементов:
Bezeichnung | Stil | Nominal | Anzahl von |
Arduino Mega | Плата Arduino | Mega | 1 |
T2 | Bipolyarnыy Transistor | C945 | 1 |
D2 | Gleichrichterdioden | 1N4004 | 1 |
Купюроприемник | ICT BL-700 | 1 | |
Монетоприемник | 1 | ||
Хоппер | Cube Hopper MK2 | 1 | |
Резистор | 10 кОм | 1 | |
Резистор | 4.7 кОм | 3 | |
R2 | Резистор | 1 кОм | 1 |
Potentiometer | 10 кОм | 1 | |
WH1602 | ЖК дисплей | WH1602 | 1 |
BP | Компьютерный блок питания | +5В.+12В | 1 |
S1 | Drucktaster | 1 | |
Rel2 | Das Relais | SRD-05VDC-SL-C | 1 |