Sisukord:

Arduino Morse Code Writer: 7 sammu (koos piltidega)
Arduino Morse Code Writer: 7 sammu (koos piltidega)
Anonim
Image
Image
Arduino Morse koodi kirjutaja
Arduino Morse koodi kirjutaja

Ma tegin roboti, mis suudab mistahes teksti Morse -koodiks teisendada ja siis kirja panna !! See on valmistatud papist ja Legost ning elektroonika jaoks kasutasin Arduinot ja ainult kahte mootorit.

Tarvikud

Arduino Uno plaat Sammumootor Mikroservo SG90ULN2003 sammmootori draiverimoodul Toiteplokk Leivaplaat 4 × Jumper juhtmed 6 × Nais-meessoost dupontjuhtmed 9V1A adapter USB-kaabel Papp 2 × Puidust tüüblid 2 × Vedrud Õlgedest valge paber LegoSuper liim Kuum liimipüstol Elastne riba pliiatsihoidja) Kääride lõikur

Samm: baasi ehitamine

Baasi ehitamine
Baasi ehitamine
Baasi ehitamine
Baasi ehitamine
Baasi ehitamine
Baasi ehitamine

Alustage aluse ehitamisest. Minu miinid on 4 naela laiused ja 20 naastud pikad, pärast ühe sellise pikkusega kihi ehitamist ehitasin selle ümber ühe naastu laiuse piiri, jättes ühele küljele tühiku, et jätta samm -mootorile ruumi, seejärel lisasin plaatide tükid keskele, kus on pabeririba. Lego kasutamine muutis selle väga tugevaks ja hõlpsasti muudetavaks. Paberirulli tegemiseks lõikasin 1,2 cm laiused A4 -paberiribad (valisin selle laiuse, kuna see on sama laiusega, mida kasutasin Lego -rattaga, saate oma ratta sõltuvalt suuremaks või väiksemaks muuta) ja liimisin nende otsad kokku et moodustada üks väga pikk riba, siis keerasin selle ratta ümber.

2. samm: servotükk

Servo tükk
Servo tükk
Servo tükk
Servo tükk
Servo tükk
Servo tükk

Selle sammu jaoks vajate:

  • kaks 4 cm pikkust puidust tüüblit
  • kaks 2 cm pikkust vedru
  • üks õled lõigatakse kaheks 2 cm pikkuseks tükiks
  • üks 12 x 4 cm suurune papitükk
  • kaks 4 x 1,5 cm papitükki
  • üks 4 x 2 cm papitükk

Kõigepealt liimige tüüblid ühele 4x1,5 tükist, seejärel sisestage tüüblitesse vedrud ja õled, seejärel liimige teine papitükk teiselt poolt, et kõik paigas püsiks.

Teiseks liimige 4 cm x 2 cm tükk õlgede peale.

Kolmandaks pöörake kogu tükk ümber ja liimige selle tagaküljele väike tüübel, mitte keskele, vaid veidi vasakule. (Unustasin esimese tüübi väikese tüübi lisada)

Lõpuks lõigake suurele papitükile servomootori esiosa suurune auk ja liimige mootor sisse, seejärel liimige tükk, mille me äsja tüüblitega tegime, suure tüki külge, nii et kui servo liigub, surub see väike tüübel alla, mis omakorda surub vedrud ka alla.

Lõikasin 12 cm x 4 cm tüki alumisest osast umbes 3 cm ja liimisin sellele veel kaks 4 cm x 1, 5 cm tükki, seejärel katsin selle 5, 5 x 4 cm papitükiga. Ja markeri hoidmiseks tegin väikese elastse riba silmus ja liimisin selle väikese papitüki külge, siis liimisin selle 4 x 2 cm tüki külge, mis liigub servo käivitamisel alla. Need lisad takistasid markeri liikumist küljelt küljele, kui vedrud tagasi tõusid.

3. samm: servomootori ja paberirulli lisamine alusele

Servomootori ja paberirulli lisamine alusele
Servomootori ja paberirulli lisamine alusele
Servomootori ja paberirulli lisamine alusele
Servomootori ja paberirulli lisamine alusele

Lisasin aluse ühele küljele veel kaks tellist, et toetada servotükki ja liimisin selle kohale. Seejärel lisasin ratta aluse kaugemasse otsa.

4. samm: samm -mootori raami ehitamine

Sammmootori raami ehitamine
Sammmootori raami ehitamine
Sammmootori raami ehitamine
Sammmootori raami ehitamine
Sammmootori raami ehitamine
Sammmootori raami ehitamine

See samm oli natuke väljakutse, sest mootor ei olnud Legoga ideaalselt sobitatud. Siiski õnnestus mul seda teha, kasutades mootori kahte auku, et see oma kohale kinnitada. Järgmisena liimisin mootori otsa Lego ratta ja seejärel panin selle otse aluse kõrvale küljele, mille jätsin 1. etapis avatuks.

5. samm: viimistlus

Viimistlus
Viimistlus
Viimistlus
Viimistlus
Viimistlus
Viimistlus
Viimistlus
Viimistlus

Lisasin ratta katmiseks kaks kaaratükki, et paber oma kohale kinnitada. Ja lisasin kaks väiksemat kaareosa, millest üks hoidis samm -mootori juhtmeid ja teine paberit. Lõpuks vahetasin samm -mootorratta veidi suurema vastu, mis liigutas paberit paremini kui vana ratas.

6. samm: elektroonika

Elektroonika
Elektroonika
Elektroonika
Elektroonika

Lõpuks peate mootorid Arduinoga ühendama ja koodi üles laadima.

Alustame servomootoriga, ühendage pruun juhe (maandusjuhe) GND tihvtiga, seejärel punane juhe (toitejuhe) 5 V tihvtiga ja oranž juhe (signaaltraat) dig #5 tihvt. Seejärel ühendage samm -mootor 1N1 kaevuga #11, 1N2 kaevuga #10, 1N3 kaevuga #9, 1N4 kaevuga #8, 5 V leivaplaadi positiivse poolega ja maandusnõel negatiivse küljega leivalaud. Ja ärge unustage ühendada toiteallika moodul leivaplaadiga, veendudes, et selle positiivsed ja negatiivsed küljed joonduvad õigesti leivalaua vastavate külgedega. Kui te unustate seda teha, pöörate oma projekti võimsuse ümber ja te ei soovi seda teha.

Koodi jaoks kirjutasin neli meetodit: ühe punkti kirjutamiseks, ühe kriipsu kirjutamiseks ja kaks, et jätta iga tähe ja sõna vahele tühimik. Nii saan ma neid meetodeid lihtsalt vajadusel nimetada, selle asemel, et seda iga kirja jaoks uuesti kirjutada. Seejärel kirjutasin for for loop, mis läbib teksti iga tähe ja kirjutan selle. Selle sees kirjutasin iga tähe jaoks if -avalduse, kuid soovi korral saate selle lülituslauseks kirjutada. Muidugi saate koodile lisada, et programm saaks numbreid lugeda. Kui kõik juhtmed on valmis, kopeerige ja kleepige kood IDE -sse. Ärge unustage installida stepper-, servo- ja stringiteeke. Pärast seda on teil hea minna.

Kuidas see töötab

Kui Arduino käivitab, vaatab programm teksti esimest tähte ja sõltuvalt sellest, milline see on, kutsub see funktsioone, mis kirjutavad selle morse koodis. Näiteks kui punktfunktsiooni kutsutakse, on servomootor seatud 160 -le, mis liigutab pliiatsi alla, seejärel seatakse see tagasi 90 -le, mis võimaldab vedrudel pliiatsit kaasas liigutades tagasi tulla. Ja kui helistatakse kriipsfunktsioonile, nihutab servo pliiatsi alla, seejärel liigutab samm -mootor ratast, mis tõmbab paberit, pannes pliiatsi kriipsu kirjutama. Ja kui ühte ruumifunktsiooni nimetatakse samm -mootoriks, siis see pöörleb, kuid pliiats üleval, nii et see tõmbab paberit, jättes tähtede või sõnade vahele tühiku. Kui see on tehtud, läheb see järgmise tähe juurde ja kordab sama protsessi. Ma loodan, et sulle meeldib see;)

Kood

#kaasake

#include #include #include const int stepsPerRevolution = 150; // See on samm -mootori muutuja String lause = "*tere"; // Muuda seda muutujat, et kirjutada erinevaid sõnu, kuid kirjutada ainult väikeste tähtedega ja alustada oma sõna tähega "*" Stepper myStepper (stepsPerRevolution, 8, 10, 9, 11); Servo myServo; // See on meetod, mis paneb roboti kirjutama dot void dot () {Serial.println ("dot start"); myServo.write (160); viivitus (1000); myServo.write (90); viivitus (1000); myStepper.step (stepsPerRevolution); viivitus (1000); Serial.println ("punkt tehtud"); } // See on meetod, mis paneb roboti kirjutama kriipsu tühi kriips () {Serial.println ("dash start"); myServo.write (160); viivitus (1000); myStepper.step (stepsPerRevolution); viivitus (1000); myServo.write (90); viivitus (1000); myStepper.step (stepsPerRevolution); viivitus (1000); Serial.println ("kriips tehtud"); } // See on meetod, mis paneb roboti iga tähe vahele tühiku tühjaks jätma () {Serial.println ("space start"); myServo.write (90); viivitus (1000); myStepper.step (200); viivitus (1000); Serial.println ("tühik tehtud"); } // See on meetod, mis paneb roboti jätma iga sõna vahele tühimiku tühjaks bigSpace () {myServo.write (90); myStepper.step (250); viivitus (1000); } void setup () {// pange oma seadistuskood siia, et seda korra käivitada: Serial.begin (9600); myStepper.setSpeed (100); myServo.attach (5); int esimene = lause.indexOf ('*'); // see tsükkel läbib stringi iga tähe ja kutsub seejärel õiged meetodid selle üles kirjutamiseks (int i = 0; i <lause.pikkus (); i ++) {if (lause.charAt (esimene+i) == 'a') {Serial.print (".-"); punkt (); kriips (); tühik (); } else if (lause.charAt (esimene + i) == 'b') {Serial.print ("-…"); kriips (); punkt (); punkt (); punkt (); tühik (); } muidu kui (lause.charAt (esimene + i) == 'c') {Serial.print ("-.-."); kriips (); punkt (); kriips (); punkt (); tühik (); } else if (lause.charAt (esimene + i) == 'd') {Serial.print ("-.."); kriips (); punkt (); punkt (); tühik (); } else if (lause.charAt (esimene + i) == 'e') {Seeria.print ("."); punkt (); tühik (); } muidu kui (lause.charAt (esimene + i) == 'f') {Serial.print ("..-."); punkt (); punkt (); kriips (); punkt (); tühik (); } else if (lause.charAt (esimene + i) == 'g') {Serial.print ("-."); kriips (); kriips (); punkt (); tühik (); } muidu kui (lause.charAt (esimene + i) == 'h') {Serial.print ("…."); punkt (); punkt (); punkt (); punkt (); tühik (); } else if (lause.charAt (esimene + i) == 'i') {Serial.print (".."); punkt (); punkt (); tühik (); } else if (lause.charAt (esimene + i) == 'j') {Seeria.print (".---"); punkt (); kriips (); kriips (); kriips (); tühik (); } muidu kui (lause.charAt (esimene + i) == 'k') {Serial.print ("-.-"); kriips (); punkt (); kriips (); tühik (); } muidu kui (lause.charAt (esimene + i) == 'l') {Serial.print (".-.."); punkt (); kriips (); punkt (); punkt (); tühik (); } else if (lause.charAt (esimene + i) == 'm') {Serial.print ("-"); kriips (); kriips (); tühik (); } else if (lause.charAt (esimene + i) == 'n') {Seeria.print ("-."); kriips (); punkt (); tühik (); } else if (lause.charAt (esimene + i) == 'o') {Seeria.print ("---"); kriips (); kriips (); kriips (); tühik (); } else if (lause.charAt (esimene + i) == 'p') {Seeria.print (".--."); punkt (); kriips (); kriips (); punkt (); tühik (); } muidu kui (lause.charAt (esimene + i) == 'q') {Seeria.print ("--.-"); kriips (); kriips (); punkt (); kriips (); tühik (); } muidu kui (lause.charAt (esimene + i) == 'r') {Serial.print (".-."); punkt (); kriips (); punkt (); tühik (); } else if (lause.charAt (esimene + i) == 's') {Serial.print ("…"); punkt (); punkt (); punkt (); tühik (); } else if (lause.charAt (esimene + i) == 't') {Serial.print ("-"); kriips (); tühik (); } else if (lause.charAt (esimene + i) == 'u') {Serial.print ("..-"); punkt (); punkt (); kriips (); tühik (); } else if (lause.charAt (esimene + i) == 'v') {Serial.print ("…-"); punkt (); punkt (); punkt (); kriips (); tühik (); } muidu kui (lause.charAt (esimene + i) == 'w') {Serial.print (".--"); punkt (); kriips (); kriips (); tühik (); } else if (lause.charAt (esimene + i) == 'x') {Serial.print ("-..-"); kriips (); punkt (); punkt (); kriips (); tühik (); } muidu kui (lause.charAt (esimene + i) == 'y') {Serial.print ("-.--"); kriips (); punkt (); kriips (); kriips (); tühik (); } else if (lause.charAt (esimene + i) == 'z') {Serial.print ("-.."); kriips (); kriips (); punkt (); punkt (); tühik (); } muidu kui (lause.charAt (esimene + i) == '') {Serial.print ("/"); bigSpace (); }}} void loop () {// Ära kirjuta siia midagi}

Samm: tõrkeotsing

Ratas ei liigu

Ratta ja paberi vahel võib olla liiga palju hõõrdumist, proovige ratast veidi tõsta või muuta.

Ratas tõmbab paberit, kuid pöörleb edasi ilma paberit tõmbamata

Veenduge, et liimisite ratta samm -mootori keskele

Punktid ja kriipsud on ühendatud

Kontrollige, kas punkti, kriipsu ja tühiku funktsioonid on õigesti kirjutatud, need peaksid olema sellised:

// See on meetod, mis paneb roboti kirjutama täpse punkti () {Serial.println ("dot start"); myServo.write (160); viivitus (1000); myServo.write (90); viivitus (1000); myStepper.step (stepsPerRevolution); viivitus (1000); Serial.println ("punkt tehtud"); }

// See on meetod, mis paneb roboti kriipsu kirjutama

void dash () {Serial.println ("kriips algus"); myServo.write (160); viivitus (1000); myStepper.step (stepsPerRevolution); viivitus (1000); myServo.write (90); viivitus (1000); myStepper.step (stepsPerRevolution); viivitus (1000); Serial.println ("kriips tehtud"); }

// See on meetod, mille abil robot jätab iga tähe vahele tühiku

tühi ruum () {Serial.println ("tühiku algus"); myServo.write (90); viivitus (1000); myStepper.step (200); viivitus (1000); Serial.println ("tühik tehtud"); }

Soovitan: