Вендинговый разменный автомат на Arduino

Рассмотрим создание разменного автомата на 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