Cuprins:

Distribuitor automat Arduino de 1 USD: 8 pași
Distribuitor automat Arduino de 1 USD: 8 pași

Video: Distribuitor automat Arduino de 1 USD: 8 pași

Video: Distribuitor automat Arduino de 1 USD: 8 pași
Video: Control Position and Speed of Stepper motor with L298N module using Arduino 2024, Noiembrie
Anonim
Image
Image
Carcasă
Carcasă

Ne-am luat ideea de la profesorul nostru de inginerie - ne-am gândit cu toții că ar fi o idee bună să avem un distribuitor automat pentru clasa noastră și el a spus - „cool, fă unul”. S-a dovedit că o mașină automată ar fi un mare proiect senior și, atunci când va fi finalizată, ar funcționa ca o strângere de fonduri pentru programul nostru de inginerie.

Se numește automat automat de 1 USD, nu pentru că costă 1 USD, ci pur și simplu pentru că acceptorul de facturi este un model mai vechi care acceptă doar facturi de 1 $:)

Pasul 1: Criterii

Am vrut un distribuitor automat care să se potrivească deasupra unui birou și să nu fie prea înalt. Am luat dimensiunile lățimii mesei pentru a ne asigura că nu avem automatul suspendat de masă.

Pasul 2: Carcasă

Carcasă
Carcasă
Carcasă
Carcasă
Carcasă
Carcasă

Ne-am făcut cutia de 19 inci lățime pe 17 inci lungime pe 25 inci înălțime. Am folosit o mașină CNC pentru a tăia lemnul nostru. Am folosit solidworks pentru a proiecta fețele și apoi le-am convertit în tipuri de fișiere de desen pentru software-ul nostru CNC. Am șlefuit marginile și le-am înșurubat cu 1 ¼”. Am atașat panoul frontal cu o balama și am folosit șuruburi ¼ „, astfel încât șuruburile să nu treacă de cealaltă parte. De asemenea, am folosit sticlă acrilică pe care am tăiat-o pentru rafturi și panoul frontal.

Pasul 3: Electronică

Electronică
Electronică
Electronică
Electronică
Electronică
Electronică
Electronică
Electronică

Arduino

Am folosit o placă Arduino Mega 2560. De asemenea, am folosit placi de motor Adafruit, astfel încât acestea să poată rula motoarele pas cu pas. Am adăugat pini la adafruit pentru ca aceștia să se conecteze între ei. Le-au fost inserate una peste alta. Fiecare poate rula 2 motoare. De asemenea, vă rugăm să rețineți că jumperul trebuie conectat.

Sursă de alimentare pentru desktop

Bestek ATX Sursa de alimentare utilizând un adaptor pentru a menține sursa de alimentare pornită. Adaptorul este de la sparkfun.com și oferă diverse tensiuni.

Bobine în motoare

Am realizat modele solidworks pentru a ține motorul, a apuca bobina și a ghida bobina de-a lungul raftului. Ne-am atins colacele de pe eBay și le-am redus la dimensiuni. De asemenea, a trebuit să îndoim 3 dintre ele, deoarece nu am obținut 6 cu capetele drepte pentru a ne conecta la suportul bobinei. Apoi le-am imprimat 3D și le-am atașat la bobină și motor. Motoarele cu pas pe care le-am avut, le-am pus într-o montură. Ar ține motorul și ar ghida bobina de-a lungul unei căi drepte.

LCD și tastatură

Am folosit o tastatură Arduino și un ecran LCD conectat la un cablu de 5V pe adaptorul de alimentare pentru alimentare și apoi la aceeași placă Arduino

Cablare

Vă recomandăm să folosiți fire de calibru 18. În cazul nostru, a trebuit să facem compromisuri folosind diferite calibre, deoarece am rămas fără 18 calibre

Benzi LED

Am folosit o bandă LED pentru a aprinde mașina. L-am conectat la un cablu de 12V de pe adaptorul de alimentare. Banda LED pe care am folosit-o din fericire avea un + și - pe care a făcut procesul de conectare mai ușor.

Pasul 4: Acceptant factură

Acceptant de facturi
Acceptant de facturi
Acceptant de facturi
Acceptant de facturi
Acceptant de facturi
Acceptant de facturi
Acceptant de facturi
Acceptant de facturi

Am folosit un Coinco BA30B ca acceptor de facturi. Trebuia să fie conectat direct la perete ca sursă de alimentare. L-am combinat cu un adaptor cu 24 de pini de la o sursă de alimentare atx pentru a se conecta și a permite cablarea mai ușoară. Pinouturile pe care le-am urmat se găsesc în următorul link:

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

În cazul nostru, a trebuit să creăm o montură pentru a mări factura, deoarece altfel ar fi prea scăzută pentru carcasa noastră.

Pasul 5: Testare

Testați mai întâi componentele electronice din exteriorul carcasei pentru a vă asigura că componentele funcționează. Orice probleme care apar trebuie rezolvate înainte de a le introduce în carcasă.

Pasul 6: Electronică la carcasă

După ce ați testat dispozitivele electronice și sunteți mulțumit de rezultatele lor, începeți să le introduceți în carcasă. Reglați lungimile firelor astfel încât să se potrivească confortabil în interior.

Pasul 7: Testarea finală

Odată introdus în carcasă, testați din nou totul. Dacă totul funcționează așa cum vă așteptați, felicitări! Ai făcut un distribuitor automat.

Pasul 8: Cod Arduino + Linkuri

Descărcări:

Cod Arduino

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

Folder SolidWorks cu fișiere de piese și ansamblu

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

Doar în cazul în care ceva s-a întâmplat la link, iată codul arduino complet afișat. Cod Arduino <<

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

const int stepsPerRevolution = 200; octet const ROWS = 4; // patru rânduri const octet COLS = 3; // trei coloane tastele char [ROWS] [COLS] = {{'1', '2', '3'}, {'4', '5', '6'}, {'7', '8', '9'}, {'*', '0', '#'}}; byte rowPins [ROWS] = {5, 6, 7, 8}; // conectați-vă la pinouturile rândului octetului tastaturii colPins [COLS] = {2, 3, 4}; // conectați-vă la pinouturile coloanei tastaturii Tastatură tastatură = Tastatură (makeKeymap (taste), 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 lcd (1, 11, 9, 10, 12, 13); // Pinii digitali, lcd-ul este conectat la // Constante // // pinul pentru creditul validatorului de facturi (-) linie const int billValidator = 22;

// Variabile /

/ înregistrarea duratei pulsului (milisecunde) nesemnată de lungă durată;

// deținerea totalului de dolari înregistrat în dollarCounter = 0; void setup () {lcd.begin (16, 1); // setați coordonatele textului lcd lcd.print („Introduceți numai $ 1”); // Setați textul Serial.begin (9600); // Inițializați porturile seriale pentru comunicare. Serial.println ("test Stepper!"); // Tastați Out Stepper Test pe monitorul serial, astfel încât să știm ce motor pas cu pas este apăsat. AFMS1.begin (); AFMS2.begin (); AFMS3.begin (); AFMS4.begin (); myMotor1-> setSpeed (100); // Setați viteza motorului la care vor rula myMotor2-> setSpeed (100); myMotor3-> setSpeed (100); myMotor4-> setSpeed (100); myMotor5-> setSpeed (100); myMotor6-> setSpeed (100); myMotor7-> setSpeed (100); myMotor8-> setSpeed (100); // Configurări PIN pentru validatorul facturii și butonul pinMode (billValidator, INPUT); // Setează billaccepterul

// Inițializați porturile seriale pentru comunicare. Serial.begin (9600); Serial.println („Se așteaptă dolarul …”); } void loop () {{durata = pulseIn (billValidator, HIGH); // Începe să caute lungimea pulsului primit de la acceptantul de factură dacă (durata> 12000) // Valoarea pe care trebuie să o depășească pentru a valida ca dolar procesat și autentic {// Număr dolar dolarCounter ++; // Verificare pentru înțelegerea Serial.print ("Dolar detectat. / N Total:"); // Afișează noul număr de dolari Serial.println (dollarCounter); // bucla pentru a aștepta până când un buton este apăsat în timp ce (durata> 12000) {tasta char = keypad.getKey (); // conectează keyoad-ul și începe să vadă care este apăsat dacă (tasta! = NO_KEY) {// va căuta tasta apăsată Serial.println (tasta); // ne anunță care a fost apăsat pe monitorul serial} {if (tasta == '1') {// Dacă tasta 1 este apăsată, face următoarele: tasta int Apăsat = tasta - '1'; myMotor8-> step (580, FORWARD, DOUBLE); // Pornește motorul și se rotește cu 350 de grade în direcția înainte. myMotor8-> release (); // Eliberează motorul din starea de a se menține pe loc. întoarcere; // Revine la începutul codului buclei}

if (tasta == '2') {// Dacă tasta 2 este apăsată, procedează după cum urmează: tasta int Apăsat = tasta - '2'; myMotor7-> step (400, FORWARD, DOUBLE); // Pornește motorul și se rotește cu 350 de grade în direcția înainte. myMotor7-> release (); // Eliberează motorul din starea de a se menține pe loc. întoarcere; // Revine la începutul codului buclei} if (tasta == '3') {// Dacă tasta 3 este apăsată, face următoarele: tasta int Apăsat = tasta - '3'; myMotor6-> step (400, FORWARD, DOUBLE); // Pornește motorul și se rotește cu 350 de grade în direcția înainte. myMotor6-> release (); // Eliberează motorul din starea de a se menține pe loc. întoarcere; // Revine la începutul codului buclei} if (tasta == '4') {// Dacă tasta 4 este apăsată, face următoarele: tasta int Apăsat = tasta - '4'; myMotor5-> step (180, FORWARD, DOUBLE); // Pornește motorul și se rotește cu 350 de grade în direcția înainte. myMotor5-> release (); // Eliberează motorul de starea de a se menține pe loc. întoarcere; // Revine la începutul codului buclei} if (tasta == '5') {// Dacă tasta 5 este apăsată, face următoarele: tasta int Apăsat = tasta - '5'; myMotor4-> step (6900, FORWARD, DOUBLE); // Pornește motorul și se rotește cu 350 de grade în direcția înainte. myMotor4-> release (); // Eliberează motorul din starea de a se menține pe loc. întoarcere; // Revine la începutul codului buclei} if (tasta == '6') {// Dacă tasta 6 este apăsată, face următoarele: tasta int Apăsat = tasta - '6'; myMotor3-> step (400, FORWARD, DOUBLE); // Pornește motorul și se rotește cu 350 de grade în direcția înainte. myMotor3-> release (); // Eliberează motorul de starea de a se menține pe loc. întoarcere; // Revine la începutul codului buclei} if (tasta == '7') {// Dacă tasta 7 este apăsată, face următoarele: tasta int Apăsat = tasta - '7'; myMotor7-> step (400, FORWARD, DOUBLE); // Pornește motorul și se rotește cu 350 de grade în direcția înainte. myMotor7-> release (); // Eliberează motorul din starea de a se menține pe loc. întoarcere; // Revine la începutul codului buclei} if (tasta == '8') {// Dacă tasta 8 este apăsată, face următoarele: tasta int Apăsat = tasta - '8'; myMotor8-> step (400, FORWARD, DOUBLE); // Pornește motorul și se rotește cu 350 de grade în direcția înainte. myMotor8-> release (); // Eliberează motorul din starea de a se menține pe loc. întoarcere; // Revine la începutul codului buclei}}}}}} >>

Recomandat: