Inhaltsverzeichnis:

$1 Arduino-basierter Verkaufsautomat - Gunook
$1 Arduino-basierter Verkaufsautomat - Gunook

Video: $1 Arduino-basierter Verkaufsautomat - Gunook

Video: $1 Arduino-basierter Verkaufsautomat - Gunook
Video: Vending Machine Project pt.1 #iot #vendingmachine #raspberrypi #arduino 2024, November
Anonim
Image
Image
Gehäuse
Gehäuse

Unsere Idee bekamen wir von unserem Ingenieurslehrer - wir dachten alle, es wäre eine gute Idee, einen Automaten für unsere Klasse zu haben und er sagte - "cool, mach einen". Es stellte sich heraus, dass ein Verkaufsautomat ein großartiges Seniorenprojekt wäre und nach Fertigstellung als Spendenaktion für unser Engineering-Programm fungieren würde.

Es wird nicht als 1-Dollar-Verkaufsautomat bezeichnet, weil die Herstellung 1 US-Dollar kostet, sondern einfach, weil der Geldscheinprüfer ein älteres Modell ist, das nur 1-Dollar-Scheine akzeptiert:)

Schritt 1: Kriterien

Wir wollten einen Automaten, der auf einen Schreibtisch passt und nicht zu groß ist. Wir haben die Maße der Breite des Tisches genommen, um sicherzustellen, dass der Automat nicht vom Tisch hängt.

Schritt 2: Gehäuse

Gehäuse
Gehäuse
Gehäuse
Gehäuse
Gehäuse
Gehäuse

Wir machten unsere Box 19 Zoll breit und 17 Zoll lang und 25 Zoll hoch. Wir benutzten eine CNC-Maschine, um unser Holz zu schneiden. Wir haben Solidworks verwendet, um die Flächen zu entwerfen und sie dann in Zeichnungsdateitypen für unsere CNC-Software umgewandelt. Wir haben die Kanten geschliffen und dann mit 1 ¼” verschraubt. Die Frontplatte haben wir mit einem Scharnier befestigt und ¼“Schrauben verwendet, damit die Schrauben nicht auf die andere Seite durchgehen. Wir haben auch Acrylglas verwendet, das wir für die Regale und die Frontplatte geschnitten haben.

Schritt 3: Elektronik

Elektronik
Elektronik
Elektronik
Elektronik
Elektronik
Elektronik
Elektronik
Elektronik

Arduino

Wir haben ein Arduino Mega 2560 Board verwendet. Wir haben auch Adafruit Motor Boards verwendet, damit sie die Schrittmotoren betreiben können. Wir haben den Adafruits Pins hinzugefügt, damit sie sich miteinander verbinden können. Sie wurden übereinander gesteckt. Jeder kann 2 Motoren betreiben. Beachten Sie auch, dass der Jumper angeschlossen werden muss.

Desktop-Netzteil

Bestek ATX-Netzteil mit einem Adapter, um das Netzteil eingeschaltet zu halten. Der Adapter ist von sparkfun.com und liefert verschiedene Spannungen.

Spulen in Motoren

Wir haben Solidworks-Modelle hergestellt, um den Motor zu halten, die Spule zu greifen und die Spule entlang des Regals zu führen. Wir hatten unsere Coils von ebay bezogen und auf Maß geschnitten. Wir mussten auch 3 davon biegen, da wir keine 6 mit den geraden Enden zum Anschluss an die Spulenhalterung bekamen. Wir haben sie dann in 3D gedruckt und an der Spule und am Motor befestigt. Die Schrittmotoren, die wir hatten, steckten wir in eine Halterung. Es würde den Motor halten und die Spule entlang eines geraden Weges führen.

LCD und Tastatur

Wir haben eine Arduino-Tastatur und einen LCD-Bildschirm verwendet, die an ein 5-V-Kabel am Netzteiladapter für die Stromversorgung angeschlossen sind, und dann an das gleiche Arduino-Board

Verdrahtung

Wir empfehlen die Verwendung von 18 Gauge Drähten. In unserem Fall mussten wir Kompromisse eingehen, indem wir verschiedene Spurweiten verwenden, da uns 18 Spurweiten ausgegangen sind

LED-Leiste

Wir haben einen LED-Streifen verwendet, um die Maschine zu beleuchten. Wir haben es an ein 12-V-Kabel des Netzteils angeschlossen. Der von uns verwendete LED-Streifen hatte glücklicherweise ein + und -, was das Anschließen erleichterte.

Schritt 4: Rechnungsprüfer

Rechnungsprüfer
Rechnungsprüfer
Rechnungsprüfer
Rechnungsprüfer
Rechnungsprüfer
Rechnungsprüfer
Rechnungsprüfer
Rechnungsprüfer

Als Geldscheinprüfer haben wir einen Coinco BA30B verwendet. Es musste als Stromquelle direkt an die Wand angeschlossen werden. Wir haben es mit einem 24-Pin-Adapter von einem ATX-Netzteil kombiniert, um es anzuschließen und eine einfachere Verkabelung zu ermöglichen. Die Pinbelegungen, denen wir gefolgt sind, finden Sie unter folgendem Link:

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

In unserem Fall mussten wir eine Halterung erstellen, um den Geldscheinprüfer anzuheben, da er sonst für unser Gehäuse zu niedrig wäre.

Schritt 5: Testen

Testen Sie zuerst die Elektronik außerhalb des Gehäuses, um sicherzustellen, dass die Komponenten funktionieren. Alle auftretenden Probleme sollten behoben werden, bevor sie in das Gehäuse eingesetzt werden.

Schritt 6: Elektronik zum Gehäuse

Sobald Sie die Elektronik getestet haben und mit den Ergebnissen zufrieden sind, beginnen Sie, sie in Ihr Gehäuse zu legen. Passen Sie die Drahtlängen so an, dass sie bequem hineinpassen.

Schritt 7: Abschlussprüfung

Nach dem Einsetzen in das Gehäuse testen Sie alles erneut. Wenn alles wie erwartet funktioniert, herzlichen Glückwunsch! Du hast einen Automaten gebaut.

Schritt 8: Arduino-Code + Links

Downloads:

Arduino-Code

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

SolidWorks Ordner mit Bauteildateien und Baugruppen

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

Nur für den Fall, dass dem Link etwas passiert ist, wird hier der Arduino-Code vollständig angezeigt. Arduino-Code <<

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

const int SchrittePerRevolution = 200; konstantes Byte ROWS = 4; // vier Zeilen const Byte COLS = 3; //dreispaltige Zeichentasten[ROWS][COLS] = { {'1', '2', '3'}, {'4', '5', '6'}, {'7', '8', '9'}, {'*', '0', '#'} }; Byte rowPins[ROWS] = {5, 6, 7, 8}; // mit den Zeilenbelegungen des Tastaturbytes verbinden colPins [COLS] = {2, 3, 4}; // mit den Spaltenpinbelegungen der Tastatur verbinden Tastatur Tastatur = Tastatur (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); Flüssigkristallanzeige (1, 11, 9, 10, 12, 13); // Digitale Pins, mit denen das LCD verbunden ist // Konstanten // // Pin für die Credit (-) Leitung des Geldscheinprüfers const int billValidator = 22;

// Variablen /

/ Aufzeichnung der Impulsdauer (Millisekunden) ohne Vorzeichen lange Dauer;

// Halten der gesamten aufgezeichneten Dollars int dollarCounter = 0; Void setup () {lcd.begin (16, 1); // lcd-Textkoordinaten einstellen lcd.print ("Nur $1 einfügen"); // Text setzen Serial.begin (9600); // Serielle Ports für die Kommunikation initialisieren. Serial.println ("Stepper-Test!"); // Geben Sie den Stepper Test in den seriellen Monitor ein, damit wir wissen, welcher Schrittmotor gedrückt wird. AFMS1.begin(); AFMS2.begin(); AFMS3.begin(); AFMS4.begin(); meinMotor1->setSpeed(100); // Stellen Sie die Motorgeschwindigkeit ein, mit der sie ausgeführt werden myMotor2-> setSpeed (100); meinMotor3->setSpeed(100); meinMotor4->setSpeed(100); meinMotor5->setSpeed(100); meinMotor6->setSpeed(100); meinMotor7->setSpeed(100); meinMotor8->setSpeed(100); // Pin-Setups für Geldscheinprüfer und Button pinMode (billValidator, INPUT); // Setzt den Banknotenakzeptor

// Serielle Ports für die Kommunikation initialisieren. Serial.begin (9600); Serial.println("Warten auf Dollar…"); aufrechtzuerhalten. Void Schleife () { { Dauer = pulseIn (billValidator, HIGH); //Startet die Suche nach der vom Banknotenprüfer empfangenen Impulslänge if (Dauer > 12000) //Wert, den er überschreiten muss, um als verarbeiteter und echter Dollar zu validieren { // Dollar zählen dollarCounter++; // Überprüfung auf Verständnis von Serial.print ("Dollar erkannt. / n Gesamt: "); // Neue Dollarzählung anzeigen Serial.println (dollarCounter); // Schleife, um zu warten, bis eine Taste gedrückt wird, während (Dauer > 12000) { char key = keyboard.getKey (); // Verbindet den Keyload und beginnt zu sehen, welcher gedrückt wird if (key != NO_KEY) {// sucht nach gedrücktem Key Serial.println (key); // Lässt uns wissen, welcher im seriellen Monitor gedrückt wurde} { if (key == '1') { // Wenn Taste 1 gedrückt wird, wird Folgendes ausgeführt: int keyPressed = key - '1'; myMotor8->step (580, VORWÄRTS, DOPPEL); // Startet den Motor und dreht sich um 350 Grad in Vorwärtsrichtung. meinMotor8->release(); // Befreit den Motor aus dem Zustand, in dem er sich selbst festhält. Rückkehr; // Geht zurück zum Anfang des Schleifencodes }

if (key == '2') { //Wenn Taste 2 gedrückt wird, wird Folgendes ausgeführt: int keyPressed = key - '2'; myMotor7->step(400, VORWÄRTS, DOPPEL); // Startet den Motor und dreht sich um 350 Grad in Vorwärtsrichtung. meinMotor7->release(); // Befreit den Motor aus dem Zustand, in dem er sich selbst festhält. Rückkehr; // Geht zurück zum Anfang des Schleifencodes } if (key == '3') { //Wenn Taste 3 gedrückt wird, wird Folgendes ausgeführt: int keyPressed = key - '3'; myMotor6->step(400, VORWÄRTS, DOPPEL); // Startet den Motor und dreht sich um 350 Grad in Vorwärtsrichtung. meinMotor6->release(); // Befreit den Motor aus dem Zustand, in dem er sich selbst festhält. Rückkehr; // Geht zurück zum Anfang des Schleifencodes } if (key == '4') { //Wenn Taste 4 gedrückt wird, wird Folgendes ausgeführt: int keyPressed = key - '4'; myMotor5->step(180, VORWÄRTS, DOPPEL); // Startet den Motor und dreht sich um 350 Grad in Vorwärtsrichtung. meinMotor5->release(); // Befreit den Motor aus dem Zustand, in dem er sich selbst festhält. Rückkehr; // Geht zurück zum Anfang des Schleifencodes } if (key == '5') { //Wenn Taste 5 gedrückt wird, wird Folgendes ausgeführt: int keyPressed = key - '5'; myMotor4->step(6900, VORWÄRTS, DOPPEL); // Startet den Motor und dreht sich um 350 Grad in Vorwärtsrichtung. meinMotor4->release(); // Befreit den Motor aus dem Zustand, in dem er sich selbst festhält. Rückkehr; // Geht zurück zum Anfang des Schleifencodes } if (key == '6') { //Wenn Taste 6 gedrückt wird, wird Folgendes ausgeführt: int keyPressed = key - '6'; myMotor3->step (400, VORWÄRTS, DOPPEL); // Startet den Motor und dreht sich um 350 Grad in Vorwärtsrichtung. meinMotor3->release(); // Befreit den Motor aus dem Zustand, in dem er sich selbst festhält. Rückkehr; // Geht zurück zum Anfang des Schleifencodes } if (key == '7') { //Wenn Taste 7 gedrückt wird, wird Folgendes ausgeführt: int keyPressed = key - '7'; myMotor7->step(400, VORWÄRTS, DOPPEL); // Startet den Motor und dreht sich um 350 Grad in Vorwärtsrichtung. meinMotor7->release(); // Befreit den Motor aus dem Zustand, in dem er sich selbst festhält. Rückkehr; // Geht zurück zum Anfang des Schleifencodes } if (key == '8') { //Wenn Taste 8 gedrückt wird, wird Folgendes ausgeführt: int keyPressed = key - '8'; myMotor8->step(400, VORWÄRTS, DOPPEL); // Startet den Motor und dreht sich um 350 Grad in Vorwärtsrichtung. meinMotor8->release(); // Befreit den Motor aus dem Zustand, in dem er sich selbst festhält. Rückkehr; // Geht zurück zum Anfang des Schleifencodes } } } } } } >>

Empfohlen: