Оглавление:

Торговый автомат на базе Arduino за 1 доллар: 8 шагов
Торговый автомат на базе Arduino за 1 доллар: 8 шагов

Видео: Торговый автомат на базе Arduino за 1 доллар: 8 шагов

Видео: Торговый автомат на базе Arduino за 1 доллар: 8 шагов
Видео: У Кремля снесло строительные леса , обрушившие зубцы ( 2024, Июль
Anonim
Image
Image
Кожух
Кожух

Мы получили нашу идею от нашего учителя инженерного дела - мы все подумали, что было бы неплохо иметь торговый автомат для нашего класса, и он сказал: «Круто, сделай один». Оказалось, что торговый автомат был бы отличным проектом для старших руководителей, и когда он был завершен, он мог бы служить средством сбора средств для нашей инженерной программы.

Он называется торговым автоматом за 1 доллар не потому, что его изготовление стоит 1 доллар, а просто потому, что купюроприемник - старая модель, которая принимает купюры всего за 1 доллар:)

Шаг 1. Критерии

Нам нужен был торговый автомат, который поместился бы на столе и не был слишком высоким. Мы взяли размеры по ширине стола, чтобы убедиться, что торговый автомат не свисает со стола.

Шаг 2: Оболочка

Кожух
Кожух
Кожух
Кожух
Кожух
Кожух

Мы сделали нашу коробку шириной 19 дюймов, длиной 17 дюймов и высотой 25 дюймов. Мы использовали станок с ЧПУ, чтобы распилить нашу древесину. Мы использовали solidworks для проектирования граней, а затем преобразовали их в типы файлов чертежей для нашего программного обеспечения ЧПУ. Мы отшлифовали края, а затем прикрутили их с шагом 1”. Переднюю панель мы прикрепили на петлю и использовали “шурупы, чтобы шурупы не выходили на другую сторону. Мы также использовали акриловое стекло, которое мы вырезали для полок и передней панели.

Шаг 3: Электроника

Электроника
Электроника
Электроника
Электроника
Электроника
Электроника
Электроника
Электроника

Ардуино

Мы использовали плату Arduino Mega 2560. Мы также использовали моторные платы Adafruit, чтобы они могли управлять шаговыми двигателями. Мы добавили контакты к adafruit, чтобы они могли соединяться друг с другом. Их вставляли друг на друга. Каждый может запустить 2 мотора. Также обратите внимание, что перемычка должна быть подключена.

Настольный блок питания

Блок питания Bestek ATX с использованием адаптера, чтобы блок питания оставался включенным. Адаптер от sparkfun.com обеспечивает различные напряжения.

Катушки в моторы

Мы сделали модели solidworks, чтобы удерживать двигатель, захватывать катушку и направлять ее по полке. Мы получили наши катушки с ebay и обрезали их по размеру. Нам также пришлось согнуть 3 из них, так как у нас не было 6 с прямыми концами для подключения к держателю катушки. Затем мы напечатали их на 3D-принтере и прикрепили к катушке и двигателю. Имеющиеся у нас шаговые двигатели мы вставили в крепление. Он будет удерживать двигатель и направлять катушку по прямому пути.

ЖК-дисплей и клавиатура

Мы использовали клавиатуру Arduino и ЖК-экран, подключенные к проводу 5 В на адаптере источника питания для питания, а затем к той же плате Arduino.

Проводка

Мы рекомендуем использовать провода 18-го калибра. В нашем случае нам пришлось пойти на компромисс, используя различные датчики, потому что у нас закончилось 18 датчиков.

Светодиодная полоса

Мы использовали светодиодную ленту, чтобы осветить машину. Мы подключили его к проводу 12 В адаптера питания. К счастью, на светодиодной полосе, которую мы использовали, были значки + и -, что упростило процесс ее подключения.

Шаг 4: Купюроприемник

Купюроприемник
Купюроприемник
Купюроприемник
Купюроприемник
Купюроприемник
Купюроприемник
Купюроприемник
Купюроприемник

В качестве купюроприемника мы использовали Coinco BA30B. Его нужно было подключить непосредственно к стене в качестве источника питания. Мы объединили его с 24-контактным адаптером от блока питания atx для подключения и упрощения подключения. Распиновка, которой мы следовали, находится по следующей ссылке:

techvalleyprojects.blogspot.com/2011/07/ard…

В нашем случае нам пришлось создать крепление для поднятия купюроприемника, потому что в противном случае оно было бы слишком низким для нашего корпуса.

Шаг 5: Тестирование

Сначала проверьте электронику вне корпуса, чтобы убедиться, что компоненты работают. Любые возникающие проблемы должны быть устранены перед тем, как поместить их в кожух.

Шаг 6: от электроники к корпусу

После того, как вы протестировали электронику и остались довольны результатами, начните помещать ее в корпус. Отрегулируйте длину проводов так, чтобы они удобно помещались внутри.

Шаг 7: Заключительное тестирование

После того, как поместили в кожух, проверьте все еще раз. Если все работает так, как вы ожидали, поздравляем! Вы сделали торговый автомат.

Шаг 8: Код Arduino + ссылки

Загрузки:

Код Arduino

drive.google.com/drive/folders/1oC4MhOcMFy…

Папка SolidWorks с файлами деталей и сборкой

drive.google.com/drive/folders/1amZoypiWcZ…

На всякий случай, если с ссылкой что-то случилось, вот полностью отображаемый код Arduino. Код Arduino <<

#include #include #include "Arduino.h" #include #include #include "Утилита / Adafruit_MS_PWMServoDriver.h" #include

const int stepsPerRevolution = 200; const byte ROWS = 4; // четыре строки const byte COLS = 3; // трехколоночные символьные ключи [ROWS] [COLS] = {{'1', '2', '3'}, {'4', '5', '6'}, {'7', '8', '9'}, {'*', '0', '#'}}; byte rowPins [ROWS] = {5, 6, 7, 8}; // подключаемся к выводам строки байта клавиатуры colPins [COLS] = {2, 3, 4}; // подключаемся к выводам столбцов клавиатуры Keypad keypad = Keypad (makeKeymap (keys), rowPins, colPins, ROWS, COLS); Adafruit_MotorShield AFMS1 = Adafruit_MotorShield (); Adafruit_StepperMotor * myMotor1 = AFMS1.getStepper (-200, 1); Adafruit_StepperMotor * myMotor2 = AFMS1.getStepper (-200, 2); Adafruit_MotorShield AFMS2 = Adafruit_MotorShield (0x61); Adafruit_StepperMotor * myMotor3 = AFMS2.getStepper (-200, 1); Adafruit_StepperMotor * myMotor4 = AFMS2.getStepper (-200, 2); Adafruit_MotorShield AFMS3 = Adafruit_MotorShield (0x62); Adafruit_StepperMotor * myMotor5 = AFMS3.getStepper (-200, 1); Adafruit_StepperMotor * myMotor6 = AFMS3.getStepper (-200, 2); Adafruit_MotorShield AFMS4 = Adafruit_MotorShield (0x63); Adafruit_StepperMotor * myMotor7 = AFMS4.getStepper (-200, 1); Adafruit_StepperMotor * myMotor8 = AFMS4.getStepper (-200, 2); ЖК-дисплей LiquidCrystal (1, 11, 9, 10, 12, 13); // Цифровые выводы, к которым подключен ЖК-дисплей // Константы // // вывод для линии кредита (-) валидатора счетов const int billValidator = 22;

// Переменные /

/ запись длительности импульса (миллисекунды) беззнаковой большой длительности;

// сохраняем общую сумму записанных долларов int dollarCounter = 0; void setup () {lcd.begin (16, 1); // установка координат текста на ЖК-дисплее lcd.print ("Insert $ 1 Only"); // Устанавливаем текст Serial.begin (9600); // Инициализируем последовательные порты для связи. Serial.println («Шаговый тест!»); // Введите Out Stepper Test в серийный монитор, чтобы мы знали, какой шаговый двигатель задействован. AFMS1.begin (); AFMS2.begin (); AFMS3.begin (); AFMS4.begin (); myMotor1-> setSpeed (100); // Устанавливаем скорость двигателя, на которой они будут работать myMotor2-> setSpeed (100); myMotor3-> setSpeed (100); myMotor4-> setSpeed (100); myMotor5-> setSpeed (100); myMotor6-> setSpeed (100); myMotor7-> setSpeed (100); myMotor8-> setSpeed (100); // Настройки контактов для валидатора и кнопки pinMode (billValidator, INPUT); // Устанавливает купюроприемник

// Инициализируем последовательные порты для связи. Serial.begin (9600); Serial.println («В ожидании доллара…»); } void loop () {{продолжительность = pulseIn (billValidator, HIGH); // Начинает поиск длины импульса, полученного от купюроприемника if (duration> 12000) // Значение, которое он должен превзойти, чтобы подтвердить его как обработанный и подлинный доллар {// Подсчет доллара dollarCounter ++; // Проверка понимания Serial.print («Обнаружен доллар. / N Итого:»); // Отображаем новое количество долларов Serial.println (dollarCounter); // цикл для ожидания нажатия кнопки while (duration> 12000) {char key = keypad.getKey (); // подключает клавиатуру и начинает видеть, какая из них нажата if (key! = NO_KEY) {// будет искать нажатую клавишу Serial.println (key); // сообщает нам, какой из них был нажат в последовательном мониторе} {if (key == '1') {// Если нажата клавиша 1, выполняет следующие действия: int keyPressed = key - '1'; myMotor8-> step (580, ВПЕРЕД, ДВОЙНОЙ); // Запускает двигатель и вращается на 350 градусов в прямом направлении. myMotor8-> release (); // Выводит двигатель из состояния удержания на месте. возвращение; // Возвращаемся к началу кода цикла}

if (key == '2') {// Если клавиша 2 нажата, выполняется следующее: int keyPressed = key - '2'; myMotor7-> step (400, ВПЕРЕД, ДВОЙНОЙ); // Запускает двигатель и вращается на 350 градусов в прямом направлении. myMotor7-> release (); // Выводит двигатель из состояния удержания на месте. возвращение; // Возврат к началу кода цикла} if (key == '3') {// Если нажата клавиша 3, выполняется следующее: int keyPressed = key - '3'; myMotor6-> step (400, ВПЕРЕД, ДВОЙНОЙ); // Запускает двигатель и вращается на 350 градусов в прямом направлении. myMotor6-> release (); // Выводит двигатель из состояния удержания на месте. возвращение; // Возврат к началу кода цикла} if (key == '4') {// Если клавиша 4 нажата, выполняется следующее: int keyPressed = key - '4'; myMotor5-> step (180, ВПЕРЕД, ДВОЙНОЙ); // Запускает двигатель и вращается на 350 градусов в прямом направлении. myMotor5-> release (); // Выводит двигатель из состояния удержания на месте. возвращение; // Возврат к началу кода цикла} if (key == '5') {// Если нажата клавиша 5, выполняется следующее: int keyPressed = key - '5'; myMotor4-> step (6900, ВПЕРЕД, ДВОЙНОЙ); // Запускает двигатель и вращается на 350 градусов в прямом направлении. myMotor4-> release (); // Выводит двигатель из состояния удержания на месте. возвращение; // Возврат к началу кода цикла} if (key == '6') {// Если клавиша 6 нажата, выполняется следующее: int keyPressed = key - '6'; myMotor3-> step (400, ВПЕРЕД, ДВОЙНОЙ); // Запускает двигатель и вращается на 350 градусов в прямом направлении. myMotor3-> release (); // Выводит двигатель из состояния удержания на месте. возвращение; // Возврат к началу кода цикла} if (key == '7') {// Если нажата клавиша 7, выполняется следующее: int keyPressed = key - '7'; myMotor7-> step (400, ВПЕРЕД, ДВОЙНОЙ); // Запускает двигатель и вращается на 350 градусов в прямом направлении. myMotor7-> release (); // Выводит двигатель из состояния удержания на месте. возвращение; // Возврат к началу кода цикла} if (key == '8') {// Если нажата клавиша 8, выполняется следующее: int keyPressed = key - '8'; myMotor8-> step (400, ВПЕРЕД, ДВОЙНОЙ); // Запускает двигатель и вращается на 350 градусов в прямом направлении. myMotor8-> release (); // Выводит двигатель из состояния удержания на месте. возвращение; // Возвращаемся к началу кода цикла}}}}}} >>

Рекомендуемые: