Innehållsförteckning:

Arduino Morse Code Writer: 7 steg (med bilder)
Arduino Morse Code Writer: 7 steg (med bilder)

Video: Arduino Morse Code Writer: 7 steg (med bilder)

Video: Arduino Morse Code Writer: 7 steg (med bilder)
Video: DIY Radar With Ultrasonic Sensor And Chat-GPT Generated Arduino Code | Coders Cafe 2024, Juli
Anonim
Image
Image
Arduino Morse Code Writer
Arduino Morse Code Writer

Jag gjorde en robot som kan konvertera vilken text som helst till Morse -kod och sedan skriva ner den !! Den är gjord av kartong och Lego och för elektroniken använde jag Arduino och bara två motorer.

Tillbehör

Arduino Uno board Stegmotor Mikro servo SG90ULN2003 stegmotor förarmodul Strömförsörjningsmodul Brödbräda4 × Bygeltrådar6 × Kvinna-till-han-duponttrådar9V1A Adapter USB-kabel Kartong 2 × Trädynor 2 × Fjädrar Halmvitt papper LegoSuperlim Hot limpistol Elastiskt band (för att göra en pennhållare) Saxax

Steg 1: Bygga basen

Bygga basen
Bygga basen
Bygga basen
Bygga basen
Bygga basen
Bygga basen

Börja med att bygga basen. Min är 4 dubbar breda och 20 dubbar långa, efter att ha byggt ett lager med de längderna byggde jag en en stud bred boarder runt den och lämnade ett gap på ena sidan för att lämna utrymme för stegmotorn, sedan lade jag till kakel bitar till den mellersta delen där pappersremsan kommer att vara. Att använda Lego gjorde det mycket robust och lätt att ändra. För att göra pappersrullen klippte jag remsor av A4 -papper 1,2 cm brett (jag valde denna bredd eftersom det är samma bredd som Lego -hjulet jag använde, du kan göra ditt större eller mindre beroende på ditt hjul) och jag limmade ihop deras ändar för att bilda en mycket lång remsa, sedan lindade jag den runt hjulet.

Steg 2: Servobiten

Servobiten
Servobiten
Servobiten
Servobiten
Servobiten
Servobiten

För detta steg behöver du:

  • två träpinnar 4 cm långa
  • två fjädrar 2 cm långa
  • ett sugrör skuren till två bitar 2 cm långa vardera
  • en kartongbit på 12 cm x 4 cm
  • två pappersbitar på 4 x 1,5 cm
  • en pappersbit på 4 x 2 cm

Limma först pluggarna till en av de 4 gånger 1,5 bitarna, sätt sedan in fjädrarna och sugrörena i pluggarna, lim sedan den andra pappbiten på andra sidan för att hålla allt på plats.

För det andra, limma 4 cm med 2 cm bit ovanpå sugrören.

För det tredje, vänd hela stycket och lim en liten plugg på baksidan av den, inte i mitten utan något till vänster. (Jag glömde lägga till den lilla pluggen på den första bilden)

Skär slutligen ett hål i den stora pappbiten i storleken på servomotorns framsida och lim in motorn, lim sedan in biten som vi just gjort med pluggarna på den stora biten så att när servon rör sig trycker den på liten plugg ner som i sin tur trycker fjädrarna ner också.

Jag slutade med att klippa ca 3 cm från den nedre delen av 12 cm med 4 cm bit och limma två ytterligare 4 cm med 1,5 cm bitar till den och sedan täcka den med en 5,5 cm x 4 cm kartong. Och för att hålla markören gjorde jag en liten bit slinga av elastiskt band och limmade den på en liten kartongbit sedan limmade jag fast den på 4 cm med 2 cm bit som rör sig neråt när servon startar. Dessa tillägg hindrade markören från att röra sig från sida till sida när fjädrarna kommer upp igen.

Steg 3: Lägg i servomotorn och pappersrullen i basen

Lägga till servomotorn och pappersrullen i basen
Lägga till servomotorn och pappersrullen i basen
Lägga till servomotorn och pappersrullen i basen
Lägga till servomotorn och pappersrullen i basen

Jag lade till ytterligare två tegelstenar på ena sidan av basen för att stödja servobiten och jag limmade fast den. Sedan lade jag till hjulet i basens yttersta ände.

Steg 4: Bygga stegmotorramen

Bygga stegmotorramen
Bygga stegmotorramen
Bygga stegmotorramen
Bygga stegmotorramen
Bygga stegmotorramen
Bygga stegmotorramen

Det här steget var lite av en utmaning, eftersom motorn inte var perfekt anpassad till Lego. Jag lyckades dock göra det genom att använda de två hålen i motorn för att fästa den på plats. Därefter limmade jag ett Lego -hjul på spetsen av motorn och sedan lade jag det bredvid basen på sidan som jag lämnade öppen i steg 1.

Steg 5: Finisher

Finputsning
Finputsning
Finputsning
Finputsning
Finputsning
Finputsning
Finputsning
Finputsning

Jag lade till två bågstycken för att täcka hjulet för att fixera papperet på plats. Och jag lade till två mindre bågstycken, en för att hålla trådarna i stegmotorn och en annan för att hålla papperet. Slutligen bytte jag stegmotorhjulet till ett något större som flyttade papperet bättre än det gamla hjulet.

Steg 6: Elektronik

Elektronik
Elektronik
Elektronik
Elektronik

Slutligen måste du ansluta motorerna till Arduino och ladda upp koden.

Vi börjar med servomotorn, ansluter den bruna tråden (jordledningen) till GND -stiftet, sedan den röda tråden (strömkabeln) till 5V -stiftet och den orangea ledningen (signalkabeln) till Dig #5 stift. Stegmotorn, anslut sedan 1N1 till grävning #11, 1N2 till grävning #10, 1N3 till grävning #9, 1N4 till grävning #8, 5V till den positiva sidan av brödbrädet och marknålen till den negativa sidan av bakbord. Och glöm inte att ansluta strömförsörjningsmodulen till brödbrädan och se till att dess positiva och negativa sidor är korrekt anpassade till motsvarande sidor på brödbrädet. Om du glömmer att göra det, kommer du att vända kraften till ditt projekt, och du vill inte göra det.

För koden skrev jag fyra metoder, en för att skriva en punkt, en för att skriva en bindestreck och två för att lämna utrymme mellan varje bokstav och varje ord. På det sättet kan jag bara kalla dessa metoder när jag behöver dem istället för att skriva det igen för varje bokstav. Sedan skrev jag en for loop som går igenom varje bokstav i texten och skriver den, inuti den skrev jag en if -sats för varje bokstav, men du kan skriva den i en switch -sats om du föredrar det. Naturligtvis kan du lägga till koden så att programmet kan läsa nummer. När alla kablar är klara, bara kopiera och klistra in koden till din IDE. Glöm inte att installera steg-, servo- och strängbiblioteken. Efter det är du bra att gå.

Hur det fungerar

När Arduino startar tittar programmet på den första bokstaven i texten., Och beroende på vilken det är, kallar det de funktioner som skriver det i morsekod. Till exempel, när prickfunktionen anropas, är servomotorn inställd på 160 som flyttar pennan nedåt, sedan ställs den tillbaka till 90 vilket låter fjädrarna komma tillbaka och flytta pennan med dem. Och om dash -funktionen kallas, flyttar servon pennan nedåt, då roterar stegmotorn hjulet som drar i papperet och får pennan att skriva ett streck. Och om en av rymdfunktionerna kallas stegmotorn roterar men med pennan uppåt så drar det i papperet och gör ett mellanrum mellan bokstäverna eller orden. När det är klart går det till nästa bokstav och upprepar samma process. Jag hoppas du tycker om det;)

Koden

#omfatta

#include #include #include const int stepsPerRevolution = 150; // Detta är variabeln för stegmotorn Strängmening = "*hej"; // Ändra denna variabel för att skriva olika ord, men skriv bara med små bokstäver och börja ditt ord med "*" Stepper myStepper (stepsPerRevolution, 8, 10, 9, 11); Servo myServo; // Detta är metoden som får roboten att skriva en punkt tomrum () {Serial.println ("punkt start"); myServo.write (160); fördröjning (1000); myServo.write (90); fördröjning (1000); myStepper.step (stepsPerRevolution); fördröjning (1000); Serial.println ("prick klar"); } // Detta är metoden som får roboten att skriva ett bindestreck () {Serial.println ("bindestart"); myServo.write (160); fördröjning (1000); myStepper.step (stepsPerRevolution); fördröjning (1000); myServo.write (90); fördröjning (1000); myStepper.step (stepsPerRevolution); fördröjning (1000); Serial.println ("streck gjort"); } // Detta är metoden som gör att roboten lämnar ett mellanrum mellan varje bokstavsrum () {Serial.println ("space start"); myServo.write (90); fördröjning (1000); myStepper.step (200); fördröjning (1000); Serial.println ("utrymme gjort"); } // Detta är metoden som gör att roboten lämnar ett större utrymme mellan varje ord void bigSpace () {myServo.write (90); myStepper.step (250); fördröjning (1000); } void setup () {// lägg din installationskod här för att köra en gång: Serial.begin (9600); myStepper.setSpeed (100); myServo.attach (5); int först = mening.indexOf ('*'); // detta för loop går igenom varje bokstav i strängen och kallar sedan de rätta metoderna för att skriva ner det för (int i = 0; i <phrase.length (); i ++) {if (sats.charAt (första+i) == 'a') {Serial.print (".-"); punkt(); rusa(); Plats(); } annars if (phrase.charAt (första + i) == 'b') {Serial.print ("-…"); rusa(); punkt(); punkt(); punkt(); Plats(); } annars if (phrase.charAt (första + i) == 'c') {Serial.print ("-.-."); rusa(); punkt(); rusa(); punkt(); Plats(); } annars if (phrase.charAt (första + i) == 'd') {Serial.print ("-.."); rusa(); punkt(); punkt(); Plats(); } annars if (phrase.charAt (första + i) == 'e') {Serial.print ("."); punkt(); Plats(); } annars if (phrase.charAt (första + i) == 'f') {Serial.print ("..-."); punkt(); punkt(); rusa(); punkt(); Plats(); } annars if (phrase.charAt (första + i) == 'g') {Serial.print ("-."); rusa(); rusa(); punkt(); Plats(); } annars if (phrase.charAt (första + i) == 'h') {Serial.print ("…"); punkt(); punkt(); punkt(); punkt(); Plats(); } annars if (phrase.charAt (första + i) == 'i') {Serial.print (".."); punkt(); punkt(); Plats(); } annars if (phrase.charAt (första + i) == 'j') {Serial.print (".---"); punkt(); rusa(); rusa(); rusa(); Plats(); } annars if (phrase.charAt (första + i) == 'k') {Serial.print ("-.-"); rusa(); punkt(); rusa(); Plats(); } annars if (phrase.charAt (första + i) == 'l') {Serial.print (".-.."); punkt(); rusa(); punkt(); punkt(); Plats(); } annars if (phrase.charAt (första + i) == 'm') {Serial.print ("-"); rusa(); rusa(); Plats(); } annars if (phrase.charAt (första + i) == 'n') {Serial.print ("-."); rusa(); punkt(); Plats(); } annars if (phrase.charAt (första + i) == 'o') {Serial.print ("---"); rusa(); rusa(); rusa(); Plats(); } annars if (phrase.charAt (första + i) == 'p') {Serial.print (".--."); punkt(); rusa(); rusa(); punkt(); Plats(); } annars if (phrase.charAt (första + i) == 'q') {Serial.print ("--.-"); rusa(); rusa(); punkt(); rusa(); Plats(); } annars if (phrase.charAt (första + i) == 'r') {Serial.print (".-."); punkt(); rusa(); punkt(); Plats(); } annars if (phrase.charAt (första + i) == 's') {Serial.print ("…"); punkt(); punkt(); punkt(); Plats(); } annars if (phrase.charAt (första + i) == 't') {Serial.print ("-"); rusa(); Plats(); } annars if (phrase.charAt (första + i) == 'u') {Serial.print ("..-"); punkt(); punkt(); rusa(); Plats(); } annars if (phrase.charAt (första + i) == 'v') {Serial.print ("…-"); punkt(); punkt(); punkt(); rusa(); Plats(); } annars if (phrase.charAt (första + i) == 'w') {Serial.print (".--"); punkt(); rusa(); rusa(); Plats(); } annars if (phrase.charAt (första + i) == 'x') {Serial.print ("-..-"); rusa(); punkt(); punkt(); rusa(); Plats(); } annars if (phrase.charAt (första + i) == 'y') {Serial.print ("-.--"); rusa(); punkt(); rusa(); rusa(); Plats(); } annars if (phrase.charAt (första + i) == 'z') {Serial.print ("-.."); rusa(); rusa(); punkt(); punkt(); Plats(); } annars if (phrase.charAt (första + i) == '') {Serial.print ("/"); bigSpace (); }}} void loop () {// Skriv inte något här}

Steg 7: Felsökning

Hjulet rör sig inte

Det kan vara för mycket friktion mellan hjulet och papperet, försök höja hjulet lite eller byt det.

Hjulet drar i papperet men sedan fortsätter det att rotera utan att dra i papperet

Se till att du har limmat hjulet i mitten av stegmotorn

Prickarna och streckarna är anslutna

Kontrollera om funktionerna prick, streck och mellanslag är korrekt skrivna, de ska vara så här:

// Detta är metoden som får roboten att skriva en dotvoid dot () {Serial.println ("dot start"); myServo.write (160); fördröjning (1000); myServo.write (90); fördröjning (1000); myStepper.step (stepsPerRevolution); fördröjning (1000); Serial.println ("prick klar"); }

// Detta är metoden som får roboten att skriva ett streck

void dash () {Serial.println ("dash start"); myServo.write (160); fördröjning (1000); myStepper.step (stepsPerRevolution); fördröjning (1000); myServo.write (90); fördröjning (1000); myStepper.step (stepsPerRevolution); fördröjning (1000); Serial.println ("streck gjort"); }

// Detta är metoden som gör att roboten lämnar ett mellanrum mellan varje bokstav

void space () {Serial.println ("space start"); myServo.write (90); fördröjning (1000); myStepper.step (200); fördröjning (1000); Serial.println ("utrymme gjort"); }

Rekommenderad: