Indholdsfortegnelse:

Arduino Morse Code Writer: 7 trin (med billeder)
Arduino Morse Code Writer: 7 trin (med billeder)

Video: Arduino Morse Code Writer: 7 trin (med billeder)

Video: Arduino Morse Code Writer: 7 trin (med billeder)
Video: What happened to America’s Telegraph lines? How the Telegraph Transformed America - IT'S HISTORY 2024, Juli
Anonim
Image
Image
Arduino Morse Code Writer
Arduino Morse Code Writer

Jeg lavede en robot, der kan konvertere enhver given tekst til Morse -kode og derefter skrive den ned !! Det er lavet af pap og Lego, og til elektronikken brugte jeg Arduino og kun to motorer.

Forbrugsvarer

Arduino Uno board Steppermotor Mikro servo SG90ULN2003 stepper motor driver modul Strømforsyningsmodul Breadboard4 × Jumperwires6 × Female-to-Male dupont wires9V1A AdapterUSB cable Cardboard 2 × Wooden dowels 2 × Springs Straw White paper LegoSuper lim Hot lim gun Elastic band (to make a penneholder) Saksekutter

Trin 1: Opbygning af basen

Bygger basen
Bygger basen
Bygger basen
Bygger basen
Bygger basen
Bygger basen

Start med at bygge basen. Min er 4 studs bred og 20 studs lang, efter at have bygget et lag med disse længder, byggede jeg en one stud wide boarder omkring den, hvilket efterlod et hul på den ene side for at efterlade plads til steppermotoren, så tilføjede jeg flisestykker til den midterste del, hvor papirstrimlen vil være. Brug af Lego gjorde det meget robust og let at ændre. For at lave papirrullen skar jeg strimler af A4 -papir 1,2 cm bredt (jeg valgte denne bredde, fordi det er den samme bredde som Lego -hjulet, jeg brugte, du kan gøre din større eller mindre afhængigt af dit hjul) og jeg limede deres ender sammen for at danne en meget lang strimmel, så viklede jeg den om hjulet.

Trin 2: Servostykket

Servostykket
Servostykket
Servostykket
Servostykket
Servostykket
Servostykket

Til dette trin har du brug for:

  • to træpinde 4 cm lange
  • to fjedre 2 cm lange
  • et halm skåret i to stykker 2 cm lange hver
  • et stykke pap på 12 cm x 4 cm
  • to 4 x 1,5 cm stykker pap
  • et stykke 4 x 2 cm pap

Lim først dyvlerne til en af de 4 x 1,5 stykker, indsæt derefter fjedrene og sugerørene i dyvlerne, lim derefter det andet papstykke på den anden side for at holde alt på plads.

For det andet limes det 4 cm x 2 cm stykke oven på sugerørene.

For det tredje vender du hele stykket om og limer en lille dyvel på bagsiden af det, ikke i midten men lidt til venstre. (Jeg glemte at tilføje den lille dyvel på det første billede)

Skær til sidst et hul i det store stykke karton på størrelse med servomotorens forside og lim motoren ind, lim derefter det stykke, vi lige lavede med dyvlerne til det store stykke, så når servoen bevæger sig, skubber den lille dyvel ned som igen også skubber fjedrene ned.

Jeg endte med at skære cirka 3 cm fra den nederste del af det 12 cm x 4 cm stykke og limede yderligere to stykker på 4 cm på 1,5 cm til det, og dækkede det derefter med et 5,5 cm x 4 cm stykke karton. Og for at holde markøren lavede jeg en lille loop af elastikbånd og limede det til et lille stykke pap, så limede jeg det til det 4 cm x 2 cm stykke, som vil bevæge sig ned, når servoen starter. Disse tilføjelser forhindrede markøren i at bevæge sig fra side til side, når fjedrene kom op igen.

Trin 3: Tilføjelse af servomotor og papirrulle til basen

Tilføjelse af servomotor og papirrulle til basen
Tilføjelse af servomotor og papirrulle til basen
Tilføjelse af servomotor og papirrulle til basen
Tilføjelse af servomotor og papirrulle til basen

Jeg tilføjede yderligere to mursten til den ene side af basen for at understøtte servostykket, og jeg limede det på plads, og derefter tilføjede jeg hjulet til den yderste ende af basen.

Trin 4: Bygning af trinmotorrammen

Bygning af trinmotorrammen
Bygning af trinmotorrammen
Bygning af trinmotorrammen
Bygning af trinmotorrammen
Bygning af trinmotorrammen
Bygning af trinmotorrammen

Dette trin var lidt af en udfordring, fordi motoren ikke var designet til at passe perfekt til Lego. Jeg nåede dog at gøre det ved at bruge de to huller i motoren til at fastgøre det på plads. Derefter limede jeg et Lego -hjul til spidsen af motoren, og derefter lagde jeg det lige ved siden af basen på den side, som jeg lod stå åben i trin 1.

Trin 5: Efterbehandling

Efterbehandling
Efterbehandling
Efterbehandling
Efterbehandling
Efterbehandling
Efterbehandling
Efterbehandling
Efterbehandling

Jeg tilføjede to buestykker til at dække hjulet for at fastgøre papiret på plads. Og jeg tilføjede to mindre buestykker, en til at holde trinene i trinmotoren og en til at holde papiret. Endelig skiftede jeg trinmotorhjulet til et lidt større, der flyttede papiret bedre end det gamle hjul.

Trin 6: Elektronik

Elektronik
Elektronik
Elektronik
Elektronik

Endelig skal du slutte motorerne til Arduino og uploade koden.

Vi starter med servomotoren, slutter den brune ledning (jordledningen) til GND -stiften, derefter den røde ledning (strømkablet) til 5V -stiften og den orange ledning (signalkablet) til Dig #5 pin. Derefter tilsluttes trinmotoren 1N1 til Dig #11, 1N2 til Dig #10, 1N3 til Dig #9, 1N4 til Dig #8, 5V til den positive side af brødbrættet og jordstiften til den negative side af brødbræt. Og glem ikke at tilslutte strømforsyningsmodulet til brødbrættet, og sørg for, at dets positive og negative sider flugter korrekt med de tilsvarende sider på brødbrættet. Hvis du glemmer at gøre det, vil du vende strømmen til dit projekt, og du vil ikke gøre det.

Til koden skrev jeg fire metoder, en til at skrive en prik, en til at skrive et bindestreg og to til at efterlade mellemrum mellem hvert bogstav og hvert ord. På den måde kan jeg bare kalde disse metoder, når jeg har brug for dem i stedet for at skrive det igen for hvert bogstav. Derefter skrev jeg en for loop, der går gennem hvert bogstav i teksten og skriver den, inde i den skrev jeg en if -sætning for hvert bogstav, men du kan skrive den i en switch -sætning, hvis du foretrækker det. Selvfølgelig kan du tilføje til koden, så programmet kan læse numre. Når alle ledninger er klar, skal du bare kopiere og indsætte koden i din IDE. Glem ikke at installere stepper-, servo- og strengbibliotekerne. Derefter er du klar til at gå.

Hvordan det virker

Når Arduino starter, ser programmet på tekstens første bogstav., Og afhængigt af hvilken det er, kalder det de funktioner, der skriver det i morsekode. For eksempel, når punktfunktionen kaldes, er servomotoren indstillet til 160, som flytter pennen ned, derefter sættes den tilbage til 90, hvilket lader fjedrene komme tilbage og flytte pennen med dem. Og hvis stregfunktionen kaldes, flytter servoen pennen nedad, så roterer trinmotoren hjulet, der trækker papiret, hvilket får pennen til at skrive et bindestreg. Og hvis en af rumfunktionerne kaldes trinmotoren roterer, men med pennen opad, så det trækker papiret og danner et mellemrum mellem bogstaverne eller ordene. Når det er gjort, går det til det næste bogstav og gentager den samme proces. Jeg håber du kan lide det;)

Koden

#omfatte

#include #include #include const int stepsPerRevolution = 150; // Dette er variablen for stepper motor String sætning = "*hej"; // Skift denne variabel til at skrive forskellige ord, men skriv kun med små bogstaver, og start dit ord med "*" Stepper myStepper (stepsPerRevolution, 8, 10, 9, 11); Servo myServo; // Dette er den metode, der får robotten til at skrive en prik tomrum prik () {Serial.println ("prik start"); myServo.write (160); forsinkelse (1000); myServo.write (90); forsinkelse (1000); myStepper.step (stepsPerRevolution); forsinkelse (1000); Serial.println ("prik udført"); } // Dette er den metode, der får robotten til at skrive et bindestreg tomrumsstreg () {Serial.println ("bindestreg"); myServo.write (160); forsinkelse (1000); myStepper.step (stepsPerRevolution); forsinkelse (1000); myServo.write (90); forsinkelse (1000); myStepper.step (stepsPerRevolution); forsinkelse (1000); Serial.println ("bindestreg udført"); } // Dette er den metode, der får robotten til at efterlade et mellemrum mellem hvert bogstav tomrum () {Serial.println ("space start"); myServo.write (90); forsinkelse (1000); myStepper.step (200); forsinkelse (1000); Serial.println ("plads udført"); } // Dette er den metode, der får robotten til at efterlade et større mellemrum mellem hvert ord tomrum bigSpace () {myServo.write (90); myStepper.step (250); forsinkelse (1000); } ugyldig opsætning () {// sæt din opsætningskode her for at køre en gang: Serial.begin (9600); myStepper.setSpeed (100); myServo.attach (5); int først = sætning.indexOf ('*'); // dette for loop går gennem hvert bogstav i strengen og kalder derefter de rigtige metoder til at skrive det ned for (int i = 0; i <sætning.længde (); i ++) {hvis (sætning.charAt (første+i) == 'a') {Serial.print (".-"); prik (); bindestreg (); plads(); } ellers hvis (sætning.charAt (første + i) == 'b') {Serial.print ("-…"); bindestreg (); prik (); prik (); prik (); plads(); } ellers hvis (sætning.charAt (første + i) == 'c') {Serial.print ("-.-."); bindestreg (); prik (); bindestreg (); prik (); plads(); } ellers hvis (sætning.charAt (første + i) == 'd') {Serial.print ("-.."); bindestreg (); prik (); prik (); plads(); } ellers hvis (sætning.charAt (første + i) == 'e') {Serial.print ("."); prik (); plads(); } ellers hvis (sætning.charAt (første + i) == 'f') {Serial.print ("..-."); prik (); prik (); bindestreg (); prik (); plads(); } ellers hvis (sætning.charAt (første + i) == 'g') {Serial.print ("-."); bindestreg (); bindestreg (); prik (); plads(); } ellers hvis (sætning.charAt (første + i) == 'h') {Serial.print ("…."); prik (); prik (); prik (); prik (); plads(); } ellers hvis (sætning.charAt (første + i) == 'i') {Serial.print (".."); prik (); prik (); plads(); } ellers hvis (sætning.charAt (første + i) == 'j') {Serial.print (".---"); prik (); bindestreg (); bindestreg (); bindestreg (); plads(); } ellers hvis (sætning.charAt (første + i) == 'k') {Serial.print ("-.-"); bindestreg (); prik (); bindestreg (); plads(); } ellers hvis (sætning.charAt (første + i) == 'l') {Serial.print (".-.."); prik (); bindestreg (); prik (); prik (); plads(); } ellers hvis (sætning.charAt (første + i) == 'm') {Serial.print ("-"); bindestreg (); bindestreg (); plads(); } ellers hvis (sætning.charAt (første + i) == 'n') {Serial.print ("-."); bindestreg (); prik (); plads(); } ellers hvis (sætning.charAt (første + i) == 'o') {Serial.print ("---"); bindestreg (); bindestreg (); bindestreg (); plads(); } ellers hvis (sætning.charAt (første + i) == 'p') {Serial.print (".--."); prik (); bindestreg (); bindestreg (); prik (); plads(); } ellers hvis (sætning.charAt (første + i) == 'q') {Serial.print ("--.-"); bindestreg (); bindestreg (); prik (); bindestreg (); plads(); } ellers hvis (sætning.charAt (første + i) == 'r') {Serial.print (".-."); prik (); bindestreg (); prik (); plads(); } ellers hvis (sætning.charAt (første + i) == 's') {Serial.print ("…"); prik (); prik (); prik (); plads(); } ellers hvis (sætning.charAt (første + i) == 't') {Serial.print ("-"); bindestreg (); plads(); } ellers hvis (sætning.charAt (første + i) == 'u') {Serial.print ("..-"); prik (); prik (); bindestreg (); plads(); } ellers hvis (sætning.charAt (første + i) == 'v') {Serial.print ("…-"); prik (); prik (); prik (); bindestreg (); plads(); } ellers hvis (sætning.charAt (første + i) == 'w') {Serial.print (".--"); prik (); bindestreg (); bindestreg (); plads(); } ellers hvis (sætning.charAt (første + i) == 'x') {Serial.print ("-..-"); bindestreg (); prik (); prik (); bindestreg (); plads(); } ellers hvis (sætning.charAt (første + i) == 'y') {Serial.print ("-.--"); bindestreg (); prik (); bindestreg (); bindestreg (); plads(); } ellers hvis (sætning.charAt (første + i) == 'z') {Serial.print ("-.."); bindestreg (); bindestreg (); prik (); prik (); plads(); } ellers hvis (sætning.charAt (første + i) == '') {Serial.print ("/"); bigSpace (); }}} void loop () {// Skriv ikke noget her}

Trin 7: Fejlfinding

Hjulet bevæger sig ikke

Der kan være for stor friktion mellem hjulet og papiret. Prøv at løfte hjulet lidt eller ændre det.

Hjulet trækker i papiret, men så bliver det ved med at rotere uden at trække i papiret

Sørg for, at du har limet hjulet i midten af trinmotoren

Prikkerne og stregerne er forbundet

Kontroller, om prik-, bindestreg- og mellemrumsfunktionerne er skrevet korrekt, de skal være sådan:

// Dette er den metode, der får robotten til at skrive en dotvoid dot () {Serial.println ("dot start"); myServo.write (160); forsinkelse (1000); myServo.write (90); forsinkelse (1000); myStepper.step (stepsPerRevolution); forsinkelse (1000); Serial.println ("prik udført"); }

// Dette er den metode, der får robotten til at skrive et bindestreg

void dash () {Serial.println ("dash start"); myServo.write (160); forsinkelse (1000); myStepper.step (stepsPerRevolution); forsinkelse (1000); myServo.write (90); forsinkelse (1000); myStepper.step (stepsPerRevolution); forsinkelse (1000); Serial.println ("bindestreg udført"); }

// Dette er den metode, der får robotten til at efterlade et mellemrum mellem hvert bogstav

void space () {Serial.println ("space start"); myServo.write (90); forsinkelse (1000); myStepper.step (200); forsinkelse (1000); Serial.println ("plads udført"); }

Anbefalede: