Arduino для автоматизации снекового автомата
Уважаемый lehha — автор проекта автоматизации кофейного автомата при помощи контроллера Arduino, снова радует нас очередным вендинговым проектом.
На этот раз, автоматизации подвергается подержанный снековый автомат (продающий чипсы/воду/шоколадки и т.п.)
Подробности реализации проекта можно прочитать в авторской статье на хабре — Arduino в снековом автомате.
Здесь же, выделим только основные моменты:
* для проекта используется Arduino Mega 
на фото — контроллер Arduino Mega, макетная плата с транзисторами и разъемами для подключения и макетная плата с разъемами для клавиатуры выбора товаров и дисплея.
* к контроллеру подключаются:
— драйверы 23-х мотор-редукторов (на 12В), осуществляющих выдачу товаров.
На валу редуктора стоит микрик, который реагирует на полный оборот и подсоединена стальная пружина, в витки которой вкладывается товар. При полном обороте товар сдвигается и самый первый снек выпадает в ящик для выдачи.
— клавиатура (используется обычная матричная схема 6х3 (напряжение считывается через 3 аналоговых входа))
— дисплей (четыре 8-сегментных светодиодных индикатора)
— купюроприёмник и монетоприемник (работают по протоколу MDB
MDB (Multi-Drop Bus) — несколько «модифицированный» Serial-протокол: 8 бит данных + бит четности, указывающий направление передачи. Важный момент — задержка между командой и ответом не должна превышать 5 ms, иначе — timeout.
Выход – использовался сторонний модуль C-MDB, выдающий нужные данные по обычному com-порту.
— для удобства контроля, анализа и кондополнительных фишек — в автомат установлен ПК c Linux-ом на борту, к USB-порту которого и подключен контроллер Arduino.
на ПК реализованы:
* веб-интерфейс (логи, учётом товара, денег и т.д.);
* общение с модулем платёжек (демон на PHP);
* доступ через Интернет (на месте установки есть проводной Интернет с выделенным IP, проброс порта – веб-интерфейс и ssh доступны даже с мобильника);
* веб-камера внутренностей автомата;
* аудио сопровождение и подсказки (планируется).
похоже, пора заводить проект VendingDuino
Easyelectronics.ru
Всем добрый день!
Меня зовут Игорь. Обращаюсь за «скорой помощью»:
Есть задача: имеется кофе-машина, снабженная внутренним мастер-контроллером с шиной MDB. Кофе-машина исходно не имеет приемников купюр или монет, а просто наливает 1 вид кофе из N в соответствии с тем, какая кнопка с напитком нажата на передней панели.
Задача: подключить к мастер-контроллеру через шину MDB Ардуину со считывателем RFID-меток. На метке записано число (4 байта кода КОИ-Р), соответствующее стоимости напитка в рублях, и флаг (отдельный 5-ый байт), указывающий, что эта сумма с RFID ещё не списывалась и напиток не выдавался. Ардуина со считывателем RFID должна прочитать сумму и флаг и, убедившись, что флаг указывает на то, что сумма ещё не потрачена, должна сменить флаг на «напиток выдан», откликнуться на периодический опрос мастер-контроллера MDB и передать ему значение суммы по шине MDB.
Мастер-контроллер в ответ подтверждает, что сумма принята и ждет нажатия покупателем кнопки с названием напитка. Если кнопка нажата & сумма достаточна для выдачи напитка, мастер-контроллер отправляет Ардуине квитанцию: 4 байта величины «сдачи» и Ардуина закрывает сессию с мастером.
Я малоопытен в программировании Ардуино и хочу попросить Вас, если это возможно, о небезвозмездной помощи быстро отпрототипировать эту систему на Arduino. Вероятно, здесь нужна Arduino Mega, потому что нужно иметь 2 UART: 1 для связи со считывателем RFID-меток RC522, другой — для связи с шиной MDB через опторазвязку.
Срок сжатый: к 31 мая — 1 июня. Гонорар готов обсудить в личном разговоре. Кто согласен обсудить моё предложение, откликнитесь, пожалуйста поскорее.
Заголовок сообщения: Re: СРОЧНО. Разработка на Arduino и шины MDB.
Добавлено: 24 май 2017, 20:30
делал, но не прикасаюсь к Ардуино.
единственно, надо понять ваше кодирование меток
Подключение монетоприемника к Arduino

Есть идея создать робота-бармена, делающего коктейли, понимающего голосовые команды. В статье рассмотрено создание блока приема денег, из монетоприемника и 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]=; 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("* article-video">
Прикрепленные файлы:
- coin2.zip (1 Кб)
Теги:
victoruni
Опубликована: 01.07.2013
Изменена: 08.07.2014
0
2
Вознаградить Я собрал 0 0
Оценить статью
- Техническая грамотность
Saved searches
Use saved searches to filter your results more quickly
Cancel Create saved search
You signed in with another tab or window. Reload to refresh your session. You signed out in another tab or window. Reload to refresh your session. You switched accounts on another tab or window. Reload to refresh your session.
MDB controller based on Arduino UNO board
sergomor/mdb-arduino
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Switch branches/tags
Branches Tags
Could not load branches
Nothing to show
Could not load tags
Nothing to show
Name already in use
A tag already exists with the provided branch name. Many Git commands accept both tag and branch names, so creating this branch may cause unexpected behavior. Are you sure you want to create this branch?
Cancel Create
- Local
- Codespaces
HTTPS GitHub CLI
Use Git or checkout with SVN using the web URL.
Work fast with our official CLI. Learn more about the CLI.
Sign In Required
Please sign in to use Codespaces.
Launching GitHub Desktop
If nothing happens, download GitHub Desktop and try again.
Launching GitHub Desktop
If nothing happens, download GitHub Desktop and try again.
Launching Xcode
If nothing happens, download Xcode and try again.
Launching Visual Studio Code
Your codespace will open once ready.
There was a problem preparing your codespace, please try again.
Latest commit
Git stats
Files
Failed to load latest commit information.
Latest commit message
Commit time
README.md
Контроллер MDB устройств на базе Arduino UNO
Купюроприемник и/или монетоприемник подключены через дополнительную плату согласования к HardwareSerial Arduino. Контроллер постоянно опрашивает MDB устройства и транслирует события в порт по протоколу serial в виде текстовых сообщений, контроллер в свою очередь принимает команды через порт этот.
Когда происходит какое-либо событие в MDB устройстве (например, принята монета), из SoftwareSerial контроллера считываются данные в виде последовательности символов, например: ##12#10* — получили монету номиналом в 10р. или ##13#100* — получили купюру в 100р.
Таким же образом управляем устройствами, посылая команды в SofwareSerial например: ##100#1* — сбросить монетоприемник, ##100#2* — сбросить купюроприемник, ##110#35* — выдать сдачи 35р. и т.д.
Подключение осуществляется согласно схеме doc/MDB_interface.pdf к HardwareSerial порту Arduino (пины 0 и 1) Метками RX(0) и TX(1) отмечены входы/выходы на строне Arduino (в скобках указаны номера пинов).
Важно! При подключении контроллера к устройствам разъем USB должен быть отключен от Arduino, и наоборот, при подключенном USB эти пины должны быть отключены от платы согласования. Так как USB использует тот же самый порт Arduino для связи с ПК, что и наш контроллер для связи с MDB устройствами.
Для обмена информацией с контроллером и приемником используется последовательный порт (SoftwareSerial в Arduino). По умолчанию, нужно подключаться к пинам 10(RX) и 11(TX). Номера пинов можно изменить в файле libraries/mdb-bridge/link-data.h:
#define LINK_CONTROLLER_RX_PIN 10 #define LINK_CONTROLLER_TX_PIN 11
Там же можно изменить скорость подключения к порту (по умолчанию 9600 бод):
#define LINK_BAUD_RATE 9600
Команды представляют собой последовательность символов. Команда всегда начинается с символов ##, за которыми следует код команды и заканчивается *
Команды могут принимать параметры в виде цифр, если параметров несколько, то они разделяются символом #. Пример команды: ##100#1* — инициализация купюроприемника (код команды 100 и параметр номер устройства).
В файле libraries/mdb-bridge/mdb-commands.h описаны команды для устройства. Как их читать:
#define MDB_CMD_RESET (MDB_CMD_OFFSET + 0),1
это сброс устройства (MDB_CMD_OFFSET = 100)
число после запятой означает количество параметров для команды вот пример команды reset для для монетоприемника: ##100#2* (ее следует передавать перед началом сессии) другой пример, команда enable (MDB_CMD_ENABLE): ##104#2* (2 — это монетоприемник, 1 — купюропремник, 3 — терминал).
Устройства, в свою очередь, отвечают подобными последовательностями, которые вы должны парсить на стороне приемника.
Например, на команду ##108* монетроприемник должен показать состояние трубок (MDB_ANS_CHANGER_TUBE_STATUS) с восемью параметрами.
Если монетопремник примет монету, то он отправит в порт последовательность ##142#10*, где 142 — это код ответа (MDB_ANS_CHANGER_COIN_ACCEPTED), а 10 — номинал монеты.
Работают только купюроприемник и монетоприемник. Cashless не работает, в коде присутсвует как болванка.
Поддерживается минимальное кол-во количество комманд. То есть для эксплуаатации код придется дорабатыват вам самим.
Скетч для контроллера в файле mdb-controller/mdb-controller.ino
Пример обмена информации с контроллером в файле mdb-client/mdb-client.ino (запускается на воторй arduino которая подключена к контроллеру через SofwareSerail).
