Innholdsfortegnelse:

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

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

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

Jeg laget en robot som kan konvertere en gitt tekst til Morse -kode og deretter skrive den ned !! Den er laget av papp og Lego, og for elektronikken brukte jeg Arduino og bare to motorer.

Rekvisita

Arduino Uno board Trinnmotor Mikro servo SG90ULN2003 trinnmotor drivermodul Strømforsyningsmodul Brødbrett4 × Jumper-ledninger6 × Kvinne-til-mann-duponttråder9V1A AdapterUSB-kabel Kartong 2 × Trestapper 2 × Fjær Halm HvitpapirLegoSuperlim Varmlimpistol Elastisk bånd (for å lage en pennholder) Saksekutter

Trinn 1: Bygg basen

Å bygge basen
Å bygge basen
Å bygge basen
Å bygge basen
Å bygge basen
Å bygge basen

Start med å bygge basen. Min er 4 pigger bred og 20 pigger lang, etter å ha bygd et lag med de lengdene, bygde jeg en en stud bred kantlinje rundt den og etterlot et hull på den ene siden for å la plass til trinnmotoren, så la jeg til flisestykker til den midterste delen der papirstrimmelen skal være. Å bruke Lego gjorde det veldig solid og enkelt å endre. For å lage papirrullen kuttet jeg strimler av A4 -papir 1,2 cm bredt (jeg valgte denne bredden fordi den er samme bredde som Lego -hjulet jeg brukte, du kan gjøre din større eller mindre avhengig av hjulet ditt) og jeg limte endene sammen for å danne en veldig lang stripe, så viklet jeg den rundt hjulet.

Trinn 2: Servostykket

Servostykket
Servostykket
Servostykket
Servostykket
Servostykket
Servostykket

For dette trinnet trenger du:

  • to treskiver 4 cm lange
  • to fjærer 2 cm lange
  • ett halm skåret til to stykker 2 cm lange hver
  • ett stykke papp på 12 x 4 cm
  • to pappstykker på 4 x 1,5 cm
  • ett stykke 4 x 2 cm papp

Lim først pluggene til en av de 4 x 1,5 bitene, sett deretter inn fjærene og sugerørene i pluggene, lim deretter den andre pappstykket på den andre siden for å holde alt på plass.

For det andre limer du 4 cm x 2 cm på toppen av sugerørene.

For det tredje, snu hele stykket og lim en liten plugg på baksiden av den, ikke i midten, men litt til venstre. (Jeg glemte å legge til den lille pluggen på det første bildet)

Til slutt skjærer du et hull i det store pappstykket på størrelse med fronten på servomotoren og limer motoren inn, og limer stykket vi nettopp laget med dyvlene til det store stykket, slik at når servoen beveger seg, skyver den liten plugg ned som igjen presser fjærene ned også.

Jeg endte opp med å kutte omtrent 3 cm fra den nederste delen av det 12 cm x 4 cm stykket og limte ytterligere 4 cm x 1,5 cm stykker til det, og dekket det med et papp på 5,5 x 4 cm. Og for å holde markøren laget jeg en liten sløyfe med elastisk bånd og limte det til et lite stykke papp, så limte jeg det til 4 x 2 cm stykket som vil bevege seg nedover når servoen starter. Disse tilleggene stoppet markøren fra å bevege seg fra side til side når fjærene kommer opp igjen.

Trinn 3: Legg servomotoren og papirrullen til basen

Legge til servomotoren og papirrullen i basen
Legge til servomotoren og papirrullen i basen
Legge til servomotoren og papirrullen i basen
Legge til servomotoren og papirrullen i basen

Jeg la til ytterligere to murstein på den ene siden av basen for å støtte servostykket, og jeg limte det på plass. Så la jeg til hjulet i den andre enden av basen.

Trinn 4: Bygg trinnmotorrammen

Bygging av trinnmotorrammen
Bygging av trinnmotorrammen
Bygging av trinnmotorrammen
Bygging av trinnmotorrammen
Bygging av trinnmotorrammen
Bygging av trinnmotorrammen

Dette trinnet var litt av en utfordring, fordi motoren ikke var laget for å passe perfekt til Lego. Imidlertid klarte jeg å gjøre det ved å bruke de to hullene i motoren for å feste den på plass. Deretter limte jeg et Lego -hjul til spissen av motoren, og deretter la jeg det rett ved siden av basen på siden som jeg lot stå åpen i trinn 1.

Trinn 5: Etterbehandling

Finpuss
Finpuss
Finpuss
Finpuss
Finpuss
Finpuss
Finpuss
Finpuss

Jeg la til to buestykker for å dekke hjulet for å fikse papiret på plass. Og jeg la til to mindre buestykker, en for å holde ledningene til trinnmotoren og en for å holde papiret. Til slutt endret jeg trinnmotorhjulet til et litt større som flyttet papiret bedre enn det gamle hjulet.

Trinn 6: Elektronikk

Elektronikk
Elektronikk
Elektronikk
Elektronikk

Til slutt må du koble motorene til Arduino og laste opp koden.

Vi starter med servomotoren, kobler den brune ledningen (jordledningen) til GND -pinnen, deretter den røde ledningen (strømledningen) til 5V -pinnen og den oransje ledningen (signalkabelen) til Dig #5 pin. Deretter kobler trinnmotoren 1N1 til Dig #11, 1N2 til Dig #10, 1N3 til Dig #9, 1N4 til Dig #8, 5V til den positive siden av brødbrettet og bakkenålen til den negative siden av brødbrett. Og ikke glem å koble strømforsyningsmodulen til brødbrettet, og sørg for at dens positive og negative sider er riktig justert til de tilsvarende sidene på brødbrettet. Hvis du glemmer å gjøre det, vil du snu strømmen til prosjektet ditt, og du vil ikke gjøre det.

For koden skrev jeg fire metoder, en for å skrive en prikk, en for å skrive en bindestrek, og to for å la det være mellomrom mellom hver bokstav og hvert ord. På den måten kan jeg bare kalle disse metodene når jeg trenger dem i stedet for å skrive det igjen for hver bokstav. Deretter skrev jeg en for loop som går gjennom hver bokstav i teksten og skriver den, inni den skrev jeg en if -setning for hver bokstav, men du kan skrive den i en switch -setning hvis du foretrekker det. Selvfølgelig kan du legge til koden slik at programmet kan lese tall. Når alle ledningene er klare, bare kopier og lim inn koden til IDE -en din. Ikke glem å installere stepper-, servo- og strengbibliotekene. Etter det er du i gang.

Hvordan det fungerer

Når Arduino starter, ser programmet på den første bokstaven i teksten., Og avhengig av hvilken den er, kaller den funksjonene som skriver den i morsekode. For eksempel når prikkfunksjonen kalles, er servomotoren satt til 160 som flytter pennen ned, deretter settes den tilbake til 90 som lar fjærene komme opp igjen og bevege pennen med dem. Og hvis dash -funksjonen kalles, flytter servoen pennen ned, så roterer trinnmotoren hjulet som trekker papiret og får pennen til å skrive en strek. Og hvis en av mellomfunksjonene kalles trinnmotoren roterer, men med pennen opp, slik at den trekker papiret og lager et mellomrom mellom bokstavene eller ordene. Når det er gjort, går det til neste bokstav og gjentar den samme prosessen. Jeg håper du liker det;)

Koden

#inkludere

#include #include #include const int stepsPerRevolution = 150; // Dette er variabelen for stepper motor String setning = "*hei"; // Endre denne variabelen for å skrive forskjellige ord, men bare skriv med små bokstaver og start ordet ditt med "*" Stepper myStepper (stepsPerRevolution, 8, 10, 9, 11); Servo myServo; // Dette er metoden som får roboten til å skrive en prikk tomrom prikk () {Serial.println ("prikk start"); myServo.write (160); forsinkelse (1000); myServo.write (90); forsinkelse (1000); myStepper.step (stepsPerRevolution); forsinkelse (1000); Serial.println ("prikk ferdig"); } // Dette er metoden som får roboten til å skrive et bindestrek -tomrom () {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 ("dash done"); } // Dette er metoden som gjør at roboten etterlater et mellomrom mellom hver bokstav tomrom () {Serial.println ("mellomromstart"); myServo.write (90); forsinkelse (1000); myStepper.step (200); forsinkelse (1000); Serial.println ("plass gjort"); } // Dette er metoden som gjør at roboten etterlater et større mellomrom mellom hvert ord void bigSpace () {myServo.write (90); myStepper.step (250); forsinkelse (1000); } ugyldig oppsett () {// legg oppsettskoden her for å kjøre en gang: Serial.begin (9600); myStepper.setSpeed (100); myServo.attach (5); int først = setning.indexOf ('*'); // denne for løkken går gjennom hver bokstav i strengen og kaller deretter de riktige metodene for å skrive den ned for (int i = 0; i <setning.lengde (); i ++) {if (setning.charAt (første+i) == 'a') {Serial.print (".-"); punktum(); bindestrek(); rom(); } annet hvis (setning.charAt (første + i) == 'b') {Serial.print ("-…"); bindestrek(); punktum(); punktum(); punktum(); rom(); } annet hvis (setning.charAt (første + i) == 'c') {Serial.print ("-.-."); bindestrek(); punktum(); bindestrek(); punktum(); rom(); } annet hvis (setning.charAt (første + i) == 'd') {Serial.print ("-.."); bindestrek(); punktum(); punktum(); rom(); } annet hvis (setning.charAt (første + i) == 'e') {Serial.print ("."); punktum(); rom(); } annet hvis (setning.charAt (første + i) == 'f') {Serial.print ("..-."); punktum(); punktum(); bindestrek(); punktum(); rom(); } annet hvis (setning.charAt (første + i) == 'g') {Serial.print ("-."); bindestrek(); bindestrek(); punktum(); rom(); } annet hvis (setning.charAt (første + i) == 'h') {Serial.print ("…"); punktum(); punktum(); punktum(); punktum(); rom(); } annet hvis (setning.charAt (første + i) == 'i') {Serial.print (".."); punktum(); punktum(); rom(); } annet hvis (setning.charAt (første + i) == 'j') {Serial.print (".---"); punktum(); bindestrek(); bindestrek(); bindestrek(); rom(); } annet hvis (setning.charAt (første + i) == 'k') {Serial.print ("-.-"); bindestrek(); punktum(); bindestrek(); rom(); } annet hvis (setning.charAt (første + i) == 'l') {Serial.print (".-.."); punktum(); bindestrek(); punktum(); punktum(); rom(); } annet hvis (setning.charAt (første + i) == 'm') {Serial.print ("-"); bindestrek(); bindestrek(); rom(); } annet hvis (setning.charAt (første + i) == 'n') {Serial.print ("-."); bindestrek(); punktum(); rom(); } annet hvis (setning.charAt (første + i) == 'o') {Serial.print ("---"); bindestrek(); bindestrek(); bindestrek(); rom(); } annet hvis (setning.charAt (første + i) == 'p') {Serial.print (".--."); punktum(); bindestrek(); bindestrek(); punktum(); rom(); } annet hvis (setning.charAt (første + i) == 'q') {Serial.print ("--.-"); bindestrek(); bindestrek(); punktum(); bindestrek(); rom(); } annet hvis (setning.charAt (første + i) == 'r') {Serial.print (".-."); punktum(); bindestrek(); punktum(); rom(); } annet hvis (setning.charAt (første + i) == 's') {Serial.print ("…"); punktum(); punktum(); punktum(); rom(); } annet hvis (setning.charAt (første + i) == 't') {Serial.print ("-"); bindestrek(); rom(); } annet hvis (setning.charAt (første + i) == 'u') {Serial.print ("..-"); punktum(); punktum(); bindestrek(); rom(); } annet hvis (setning.charAt (første + i) == 'v') {Serial.print ("…-"); punktum(); punktum(); punktum(); bindestrek(); rom(); } annet hvis (setning.charAt (første + i) == 'w') {Serial.print (".--"); punktum(); bindestrek(); bindestrek(); rom(); } annet hvis (setning.charAt (første + i) == 'x') {Serial.print ("-..-"); bindestrek(); punktum(); punktum(); bindestrek(); rom(); } annet hvis (setning.charAt (første + i) == 'y') {Serial.print ("-.--"); bindestrek(); punktum(); bindestrek(); bindestrek(); rom(); } annet hvis (setning.charAt (første + i) == 'z') {Serial.print ("-.."); bindestrek(); bindestrek(); punktum(); punktum(); rom(); } annet hvis (setning.charAt (første + i) == '') {Serial.print ("/"); bigSpace (); }}} void loop () {// Ikke skriv noe her}

Trinn 7: Feilsøking

Hjulet beveger seg ikke

Det kan være for mye friksjon mellom hjulet og papiret. Prøv å heve hjulet litt eller bytt det.

Hjulet trekker i papiret, men så fortsetter det å rotere uten å trekke i papiret

Sørg for at du har limt hjulet i midten av trinnmotoren

Prikkene og bindestrekene er koblet sammen

Sjekk om prikk-, bindestrek- og mellomromfunksjonene er skrevet riktig, de skal være slik:

// Dette er metoden som får roboten til å skrive en dotvoid prikk () {Serial.println ("prikk start"); myServo.write (160); forsinkelse (1000); myServo.write (90); forsinkelse (1000); myStepper.step (stepsPerRevolution); forsinkelse (1000); Serial.println ("prikk ferdig"); }

// Dette er metoden som får roboten til å skrive en strek

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 ("dash done"); }

// Dette er metoden som gjør at roboten etterlater et mellomrom mellom hver bokstav

void space () {Serial.println ("space start"); myServo.write (90); forsinkelse (1000); myStepper.step (200); forsinkelse (1000); Serial.println ("plass gjort"); }

Anbefalt: