Рассмотрим создание разменного автомата на Arduino. Автомат будет разменивать монеты 10 руб, купюры 10, 50, 100 руб на монеты достоинством 5 руб.
Для автомата будем использовать купюроприемник ICT BL-700, монетоприемник на одну монету, хоппер Cube Hopper MK2
Я уже рассматривал подключение к Arduino монетоприемника (/me/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 работает в 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
Плата ArduinoMega1
T2
Биполярный транзисторC9451
D2
Выпрямительный диод1N40041
КупюроприемникICT BL-7001
Монетоприемник1
ХопперCube Hopper MK21
Резистор10 кОм1
Резистор4.7 кОм3
R2
Резистор1 кОм1
Потенциометр10 кОм1
WH1602
ЖК дисплейWH16021
БП
Компьютерный блок питания+5В.+12В1
S1
Кнопка1
Rel2
РелеSRD-05VDC-SL-C1
Добавить все
Скачать список элементов (PDF)
Прикрепленные файлы:
- MKII.PDF (475 Кб)
- coin_cxemnet.zip (2 Кб)