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

Arduino Morse Code Writer: 7 βήματα (με εικόνες)
Arduino Morse Code Writer: 7 βήματα (με εικόνες)

Βίντεο: Arduino Morse Code Writer: 7 βήματα (με εικόνες)

Βίντεο: Arduino Morse Code Writer: 7 βήματα (με εικόνες)
Βίντεο: ⚡️ ΔΕΝ ΘΑ ΤΑ ΠΑΡΑΔΩ! Amazon 2.0 | Ηλεκτρονικό κατάστημα από την αρχή - Μέρος 3 2024, Ιούλιος
Anonim
Image
Image
Arduino Morse Code Writer
Arduino Morse Code Writer

Έφτιαξα ένα ρομπότ που μπορεί να μετατρέψει οποιοδήποτε κείμενο σε κώδικα Μορς και στη συνέχεια να το γράψει !! Είναι κατασκευασμένο από χαρτόνι και Lego και για τα ηλεκτρονικά χρησιμοποίησα Arduino και μόνο δύο κινητήρες.

Προμήθειες

Arduino Uno Board Stepper motor Micro servo SG90ULN2003 stepper motor module driver module τροφοδοτικό στυλό) κοπτικό ψαλιδιού

Βήμα 1: Χτίζοντας τη βάση

Χτίζοντας τη Βάση
Χτίζοντας τη Βάση
Χτίζοντας τη Βάση
Χτίζοντας τη Βάση
Χτίζοντας τη Βάση
Χτίζοντας τη Βάση

Ξεκινήστε χτίζοντας τη βάση. Το δικό μου είναι 4 στηρίγματα πλάτους και 20 στηρίγματα, αφού έχτισα ένα στρώμα με αυτά τα μήκη, έχτισα ένα περίβλημα με ένα πείρο γύρω από αυτό αφήνοντας ένα κενό στη μία πλευρά για να αφήσω χώρο για το βηματικό μοτέρ, στη συνέχεια πρόσθεσα κομμάτια πλακιδίων στο μεσαίο μέρος όπου θα είναι η λωρίδα χαρτιού. Η χρήση του Lego το έκανε πολύ ανθεκτικό και εύκολο στην τροποποίηση. Για να κάνω το χαρτί να κυλήσει, έκοψα λωρίδες από χαρτί Α4 πλάτους 1,2 εκατοστών (επέλεξα αυτό το πλάτος επειδή έχει το ίδιο πλάτος με τον τροχό Lego που χρησιμοποίησα, μπορείτε να κάνετε το δικό σας μεγαλύτερο ή μικρότερο ανάλογα με τον τροχό σας) και κόλλησα τα άκρα τους μεταξύ τους για να σχηματίσω μια πολύ μακριά λωρίδα, στη συνέχεια την τύλιξα γύρω από τον τροχό.

Βήμα 2: Το Servo Piece

Το Servo Piece
Το Servo Piece
Το Servo Piece
Το Servo Piece
Το Servo Piece
Το Servo Piece

Για αυτό το βήμα χρειάζεστε:

  • δύο ξύλινοι πείροι μήκους 4 εκατοστών
  • δύο ελατήρια μήκους 2 εκατοστών
  • ένα καλαμάκι κομμένο σε δύο κομμάτια μήκους 2 εκατοστών το καθένα
  • ένα κομμάτι χαρτόνι 12εκ επί 4εκ
  • δύο κομμάτια από χαρτόνι 4εκ επί 1,5εκ
  • ένα κομμάτι χαρτόνι 4εκ επί 2εκ

Πρώτα, κολλήστε τους πείρους σε ένα από τα 4 με 1,5 κομμάτια, στη συνέχεια εισάγετε τα ελατήρια και τα καλαμάκια στους πείρους και, στη συνέχεια, κολλήστε το άλλο κομμάτι από χαρτόνι στην άλλη πλευρά για να τα κρατήσετε όλα στη θέση τους.

Δεύτερον, κολλήστε το κομμάτι 4εκ επί 2εκ πάνω από τα καλαμάκια.

Τρίτον, αναποδογυρίστε ολόκληρο το κομμάτι και κολλήστε έναν μικρό πείρο στο πίσω μέρος του, όχι στη μέση αλλά ελαφρώς προς τα αριστερά. (Ξέχασα να προσθέσω τον μικρό πείρο στην πρώτη εικόνα)

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

Κατέληξα να κόβω περίπου 3 εκατοστά από το κάτω μέρος του τεμαχίου 12 εκατοστά επί 4 εκατοστά και να κολλήσω δύο ακόμη κομμάτια 4 εκατοστά επί 1,5 εκατοστά σε αυτό, και μετά να το καλύψω με ένα χαρτόνι 5,5 εκατοστά επί 4 εκατοστά. Και για να κρατήσω το μαρκαδόρο έκανα ένα μικρό βρόχο ελαστικής ταινίας και το κόλλησα σε ένα μικρό κομμάτι χαρτόνι και έπειτα το κόλλησα στο κομμάτι 4εκ επί 2εκ που θα μετακινηθεί προς τα κάτω όταν ξεκινήσει το σερβο. Αυτές οι προσθήκες σταμάτησαν τη μετακίνηση του δείκτη από τη μία πλευρά στην άλλη όταν επανέλθουν τα ελατήρια.

Βήμα 3: Προσθήκη του Servo Motor και του Paper Roll στη Βάση

Προσθήκη του Servo Motor και του Paper Roll στη Βάση
Προσθήκη του Servo Motor και του Paper Roll στη Βάση
Προσθήκη του Servo Motor και του Paper Roll στη Βάση
Προσθήκη του Servo Motor και του Paper Roll στη Βάση

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

Βήμα 4: Χτίζοντας το πλαίσιο Stepper Motor

Χτίζοντας το πλαίσιο Stepper Motor
Χτίζοντας το πλαίσιο Stepper Motor
Χτίζοντας το πλαίσιο Stepper Motor
Χτίζοντας το πλαίσιο Stepper Motor
Χτίζοντας το πλαίσιο Stepper Motor
Χτίζοντας το πλαίσιο Stepper Motor

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

Βήμα 5: Τελειώνοντας τις πινελιές

Τελευταίες πινελιές
Τελευταίες πινελιές
Τελευταίες πινελιές
Τελευταίες πινελιές
Τελευταίες πινελιές
Τελευταίες πινελιές
Τελευταίες πινελιές
Τελευταίες πινελιές

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

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

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

Τέλος, πρέπει να συνδέσετε τους κινητήρες στο Arduino και να ανεβάσετε τον κωδικό.

Θα ξεκινήσουμε με τον σερβοκινητήρα, θα συνδέσουμε το καφέ σύρμα (το καλώδιο γείωσης) στον πείρο GND, μετά το κόκκινο σύρμα (το καλώδιο τροφοδοσίας) στον πείρο 5V και το πορτοκαλί σύρμα (το καλώδιο σήματος) στο Dig #5 καρφίτσα. Στη συνέχεια, ο βηματικός κινητήρας, συνδέστε 1N1 στο Dig #11, 1N2 στο Dig #10, 1N3 στο Dig #9, 1N4 στο Dig #8, το 5V στη θετική πλευρά του breadboard και τον πείρο γείωσης στην αρνητική πλευρά του σανίδα ψωμιού. Και μην ξεχάσετε να συνδέσετε το δομοστοιχείο τροφοδοσίας με το breadboard, βεβαιωθείτε ότι οι θετικές και αρνητικές του πλευρές ευθυγραμμίζονται σωστά με τις αντίστοιχες πλευρές στο breadboard. Εάν ξεχάσετε να το κάνετε, θα αντιστρέψετε τη δύναμη στο έργο σας και δεν θέλετε να το κάνετε αυτό.

Για τον κώδικα, έγραψα τέσσερις μεθόδους, μία για να γράψω μια τελεία, μία για να γράψω μια παύλα και δύο για να αφήσω κενό μεταξύ κάθε γράμματος και κάθε λέξης. Με αυτόν τον τρόπο, μπορώ απλώς να καλέσω αυτές τις μεθόδους όταν τις χρειάζομαι αντί να τις ξαναγράψω για κάθε γράμμα. Στη συνέχεια έγραψα έναν βρόχο for που περνάει από κάθε γράμμα του κειμένου και γράψτε το, Μέσα σε αυτό, έγραψα μια δήλωση if για κάθε γράμμα, αλλά μπορείτε να το γράψετε σε μια εντολή switch αν προτιμάτε. Φυσικά μπορείτε να προσθέσετε στον κώδικα για να επιτρέψετε στο πρόγραμμα να διαβάζει αριθμούς. Όταν όλες οι καλωδιώσεις είναι έτοιμες, απλώς αντιγράψτε και επικολλήστε τον κωδικό στο IDE σας. Μην ξεχάσετε να εγκαταστήσετε τις βιβλιοθήκες stepper, servo και string. Μετά από αυτό, είστε έτοιμοι να πάτε.

Πως δουλεύει

Όταν ξεκινά το Arduino, το πρόγραμμα κοιτάζει το πρώτο γράμμα του κειμένου., Και ανάλογα με το ποιο είναι, καλεί τις συναρτήσεις που το γράφουν σε κώδικα Μορς. Για παράδειγμα, όταν καλείται η λειτουργία κουκκίδων, ο σερβοκινητήρας έχει ρυθμιστεί σε 160, ο οποίος μετακινεί την πένα προς τα κάτω και, στη συνέχεια, ορίζεται ξανά στο 90, επιτρέποντας στα ελατήρια να επανέλθουν, μετακινώντας το στυλό μαζί τους. Και αν κληθεί η λειτουργία παύλας, το σερβο μετακινεί τη πένα προς τα κάτω, τότε ο βηματικός κινητήρας περιστρέφει τον τροχό ο οποίος τραβά το χαρτί κάνοντας το στυλό να γράφει μια παύλα. Και αν μία από τις λειτουργίες του διαστήματος ονομάζεται ο βηματικός κινητήρας περιστρέφεται αλλά με το στυλό προς τα πάνω τραβάει το χαρτί κάνοντας κενό μεταξύ των γραμμάτων ή των λέξεων. Όταν τελειώσει, πηγαίνει στο επόμενο γράμμα και επαναλαμβάνει την ίδια διαδικασία. Ελπίζω να σας αρέσει;)

Ο κώδικας

#περιλαμβάνω

#include #include #include const int stepsPerRevolution = 150; // Αυτή είναι η μεταβλητή για το stepper motor String πρόταση = "*γεια"; // Αλλάξτε αυτήν τη μεταβλητή για να γράψετε διαφορετικές λέξεις, αλλά γράψτε μόνο με μικρά γράμματα και ξεκινήστε τη λέξη σας με "*" Stepper myStepper (βήματαPerRevolution, 8, 10, 9, 11). Servo myServo; // Αυτή είναι η μέθοδος που κάνει το ρομπότ να γράψει μια τελεία κενή κουκκίδα () {Serial.println ("έναρξη κουκκίδας"); myServo.write (160); καθυστέρηση (1000)? myServo.write (90); καθυστέρηση (1000)? myStepper.step (stepsPerRevolution); καθυστέρηση (1000)? Serial.println ("τελείωσε η τελεία"); } // Αυτή είναι η μέθοδος που κάνει το ρομπότ να γράψει μια παύλα void dash () {Serial.println ("start dash"); myServo.write (160); καθυστέρηση (1000)? myStepper.step (stepsPerRevolution); καθυστέρηση (1000)? myServo.write (90); καθυστέρηση (1000)? myStepper.step (stepsPerRevolution); καθυστέρηση (1000)? Serial.println ("παύλα έγινε"); } // Αυτή είναι η μέθοδος που κάνει το ρομπότ να αφήνει ένα διάστημα μεταξύ κάθε κεφαλαίου κενό διάστημα () {Serial.println ("έναρξη χώρου"); myServo.write (90); καθυστέρηση (1000)? myStepper.step (200); καθυστέρηση (1000)? Serial.println ("Ο χώρος έχει ολοκληρωθεί"); } // Αυτή είναι η μέθοδος που κάνει το ρομπότ να αφήνει μεγαλύτερο χώρο μεταξύ κάθε λέξης void bigSpace () {myServo.write (90); myStepper.step (250); καθυστέρηση (1000)? } void setup () {// βάλτε τον κωδικό εγκατάστασης εδώ, για να εκτελεστεί μία φορά: Serial.begin (9600); myStepper.setSpeed (100); myServo.attach (5); int πρώτη = πρόταση.indexOf ('*'); // αυτό για το βρόχο περνάει από κάθε γράμμα της συμβολοσειράς και στη συνέχεια καλεί τις σωστές μεθόδους για να το γράψετε για (int i = 0; i <πρόταση.length (); i ++) {if (πρόταση.charAt (πρώτο+i) == 'α') {Serial.print (".-"); τελεία(); παύλα(); χώρος(); } else if (πρόταση.charAt (πρώτο + i) == 'β') {Serial.print ("-…"); παύλα(); τελεία(); τελεία(); τελεία(); χώρος(); } else if (πρόταση.charAt (πρώτο + i) == 'c') {Serial.print ("-.-."); παύλα(); τελεία(); παύλα(); τελεία(); χώρος(); } else if (πρόταση.charAt (πρώτο + i) == 'd') {Serial.print ("-.."); παύλα(); τελεία(); τελεία(); χώρος(); } else if (πρόταση.charAt (πρώτο + i) == 'e') {Serial.print ("."); τελεία(); χώρος(); } else if (πρόταση.charAt (πρώτο + i) == 'f') {Serial.print ("..-."); τελεία(); τελεία(); παύλα(); τελεία(); χώρος(); } else if (πρόταση.charAt (πρώτο + i) == 'g') {Serial.print ("-."); παύλα(); παύλα(); τελεία(); χώρος(); } else if (πρόταση.charAt (πρώτο + i) == 'h') {Serial.print ("…."); τελεία(); τελεία(); τελεία(); τελεία(); χώρος(); } else if (πρόταση.charAt (πρώτο + i) == 'i') {Serial.print (".."); τελεία(); τελεία(); χώρος(); } else if (πρόταση.charAt (πρώτο + i) == 'j') {Serial.print (".---"); τελεία(); παύλα(); παύλα(); παύλα(); χώρος(); } else if (πρόταση.charAt (πρώτο + i) == 'k') {Serial.print ("-.-"); παύλα(); τελεία(); παύλα(); χώρος(); } else if (πρόταση.charAt (πρώτο + i) == 'l') {Serial.print (".-.."); τελεία(); παύλα(); τελεία(); τελεία(); χώρος(); } else if (πρόταση.charAt (πρώτο + i) == 'm') {Serial.print ("-"); παύλα(); παύλα(); χώρος(); } else if (πρόταση.charAt (πρώτο + i) == 'n') {Serial.print ("-."); παύλα(); τελεία(); χώρος(); } else if (πρόταση.charAt (πρώτο + i) == 'o') {Serial.print ("---"); παύλα(); παύλα(); παύλα(); χώρος(); } else if (πρόταση.charAt (πρώτο + i) == 'p') {Serial.print (".--."); τελεία(); παύλα(); παύλα(); τελεία(); χώρος(); } else if (πρόταση.charAt (πρώτο + i) == 'q') {Serial.print ("--.-"); παύλα(); παύλα(); τελεία(); παύλα(); χώρος(); } else if (πρόταση.charAt (πρώτο + i) == 'r') {Serial.print (".-."); τελεία(); παύλα(); τελεία(); χώρος(); } else if (πρόταση.charAt (πρώτο + i) == 's') {Serial.print ("…"); τελεία(); τελεία(); τελεία(); χώρος(); } else if (πρόταση.charAt (πρώτο + i) == 't') {Serial.print ("-"); παύλα(); χώρος(); } else if (πρόταση.charAt (πρώτο + i) == 'u') {Serial.print ("..-"); τελεία(); τελεία(); παύλα(); χώρος(); } else if (πρόταση.charAt (πρώτο + i) == 'v') {Serial.print ("…-"); τελεία(); τελεία(); τελεία(); παύλα(); χώρος(); } else if (πρόταση.charAt (πρώτο + i) == 'w') {Serial.print (".--"); τελεία(); παύλα(); παύλα(); χώρος(); } else if (πρόταση.charAt (πρώτο + i) == 'x') {Serial.print ("-..-"); παύλα(); τελεία(); τελεία(); παύλα(); χώρος(); } else if (πρόταση.charAt (πρώτο + i) == 'y') {Serial.print ("-.--"); παύλα(); τελεία(); παύλα(); παύλα(); χώρος(); } else if (πρόταση.charAt (πρώτο + i) == 'z') {Serial.print ("-.."); παύλα(); παύλα(); τελεία(); τελεία(); χώρος(); } else if (πρόταση.charAt (πρώτο + i) == '') {Serial.print ("/"); bigSpace (); }}} void loop () {// Μην γράφετε τίποτα εδώ}

Βήμα 7: Αντιμετώπιση προβλημάτων

Ο τροχός δεν κινείται

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

Ο τροχός τραβά το χαρτί αλλά στη συνέχεια περιστρέφεται χωρίς να τραβάει το χαρτί

Βεβαιωθείτε ότι έχετε κολλήσει τον τροχό στο κέντρο του βηματικού κινητήρα

Οι τελείες και οι παύλες συνδέονται

Ελέγξτε εάν οι λειτουργίες τελείας, παύλας και διαστήματος είναι γραμμένες σωστά, θα πρέπει να είναι ως εξής:

// Αυτή είναι η μέθοδος που κάνει το ρομπότ να γράψει μια τελεία dotvoid () {Serial.println ("dot start"); myServo.write (160); καθυστέρηση (1000)? myServo.write (90); καθυστέρηση (1000)? myStepper.step (stepsPerRevolution); καθυστέρηση (1000)? Serial.println ("τελείωσε η τελεία"); }

// Αυτή είναι η μέθοδος που κάνει το ρομπότ να γράψει μια παύλα

void dash () {Serial.println ("έναρξη παύλας"); myServo.write (160); καθυστέρηση (1000)? myStepper.step (stepsPerRevolution); καθυστέρηση (1000)? myServo.write (90); καθυστέρηση (1000)? myStepper.step (stepsPerRevolution); καθυστέρηση (1000)? Serial.println ("παύλα έγινε"); }

// Αυτή είναι η μέθοδος που κάνει το ρομπότ να αφήνει ένα διάστημα μεταξύ κάθε γράμματος

void space () {Serial.println ("έναρξη χώρου"); myServo.write (90); καθυστέρηση (1000)? myStepper.step (200); καθυστέρηση (1000)? Serial.println ("Ο χώρος έχει ολοκληρωθεί"); }

Συνιστάται: