Рассмотрим создание разменного автомата на Arduino. Автомат будет разменивать монеты 10 руб, купюры 10, 50, 100 руб на монеты достоинством 5 руб.
Для автомата будем использовать купюроприемник ICT BL-700, монетоприемник на одну монету, хоппер Cube Hopper MK2
Я уже рассматривал подключение к Arduino монетоприемника (http://cxem.net/arduino/arduino85.php) и купюропримника ICT (http://bhv.ru/books/book.php?id=191366). Рассмотрим подключение к Arduino хоппера – электромеханического прибора, предназначенного для выдачи монет.
Рассмотрим хоппер, который хранит и выдает сдачу монетами одного номинала — так дешевле, чем ставить универсальное устройство. Новые модели хоппера 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 мм
Для подключение к Arduino будем использовать следующие контакты:
pin 6 — выход оптического сенсора
pin 8 — +12В
pin 9 — земля
При подаче на pin8 напряжения +12В хоппер начинает выдавать монеты. При выдаче каждой монеты на pin6 хоппер выдает отрицательный импульс длительностью 35 мс.
pin подтягиваем резистором 10 кОм к +5В и подключаем к входу Arduino.
Приступим к созданию разменного автомата.
Схема электрическая
При внесении монет через монетоприемник и купюр через купюроприемник на дисплее отображается внесенная сумма. При нажатии на кнопку Разменять хоппер выдает внесенную сумму монетами по 5 (или 10) руб. Отслеживание импульсов от монетоприемника, купюроприемника и хоппера по прерыванию. Используем Arduino Mega, прерывания 0(D2), 1(D3), 2(D21). Подача +12В на хоппер через реле.
И скетч на Arduino:
// купюроприемник 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; }
Список радиоэлементов
Обозначение | Тип | Номинал | Количество | Примечание | Магазин | Мой блокнот |
---|---|---|---|---|---|---|
Arduino Mega | Плата Arduino | Mega | 1 | |||
T2 | Биполярный транзистор | C945 | 1 | |||
D2 | Выпрямительный диод | 1N4004 | 1 | |||
Купюроприемник | ICT BL-700 | 1 | ||||
Монетоприемник | 1 | |||||
Хоппер | Cube Hopper MK2 | 1 | ||||
Резистор | 10 кОм | 1 | ||||
Резистор | 4.7 кОм | 3 | ||||
R2 | Резистор | 1 кОм | 1 | |||
Потенциометр | 10 кОм | 1 | ||||
WH1602 | ЖК дисплей | WH1602 | 1 | |||
БП | Компьютерный блок питания | +5В.+12В | 1 | |||
S1 | Кнопка | 1 | ||||
Rel2 | Реле | SRD-05VDC-SL-C | 1 | |||