Kazalo:

Prodajni avtomat na osnovi Arduina: 8 korakov
Prodajni avtomat na osnovi Arduina: 8 korakov

Video: Prodajni avtomat na osnovi Arduina: 8 korakov

Video: Prodajni avtomat na osnovi Arduina: 8 korakov
Video: ✅Простая идея. Стало гораздо удобней работать.🔨 2024, November
Anonim
Image
Image
Ohišje
Ohišje

Idejo smo dobili od učitelja inženiringa - vsi smo mislili, da bi bilo dobro imeti prodajni avtomat za naš razred in rekel je - "kul, naredi enega". Izkazalo se je, da bi bil avtomat odličen projekt za starejše, in ko bi bil dokončan, bi deloval kot zbiranje sredstev za naš inženirski program.

Imenuje se avtomat za prodajo 1 USD ne zato, ker stane 1 USD, ampak preprosto zato, ker je sprejemnik računov starejši model, ki vzame samo 1 USD:)

1. korak: Merila

Želeli smo prodajni avtomat, ki bi se prilegal na mizo in ne bi bil previsok. Vzeli smo dimenzije širine mize, da se prepričamo, da avtomat ne visi z mize.

2. korak: Ohišje

Ohišje
Ohišje
Ohišje
Ohišje
Ohišje
Ohišje

Našo škatlo smo naredili 19 centimetrov v širino in 17 centimetrov v dolžino in 25 centimetrov v višino. Za rezanje lesa smo uporabili CNC stroj. Za oblikovanje obrazov smo uporabili solidworks, nato pa jih pretvorili v risalne vrste datotek za našo programsko opremo CNC. Robove smo brusili in jih nato privili z 1 ¼”. Sprednjo ploščo smo pritrdili s tečaji in uporabili vijake ¼ “, da vijaki ne bi šli na drugo stran. Uporabili smo tudi akrilno steklo, ki smo ga izrezali za police in sprednjo ploščo.

3. korak: Elektronika

Elektronika
Elektronika
Elektronika
Elektronika
Elektronika
Elektronika
Elektronika
Elektronika

Arduino

Uporabili smo ploščo Arduino Mega 2560. Uporabili smo tudi motorne plošče Adafruit, da lahko poganjajo koračne motorje. Adafrutovim smo dodali zatiče, da se lahko povežejo med seboj. Vstavili so jih drug na drugega. Vsak lahko poganja 2 motorja. Upoštevajte tudi, da mora biti mostiček priključen.

Namizni napajalnik

Napajanje Bestek ATX z vmesnikom za vzdrževanje napajanja. Adapter je iz sparkfun.com in zagotavlja različne napetosti.

Tuljave v motorje

Naredili smo modele solidworks, ki držijo motor, zgrabijo tuljavo in tuljavo vodijo po polici. Naše tuljave smo dobili z ebaya in jih razrezali na dimenzije. 3 smo jih morali tudi upogniti, saj jih z ravnimi konci nismo dobili 6, da bi se povezali z nosilcem tuljave. Nato smo jih 3D natisnili in pritrdili na tuljavo in motor. Koračne motorje, ki smo jih imeli, smo postavili v nosilec. Držal bi motor in vodil tuljavo po ravni poti.

LCD in tipkovnica

Za napajanje smo uporabili Arduino tipkovnico in LCD zaslon, priključen v 5V kabel na napajalniku in nato v isto Arduino ploščo

Ožičenje

Priporočamo uporabo žic s premerom 18. V našem primeru smo morali narediti kompromis z uporabo različnih merilnikov, ker nam je zmanjkalo 18 merilnikov

LED trak

Za osvetlitev stroja smo uporabili LED trak. Priključili smo ga na 12V kabel na napajalniku. LED trak, ki smo ga na srečo uporabili, je imel na sebi + in -, kar je olajšalo postopek povezovanja.

4. korak: Sprejemnik računov

Sprejemnik računov
Sprejemnik računov
Sprejemnik računov
Sprejemnik računov
Sprejemnik računov
Sprejemnik računov
Sprejemnik računov
Sprejemnik računov

Kot sprejemnik računov smo uporabili Coinco BA30B. Moral ga je priključiti neposredno na steno kot vir energije. Združili smo ga s 24-polnim adapterjem iz napajalnika atx, da ga priključimo in omogočimo lažje ožičenje. Odstranitve, ki smo jim sledili, najdete na naslednji povezavi:

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

V našem primeru smo morali ustvariti nosilec za dvig sprejemnika računov, ker bi bil sicer prenizek za naše ohišje.

5. korak: Testiranje

Najprej preizkusite elektroniko zunaj ohišja in se prepričajte, da komponente delujejo. Vse nastale težave je treba odpraviti, preden jih postavite v ohišje.

6. korak: Elektronika do ohišja

Ko preizkusite elektroniko in ste zadovoljni z njenimi rezultati, jo začnite vstavljati v ohišje. Dolžine žice prilagodite tako, da se udobno prilegajo notranjosti.

7. korak: Končno testiranje

Ko vstavite v ohišje, vse znova preizkusite. Če vse deluje tako, kot ste pričakovali, čestitam! Naredili ste avtomat.

8. korak: Arduino koda + povezave

Prenosi:

Koda Arduino

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

Mapa SolidWorks z datotekami delov in montažo

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

V primeru, da se je s povezavo kaj zgodilo, je tukaj koda arduino v celoti prikazana. Koda Arduino <<

#include #include #include "Arduino.h" #include #include #include "utility/Adafruit_MS_PWMServoDriver.h" #include

const int stepsPerRevolution = 200; const byte ROWS = 4; // štiri vrstice const byte COLS = 3; // znaki za tri stolpce [ROWS] [COLS] = {{'1', '2', '3'}, {'4', '5', '6'}, {'7', '8', '9'}, {'*', '0', '#'}}; byte rowPins [ROWS] = {5, 6, 7, 8}; // povežemo se z odmiki vrstice bajta tipkovnice colPins [COLS] = {2, 3, 4}; // povežemo se z izpisi stolpcev tipkovnice Tipkovnica tipkovnice = Tipkovnica (makeKeymap (tipke), vrstice, 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 tekoči kristal (1, 11, 9, 10, 12, 13); // Digitalni zatiči, na katere je LCD priključen // Konstante // // pin za kreditno potrdilo (-) vrstice const int billValidator = 22;

// spremenljivke /

/ snemanje trajanja impulza (milisekunde) nepodpisanega dolgega trajanja;

// imetnik skupnih dolarjev, zabeleženih v int dollarCounter = 0; void setup () {lcd.begin (16, 1); // nastavi koordinate besedila lcd lcd.print ("Vstavi samo 1 USD"); // Nastavi besedilo Serial.begin (9600); // Inicializirajte serijska vrata za komunikacijo. Serial.println ("Stepper test!"); // V serijski monitor vtipkajte korak koraka, tako da vemo, kateri koračni motor je pritisnjen. AFMS1.begin (); AFMS2.begin (); AFMS3.begin (); AFMS4.begin (); myMotor1-> setSpeed (100); // Nastavi hitrost motorja, pri kateri bodo izvajali myMotor2-> setSpeed (100); myMotor3-> setSpeed (100); myMotor4-> setSpeed (100); myMotor5-> setSpeed (100); myMotor6-> setSpeed (100); myMotor7-> setSpeed (100); myMotor8-> setSpeed (100); // Pripnite nastavitve za potrjevalnik računov in gumb pinMode (billValidator, INPUT); // Nastavi billaccepter

// Inicializirajte serijska vrata za komunikacijo. Serial.begin (9600); Serial.println ("Čakanje na dolar …"); } void loop () {{duration = pulseIn (billValidator, HIGH); // Začne iskati dolžino impulza, prejeto od akceptanta, če (trajanje> 12000) // Vrednost, ki jo mora preseči, da se potrdi kot predelani in verodostojni dolar {// Count dollar dollarCounter ++; // Preverjanje razumevanja Serial.print ("Zaznan dolar. / N Skupaj:"); // Prikaz novega števila dolarjev Serial.println (dollarCounter); // zanka, da počakamo, da pritisnemo gumb medtem (trajanje> 12000) {char key = keypad.getKey (); // poveže tipkovnico in začne videti, katera je pritisnjena, če (tipka! = NO_KEY) {// bo iskala pritisnjeno tipko Serial.println (tipka); // nam sporoča, kateri je bil pritisnjen v serijskem monitorju} {if (key == '1') {// Če pritisnete tipko 1, naredi naslednje: int keyPressed = key - '1'; myMotor8-> korak (580, NAPREJ, DVOJNO); // Zažene motor in se vrti za 350 stopinj v smeri naprej. myMotor8-> release (); // sprosti motor iz stanja, da se drži. vrnitev; // se vrne na začetek kode zanke}

if (key == '2') {// Če pritisnete tipko 2, naredite naslednje: int keyPressed = key - '2'; myMotor7-> korak (400, NAPREJ, DVOJNO); // Zažene motor in se vrti za 350 stopinj v smeri naprej. myMotor7-> release (); // sprosti motor iz stanja, da se drži. vrnitev; // Vrne se na začetek kode zanke} if (key == '3') {// Če pritisnete tipko 3, naredi naslednje: int keyPressed = key - '3'; myMotor6-> korak (400, NAPREJ, DVOJNO); // Zažene motor in se vrti za 350 stopinj v smeri naprej. myMotor6-> release (); // sprosti motor iz stanja, da se drži. vrnitev; // Vrne se na začetek kode zanke} if (key == '4') {// Če pritisnete tipko 4, naredi naslednje: int keyPressed = key - '4'; myMotor5-> korak (180, NAPREJ, DVOJNO); // Zažene motor in se vrti za 350 stopinj v smeri naprej. myMotor5-> release (); // sprosti motor iz stanja, da se drži. vrnitev; // Vrne se na začetek kode zanke} if (key == '5') {// Če pritisnete tipko 5, naredi naslednje: int keyPressed = key - '5'; myMotor4-> korak (6900, NAPREJ, DVOJNO); // Zažene motor in se vrti za 350 stopinj v smeri naprej. myMotor4-> release (); // sprosti motor iz stanja, da se drži. vrnitev; // Vrne se na začetek kode zanke} if (key == '6') {// Če pritisnete tipko 6, naredi naslednje: int keyPressed = key - '6'; myMotor3-> korak (400, NAPREJ, DVOJNO); // Zažene motor in se vrti za 350 stopinj v smeri naprej. myMotor3-> release (); // sprosti motor iz stanja, da se drži. vrnitev; // Vrne se na začetek kode zanke} if (key == '7') {// Če pritisnete tipko 7, naredi naslednje: int keyPressed = key - '7'; myMotor7-> korak (400, NAPREJ, DVOJNO); // Zažene motor in se vrti za 350 stopinj v smeri naprej. myMotor7-> release (); // sprosti motor iz stanja, da se drži. vrnitev; // Vrne se na začetek kode zanke} if (key == '8') {// Če pritisnete tipko 8, naredi naslednje: int keyPressed = key - '8'; myMotor8-> korak (400, NAPREJ, DVOJNO); // Zažene motor in se vrti za 350 stopinj v smeri naprej. myMotor8-> release (); // sprosti motor iz stanja, da se drži. vrnitev; // Vrne se na začetek kode zanke}}}}}} >>

Priporočena: