Πίνακας περιεχομένων:

Αυτόματο μηχάνημα αυτόματης πώλησης με βάση το Arduino: 8 βήματα
Αυτόματο μηχάνημα αυτόματης πώλησης με βάση το Arduino: 8 βήματα

Βίντεο: Αυτόματο μηχάνημα αυτόματης πώλησης με βάση το Arduino: 8 βήματα

Βίντεο: Αυτόματο μηχάνημα αυτόματης πώλησης με βάση το Arduino: 8 βήματα
Βίντεο: Lesson 99: Building Arduino Digital Clock using DS3231 LCD and Seven Segment Display 2024, Ιούλιος
Anonim
Image
Image
Θήκη
Θήκη

Πήραμε την ιδέα μας από τον καθηγητή μηχανικής μας - όλοι σκεφτήκαμε ότι θα ήταν καλή ιδέα να έχουμε ένα μηχάνημα αυτόματης πώλησης για την τάξη μας και είπε - "ωραία, φτιάξε ένα". Αποδείχθηκε ότι ένα μηχάνημα αυτόματης πώλησης θα ήταν ένα μεγάλο ανώτερο έργο και όταν ολοκληρωθεί θα λειτουργούσε ως έρανος για το πρόγραμμα μηχανικής μας.

Ονομάζεται μηχάνημα αυτόματης πώλησης 1 $ όχι επειδή κοστίζει 1 $, αλλά απλώς επειδή ο αποδέκτης λογαριασμών είναι ένα παλαιότερο μοντέλο που παίρνει μόνο λογαριασμούς 1 $:)

Βήμα 1: Κριτήρια

Θέλαμε ένα μηχάνημα αυτόματης πώλησης που θα χωρούσε πάνω από ένα γραφείο και δεν θα ήταν πολύ ψηλό. Πήραμε τις διαστάσεις του πλάτους του τραπεζιού για να βεβαιωθούμε ότι δεν είχαμε τον αυτόματο πωλητή να κρέμεται από το τραπέζι.

Βήμα 2: Περίβλημα

Θήκη
Θήκη
Θήκη
Θήκη
Θήκη
Θήκη

Φτιάξαμε το κουτί μας 19 ίντσες πλάτος και 17 ίντσες μήκος και 25 ίντσες ύψος. Χρησιμοποιήσαμε μια μηχανή CNC για να κόψουμε το ξύλο μας. Χρησιμοποιήσαμε solidworks για να σχεδιάσουμε τα πρόσωπα και στη συνέχεια τα μετατρέψαμε σε τύπους αρχείων σχεδίασης για το λογισμικό CNC. Τρίψαμε τις άκρες και μετά τις βιδώσαμε με 1”. Συνδέσαμε τον μπροστινό πίνακα με μεντεσέ και χρησιμοποιήσαμε βίδες ¼,, έτσι ώστε οι βίδες να μην περάσουν στην άλλη πλευρά. Χρησιμοποιήσαμε επίσης ακρυλικό γυαλί το οποίο κόψαμε για τα ράφια και το μπροστινό πάνελ.

Βήμα 3: Ηλεκτρονικά

ΗΛΕΚΤΡΟΝΙΚΑ ΕΙΔΗ
ΗΛΕΚΤΡΟΝΙΚΑ ΕΙΔΗ
ΗΛΕΚΤΡΟΝΙΚΑ ΕΙΔΗ
ΗΛΕΚΤΡΟΝΙΚΑ ΕΙΔΗ
ΗΛΕΚΤΡΟΝΙΚΑ ΕΙΔΗ
ΗΛΕΚΤΡΟΝΙΚΑ ΕΙΔΗ
ΗΛΕΚΤΡΟΝΙΚΑ ΕΙΔΗ
ΗΛΕΚΤΡΟΝΙΚΑ ΕΙΔΗ

Arduino

Χρησιμοποιήσαμε έναν πίνακα Arduino Mega 2560. Χρησιμοποιήσαμε επίσης Adafruit Motor Boards για να μπορούν να τρέχουν τους βηματικούς κινητήρες. Προσθέσαμε καρφίτσες στα adafruit για να συνδεθούν μεταξύ τους. Τα έβαλαν το ένα πάνω στο άλλο. Το καθένα μπορεί να τρέξει 2 κινητήρες. Επίσης, σημειώστε ότι ο βραχυκυκλωτήρας πρέπει να συνδεθεί.

Τροφοδοσία επιφάνειας εργασίας

Bestek ATX Τροφοδοσία χρησιμοποιώντας προσαρμογέα για να διατηρήσετε την τροφοδοσία αναμμένη. Ο προσαρμογέας προέρχεται από το sparkfun.com και παρέχει διάφορες τάσεις.

Πηνία σε Motors

Φτιάξαμε μοντέλα solidworks για να κρατήσουμε τον κινητήρα, να πιάσουμε το πηνίο και να οδηγήσουμε το πηνίο κατά μήκος του ράφι. Είχαμε πετύχει τα πηνία μας από το ebay και τα κόψαμε σε διάσταση. Έπρεπε επίσης να λυγίσουμε 3 από αυτά αφού δεν πήραμε 6 με τις ευθείες άκρες για να συνδεθούμε με τη βάση του πηνίου. Στη συνέχεια τα εκτυπώσαμε 3D και τα συνδέσαμε στο πηνίο και τον κινητήρα. Τα βηματικά μοτέρ που είχαμε, τα βάλαμε σε μια βάση. Θα κρατούσε τον κινητήρα και θα οδηγούσε το πηνίο σε ευθεία διαδρομή.

LCD και πληκτρολόγιο

Χρησιμοποιήσαμε ένα πληκτρολόγιο Arduino και μια οθόνη LCD συνδεδεμένη σε καλώδιο 5V στον προσαρμογέα τροφοδοσίας για τροφοδοσία και στη συνέχεια στον ίδιο πίνακα Arduino

Καλωδίωση

Συνιστούμε τη χρήση καλωδίων 18 μετρητών. Στην περίπτωσή μας, έπρεπε να συμβιβαστούμε με τη χρήση διαφόρων μετρητών, επειδή τελειώσαμε με 18 μετρητές

Λωρίδα LED

Χρησιμοποιήσαμε μια λωρίδα LED για να φωτίσουμε το μηχάνημα. Το συνδέσαμε σε καλώδιο 12V στον προσαρμογέα τροφοδοσίας. Η λωρίδα LED που χρησιμοποιήσαμε ευτυχώς είχε ένα + και - που έκανε τη διαδικασία σύνδεσης ευκολότερη.

Βήμα 4: Αποδέκτης λογαριασμών

Bill Acceptor
Bill Acceptor
Bill Acceptor
Bill Acceptor
Bill Acceptor
Bill Acceptor
Bill Acceptor
Bill Acceptor

Χρησιμοποιήσαμε ένα Coinco BA30B ως αποδέκτη λογαριασμών. Έπρεπε να συνδεθεί απευθείας στον τοίχο ως πηγή ενέργειας. Το συνδυάσαμε με έναν προσαρμογέα 24 ακίδων από ένα τροφοδοτικό atx για να συνδέσουμε και να επιτρέψουμε ευκολότερη καλωδίωση. Τα pinouts που ακολουθήσαμε βρίσκονται στον ακόλουθο σύνδεσμο:

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

Στην περίπτωσή μας, έπρεπε να δημιουργήσουμε μια βάση για να ανεβάσουμε τον αποδέκτη λογαριασμού, διότι διαφορετικά θα ήταν πολύ χαμηλός για το περίβλημα μας.

Βήμα 5: Δοκιμή

Δοκιμάστε πρώτα τα ηλεκτρονικά έξω από το περίβλημα για να βεβαιωθείτε ότι τα εξαρτήματα λειτουργούν. Τυχόν προβλήματα που προκύπτουν πρέπει να διορθώνονται πριν τα τοποθετήσετε στο περίβλημα.

Βήμα 6: Ηλεκτρονικά στο περίβλημα

Μόλις δοκιμάσετε τα ηλεκτρονικά και είστε ικανοποιημένοι με τα αποτελέσματά τους, αρχίστε να τα τοποθετείτε στο περίβλημα σας. Ρυθμίστε τα μήκη καλωδίων έτσι ώστε να ταιριάζουν άνετα στο εσωτερικό.

Βήμα 7: Τελική δοκιμή

Μόλις τοποθετηθεί στο περίβλημα, δοκιμάστε ξανά τα πάντα. Αν όλα λειτουργούν όπως τα περιμένατε, συγχαρητήρια! Φτιάξατε ένα αυτόματο μηχάνημα αυτόματης πώλησης.

Βήμα 8: Κωδικός Arduino + Σύνδεσμοι

Λήψεις:

Κωδικός Arduino

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

Φάκελος SolidWorks με αρχεία εξαρτημάτων και συναρμολόγηση

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

Σε περίπτωση που κάτι συνέβη στον σύνδεσμο, εδώ εμφανίζεται πλήρως ο κωδικός arduino. Κωδικός Arduino <<

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

const int stepsPerRevolution = 200; const byte ROWS = 4; // τέσσερις σειρές const byte COLS = 3; // τρεις στήλες πλήκτρα char [ROWS] [COLS] = {{'1', '2', '3'}, {'4', '5', '6'}, {'7', '8', '9'}, {'*', '0', '#'}}; byte rowPins [ROWS] = {5, 6, 7, 8}; // συνδεθείτε με τα pinout των γραμμών των byte πληκτρολογίου colPins [COLS] = {2, 3, 4}; // σύνδεση με τα pinouts της στήλης του πληκτρολογίου Πληκτρολόγιο = Πληκτρολόγιο (makeKeymap (κλειδιά), 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); // Digitalηφιακές καρφίτσες που συνδέεται το lcd με το // Constants // // pin για την πιστωτική (-) γραμμή επικύρωσης λογαριασμού const int billValidator = 22;

// Μεταβλητές /

/ καταγραφή της διάρκειας του παλμού (χιλιοστά του δευτερολέπτου) χωρίς υπογραφή μεγάλης διάρκειας.

// κρατώντας τα συνολικά δολάρια που καταγράφηκαν int dollarCounter = 0; void setup () {lcd.begin (16, 1); // ορίστε συντεταγμένες κειμένου lcd.print ("Εισαγωγή μόνο $ 1"); // Ορισμός κειμένου Serial.begin (9600); // Αρχικοποίηση σειριακών θυρών για επικοινωνία. Serial.println ("Stepper test!"); // Πληκτρολογήστε Stepper Test στη σειριακή οθόνη, έτσι ώστε να γνωρίζουμε ποιο βηματικό μοτέρ πιέζεται. AFMS1.begin (); AFMS2.begin (); AFMS3.begin (); AFMS4.begin (); myMotor1-> setSpeed (100); // Ρυθμίστε την ταχύτητα κινητήρα στην οποία θα εκτελέσουν το myMotor2-> setSpeed (100). myMotor3-> setSpeed (100); myMotor4-> setSpeed (100); myMotor5-> setSpeed (100); myMotor6-> setSpeed (100); myMotor7-> setSpeed (100); myMotor8-> setSpeed (100); // Ρυθμίσεις καρφιτσών για τον επικυρωτή λογαριασμού και το κουμπί pinMode (billValidator, INPUT). // Ορίζει το billaccepter

// Αρχικοποίηση σειριακών θυρών για επικοινωνία. Serial.begin (9600); Serial.println ("Αναμονή για δολάριο …"); } void loop () {{duration = pulseIn (billValidator, HIGH); // Αρχίζει να αναζητά το μήκος παλμού που λαμβάνεται από τον αποδέκτη λογαριασμού εάν (διάρκεια> 12000) // Η τιμή του οποίου πρέπει να ξεπεράσει για να επικυρωθεί ως επεξεργασμένο και αυθεντικό δολάριο {// Count dollar dollarCounter ++; // Έλεγχος για κατανόηση Serial.print ("Εντοπίστηκε δολάριο. / N Σύνολο:"); // Εμφάνιση νέου αριθμού δολαρίων Serial.println (dollarCounter); // βρόχος για να περιμένετε μέχρι να πατηθεί ένα κουμπί ενώ (διάρκεια> 12000) {char key = keypad.getKey (); // συνδέει το πληκτρολόγιο και αρχίζει να βλέπει ποιο πατάται εάν (κλειδί! = NO_KEY) {// θα ψάξει για κλειδί πατημένο Serial.println (κλειδί); // μας ενημερώνει ποιο πατήθηκε στη σειριακή οθόνη} {if (key == '1') {// Εάν πατηθεί το Key 1, κάνει τα εξής: int keyPressed = key - '1'; myMotor8-> βήμα (580, ΕΜΠΡΟΣ, ΔΙΠΛΟ); // Εκκινεί τον κινητήρα και περιστρέφεται για 350 μοίρες προς τα εμπρός. myMotor8-> release (); // Απελευθερώνει τον κινητήρα από την κατάσταση που κρατιέται στη θέση του. ΕΠΙΣΤΡΟΦΗ; // Επιστρέφει στην αρχή του κώδικα βρόχου}

if (key == '2') {// Εάν πατηθεί το Key 2, κάνει τα εξής: int keyPressed = key - '2'; myMotor7-> βήμα (400, ΕΜΠΡΟΣ, ΔΙΠΛΟ); // Εκκινεί τον κινητήρα και περιστρέφεται για 350 μοίρες προς τα εμπρός. myMotor7-> release (); // Απελευθερώνει τον κινητήρα από την κατάσταση που κρατιέται στη θέση του. ΕΠΙΣΤΡΟΦΗ; // Επιστρέφει στην αρχή του κώδικα βρόχου} if (key == '3') {// Εάν πατηθεί το πλήκτρο 3, κάνει τα εξής: int keyPressed = key - '3'; myMotor6-> βήμα (400, ΕΜΠΡΟΣ, ΔΙΠΛΟ); // Εκκινεί τον κινητήρα και περιστρέφεται για 350 μοίρες προς τα εμπρός. myMotor6-> release (); // Απελευθερώνει τον κινητήρα από την κατάσταση που κρατιέται στη θέση του. ΕΠΙΣΤΡΟΦΗ; // Επιστρέφει στην αρχή του κώδικα βρόχου} if (key == '4') {// Εάν πατηθεί το πλήκτρο 4, κάνει τα εξής: int keyPressed = key - '4'; myMotor5-> βήμα (180, ΕΜΠΡΟΣ, ΔΙΠΛΟ); // Εκκινεί τον κινητήρα και περιστρέφεται για 350 μοίρες προς τα εμπρός. myMotor5-> release (); // Απελευθερώνει τον κινητήρα από την κατάσταση που κρατιέται στη θέση του. ΕΠΙΣΤΡΟΦΗ; // Επιστρέφει στην αρχή του κώδικα βρόχου} if (key == '5') {// Εάν πατηθεί το πλήκτρο 5, κάνει τα εξής: int keyPressed = key - '5'; myMotor4-> βήμα (6900, ΕΜΠΡΟΣ, ΔΙΠΛΟ); // Εκκινεί τον κινητήρα και περιστρέφεται για 350 μοίρες προς τα εμπρός. myMotor4-> release (); // Απελευθερώνει τον κινητήρα από την κατάσταση που κρατιέται στη θέση του. ΕΠΙΣΤΡΟΦΗ; // Επιστρέφει στην αρχή του κώδικα βρόχου} if (key == '6') {// Εάν πατηθεί το Key 6, κάνει τα εξής: int keyPressed = key - '6'; myMotor3-> βήμα (400, ΕΜΠΡΟΣ, ΔΙΠΛΟ); // Εκκινεί τον κινητήρα και περιστρέφεται για 350 μοίρες προς τα εμπρός. myMotor3-> release (); // Απελευθερώνει τον κινητήρα από την κατάσταση που κρατιέται στη θέση του. ΕΠΙΣΤΡΟΦΗ; // Επιστρέφει στην αρχή του κώδικα βρόχου} if (key == '7') {// Εάν πατηθεί το πλήκτρο 7, κάνει τα εξής: int keyPressed = key - '7'; myMotor7-> βήμα (400, ΕΜΠΡΟΣ, ΔΙΠΛΟ); // Εκκινεί τον κινητήρα και περιστρέφεται για 350 μοίρες προς τα εμπρός. myMotor7-> release (); // Απελευθερώνει τον κινητήρα από την κατάσταση που κρατιέται στη θέση του. ΕΠΙΣΤΡΟΦΗ; // Επιστρέφει στην αρχή του κώδικα βρόχου} if (key == '8') {// Εάν πατηθεί το πλήκτρο 8, κάνει τα εξής: int keyPressed = key - '8'; myMotor8-> βήμα (400, ΕΜΠΡΟΣ, ΔΙΠΛΟ); // Εκκινεί τον κινητήρα και περιστρέφεται για 350 μοίρες προς τα εμπρός. myMotor8-> release (); // Απελευθερώνει τον κινητήρα από την κατάσταση που κρατιέται στη θέση του. ΕΠΙΣΤΡΟΦΗ; // Επιστρέφει στην αρχή του κώδικα βρόχου}}}}}} >>

Συνιστάται: