Есть идея создать робота-бармена, делающего коктейли, понимающего голосовые команды.
В статье рассмотрено создание блока приема денег, из монетоприемника и Arduino. Блок осуществляет прием монет (и в перспективе купюр) и отправляет данные о номинале принятой монеты по последовательному порту. Вывод результата осуществляется на дисплей WH1602.
Монетоприемник CH-926 может принять до 6 видов различных монет, диаметром: 15мм ~ 32мм, толщиной 1.2mm ~ 3.8mm.
Рабочее напряжение 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.
// купюроприемник 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); }
Прикрепленные файлы:
- coin2.zip (1 Кб)
Комментарии (48) | Я собрал (0) | Подписаться
Для добавления Вашей сборки необходима регистрация
[Автор]
Красный +12V
Оранжевый GND
Желтый INHIBIT +
Зеленый INHIBIT —
Синий SIGNAL +
Фиолетовый SIGNAL —
Подключал так:
-красный провод - +12 источника
-оранжевый на землю источника
-синий на пин и от него через резистор 5 кОм на +5 В ардуины
-фиолетовый на землю ардуины
В ардуино залил Ваш скетч, купюры принимает, а на дисплей ни чего не выдает. Помогите разобраться в чем проблема.
[Автор]
1. При загрузке выдает на дисплей надпись"coin ok!" ?
[Автор]
1= - выдает номинал текущей принимаемой монеты
*= cумма общая
Если выдает неправильный номинал - неправильно настроен монетоприемник, см. пункт "Настройка монетоприемника"
[Автор]
Красный идет на +12 как указано на первой схеме. А вот на второй схеме резистор R2 идет на +5В без красного провода. Красный на +12В.
Цеплял с учетом этой ошибки- все работает. Если резистор R2 прицепить к красному проводу(+12)- то вы спалите порт на ардуино(или целиком плату)
[Автор]
RED - на 12 В
WHITE подтянутый к 5В - на Arduino
Спасибо, что заметили. Исправлю
Я увижу в мониторе порта данные во время приема денег купюрником?
[Автор]
Данные дублируются в последовательный порт - Serial.println(nominals2[pulse2]);
Но в результате полной программной неграмотности не могу скорректировать скетч под NRI (не понятен кусок кода, преобразующий кол-во импульсов в номинал).
[Автор]
но видимо 1 руб - 1 импульс, 2 - 2, 5 - 5, 10 - 10
Попробуйте так (строка 13)
float nominals2[6]={0,0.5,1,2,10,5};
заменить на
float nominals2[11]={0,1,2,0,0,5,0,0,0,0,10};
Либо (если не получится) перепрограммируйте монетоприемник
Кнопками ADD, MINUS установить значение импульсов для первой монеты (я выбирал 1 для первой, 2 - для второй, ....., 5 - для пятой)
[Автор]
[Автор]
[Автор]
решал так
1 - 10 руб одного типа - 10 имп
2 - 10 руб другого типа - 10 имп
3 - 5 руб одного типа - 5 имп
4 - 5 руб другого типа - 5 имп
монеты из каждой кучки калибруются как отдельная независимая монета
Фото прикрепляю, практически это просто кусок схемы http://cxem.net/mc/mc286.php. В Казахстан уже эти платки отправлял. Думаю, что коммерческую часть лучше обсуждать в личной переписке.
[Автор]
[Автор]
1. Подбор номинала резистора к выводу COIN монетоприемника (здесь в статье это 4,7 кОма). Выход монетоприемника, по сути, это оптопара. И резистор задает ток через эту оптопару.
2. Все соединения максимально короткими проводами. Провода питания скрутил в виде "витая пара".
3. Вся схема, не Ардуино, собрана на одной плате, провода в плате впаяны, разъем только на монетоприемнике.
4. В обработчике прерывания сделал трехкратную проверку на уровень сигнала каждую через 3 мс, но это уже, думаю, перебор.
Что конкретно помогло не знаю, но даже "болгарка" не вызывала ложных срабатываний. И еще, все это делал не на Ардуино, а на нормальной печатке, где все пропаяно и зафиксировано. Пока все было на макетнице, тоже помехи проскакивали.
[Автор]
Вы к какому источника питания подключаете Arduino?
Если 12В - то вполне может сильно греться
Если 7-9В, то не должно сильно греться
В любом случае грееться не от того, что подключено к купюрнику
такая-же логика и у монетоприемника, просто мы на ардуину (D3) подаем 12в, согласно вашей схеме, вот она и греется, разве не так?
-синий(белый) на пин и от него через резистор 5 кОм на +5 В ардуины
-фиолетовый на землю ардуины
Но тогда как быть с купюрориемником APEX5400 в нем есть только 4 провода как в вашем примере с монетником, если там не обьединить землю, они друг друга не поймут?
там 3 провода: вход, земля и выход
если отключить оптопару, то на проводах вход и выход 4.96в, при подключении оптопары на входе 1.16в на выходе 0.16в, при прирывании луча на выходе 4.96в, причем прерывание луча должно быть короткое(падающая монета), если просто прервать луч чем либо, кредит не начисляется, хотя оптопара срабатывает и на выходе появляется 4.96в
Собственно вопрос: каким образом можно сэмулировать работу оптопары нажатием нормально замкнутой кнопки, для дальнейшего подключения вместо этой кнопки монетника(купюрника)
[Автор]
а COIN на пин Arduino и от него через резистор 5 кОм на +5 В Arduino
При подключении монетник считает и выводит всё на дисплей. А купюрник не хочет - ну в смысле он купюры принимает, но ничего не выводит.
У вас написано - прерывание 0 для подключения в будущем купюрника . Если я эти строки раскоменчиваю - выдает ошибку. ничего не пойму. Подскажите.