Taula de continguts:

1 màquina expenedora basada en Arduino: 8 passos
1 màquina expenedora basada en Arduino: 8 passos

Vídeo: 1 màquina expenedora basada en Arduino: 8 passos

Vídeo: 1 màquina expenedora basada en Arduino: 8 passos
Vídeo: Maquina de Estados Mathlab Arduino 2024, De novembre
Anonim
Image
Image
Carcassa
Carcassa

La nostra idea la vam rebre del nostre professor d’enginyeria: tots vam pensar que seria una bona idea tenir una màquina expenedora per a la nostra classe i va dir: “mola, fes-ne una”. Va resultar que una màquina expenedora seria un gran projecte sènior i, quan estigués completa, funcionaria com a recaptació de fons per al nostre programa d’enginyeria.

Es diu màquina expenedora d’1 dòlar no perquè costi de fabricar 1 dòlar, sinó simplement perquè l’acceptador de factures és un model més antic que només necessita factures d’1 dòlar:)

Pas 1: criteris

Volíem una màquina expenedora que s’adapti a la part superior d’un escriptori i no fos massa alta. Hem agafat les dimensions de l’amplada de la taula per assegurar-nos que no teníem la màquina expenedora penjada de la taula.

Pas 2: carcassa

Carcassa
Carcassa
Carcassa
Carcassa
Carcassa
Carcassa

Hem fet la nostra caixa de 19 polzades d’amplada per 17 polzades de llarg per 25 polzades d’alçada. Hem utilitzat una màquina CNC per tallar la nostra fusta. Vam fer servir Solidworks per dissenyar les cares i després les vam convertir a tipus de fitxers de dibuix per al nostre programari CNC. Vam lijar les vores i les vam cargolar amb 1 ¼”. Vam fixar el tauler frontal amb una frontissa i vam utilitzar cargols de ¼ , de manera que els cargols no passessin a l'altre costat. També hem utilitzat vidre acrílic que hem tallat per a les prestatgeries i el panell frontal.

Pas 3: electrònica

Electrònica
Electrònica
Electrònica
Electrònica
Electrònica
Electrònica
Electrònica
Electrònica

Arduino

Hem utilitzat una placa Arduino Mega 2560. També hem utilitzat les plaques de motor Adafruit perquè puguin fer funcionar els motors pas a pas. Hem afegit pins als adafruit perquè es connectin entre ells. Els van inserir uns sobre els altres. Cadascun pot fer funcionar 2 motors. A més, tingueu en compte que el pont ha d’estar connectat.

Font d'alimentació d'escriptori

Bestek ATX Font d'alimentació mitjançant un adaptador per mantenir la font d'alimentació encesa. L'adaptador prové de sparkfun.com i proporciona diversos voltatges.

Bobines en motors

Vam fer models solidworks per subjectar el motor, agafar la bobina i guiar la bobina al llarg del prestatge. Havíem aconseguit les bobines d’Ebay i les havíem reduït a la mida. També vam haver de doblegar-ne 3 ja que no en vam obtenir 6 amb els extrems rectes per connectar-la al muntatge de la bobina. Després els vam imprimir en 3D i els vam connectar a la bobina i al motor. Els motors pas a pas que teníem, els vam posar en un muntatge. Mantindria el motor i guiaria la bobina per un camí recte.

LCD i teclat

Hem utilitzat un teclat Arduino i una pantalla LCD connectats a un cable de 5 V de l’adaptador de la font d’alimentació per alimentar-lo i després a la mateixa placa Arduino

Cablejat

Es recomana l'ús de cables de calibre 18. En el nostre cas, hem hagut de comprometre’ns amb diversos indicadors perquè ens hem quedat sense 18 indicadors

Tira LED

Hem fet servir una tira LED per il·luminar la màquina. El vam connectar a un cable de 12V de l’adaptador de la font d’alimentació. La tira LED que hem utilitzat afortunadament tenia un + i - que facilitava el procés de connexió.

Pas 4: Acceptador de factures

Acceptador de factures
Acceptador de factures
Acceptador de factures
Acceptador de factures
Acceptador de factures
Acceptador de factures
Acceptador de factures
Acceptador de factures

Hem utilitzat un Coinco BA30B com a acceptant de factures. S’havia de connectar directament a la paret com a font d’energia. El vam combinar amb un adaptador de 24 pins d’una font d’alimentació atx per endollar-lo i facilitar el cablejat. Els pinouts que hem seguit es troben al següent enllaç:

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

En el nostre cas, hem hagut de crear un muntatge per augmentar l’acceptador de factures, perquè en cas contrari seria massa baix per a la nostra caixa.

Pas 5: proves

Proveu primer els aparells electrònics fora de la carcassa per assegurar-vos que els components funcionen. Els problemes que sorgeixin s’han de solucionar abans de col·locar-los dins de la carcassa.

Pas 6: electrònica a carcassa

Un cop provats els aparells electrònics i satisfets dels seus resultats, comenceu a col·locar-los a la carcassa. Ajusteu les longituds del fil perquè encaixin còmodament a l'interior.

Pas 7: proves finals

Un cop col·locat a la carcassa, torneu a provar-ho tot. Si tot funciona com esperaves, felicitats! Has creat una màquina expenedora.

Pas 8: codi Arduino + enllaços

Descàrregues:

Codi Arduino

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

Carpeta SolidWorks amb fitxers de peces i muntatge

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

Per si de cas ha passat alguna cosa a l'enllaç, aquí teniu el codi arduino completament mostrat. Codi Arduino <<

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

const int stepsPerRevolution = 200; byte const ROWS = 4; // quatre files const byte COLS = 3; // tecles de tres columnes [ROWS] [COLS] = {{'1', '2', '3'}, {'4', '5', '6'}, {'7', '8', '9'}, {'*', '0', '#'}}; byte rowPins [ROWS] = {5, 6, 7, 8}; // connecteu-vos als pinouts de la fila del byte del teclat colPins [COLS] = {2, 3, 4}; // connectar-se als pinouts de la columna del teclat Teclat del teclat = Teclat (makeKeymap (tecles), filaPins, colPins, FILES, 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); // Pins digitals, el lcd està connectat a // Constants // // pin per a la línia de crèdit del validador de factures (-) const int billValidator = 22;

// Les variables /

/ enregistrament de la durada del pols (mil·lisegons) de llarga durada sense signar;

// mantenint el total de dòlars registrats en dollarCounter = 0; void setup () {lcd.begin (16, 1); // establir coordenades de text lcd lcd.print ("Insereix només $ 1"); // Establir text Serial.begin (9600); // Inicialitzar els ports sèrie per a la comunicació. Serial.println ("Prova Stepper!"); // Escriviu la prova pas a pas al monitor sèrie per tal de saber quin motor pas a pas es prem. AFMS1.begin (); AFMS2.begin (); AFMS3.begin (); AFMS4.begin (); myMotor1-> setSpeed (100); // Estableix la velocitat del motor a la qual executaran myMotor2-> setSpeed (100); myMotor3-> setSpeed (100); myMotor4-> setSpeed (100); myMotor5-> setSpeed (100); myMotor6-> setSpeed (100); myMotor7-> setSpeed (100); myMotor8-> setSpeed (100); // Configuració de pins per al validador de factures i el botó pinMode (billValidator, INPUT); // Estableix el billaccepter

// Inicialitzar els ports sèrie per a la comunicació. Serial.begin (9600); Serial.println ("Esperant el dòlar …"); } bucle buit () {{durada = pulseIn (billValidator, HIGH); // Comença a buscar la durada del pols rebuda per l’acceptador de factures si (durada> 12000) // Valor que ha de superar per validar-lo com a dòlar processat i autèntic {// Comptar dòlar dollarCounter ++; // Comprovació per comprendre Serial.print ("Dòlar detectat. / N Total:"); // Mostra el nou recompte de dòlars Serial.println (dollarCounter); // bucle per tal d'esperar fins que es prem un botó mentre (durada> 12000) {tecla char = teclat.getKey (); // connecta el keyoad i comença a veure quin es prem si (tecla = NO_KEY) {// cercarà la tecla premuda Serial.println (tecla); // ens fa saber quin es va prémer al monitor sèrie} {if (tecla == '1') {// Si es prem la tecla 1, es fa el següent: int teclaPressada = tecla - '1'; myMotor8-> step (580, FORWARD, DOBLE); // Arranca el motor i gira 350 graus en la direcció cap endavant. myMotor8-> release (); // Allibera el motor de l'estat de mantenir-se al seu lloc. tornar; // Torna a l'inici del codi de bucle}

if (key == '2') {// Si es prem la tecla 2, es fa el següent: int keyPressed = key - '2'; myMotor7-> step (400, AVANT, DOBLE); // Arranca el motor i gira 350 graus en la direcció cap endavant. myMotor7-> release (); // Allibera el motor de l'estat de mantenir-se al seu lloc. tornar; // Torna al principi del codi del bucle} if (tecla == '3') {// Si es prem la tecla 3, es fa el següent: int teclaPressada = tecla - '3'; myMotor6-> step (400, AVANT, DOBLE); // Arranca el motor i gira 350 graus en la direcció cap endavant. myMotor6-> release (); // Allibera el motor de l'estat de mantenir-se al seu lloc. tornar; // Torna a l'inici del codi del bucle} if (tecla == '4') {// Si es prem la tecla 4, es fa el següent: int teclaPressada = tecla - '4'; myMotor5-> step (180, AVANT, DOBLE); // Arranca el motor i gira 350 graus en la direcció cap endavant. myMotor5-> release (); // Allibera el motor de l'estat de mantenir-se al seu lloc. tornar; // Torna a l'inici del codi del bucle} if (tecla == '5') {// Si es prem la tecla 5, es fa el següent: int keyPressed = key - '5'; myMotor4-> step (6900, FORWARD, DOBLE); // Arranca el motor i gira durant 350 graus en la direcció cap endavant. myMotor4-> release (); // Allibera el motor de l'estat de mantenir-se al seu lloc. tornar; // Torna a l'inici del codi del bucle} if (tecla == '6') {// Si es prem la tecla 6, es fa el següent: tecla intPrimida = tecla - '6'; myMotor3-> step (400, FORWARD, DOBLE); // Arranca el motor i gira durant 350 graus en la direcció cap endavant. myMotor3-> release (); // Allibera el motor de l'estat de mantenir-se al seu lloc. tornar; // Torna a l'inici del codi de bucle} if (tecla == '7') {// Si es prem la tecla 7, es fa el següent: int keyPressed = key - '7'; myMotor7-> step (400, AVANT, DOBLE); // Arranca el motor i gira 350 graus en la direcció cap endavant. myMotor7-> release (); // Allibera el motor de l'estat de mantenir-se al seu lloc. tornar; // Torna a l'inici del codi del bucle} if (tecla == '8') {// Si es prem la tecla 8, es fa el següent: tecla intPrimida = tecla - '8'; myMotor8-> step (400, AVANT, DOBLE); // Arranca el motor i gira durant 350 graus en la direcció cap endavant. myMotor8-> release (); // Allibera el motor de l'estat de mantenir-se al seu lloc. tornar; // Torna a l'inici del codi de bucle}}}}}} >>

Recomanat: