Spisu treści:
- Krok 1: Kryteria
- Krok 2: Obudowa
- Krok 3: Elektronika
- Krok 4: Akceptant rachunków
- Krok 5: Testowanie
- Krok 6: Elektronika do obudowy
- Krok 7: Testy końcowe
- Krok 8: Kod Arduino + linki
Wideo: Automat vendingowy oparty na Arduino o wartości 1 USD: 8 kroków
2024 Autor: John Day | [email protected]. Ostatnio zmodyfikowany: 2024-01-30 11:31
Nasz pomysł wpadliśmy od naszego nauczyciela inżynierii – wszyscy pomyśleliśmy, że dobrym pomysłem będzie posiadanie automatu dla naszej klasy, a on powiedział – „fajnie, zrób jeden”. Okazało się, że automat vendingowy byłby świetnym starszym projektem, a po ukończeniu będzie służył jako zbiórka pieniędzy na nasz program inżynierski.
Nazywa się to automatem sprzedającym za 1 USD nie dlatego, że kosztuje 1 USD, ale po prostu dlatego, że akceptor banknotów jest starszym modelem, który pobiera tylko 1 banknoty:)
Krok 1: Kryteria
Chcieliśmy automatu, który zmieści się na biurku i nie będzie zbyt wysoki. Wzięliśmy wymiary szerokości stołu, aby upewnić się, że automat nie zwisa ze stołu.
Krok 2: Obudowa
Zrobiliśmy nasze pudełko o szerokości 19 cali, długości 17 cali i wysokości 25 cali. Do cięcia drewna użyliśmy maszyny CNC. Użyliśmy Solidworks do zaprojektowania ścian, a następnie przekonwertowaliśmy je na typy plików rysunkowych dla naszego oprogramowania CNC. Szlifowaliśmy krawędzie, a następnie wkręcaliśmy je 1 ¼”. Przymocowaliśmy przedni panel zawiasem i użyliśmy śrub ¼”, aby śruby nie przeszły na drugą stronę. Użyliśmy również szkła akrylowego, które wycinamy na półki i panel przedni.
Krok 3: Elektronika
Arduino
Użyliśmy płytki Arduino Mega 2560. Użyliśmy również płyt Adafruit Motor Boards, aby mogły napędzać silniki krokowe. Dodaliśmy szpilki do owoców ada, aby mogły się ze sobą połączyć. Umieszczono je jeden na drugim. Każdy może obsługiwać 2 silniki. Należy również pamiętać, że zworka musi być podłączona.
Zasilacz biurkowy
Bestek ATX Zasilanie za pomocą przejściówki do podtrzymania zasilania. Adapter pochodzi ze strony sparkfun.com i zapewnia różne napięcia.
Cewki do silników
Stworzyliśmy modele solidworks do trzymania silnika, chwytania cewki i prowadzenia cewki wzdłuż półki. Sięgnęliśmy po nasze kręgi z serwisu eBay i przycięliśmy je na wymiar. Musieliśmy również zgiąć 3 z nich, ponieważ nie otrzymaliśmy 6 z prostymi końcami do połączenia z mocowaniem cewki. Następnie wydrukowaliśmy je w 3D i przymocowaliśmy do cewki i silnika. Silniki krokowe, które mieliśmy, umieściliśmy w uchwycie. Trzymałby silnik i prowadził cewkę po prostej ścieżce.
LCD i klawiatura
Użyliśmy klawiatury Arduino i ekranu LCD podłączonego do przewodu 5 V na zasilaczu do zasilania, a następnie do tej samej płyty Arduino
Okablowanie
Zalecamy stosowanie przewodów o grubości 18. W naszym przypadku musieliśmy pójść na kompromis, używając różnych wskaźników, ponieważ zabrakło nam 18 wskaźników
Pasek ledowy
Do oświetlenia maszyny użyliśmy taśmy LED. Podłączyliśmy go do przewodu 12V na zasilaczu. Taśma LED, której użyliśmy, na szczęście miała na sobie + i -, co ułatwiało proces jej podłączania.
Krok 4: Akceptant rachunków
Użyliśmy Coinco BA30B jako naszego akceptora banknotów. Musiał być podłączony bezpośrednio do ściany jako źródło zasilania. Połączyliśmy go z 24-pinowym adapterem z zasilacza atx, aby podłączyć i ułatwić okablowanie. Wyprowadzenia, które śledziliśmy, znajdują się w następującym linku:
techvalleyprojects.blogspot.com/2011/07/ard…
W naszym przypadku musieliśmy stworzyć mocowanie podnoszące akceptor banknotów, bo inaczej byłby za niski dla naszej obudowy.
Krok 5: Testowanie
Najpierw sprawdź elektronikę na zewnątrz obudowy, aby upewnić się, że elementy działają. Wszelkie pojawiające się problemy należy naprawić przed umieszczeniem ich w obudowie.
Krok 6: Elektronika do obudowy
Gdy już przetestujesz elektronikę i będziesz zadowolony z wyników, zacznij umieszczać je w swojej obudowie. Dostosuj długość przewodów tak, aby wygodnie mieściły się w środku.
Krok 7: Testy końcowe
Po umieszczeniu w obudowie przetestuj wszystko jeszcze raz. Jeśli wszystko działa zgodnie z oczekiwaniami, gratulacje! Zrobiłeś automat.
Krok 8: Kod Arduino + linki
Pliki do pobrania:
Kod Arduino
drive.google.com/drive/folders/1oC4MhOcMFy…
Folder SolidWorks z plikami części i złożeniem
drive.google.com/drive/folders/1amZoypiWcZ…
Na wszelki wypadek, gdyby coś się stało z linkiem, oto kod arduino w pełni wyświetlony. Kod Arduino <<
#include #include #include "Arduino.h" #include #include #include "utility/Adafruit_MS_PWMServoDriver.h" #include
const int stepsPerRevolution = 200; stały bajt ROWS = 4; //cztery wiersze const byte COLS = 3; //trzy kolumny char keys[ROWS][COLS] = {{'1', '2', '3'}, {'4', '5', '6'}, {'7', '8', '9'}, {'*', '0', '#'} }; bajt wierszPins[ROWS] = {5, 6, 7, 8}; //połączenie z pinoutami wiersza klawiatury byte colPins[COLS] = {2, 3, 4}; //połącz się z pinoutami kolumn klawiatury Keypad keyboard = 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); LCD LiquidCrystal (1, 11, 9, 10, 12, 13); //Cyfrowe piny, do których podłączony jest lcd // Stałe // // pin linii kredytowej(-) walidatora rachunków const int billValidator = 22;
// Zmienne /
/ rejestracja czasu trwania impulsu (milisekundy) bez znaku długi czas trwania;
// posiadanie wszystkich zarejestrowanych dolarów int dollarCounter = 0; void setup() { lcd.begin(16, 1); //ustaw współrzędne tekstu lcd lcd.print("Wstaw tylko $1"); //Ustaw tekst Serial.begin(9600); // Zainicjuj porty szeregowe do komunikacji. Serial.println("Test krokowy!"); //Wypisz Stepper Test w monitorze szeregowym, abyśmy wiedzieli, który silnik krokowy jest wciśnięty. AFMS1.początek(); AFMS2.początek(); AFMS3.początek(); AFMS4.początek(); myMotor1->setSpeed(100); //Ustaw prędkość silnika, przy której będą działać myMotor2->setSpeed(100); myMotor3->setSpeed(100); myMotor4->setSpeed(100); myMotor5->setSpeed(100); myMotor6->setSpeed(100); myMotor7->setSpeed(100); myMotor8->setSpeed(100); // Ustawienia pinów dla sprawdzania rachunków i przycisku pinMode(billValidator, INPUT); //Ustawia billaccepter
// Zainicjuj porty szeregowe do komunikacji. Serial.początek(9600); Serial.println("Oczekiwanie na dolara…"); } void loop () { { czas trwania = pulseIn(billValidator, HIGH); //Rozpoczyna szukanie długości impulsu otrzymanego od akceptora banknotów if (czas trwania > 12000) //Wartość, którą musi przekroczyć, aby sprawdzić poprawność jako przetworzony i autentyczny dolar { // Count dollar dollarCounter++; // Sprawdzanie zrozumienia Serial.print("Wykryto dolara.\n Razem: "); // Wyświetl nową liczbę dolarów Serial.println(dollarCounter); //pętla w celu oczekiwania na naciśnięcie przycisku while (czas trwania > 12000){ char key = keyboard.getKey(); //dostaje połączenie klawisza i zaczyna widzieć, który jest naciśnięty if (key != NO_KEY) { //będzie szukał naciśniętego klawisza Serial.println(key); //informuje nas, który z nich został naciśnięty w monitorze szeregowym } { if (klawisz == '1') { //Jeżeli klawisz 1 jest wciśnięty, wykonuje następujące czynności: int keyPressed = klawisz - '1'; mójMotor8->krok(580, DO PRZODU, PODWÓJNIE); //Uruchamia silnik i obraca się o 350 stopni w kierunku do przodu. mójMotor8->zwolnienie(); //Uwalnia silnik ze stanu utrzymywania się w miejscu. powrót; //Wraca do początku kodu pętli }
if (key == '2') { //Jeżeli klawisz 2 zostanie naciśnięty, wykonaj następujące czynności: int keyPressed = klawisz - '2'; myMotor7->krok(400, DO PRZODU, PODWÓJNIE); //Uruchamia silnik i obraca się o 350 stopni w kierunku do przodu. mójMotor7->zwolnienie(); //Uwalnia silnik ze stanu utrzymywania się w miejscu. powrót; //Wraca do początku kodu pętli } if (key == '3') { //Jeśli klawisz 3 jest wciśnięty, wykonuje następujące czynności: int keyPressed = key - '3'; myMotor6->krok(400, DO PRZODU, PODWÓJNIE); //Uruchamia silnik i obraca się o 350 stopni w kierunku do przodu. mójMotor6->zwolnienie(); //Uwalnia silnik ze stanu utrzymywania się w miejscu. powrót; //Wraca do początku kodu pętli } if (key == '4') { //Jeśli klawisz 4 jest wciśnięty, wykonuje następujące czynności: int keyPressed = key - '4'; myMotor5->krok(180, DO PRZODU, PODWÓJNIE); //Uruchamia silnik i obraca się o 350 stopni w kierunku do przodu. mójMotor5->zwolnienie(); //Uwalnia silnik ze stanu utrzymywania się w miejscu. powrót; //Wraca do początku kodu pętli } if (key == '5') { //Jeśli klawisz 5 jest wciśnięty, wykonuje następujące czynności: int keyPressed = key - '5'; myMotor4->krok(6900, DO PRZODU, PODWÓJNIE); //Uruchamia silnik i obraca się o 350 stopni w kierunku do przodu. mójMotor4->zwolnienie(); //Uwalnia silnik ze stanu utrzymywania się w miejscu. powrót; //Wraca do początku kodu pętli } if (key == '6') { //Jeśli klawisz 6 jest wciśnięty, wykonuje następujące czynności: int keyPressed = key - '6'; myMotor3->krok(400, DO PRZODU, PODWÓJNIE); //Uruchamia silnik i obraca się o 350 stopni w kierunku do przodu. mójMotor3->zwolnienie(); //Uwalnia silnik ze stanu utrzymywania się w miejscu. powrót; //Wraca do początku kodu pętli } if (key == '7') { //Jeśli klawisz 7 jest wciśnięty, wykonuje następujące czynności: int keyPressed = key - '7'; myMotor7->krok(400, DO PRZODU, PODWÓJNIE); //Uruchamia silnik i obraca się o 350 stopni w kierunku do przodu. mójMotor7->zwolnienie(); //Uwalnia silnik ze stanu utrzymywania się w miejscu. powrót; //Wraca do początku kodu pętli } if (key == '8') { //Jeśli klawisz 8 jest wciśnięty, wykonuje następujące czynności: int keyPressed = key - '8'; mójMotor8->krok(400, DO PRZODU, PODWÓJNIE); //Uruchamia silnik i obraca się o 350 stopni w kierunku do przodu. mójMotor8->zwolnienie(); //Uwalnia silnik ze stanu utrzymywania się w miejscu. powrót; //Powrót do początku kodu pętli } } } } } } >>
Zalecana:
Lampa nastrojowa LED o wartości 1 USD z ATtiny13 i WS2812: 7 kroków
Lampa nastrojowa LED za 1 USD z ATtiny13 i WS2812: Jest to niedroga lampa nastrojowa z czterema trybami.1. Tęczowa iskra. Iskra światła raz po raz unosi się w górę i stopniowo zmienia kolor.2. Tęczowy blask. Stabilny blask, który stopniowo zmienia kolor.3. Symulacja pożaru świecy.4. Wyłączony.Możesz
Wyświetlacz subskrybenta YouTube o wartości 5 USD za pomocą ESP8266 - bez kodowania: 5 kroków
5 USD DIY Wyświetlanie subskrybenta YouTube za pomocą ESP8266 - bez kodowania: W tym projekcie pokażę, jak można użyć płytki ESP8266 Wemos D1 Mini, aby wyświetlić liczbę subskrybentów dowolnego kanału YouTube za mniej niż 5 USD
Super jasna latarka o wartości 100 USD za mniej niż 10 USD!: 5 kroków
100 $ Super Bright Flashlight za mniej niż 10 $!: Powiem z góry, że inspirację dla tego Instructable przypisuje się dchall8 za jego Tactical Flashlight Instructable. Pomyślałem, że musi być łatwiejszy sposób na zmodyfikowanie mniejszej latarki przy użyciu mniejszej ilości sprzętu i takiej, która zajmuje mniej czasu. ja p
Dirt Cheap Dirt-O-Meter - Wysokościomierz dźwiękowy oparty na Arduino o wartości 9 USD: 4 kroki (ze zdjęciami)
Dirt Cheap Dirt-O-Meter - Wysokościomierz dźwiękowy oparty na Arduino o wartości 9 USD: Dytters (A.K.A Audible Altimeters) ratował życie skoczkom spadochronowym przez tyle lat. Teraz Audible Abby również zaoszczędzi im pieniądze. Basic Dytters mają cztery alarmy, jeden w drodze w górę i trzy w drodze w dół. Podczas lotu samolotem skoczkowie muszą wiedzieć, kiedy
Mini automat vendingowy sterowany Arduino: 9 kroków
Mini automat sprzedający Arduino: To jest nasz automat sprzedający trzy zabawne batoniki snickers. Całkowite wymiary to około 12 cali x 6" x 8". Ten automat jest sterowany przez arduino, z płytką stykową i serwomotorem