Sommario:

Distributore automatico basato su Arduino da $ 1: 8 passaggi
Distributore automatico basato su Arduino da $ 1: 8 passaggi

Video: Distributore automatico basato su Arduino da $ 1: 8 passaggi

Video: Distributore automatico basato su Arduino da $ 1: 8 passaggi
Video: Distributore Automatico con Gettoniera e Arduino - Video 679 2024, Luglio
Anonim
Image
Image
involucro
involucro

Abbiamo avuto la nostra idea dal nostro insegnante di ingegneria - tutti abbiamo pensato che sarebbe stata una buona idea avere un distributore automatico per la nostra classe e ha detto - "bello, creane uno". Si è scoperto che un distributore automatico sarebbe stato un ottimo progetto per anziani e, una volta completato, avrebbe funzionato come raccolta fondi per il nostro programma di ingegneria.

Si chiama distributore automatico da $ 1 non perché costa $ 1, ma semplicemente perché l'accettatore di banconote è un modello più vecchio che richiede solo banconote da $ 1:)

Fase 1: Criteri

Volevamo un distributore automatico che si adattasse a una scrivania e non fosse troppo alto. Abbiamo preso le dimensioni della larghezza del tavolo per assicurarci di non avere il distributore automatico appeso al tavolo.

Passaggio 2: involucro

involucro
involucro
involucro
involucro
involucro
involucro

Abbiamo realizzato la nostra scatola da 19 pollici di larghezza per 17 pollici di lunghezza per 25 pollici di altezza. Abbiamo usato una macchina CNC per tagliare il nostro legno. Abbiamo utilizzato solidworks per progettare le facce e poi le abbiamo convertite in tipi di file di disegno per il nostro software CNC. Abbiamo levigato i bordi e poi li abbiamo avvitati con 1 ¼”. Abbiamo fissato il pannello frontale con una cerniera e utilizzato viti da , in modo che le viti non passassero dall'altra parte. Abbiamo anche usato il vetro acrilico che abbiamo tagliato per i ripiani e il pannello frontale.

Passaggio 3: elettronica

Elettronica
Elettronica
Elettronica
Elettronica
Elettronica
Elettronica
Elettronica
Elettronica

Arduino

Abbiamo usato una scheda Arduino Mega 2560. Abbiamo anche usato le schede motore Adafruit in modo che possano far funzionare i motori passo-passo. Abbiamo aggiunto dei pin agli adafruit per farli connettere tra loro. Li hanno inseriti uno sopra l'altro. Ognuno può far funzionare 2 motori. Inoltre, tieni presente che il ponticello deve essere collegato.

Alimentatore da tavolo

Alimentatore Bestek ATX che utilizza un adattatore per mantenere acceso l'alimentatore. L'adattatore proviene da sparkfun.com e fornisce vari voltaggi.

Bobine in motori

Abbiamo realizzato modelli solidworks per sostenere il motore, afferrare la bobina e guidare la bobina lungo lo scaffale. Avevamo ottenuto le nostre bobine da ebay e le abbiamo tagliate a misura. Abbiamo anche dovuto piegarne 3 poiché non ne abbiamo ottenuti 6 con le estremità diritte per il collegamento al supporto della bobina. Quindi li abbiamo stampati in 3D e li abbiamo attaccati alla bobina e al motore. I motori passo passo che avevamo, li abbiamo inseriti in un supporto. Manterrebbe il motore e guiderebbe la bobina lungo un percorso rettilineo.

LCD e tastiera

Abbiamo utilizzato una tastiera Arduino e uno schermo LCD collegati a un cavo da 5 V sull'adattatore di alimentazione per l'alimentazione e quindi alla stessa scheda Arduino

Cablaggio

Si consiglia l'uso di cavi di calibro 18. Nel nostro caso, abbiamo dovuto scendere a compromessi utilizzando vari calibri perché avevamo esaurito i 18 calibri

Striscia LED

Abbiamo utilizzato una striscia LED per illuminare la macchina. Lo abbiamo collegato a un cavo da 12 V sull'adattatore di alimentazione. La striscia LED che abbiamo usato per fortuna aveva un + e un - che ha reso più facile il processo di connessione.

Passaggio 4: Accettatore di banconote

Accettatore di banconote
Accettatore di banconote
Accettatore di banconote
Accettatore di banconote
Accettatore di banconote
Accettatore di banconote
Accettatore di banconote
Accettatore di banconote

Abbiamo usato un Coinco BA30B come nostro lettore di banconote. Doveva essere collegato direttamente al muro come fonte di alimentazione. Lo abbiamo combinato con un adattatore a 24 pin da un alimentatore atx per collegarlo e consentire un cablaggio più semplice. I pinout che abbiamo seguito si trovano nel seguente link:

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

Nel nostro caso abbiamo dovuto creare una montatura per alzare l'accettatore di banconote perché altrimenti sarebbe stato troppo basso per il nostro involucro.

Passaggio 5: test

Testare prima l'elettronica all'esterno dell'involucro per assicurarsi che i componenti funzionino. Eventuali problemi che si presentano devono essere risolti prima di posizionarli all'interno dell'involucro.

Passaggio 6: dall'elettronica all'involucro

Una volta che hai testato l'elettronica e sei soddisfatto dei risultati, inizia a inserirli nel tuo involucro. Regola le lunghezze dei cavi in modo che si adattino comodamente all'interno.

Passaggio 7: test finale

Una volta inserito nell'involucro, prova di nuovo tutto. Se tutto funziona come previsto, congratulazioni! Hai fatto un distributore automatico.

Passaggio 8: codice Arduino + collegamenti

Download:

Codice Arduino

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

Cartella SolidWorks con file di parti e assiemi

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

Nel caso in cui sia successo qualcosa al collegamento, ecco il codice arduino completamente visualizzato. Codice Arduino <<

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

const int stepsPerRevolution = 200; const byte RIGHE = 4; //quattro righe const byte COLS = 3; // tre colonne char keys[ROWS][COLS] = { {'1', '2', '3'}, {'4', '5', '6'}, {'7', '8', '9'}, {'*', '0', '#'} }; byte rowPins[RIGHE] = {5, 6, 7, 8}; //connettersi ai pinout di riga della tastiera byte colPins[COLS] = {2, 3, 4}; //connettersi ai piedini delle colonne del tastierino Tastierino tastierino = 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 a cristalli liquidi (1, 11, 9, 10, 12, 13); //pin digitali a cui lcd è connesso // costanti // // pin per la linea di credito(-) del lettore di banconote const int billValidator = 22;

// Variabili /

/ registrazione della durata dell'impulso (millisecondi) unsigned long duration;

// tiene il totale dei dollari registrati int dollaroCounter = 0; void setup() { lcd.begin(16, 1); //imposta le coordinate del testo lcd lcd.print("Inserisci solo $1"); //Imposta il testo Serial.begin(9600); // Inizializza le porte seriali per la comunicazione. Serial.println("Prova passo passo!"); //Digitare Stepper Test nel monitor seriale in modo da sapere quale motore passo-passo viene premuto. AFMS1.begin(); AFMS2.begin(); AFMS3.begin(); AFMS4.begin(); myMotor1->setSpeed(100); //Imposta la velocità del motore alla quale verranno eseguiti myMotor2->setSpeed(100); myMotor3->setSpeed(100); myMotor4->setSpeed(100); myMotor5->setSpeed(100); myMotor6->setSpeed(100); myMotor7->setSpeed(100); myMotor8->setSpeed(100); // Configurazioni dei pin per il validatore di banconote e il pulsante pinMode(billValidator, INPUT); //Imposta il billaccepter

// Inizializza le porte seriali per la comunicazione. Serial.begin(9600); Serial.println("In attesa di dollari…"); } void loop () { { duration = pulseIn(billValidator, HIGH); //Inizia a cercare la lunghezza dell'impulso ricevuta dall'accettatore di banconote if (durata > 12000) //Valore che deve superare per essere validato come dollaro processato e autentico { // Conta dollaro dollarCounter++; // Verifica di comprensione Serial.print("Dollaro rilevato.\n Totale: "); // Visualizza il nuovo conteggio dei dollari Serial.println(dollarCounter); //loop per attendere che venga premuto un pulsante while (durata > 12000){ char key = keyboard.getKey(); //collega il keyoad e inizia a vedere quale viene premuto if (key != NO_KEY) { //cercherà il tasto premuto Serial.println(key); //ci fa sapere quale è stato premuto nel monitor seriale } { if (key == '1') { //Se viene premuto il tasto 1, fa quanto segue: int keyPressed = key - '1'; myMotor8->step(580, AVANTI, DOPPIO); //Avvia il motore e ruota di 350 gradi in avanti. myMotor8->release(); //Rilascia il motore dallo stato di mantenersi in posizione. Restituzione; //Torna all'inizio del codice del ciclo }

if (key == '2') { //Se viene premuto il tasto 2, esegue le seguenti operazioni: int keyPressed = key - '2'; myMotor7->step(400, AVANTI, DOPPIO); //Avvia il motore e ruota di 350 gradi in avanti. mioMotore7->release(); //Rilascia il motore dallo stato di mantenersi in posizione. Restituzione; //Torna all'inizio del codice del ciclo } if (key == '3') { //Se viene premuto il tasto 3, esegue le seguenti operazioni: int keyPressed = key - '3'; myMotor6->step(400, AVANTI, DOPPIO); //Avvia il motore e ruota di 350 gradi in avanti. mioMotore6->release(); //Rilascia il motore dallo stato di mantenersi in posizione. Restituzione; //Torna all'inizio del codice del ciclo } if (key == '4') { //Se viene premuto il tasto 4, esegue le seguenti operazioni: int keyPressed = key - '4'; myMotor5->step(180, AVANTI, DOPPIO); //Avvia il motore e ruota di 350 gradi in avanti. mioMotore5->release(); //Rilascia il motore dallo stato di mantenersi in posizione. Restituzione; //Torna all'inizio del codice del ciclo } if (key == '5') { //Se viene premuto il tasto 5, esegue le seguenti operazioni: int keyPressed = key - '5'; mioMotore4->passo(6900, AVANTI, DOPPIO); //Avvia il motore e ruota di 350 gradi in avanti. mioMotore4->release(); //Rilascia il motore dallo stato di mantenersi in posizione. Restituzione; //Torna all'inizio del codice del ciclo } if (key == '6') { //Se viene premuto il tasto 6, esegue le seguenti operazioni: int keyPressed = key - '6'; mioMotore3->passo(400, AVANTI, DOPPIO); //Avvia il motore e ruota di 350 gradi in avanti. mioMotore3->release(); //Rilascia il motore dallo stato di mantenersi in posizione. Restituzione; //Torna all'inizio del codice del ciclo } if (key == '7') { //Se viene premuto il tasto 7, esegue le seguenti operazioni: int keyPressed = key - '7'; myMotor7->step(400, AVANTI, DOPPIO); //Avvia il motore e ruota di 350 gradi in avanti. mioMotore7->release(); //Rilascia il motore dallo stato di mantenersi in posizione. Restituzione; //Torna all'inizio del codice del ciclo } if (key == '8') { //Se viene premuto il tasto 8, esegue le seguenti operazioni: int keyPressed = key - '8'; myMotor8->step(400, AVANTI, DOPPIO); //Avvia il motore e ruota di 350 gradi in avanti. myMotor8->release(); //Rilascia il motore dallo stato di mantenersi in posizione. Restituzione; //Torna all'inizio del codice del ciclo } } } } } } >>

Consigliato: