Персональный торговый автомат Coin Op
Компоненты и расходные материалы
| × | 4 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 2 | ||||
| × | 1 | ||||
| × | 1 |
Необходимые инструменты и машины
| ||||
| ||||
|
Приложения и онлайн-сервисы
|
Об этом проекте
ЛИЧНЫЙ ТОРГОВЫЙ АВТОМАТ
Этот проект представляет собой пошаговую сборку персонального торгового автомата. Торговый автомат может быть заполнен вашими любимыми закусками или может быть доставлен в офис, чтобы вы могли поделиться угощениями со своей командой. Взгляните и поделитесь со мной своими мыслями.
Сборка машины:
В этом тексте я буду ссылаться на схемы машины, поэтому, пожалуйста, обращайтесь к схемам для разъяснения / понимания.
Размеры машины:21 "Ш x 18" x 24 1/4 "В (размеры коробки)
2 панели 18 дюймов D x 23 3/4 дюйма H (стороны)
2 панели 21 дюйм (ширина) x 18 дюймов (глубина) (сверху и снизу)
2 панели 21 "Ш x 24 1/4" В (передняя и задняя)
Перегородка 18 дюймов D x 23 3/4 дюйма H
Внутренняя полка:13 дюймов Ш x 12 дюймов (2 раза, верхняя и нижняя полка)
Расстояние между полками 8 дюймов, ширина 13 дюймов, глубина 12 дюймов
Каждый синий блок на схеме панелей представляет собой точку крепления ¾ ”Ш x ¾” В на глубину панели
Соберите коробку, как показано на схеме, используя блокировку 3/4 дюйма в каждой из точек соединения. Обратите внимание, что боковые стенки располагаются сверху нижней пластины и под верхней пластиной. Стены по периметру должны иметь ширину 21 дюйм. на 24 1/4 "в.
Перед установкой перегородку необходимо настроить. Отмерьте от верха 16 1/4 дюйма и прикрепите к нему блокировку для нижней полки. Отмерьте 8 1/4 дюйма от верха и прикрепите блокировку для верхней полки. Выполните эти шаги на левой стене (если смотреть спереди машины), чтобы вы могли прикрепить блокировку для верхней и нижней полок.
**** Обратите внимание, что сначала необходимо установить нижнюю полку, иначе будет очень сложно закрепить блокировку.
После установки блокировки для полок используйте панели 13 x 12 дюймов и установите по одной на каждый комплект блокировки. Это автоматически установит перегородку на свое место. Затем закрепите блокировку вверху и внизу правой стороны перегородки. Затем прикрепите его к верхней и нижней панели. Это полностью укрепит вашу конструкцию.
Установите заднюю панель и приготовьтесь к установке мотора. Убедитесь, что у вас есть распечатанные колеса катушки, чтобы вы могли измерить их и настроить отверстия. Измерьте колеса и прибавьте 1/4 дюйма к высоте, чтобы оставалось место для вращения катушки. Вы можете отрегулировать это по мере необходимости в зависимости от вашего материала. Измерьте более 6 1/2 дюймов на полке, чтобы отметить ее середина. Измерьте более 3 1/4 дюйма, чтобы найти центр каждой секции полки. Используйте измерение высоты, записанное несколько минут назад, чтобы найти точки сверления. Просверлите отверстие, которое позволит вам соединить колесо с двигателем без трения вала колеса плату. Закончите монтаж двигателей и завинчивание крепежа.
Настройка реле двигателя:
Соедините штыри следующим образом. Используйте микросхему L293D (выемка слева) (на принципиальной схеме), чтобы вы могли управлять реле. Это позволит вам подключить двигатели к источнику питания.
(Начиная слева направо)
Контакт 1 подключается к контактному разъему 10 на контроллере (на принципиальной схеме)
Контакт 2 подключается к контакту гнезда 9 на контроллере (на принципиальной схеме)
Контакт 3 подключается к положительной стороне реле (3 контакта обращены к вам, контакт слева) (на принципиальной схеме)
Контакт 4 подключается к заземлению 12 В на макетной плате (на принципиальной схеме)
Контакт 5 Не используется (на принципиальной схеме)
Контакт 6 подключается к заземлению на реле (3 контакта обращены к вам, контакт справа) (на принципиальной схеме)
Контакт 7 подключается к контактному разъему 8 на контроллере (на принципиальной схеме)
Контакт 8 подключается к +12 В на макетной плате (на принципиальной схеме)
Подключите средний контакт реле к +12 В на макетной плате (на принципиальной схеме)
Подключите задний правый контакт реле (3 контакта обращены к вам, контакт сзади справа) к положительному проводу, идущему к драйверам двигателя (на принципиальной схеме)
Установка экрана и кнопок:Экран - выберите место на правой стороне машины (если смотреть на машину спереди) и отметьте отверстие, которое необходимо сделать для отображаемой части экрана (2,53937 дюйма x 0,5708661). Кнопка - Выберите место на правой стороне машины (если смотреть на машину спереди) и отметьте отверстия, которые необходимо сделать для 4 пуговиц. Отверстия должны иметь размер 1,10236 дюймов, если вы используете ту же самую кнопку на кнопке. список деталей. Мне нравится использовать сверло меньшего размера, чем нужно, и наждачную бумагу, чтобы довести его до нужного размера.
Имейте в виду, что вам необходимо убедиться, что все подключения находятся в тех же точках, что и на схеме выше. Показанные на схеме светодиоды - это светодиоды, встроенные в кнопки. На схемах они показаны отдельно, но это только для отображения и для облегчения чтения схемы.
Подключите каждый двигатель к поставляемому с ними драйверу. Затем подключите каждый драйвер к контроллеру, выполнив следующие действия:
Настройка двигателя:
Питание должно быть подключено к стороне 12 В на макетной плате. Это питание поступает от блока питания ATX, который мы подготовим в конце. Затем подключите 4 "in" контакта на драйвере к контроллеру. Эти булавки следующие
********* НЕ ПОДКЛЮЧАЙТЕ К ПЕРВЫМ 2 КОНТАКТАМ В ЭТОМ БЛОКЕ ОНИ ЯВЛЯЮТСЯ КОНТАКТАМИ 5 В - НЕ ИСПОЛЬЗУЮТСЯ В ЭТОМ ПРОЕКТЕ *********
Двигатель 1:синие контакты 22, 24, 26, 28 (на принципиальной схеме)
Двигатель 2:желтые контакты 23, 25, 27, 29 (на принципиальной схеме)
Двигатель 3:зеленые контакты 30, 32, 34, 36 (на принципиальной схеме)
Двигатель 4:красные контакты 31, 33, 35, 37 (на принципиальной схеме)
Подключения кнопок:
Подключите одну сторону кнопки 1 к источнику питания 5 В, а другую сторону к заземленному резистору 220 В вместе с аналоговым выводом A0 (на принципиальной схеме)
Подключите одну сторону кнопки 2 к источнику питания 5 В, а другую сторону к заземленному резистору 220 В вместе с аналоговым контактом A1 (на принципиальной схеме)
Подключите одну сторону кнопки 3 к источнику питания 5 В, а другую сторону - к заземленному резистору 220 В вместе с аналоговым выводом A2 (на принципиальной схеме)
Подключите одну сторону кнопки 4 к питанию 5 В, а другую сторону - к заземленному резистору 220 В вместе с аналоговым контактом A3 (на принципиальной схеме)
ЖК-ЭКРАН:
Подключите экран к стороне 5 В на макетной плате для питания и заземления
Пины следующие:
Контакт 1:подключение к земле (на принципиальной схеме)
Контакт 2:подключение к источнику питания 5 В (на принципиальной схеме)
Контакт 3:Подключите к регулируемому потенциометру (на фото ниже) Нижний левый контакт к заземлению, нижний правый контакт к питанию и верхний контакт к контакту 3 на ЖК-дисплее (на принципиальной схеме вы устанавливаете контрастность на ЖК-дисплее, чтобы текст был четким и четким). чистый)
Контакт 4:первый сигнальный контакт к гнезду 2 контроллера (на принципиальной схеме)
Контакт 5:Подключите к земле (на принципиальной схеме)
Контакт 6:второй сигнальный контакт к гнезду 3 контроллера (на принципиальной схеме)
Контакт 7:НЕ ИСПОЛЬЗУЕТСЯ
Контакт 8:НЕ ИСПОЛЬЗУЕТСЯ
Контакт 9:НЕ ИСПОЛЬЗУЕТСЯ
Контакт 10:НЕ ИСПОЛЬЗУЕТСЯ
Контакт 11:Третий сигнальный контакт к гнезду 4 контроллера (на принципиальной схеме)
Контакт 12:Четвертый сигнальный контакт к контакту 5 контроллера (на принципиальной схеме)
Контакт 13:Пятый сигнальный контакт к гнезду 6 контроллера (на принципиальной схеме)
Контакт 14:Шестой сигнальный контакт к гнезду 7 контроллера (на принципиальной схеме)
Контакт 15:подключение к источнику питания 5 В (на принципиальной схеме)
Контакт 16:подключение к земле (на принципиальной схеме)
ИСТОЧНИК ПИТАНИЯ ATX :
Отрежьте только провода, необходимые для питания устройства. Остальные провода более безопасны в пластиковом разъеме и позволят вам при необходимости использовать его для других проектов.
Контакты ATX:
Обрежьте и зачистите контакт 3 черного провода (заземление) и контакт 16 зеленого провода (сигнала). Присоедините эти провода к переключателю, чтобы вы могли включать и выключать машину (на принципиальной схеме)
Отрежьте и зачистите контакт 7 черного провода (заземление) и контакт 10 желтого провода (+12 В). Присоедините эти провода к стороне 12 В на макетной плате, обозначенной желтыми и черными разъемами. (На принципиальной схеме)
Обрежьте и зачистите (заземление) черный контакт 24 и желтый (+12 В) контакт 11. Подключите эти провода к совместимому разъему для питания платы Arduino (на принципиальной схеме)
Обрежьте и зачистите (заземление) черный контакт 19 провода и (+ 5 В) красный контакт 21 провода. Подсоедините эти провода к стороне 5 В на макетной плате (на принципиальной схеме)
Разделители и катушки полок:
Вот как настроить полки и экструдеры.
Полки - в средней точке на расстоянии 6 1/2 дюймов от левой боковой стенки (если смотреть на машину спереди) или перегородки должна быть отметка, указанная выше. Используйте плоский металл и согните его в верхней части треугольник. Выглядит так же, как этот "^". Он будет служить вашим средним разделителем. Отцентрируйте треугольник над средней отметкой на полке. Повторите то же самое для второй полки. Используйте горячий клей, чтобы закрепить на месте. Я также кладу слайды по бокам, но они не являются обязательными.
Катушки. Для создания катушек сначала найдите трубку диаметром 1 1/2 дюйма. Подойдут труба, герметичная трубка, баллончик с краской или аналогичный предмет. Один трюк - взять резиновую ленту и обернуть ее сверху вниз по всей длине. трубки. Проведите прямую линию вниз с каждой стороны полосы по обеим сторонам трубки. После того, как у вас будут параллельные линии с обеих сторон, используйте рулетку, чтобы отметить следующие точки. Выберите одну сторону, отмерьте 1 дюйм и отметьте ее. , затем отмерьте 2 дюйма и сделайте отметку в 2 дюйма по всей длине трубы. Теперь на другой стороне трубки отметьте только 2-дюймовые интервалы. Начните делать катушку на 1-дюймовой стороне трубки и продолжайте делать катушку так, чтобы она касалась каждой отметки на обеих сторонах трубки. Это даст вам 2-дюймовый промежуток между перекладинами. Его должно быть достаточно для большинства предметов. Если вы планируете использовать его для конфет, укорачивайте катушку до 1 дюйма, просто уменьшите формулу выше наполовину.
Подключение катушек к колесам, напечатанным на 3D-принтере. Имейте в виду, что есть некоторые изготовленные колеса, которые подойдут. Взгляните на Amazon.
На 1-дюймовой стороне катушки сверните эту катушку так, чтобы она образовала круг. Затем уменьшите диаметр, чтобы он был немного меньше диаметра колеса. Когда катушка будет готова, поместите ее вокруг края колеса. Это должно вызвать сжатие катушки вокруг край колеса и не допускайте его соскальзывания. Как только вы будете довольны посадкой, возьмите немного горячего клея и нанесите его на колесо на конце катушки, чтобы удерживать его на месте.
Светодиодные ленты:
Подключите положительный вывод к контакту +12 В на стороне 12 В макетной платы. Подключите провод заземления к контакту заземления на стороне 12 В на макетной плате (не на схеме)
ПОЖАЛУЙСТА, ЗАДАВАЙТЕ ВСЕ ВОПРОСЫ, КОТОРЫЕ У ВАС ЕСТЬ ВОПРОСЫ, ЧТОБЫ Я МОГУ ПОМОЩЬ С ОБНОВЛЕНИЕМ, ЧТОБЫ СДЕЛАТЬ ЭТО ПРОСТОЙ ПРОЕКТ В ДЕЙСТВИИ.
Код
- Торговый автомат - БЕЗ ИЗМЕНЕНИЯ СВЕТОДИОДНЫХ ИНДИКАТОРОВ
- Торговый автомат - С ПЕРЕМЕННОЙ СВЕТОДИОДНОЙ ИНФОРМАЦИЕЙ
- Монетоприемник и полный копде
Торговый автомат - БЕЗ ИЗМЕНЕНИЯ СВЕТИЛЬНИКОВ Arduino
Все, что вам нужно для завершения и понимания проекта// Display # includeLiquidCrystal lcd (2, 3, 4, 5, 6, 7); // Stepper Library # include / / включая библиотеку шаговых двигателей // Настройка реле # define ENABLE 10 #define DIRA 8 #define DIRB 9 // Определение "i" int i; // определение раздела контактов // Stepper Connect 1int stepIN1Pin =22; int stepIN2Pin =24; int stepIN3Pin =26; int stepIN4Pin =28; // Шаговое соединение 2int stepIN1Pin1 =23; int stepIN2Pin1 =25; int stepIN3Pin1 =27; int stepIN4Pin1 =29; // Шаговое соединение 3int stepIN1Pin2 =30; int stepIN2Pin2 =32; int stepIN3Pin2 =34; int stepIN4Pin2 =36; // Шаговое соединение 4int stepIN1Pin3 =313; int stepIN2Pin =33; int stepIN3Pin3 =35; int stepIN4Pin3 =37; // определяем шаги int stepsPerRevolution =2048; // количество шагов на оборот // определяем порты контактов кнопокconst int button1Pin =A0; // Аналоговый вывод кнопки 1 A0const int button2Pin =A1; // Кнопка 2 Аналоговый вывод A1const int button3Pin =A2; // Кнопка 3, аналоговый вывод A2const int button4Pin =A3; // Кнопка 4, аналоговый вывод A3 // определяет каждый шаговый двигатель // 1Stepper myStepper0 (stepsPerRevolution, stepIN1Pin, stepIN3Pin, stepIN2Pin, stepIN4Pin); // 2Stepper myStepper1 (stepsPerRevolution, stepIN1Pin1, stepIN3Pin1, stepIN2Pintepper1, stepIN3Pin1, stepIN2Pin2, stepIN4Pin2, // stepsPerRevolution, stepIN1Pin2, stepIN3Pin2, stepIN2Pin2, stepIN4Pin2); // 4Stepper myStepper3 (stepsPerRevolution, stepIN1Pin3, stepIN3Pin3, stepIN2Pin3, stepIN4Pin3); void setup () {) Кнопка ввода PINPINM, PinM pinMode (button2Pin, ВХОД); pinMode (button3Pin, ВХОД); pinMode (button4Pin, ВХОД); // Назначить вывод вывода pinMode (ENABLE, OUTPUT); pinMode (DIRA, ВЫХОД); pinMode (DIRB, ВЫХОД); // Назначение скорости шага myStepper0.setSpeed (15); myStepper1.setSpeed (15); myStepper2.setSpeed (15); myStepper3.setSpeed (15); // Инициализируем ЖК-дисплей lcd.begin (16, 2); lcd.clear (); lcd.setCursor (0, 0); lcd.print («Выберите свой товар»); lcd.setCursor (0, 1); lcd.print ("# 1 # 2 # 3 # 4");} void loop () {// считываем назначение кнопок int button1State, button2State, button3State, button4State; button1State =digitalRead (button1Pin); button2State =digitalRead (button2Pin); button3State =digitalRead (button3Pin); button4State =digitalRead (button4Pin); digitalWrite (ENABLE, HIGH); // Установить состояние для (i =0; i <5; i ++); // определяем действие при нажатии кнопки 1 if (((button1State ==LOW) &&! (button2State ==LOW))) // если мы нажимаем кнопку 1 ИЛИ кнопку 2 {digitalWrite (DIRA, HIGH); // задействуем реле digitalWrite (DIRB, LOW); lcd.clear (); lcd.setCursor (2, 0); lcd.print («Раздача»); lcd.setCursor (3, 1); lcd.print («Ваш предмет»); myStepper0.step (stepsPerRevolution); // запускаем мотор lcd.clear (); lcd.setCursor (2, 0); lcd.print («Возьмите»); lcd.setCursor (3, 1); lcd.print («Ваш предмет»); задержка (2500); lcd.setCursor (0, 0); lcd.print («Состояние кнопки 1»); lcd.setCursor (2, 1); lcd.print («1 2 3 или 4»); digitalWrite (DIRA, LOW); // отключение реле digitalWrite (DIRB, LOW); } // определяем действие при нажатии кнопки 2 if (((button2State ==LOW) &&! (button1State ==LOW))) // если мы нажимаем кнопку 1 ИЛИ кнопку 2 {digitalWrite (DIRA, HIGH); // задействуем реле digitalWrite (DIRB, LOW); lcd.clear (); lcd.setCursor (2, 0); lcd.print («Раздача»); lcd.setCursor (3, 1); lcd.print («Ваш предмет»); myStepper1.step (stepsPerRevolution); // запускаем мотор lcd.clear (); lcd.setCursor (2, 0); lcd.print («Возьмите»); lcd.setCursor (3, 1); lcd.print («Ваш предмет»); задержка (2500); lcd.setCursor (0, 0); lcd.print («Состояние кнопки 2»); lcd.setCursor (2, 1); lcd.print («1 2 3 или 4»); digitalWrite (DIRA, LOW); // отключение реле digitalWrite (DIRB, LOW); } // определяем действие при нажатии кнопки 3 if (((button3State ==LOW) &&! (button4State ==LOW))) // если мы нажимаем кнопку 1 ИЛИ кнопку 2 {digitalWrite (DIRA, HIGH); // задействуем реле digitalWrite (DIRB, LOW); lcd.clear (); lcd.setCursor (2, 0); lcd.print («Раздача»); lcd.setCursor (3, 1); lcd.print («Ваш предмет»); myStepper2.step (stepsPerRevolution); // запускаем мотор lcd.clear (); lcd.setCursor (2, 0); lcd.print («Возьмите»); lcd.setCursor (3, 1); lcd.print («Ваш предмет»); задержка (2500); lcd.setCursor (0, 0); lcd.print («Состояние кнопки 3»); lcd.setCursor (2, 1); lcd.print («1 2 3 или 4»); digitalWrite (DIRA, LOW); // отключение реле digitalWrite (DIRB, LOW); } // определяем действие при нажатии кнопки 4 if (((button4State ==LOW) &&! (button3State ==LOW))) // если мы нажимаем кнопку 1 ИЛИ кнопку 2 {digitalWrite (DIRA, HIGH); // задействуем реле digitalWrite (DIRB, LOW); lcd.clear (); lcd.setCursor (2, 0); lcd.print («Раздача»); lcd.setCursor (3, 1); lcd.print («Ваш предмет»); myStepper3.step (-stepsPerRevolution); // запускаем мотор lcd.clear (); lcd.setCursor (2, 0); lcd.print («Возьмите»); lcd.setCursor (3, 1); lcd.print («Ваш предмет»); задержка (2500); lcd.setCursor (0, 0); lcd.print («Состояние кнопки 4»); lcd.setCursor (2, 1); lcd.print («1 2 3 или 4»); digitalWrite (DIRA, LOW); // отключение реле digitalWrite (DIRB, LOW); }}
Торговый автомат - С МЕНЮ СВЕТИЛЬНИКОВ C #
Посмотрите видео!// Display # includeLiquidCrystal lcd (2, 3, 4, 5, 6, 7); // Stepper Library # include // включая библиотека шагового двигателя // Настройка реле # определение ENABLE 10 # определение PinA 8 # определение PinB 9 # определение REDPIN 38 # определение GREENPIN 39 # определение BLUEPIN 40 // Определение «i» int i; // Определение «RGB» int r, g , b; // определение раздела контактов // Stepper Connect 1int stepIN1Pin =22; int stepIN2Pin =24; int stepIN3Pin =26; int stepIN4Pin =28; // Stepper Connect 2int stepIN1Pin1 =23; int stepIN2Pin1 =25; int stepIN3Pin1 =27; int stepIN4Pin1 =29; // Stepper Connect 3int stepIN1Pin2 =30; int stepIN2Pin2 =32; int stepIN3Pin2 =34; int stepIN4Pin2 =36; // Stepper Connect 4int stepIN1Pin3 =31; int stepIN2Pin3 =33; int stepIN3Pin3 =35; int stepIN4Pin3 =37; // определяем шагиint stepsPerRevolution =2048; // количество шагов на оборот // определяем порты контактов кнопокconst int button1Pin =A0; // Аналоговый вывод кнопки 1 A0const int button2Pin =A1; // Кнопка 2 Аналоговый вывод A1const int button3Pin =A2; // Кнопка 3, аналоговый вывод A2const int button4Pin =A3; // Кнопка 4, аналоговый вывод A3 // определяет каждый шаговый двигатель // 1Stepper myStepper0 (stepsPerRevolution, stepIN1Pin, stepIN3Pin, stepIN2Pin, stepIN4Pin); // 2Stepper myStepper1 (stepsPerRevolution, stepIN1Pin1, stepIN3Pin1, stepIN2Pintepper1, stepIN3Pin1, stepIN2Pin2, stepIN4Pin2, // stepsPerRevolution, stepIN1Pin2, stepIN3Pin2, stepIN2Pin2, stepIN4Pin2); // 4Stepper myStepper3 (stepsPerRevolution, stepIN1Pin3, stepIN3Pin3, stepIN2Pin3, stepIN4Pin3); void setup () {) Кнопка ввода PINPINM, PinM pinMode (button2Pin, ВХОД); pinMode (button3Pin, ВХОД); pinMode (button4Pin, ВХОД); // Назначить вывод вывода pinMode (ENABLE, OUTPUT); pinMode (PinA, ВЫХОД); pinMode (PinB, ВЫХОД); // Настройка выводов светодиодных полос pinMode (REDPIN, OUTPUT); pinMode (GREENPIN, ВЫХОД); pinMode (BLUEPIN, ВЫХОД); // Назначение скорости шага myStepper0.setSpeed (15); myStepper1.setSpeed (15); myStepper2.setSpeed (15); myStepper3.setSpeed (15); // Инициализируем ЖК-дисплей lcd.begin (16, 2); lcd.clear (); lcd.setCursor (0, 0); lcd.print («Выберите свой товар»); lcd.setCursor (0, 1); lcd.print ("# 1 # 2 # 3 # 4"); analogWrite (REDPIN, 256); analogWrite (GREENPIN, 256); analogWrite (BLUEPIN, 256);} void loop () {// считываем назначение кнопок int button1State, button2State, button3State, button4State; button1State =digitalRead (button1Pin); button2State =digitalRead (button2Pin); button3State =digitalRead (button3Pin); button4State =digitalRead (button4Pin); digitalWrite (ENABLE, HIGH); // Установить состояние для (i =0; i <5; i ++); // определяем действие при нажатии кнопки 1 if (((button1State ==LOW) &&! (button2State ==LOW))) // если мы нажимаем кнопку 1 ИЛИ кнопку 2 {digitalWrite (PinA, HIGH); // включаем реле digitalWrite (PinB, LOW); analogWrite (REDPIN, 256); для (b =256; b> 0; b--); analogWrite (BLUEPIN, b); для (g =256; g> 0; g--); analogWrite (GREENPIN, g); для (g =256; g> 0; g--); lcd.clear (); lcd.setCursor (2, 0); lcd.print («Раздача»); lcd.setCursor (3, 1); lcd.print («Ваш предмет»); myStepper0.step (stepsPerRevolution); // запускаем мотор lcd.clear (); lcd.setCursor (2, 0); lcd.print («Возьмите»); lcd.setCursor (3, 1); lcd.print («Ваш предмет»); задержка (2500); lcd.setCursor (0, 0); lcd.print («Состояние кнопки 1»); lcd.setCursor (2, 1); lcd.print («1 2 3 или 4»); для (b =0; b <256; b ++); analogWrite (BLUEPIN, b); для (g =0; g <256; g ++); analogWrite (GREENPIN, g); digitalWrite (PinA, LOW); // отключение реле digitalWrite (PinB, LOW); } // определяем действие при нажатии кнопки 2 if (((button2State ==LOW) &&! (button1State ==LOW))) // если мы нажимаем кнопку 1 ИЛИ кнопку 2 {digitalWrite (PinA, HIGH); // включаем реле digitalWrite (PinB, LOW); analogWrite (GREENPIN, 256); для (b =256; b> 0; b--); analogWrite (BLUEPIN, b); для (r =256; r> 0; r--); analogWrite (REDPIN, r); lcd.clear (); lcd.setCursor (2, 0); lcd.print («Раздача»); lcd.setCursor (3, 1); lcd.print («Ваш предмет»); myStepper1.step (stepsPerRevolution); // запускаем мотор lcd.clear (); lcd.setCursor (2, 0); lcd.print («Возьмите»); lcd.setCursor (3, 1); lcd.print («Ваш предмет»); задержка (2500); lcd.setCursor (0, 0); lcd.print («Состояние кнопки 2»); lcd.setCursor (2, 1); lcd.print («1 2 3 или 4»); digitalWrite (PinA, LOW); // отключение реле digitalWrite (PinB, LOW); для (b =0; b <256; b ++); analogWrite (BLUEPIN, b); для (г =0; г <256; г ++); analogWrite (REDPIN, r); } // определяем действие при нажатии кнопки 3 if (((button3State ==LOW) &&! (button4State ==LOW))) // если мы нажимаем кнопку 1 ИЛИ кнопку 2 {digitalWrite (PinA, HIGH); // включаем реле digitalWrite (PinB, LOW); analogWrite (BLUEPIN, 256); для (r =256; r> 0; r--); analogWrite (REDPIN, r); для (g =256; g> 0; g--); analogWrite (GREENPIN, g); lcd.clear (); lcd.setCursor (2, 0); lcd.print («Раздача»); lcd.setCursor (3, 1); lcd.print («Ваш предмет»); myStepper2.step (stepsPerRevolution); // запускаем мотор lcd.clear (); lcd.setCursor (2, 0); lcd.print («Возьмите»); lcd.setCursor (3, 1); lcd.print («Ваш предмет»); задержка (2500); lcd.setCursor (0, 0); lcd.print («Состояние кнопки 3»); lcd.setCursor (2, 1); lcd.print («1 2 3 или 4»); digitalWrite (PinA, LOW); // отключение реле digitalWrite (PinB, LOW); для (g =0; g <256; g ++); analogWrite (GREENPIN, g); для (г =0; г <256; г ++); analogWrite (REDPIN, r); } // определяем действие при нажатии кнопки 4 if (((button4State ==LOW) &&! (button3State ==LOW))) // если мы нажимаем кнопку 1 ИЛИ кнопку 2 {digitalWrite (PinA, HIGH); // включаем реле digitalWrite (PinB, LOW); analogWrite (REDPIN, 256); analogWrite (GREENPIN, 256); для (b =256; b> 0; b--); analogWrite (BLUEPIN, b); lcd.clear (); lcd.setCursor (2, 0); lcd.print («Раздача»); lcd.setCursor (3, 1); lcd.print («Ваш предмет»); myStepper3.step (-stepsPerRevolution); // запускаем мотор lcd.clear (); lcd.setCursor (2, 0); lcd.print («Возьмите»); lcd.setCursor (3, 1); lcd.print («Ваш предмет»); задержка (2500); lcd.setCursor (0, 0); lcd.print («Состояние кнопки 4»); lcd.setCursor (2, 1); lcd.print («1 2 3 или 4»); digitalWrite (PinA, LOW); // отключение реле digitalWrite (PinB, LOW); для (b =0; b <256; b ++); analogWrite (BLUEPIN, b); }}
Монетоприемник и полный код C #
Полный код// Отображение # includeLiquidCrystal lcd (2, 3, 4, 5, 6, 7); // Библиотека шагового двигателя # include // включая библиотеку шагового двигателя // Настройка реле #define ENABLE 10 // # define PinA 8 // # define PinB 9 // Transitor pins for LEDs #define REDPIN 38 #define GREENPIN 39 #define BLUEPIN 40 // Определить "i" // int i; // Определить "RGB" int r, g, b; // Константыconst int coinpin =21; const int ledpin =13; const int targetcents =100; // Variablesvolatile int cents =0; int credits =0; // определение раздела контактов // Stepper Connect 1int stepIN1Pin =22; int stepIN2Pin =24; int stepIN3Pin =26; int stepIN4Pin =28; // Stepper Connect 2int stepIN1Pin1 =23; int stepIN2Pin1 =25; int stepIN3Pin1 =27; int stepIN4Pin1 =29; // Stepper Connect 3int stepIN1Pin2 =30; int stepIN2Pin2 =32; int stepIN3Pin2 =34; int stepIN4Pin2 =36; // Шаговое соединение 4int stepIN1Pin3 =31; int stepIN2Pin3 =33; int stepIN3Pin3 =35; int stepIN4Pin3 =37; // определение stepsint stepsPerRevolution 2048; // количество шагов на оборот // определяем порты контактов кнопокconst int button1Pin =A0; // Аналоговый вывод кнопки 1 A0const int button2Pin =A1; // Кнопка 2 Аналоговый вывод A1const int button3Pin =A2; // Кнопка 3, аналоговый вывод A2const int button4Pin =A3; // Кнопка 4, аналоговый вывод A3 // определяет каждый шаговый двигатель // 1Stepper myStepper0 (stepsPerRevolution, stepIN1Pin, stepIN3Pin, stepIN2Pin, stepIN4Pin); // 2Stepper myStepper1 (stepsPerRevolution, stepIN1Pin1, stepIN3Pin1, stepIN2Pintepper1, stepIN3Pin1, stepIN2Pin2, stepIN4Pin2, // stepsPerRevolution, stepIN1Pin2, stepIN3Pin2, stepIN2Pin2, stepIN4Pin2); // 4Stepper myStepper3 (stepsPerRevolution, stepIN1Pin3, stepIN3Pin3, stepIN2Pin3, stepIN4Pin3); //Toin3Pin3, stepIN2Pin3, stepIN4Pin3); , Восход); // Назначение контакта кнопки input:pinMode (button1Pin, INPUT); pinMode (button2Pin, ВХОД); pinMode (button3Pin, ВХОД); pinMode (button4Pin, ВХОД); // Назначение вывода вывода реле pinMode (ENABLE, OUTPUT); // pinMode (PinA, OUTPUT); // pinMode (PinB, OUTPUT); // Настройка выводов светодиодных полос pinMode (REDPIN, OUTPUT); pinMode (GREENPIN, ВЫХОД); pinMode (BLUEPIN, ВЫХОД); // Назначение скорости шага myStepper0.setSpeed (15); myStepper1.setSpeed (15); myStepper2.setSpeed (15); myStepper3.setSpeed (15); // Инициализируем ЖК-дисплей lcd.begin (16, 2); lcd.clear (); lcd.setCursor (0, 0); lcd.print («Выберите свой товар»); lcd.setCursor (0, 1); lcd.print ("# 1 # 2 # 3 # 4"); analogWrite (REDPIN, 256); analogWrite (GREENPIN, 256); analogWrite(BLUEPIN, 256);}// Main loopvoid loop() { // If we've hit our target amount of coins, increment our credits and reset the cents counter if (cents>=targetcents) { credits =credits + 1; cents =cents - targetcents; } // If we haven't reached our target, keep waiting... else { } // Debugging zone lcd.begin(16, 2); lcd.clear (); lcd.setCursor (0, 0); lcd.print(cents); lcd.setCursor(3, 0); lcd.print("Coin Count"); lcd.setCursor (0, 1); lcd.print(credits); lcd.setCursor(3, 1); lcd.print("credit earned"); задержка (1000); // Now, write your own code here that triggers an event when the player has credits! if (credits> 0) { // read button assignment int button1State, button2State, button3State, button4State; button1State =digitalRead(button1Pin); button2State =digitalRead(button2Pin); button3State =digitalRead(button3Pin); button4State =digitalRead(button4Pin); // digitalWrite(ENABLE, HIGH);// Set state // for (i =0; i <5; i++); // define action when button 1 is pressed if (((button1State ==LOW) &&!(button2State ==LOW)))// if we're pushing button 1 OR button 2 { digitalWrite(ENABLE, HIGH); //engage relay// digitalWrite(PinB, LOW); analogWrite(REDPIN, 256); for (b =256; b> 0; b--); analogWrite(BLUEPIN, b); for (g =256; g> 0; g--); analogWrite(GREENPIN, g); for (g =256; g> 0; g--); lcd.clear (); lcd.setCursor(2, 0); lcd.print("Dispensing"); lcd.setCursor(3, 1); lcd.print("Your Item"); myStepper0.step(stepsPerRevolution); //run motor lcd.clear(); lcd.setCursor(2, 0); lcd.print("Please take"); lcd.setCursor(3, 1); lcd.print("Your Item"); delay(2500); for (b =0; b <256; b++); analogWrite(BLUEPIN, b); for (g =0; g <256; g++); analogWrite(GREENPIN, g); digitalWrite(ENABLE, LOW); //disengage relay// digitalWrite(PinB, LOW); credits =credits - 1; cents =cents - cents; } // define action when button 2 is pressed if (((button2State ==LOW) &&!(button1State ==LOW))) // if we're pushing button 1 OR button 2 { digitalWrite(ENABLE, HIGH); //engage relay// digitalWrite(PinB, LOW); analogWrite(GREENPIN, 256); for (b =256; b> 0; b--); analogWrite(BLUEPIN, b); for (r =256; r> 0; r--); analogWrite(REDPIN, r); lcd.clear (); lcd.setCursor(2, 0); lcd.print("Dispensing"); lcd.setCursor(3, 1); lcd.print("Your Item"); myStepper1.step(stepsPerRevolution);//run motor lcd.clear(); lcd.setCursor(2, 0); lcd.print("Please take"); lcd.setCursor(3, 1); lcd.print("Your Item"); delay(2500); digitalWrite(ENABLE, LOW); //disengage relay// digitalWrite(PinB, LOW); for (b =0; b <256; b++); analogWrite(BLUEPIN, b); for (r =0; r <256; r++); analogWrite(REDPIN, r); credits =credits - 1; cents =cents - cents; } // define action when button 3 is pressed if (((button3State ==LOW) &&!(button4State ==LOW))) // if we're pushing button 1 OR button 2 { digitalWrite(ENABLE, HIGH); //engage relay// digitalWrite(PinB, LOW); analogWrite(BLUEPIN, 256); for (r =256; r> 0; r--); analogWrite(REDPIN, r); for (g =256; g> 0; g--); analogWrite(GREENPIN, g); lcd.clear (); lcd.setCursor(2, 0); lcd.print("Dispensing"); lcd.setCursor(3, 1); lcd.print("Your Item"); myStepper2.step(stepsPerRevolution);//run motor lcd.clear(); lcd.setCursor(2, 0); lcd.print("Please take"); lcd.setCursor(3, 1); lcd.print("Your Item"); delay(2500); digitalWrite(ENABLE, LOW); //disengage relay// digitalWrite(PinB, LOW); for (g =0; g <256; g++); analogWrite(GREENPIN, g); for (r =0; r <256; r++); analogWrite(REDPIN, r); credits =credits - 1; cents =cents - cents; } // define action when button 4 is pressed if (((button4State ==LOW) &&!(button3State ==LOW))) // if we're pushing button 1 OR button 2 { digitalWrite(ENABLE, HIGH); //! engage relay// digitalWrite(PinB, LOW); analogWrite(REDPIN, 256); analogWrite(GREENPIN, 256); for (b =256; b> 0; b--); analogWrite(BLUEPIN, b); lcd.clear (); lcd.setCursor(2, 0); lcd.print("Dispensing"); lcd.setCursor(3, 1); lcd.print("Your Item"); myStepper3.step(-stepsPerRevolution);//run motor lcd.clear(); lcd.setCursor(2, 0); lcd.print("Please take"); lcd.setCursor(3, 1); lcd.print("Your Item"); delay(2500); digitalWrite(ENABLE, LOW); //disengage relay// digitalWrite(PinB, LOW); for (b =0; b <256; b++); analogWrite(BLUEPIN, b); credits =credits - 1; cents =cents - cents; } }}// Coin Increase loopvoid coinInterrupt() { // Each time a pulse is sent from the coin acceptor, interrupt main loop to add 5 cent and flip on the LED cents =cents + 5; digitalWrite(ledpin, HIGH);}
Схема
This is a complete Diagram of the system. It includes, ATX power supply, motors,LCD,LEDs, lights and controllerПроизводственный процесс
- Машина ЭЭГ
- Швейная машина
- Как работает автомат по продаже картофеля фри?
- Что такое автомат по продаже молока?
- Как автомат по продаже чипсов может обеспечить вас горячими и свежими чипсами?
- Что такое автомат по продаже лапши?
- Что такое торговый автомат для чайно-кофейного супа?
- Готовьте здоровую пищу с помощью торгового автомата для приготовления еды!
- Чего ожидать от автомата по продаже безалкогольных напитков?
- Автомат по продаже фруктового мороженого:бизнес-потенциал