Sadržaj:

Pisac Arduino Morseovog koda: 7 koraka (sa slikama)
Pisac Arduino Morseovog koda: 7 koraka (sa slikama)

Video: Pisac Arduino Morseovog koda: 7 koraka (sa slikama)

Video: Pisac Arduino Morseovog koda: 7 koraka (sa slikama)
Video: SKR PRO V1.1 - Fans 2024, Studeni
Anonim
Image
Image
Arduino Morseov pisac
Arduino Morseov pisac

Napravio sam robota koji može pretvoriti bilo koji zadani tekst u Morzeovu azbuku, a zatim ga zapisati !! Napravljen je od kartona i Lega, a za elektroniku sam koristio Arduino i samo dva motora.

Pribor

Arduino Uno ploča Stepper motor Mikro servo SG90ULN2003 Modul pogonskog sklopa koračnog motora Modul napajanja Breadboard 4 × Žice kratkospojnika 6 × Dupont žice ženski na muški9V1A AdapterUSB kabel Karton 2 × Drveni klinovi 2 × Opruge Slama Bijeli papirLegoSuper ljepilo Pištolj za vruće ljepilo Elastična traka (za izradu držač za olovku) Rezač škara

Korak 1: Izgradnja baze

Izgradnja baze
Izgradnja baze
Izgradnja baze
Izgradnja baze
Izgradnja baze
Izgradnja baze

Počnite s izgradnjom baze. Moj je širok 4 vijka i dugačak 20, nakon što sam izgradio jedan sloj s tim duljinama, sagradio sam jedan široki graničnik oko njega ostavljajući prostor s jedne strane kako bih ostavio prostor za koračni motor, a zatim sam dodao komada pločica do srednjeg dijela gdje će biti papirna traka. Korištenje Lega učinilo ga je vrlo čvrstim i lakim za izmjenu. Kako bih napravio rolu papira, izrezao sam trake papira A4 širine 1,2 cm (odabrao sam ovu širinu jer je iste širine kao Lego kotačić koji sam koristio, svoje možete povećati ili smanjiti ovisno o kotaču) i zalijepio sam im krajeve da formiram jednu vrlo dugu traku, zatim sam je omotao oko kotača.

Korak 2: Servo komad

Servo komad
Servo komad
Servo komad
Servo komad
Servo komad
Servo komad

Za ovaj korak potrebno vam je:

  • dva drvena tipla duga 4 cm
  • dvije opruge duge 2 cm
  • jedna slama izrezana na dva komada svaki po 2 cm
  • jedan komad kartona dimenzija 12 x 4 cm
  • dva komada kartona 4 x 1,5 cm
  • jedan komad kartona 4 x 2 cm

Najprije zalijepite tiple na jedan od 4 do 1,5 komada, zatim umetnite opruge i slamke u tiple, a zatim zalijepite drugi kartonski komad s druge strane kako bi sve držalo na mjestu.

Drugo, zalijepite komad 4 cm po 2 cm na slamke.

Treće, preokrenite cijeli komad i zalijepite mali klin na njegovu stražnju stranu, ne u sredini, već malo ulijevo. (Zaboravio sam dodati mali klin na prvoj slici)

Konačno, izrežite rupu u velikom komadu kartona veličine prednje strane servo motora i zalijepite motor, a zatim komad koji smo upravo napravili pomoću tipla zalijepite na veliki komad tako da, kad se servo pomakne, gurne mali klin dolje koji opet gura opruge prema dolje.

Na kraju sam izrezao oko 3 cm od donjeg dijela komada 12 cm po 4 cm i zalijepio na njega još dva komada 4 cm po 1,5 cm, a zatim sam to prekrio komadom kartona 5,5 cm x 4 cm. I da držim marker napravio sam mali omču elastične trake i zalijepio je na mali komad kartona, a zatim sam to zalijepio na komad 4 cm po 2 cm koji će se pomaknuti prema dolje kad se pokrene servo. Ti su dodaci spriječili pomicanje markera s jedne na drugu stranu kad se opruge podignu.

Korak 3: Dodavanje servo motora i role papira u bazu

Dodavanje servo motora i role papira u bazu
Dodavanje servo motora i role papira u bazu
Dodavanje servo motora i role papira u bazu
Dodavanje servo motora i role papira u bazu

Dodao sam još dvije cigle na jednu stranu baze kako bih podržao servo komad i zalijepio sam je na mjesto. Zatim sam dodao kotač na krajnji kraj baze.

Korak 4: Izrada okvira koračnog motora

Izgradnja okvira koračnog motora
Izgradnja okvira koračnog motora
Izgradnja okvira koračnog motora
Izgradnja okvira koračnog motora
Izgradnja okvira koračnog motora
Izgradnja okvira koračnog motora

Ovaj korak bio je mali izazov, jer motor nije napravljen tako da savršeno pristaje Lego -u. Međutim, uspio sam to učiniti pomoću dvije rupe u motoru kako bih ga učvrstio na mjestu. Zatim sam zalijepio Lego kotač na vrh motora, a zatim sam ga stavio tik uz podnožje sa strane koju sam ostavio otvorenom u 1. koraku.

Korak 5: Završni dodiri

Završni dodiri
Završni dodiri
Završni dodiri
Završni dodiri
Završni dodiri
Završni dodiri
Završni dodiri
Završni dodiri

Dodao sam dva lučna komada kako bih pokrio kotač kako bih fiksirao papir na mjestu. Dodao sam dva manja lučna dijela jedan za držanje žica koračnog motora i drugi za držanje papira. Na kraju sam promijenio kotač koračnog motora na nešto veći koji je pomaknuo papir bolje od starog kotača.

Korak 6: Elektronika

Elektronika
Elektronika
Elektronika
Elektronika

Konačno, morate povezati motore s Arduinom i učitati kôd.

Počet ćemo sa servo motorom, spojiti smeđu žicu (žica za uzemljenje) na pin GND, zatim crvenu žicu (žicu za napajanje) na pin 5V, a narančastu žicu (signalnu žicu) na Dig #5 pribadača. Zatim koračni motor spojite 1N1 na Dig #11, 1N2 na Dig #10, 1N3 na Dig #9, 1N4 na Dig #8, 5V na pozitivnu stranu matične ploče, a iglu za uzemljenje na negativnu stranu matična ploča. I ne zaboravite spojiti modul napajanja na ploču, pazeći da se njegove pozitivne i negativne strane pravilno poravnaju s odgovarajućim stranama na ploči. Ako to zaboravite, promijenit ćete snagu svog projekta, a to ne želite učiniti.

Za kôd sam napisao četiri metode, jednu za ispisivanje točke, jednu za crtu i dvije za ostavljanje razmaka između svakog slova i svake riječi. Na taj način mogu jednostavno nazvati ove metode kad mi zatrebaju umjesto da ih ponovno napišem za svako slovo. Zatim sam napisao for petlju koja prolazi kroz svako slovo teksta i zapisao je. Unutar nje sam napisao if naredbu za svako slovo, ali možete je upisati u switch naredbu ako želite. Naravno, možete dodati kodu kako biste omogućili programu čitanje brojeva. Kad sve ožičenje bude spremno, samo kopirajte i zalijepite kôd u svoj IDE. Ne zaboravite instalirati knjižnice koraka, servo i nizova. Nakon toga, možete krenuti.

Kako radi

Kada se Arduino pokrene, program gleda prvo slovo teksta., A ovisno o kojem se radi, poziva funkcije koje ga zapisuju Morzeovim kodom. Na primjer, kada se pozove točkasta funkcija, servo motor je postavljen na 160 koji pomiče olovku prema dolje, zatim se vraća na 90 što omogućuje oprugama da se vrate gore pomičući olovku s njima. A ako se pozove funkcija crtice, servo pomakne olovku prema dolje, a koračni motor rotira kotačić koji povlači papir pa olovka piše crticu. A ako se jedna od funkcija razmaka naziva koračni motor se okreće, ali s olovkom prema gore pa povlači papir stvarajući razmak između slova ili riječi. Kad završi, prelazi se na sljedeće slovo i ponavlja isti postupak. Nadam se da ti se sviđa;)

Kod

#uključi

#include #include #include const int stepsPerRevolution = 150; // Ovo je varijabla za stepper motor String rečenica = "*zdravo"; // Promijenite ovu varijablu za pisanje različitih riječi, ali pišite samo malim slovima i započnite riječ s "*" Stepper myStepper (stepsPerRevolution, 8, 10, 9, 11); Servo myServo; // Ovo je metoda koja tjera robota da napiše dot void dot () {Serial.println ("početak točke"); myServo.write (160); kašnjenje (1000); myServo.write (90); kašnjenje (1000); myStepper.step (stepsPerRevolution); kašnjenje (1000); Serial.println ("dot done"); } // Ovo je metoda koja tjera robota da napiše crticu void dash () {Serial.println ("dash start"); myServo.write (160); kašnjenje (1000); myStepper.step (stepsPerRevolution); kašnjenje (1000); myServo.write (90); kašnjenje (1000); myStepper.step (stepsPerRevolution); kašnjenje (1000); Serial.println ("crtica gotova"); } // Ovo je metoda koja tjera robota da ostavi razmak između svakog slova void space () {Serial.println ("space start"); myServo.write (90); kašnjenje (1000); myStepper.step (200); kašnjenje (1000); Serial.println ("prostor gotov"); } // Ovo je metoda koja tjera robota da ostavi veći razmak između svake riječi void bigSpace () {myServo.write (90); myStepper.step (250); kašnjenje (1000); } void setup () {// ovdje postavite svoj kôd za postavljanje, da biste ga jednom pokrenuli: Serial.begin (9600); myStepper.setSpeed (100); myServo.attach (5); int prva = rečenica.indexOf ('*'); // ova petlja for prolazi kroz svako slovo niza, a zatim poziva prave metode da to zapiše za (int i = 0; i <rečenica.length (); i ++) {if (rečenica.charAt (prvo+i) == 'a') {Serial.print (".-"); točka(); crtica(); prostor(); } else if (sentences.charAt (first + i) == 'b') {Serial.print ("-…"); crtica(); točka(); točka(); točka(); prostor(); } else if (sentences.charAt (first + i) == 'c') {Serial.print ("-.-."); crtica(); točka(); crtica(); točka(); prostor(); } else if (sentences.charAt (first + i) == 'd') {Serial.print ("-.."); crtica(); točka(); točka(); prostor(); } else if (sentences.charAt (first + i) == 'e') {Serial.print ("."); točka(); prostor(); } else if (sentences.charAt (first + i) == 'f') {Serial.print ("..-."); točka(); točka(); crtica(); točka(); prostor(); } else if (sentences.charAt (first + i) == 'g') {Serial.print ("-."); crtica(); crtica(); točka(); prostor(); } else if (sentences.charAt (first + i) == 'h') {Serial.print ("…."); točka(); točka(); točka(); točka(); prostor(); } else if (sentences.charAt (first + i) == 'i') {Serial.print (".."); točka(); točka(); prostor(); } else if (sentences.charAt (first + i) == 'j') {Serial.print (".---"); točka(); crtica(); crtica(); crtica(); prostor(); } else if (sentences.charAt (first + i) == 'k') {Serial.print ("-.-"); crtica(); točka(); crtica(); prostor(); } else if (sentences.charAt (first + i) == 'l') {Serial.print (".-.."); točka(); crtica(); točka(); točka(); prostor(); } else if (sentences.charAt (first + i) == 'm') {Serial.print ("-"); crtica(); crtica(); prostor(); } else if (sentences.charAt (first + i) == 'n') {Serial.print ("-."); crtica(); točka(); prostor(); } else if (sentences.charAt (first + i) == 'o') {Serial.print ("---"); crtica(); crtica(); crtica(); prostor(); } else if (sentences.charAt (first + i) == 'p') {Serial.print (".--."); točka(); crtica(); crtica(); točka(); prostor(); } else if (sentences.charAt (first + i) == 'q') {Serial.print ("--.-"); crtica(); crtica(); točka(); crtica(); prostor(); } else if (sentences.charAt (first + i) == 'r') {Serial.print (".-."); točka(); crtica(); točka(); prostor(); } else if (sentences.charAt (first + i) == 's') {Serial.print ("…"); točka(); točka(); točka(); prostor(); } else if (sentences.charAt (first + i) == 't') {Serial.print ("-"); crtica(); prostor(); } else if (sentences.charAt (first + i) == 'u') {Serial.print ("..-"); točka(); točka(); crtica(); prostor(); } else if (sentences.charAt (first + i) == 'v') {Serial.print ("…-"); točka(); točka(); točka(); crtica(); prostor(); } else if (sentences.charAt (first + i) == 'w') {Serial.print (".--"); točka(); crtica(); crtica(); prostor(); } else if (sentences.charAt (first + i) == 'x') {Serial.print ("-..-"); crtica(); točka(); točka(); crtica(); prostor(); } else if (sentences.charAt (first + i) == 'y') {Serial.print ("-.--"); crtica(); točka(); crtica(); crtica(); prostor(); } else if (sentences.charAt (first + i) == 'z') {Serial.print ("-.."); crtica(); crtica(); točka(); točka(); prostor(); } else if (sentences.charAt (first + i) == '') {Serial.print ("/"); bigSpace (); }}} void loop () {// Ne piši ništa ovdje}

Korak 7: Rješavanje problema

Kotač se ne pomiče

Možda postoji previše trenja između kotačića i papira, pokušajte malo podići kotač ili ga promijeniti.

Kotač povlači papir, ali se onda nastavlja okretati bez povlačenja papira

Provjerite jeste li zalijepili kotač u središte koračnog motora

Točke i crtice su povezane

Provjerite jesu li točke, crtica i razmak ispravno napisane, trebale bi biti ovakve:

// Ovo je metoda koja tjera robota da napiše dotvoid dot () {Serial.println ("početak točke"); myServo.write (160); kašnjenje (1000); myServo.write (90); kašnjenje (1000); myStepper.step (stepsPerRevolution); kašnjenje (1000); Serial.println ("dot done"); }

// Ovo je metoda koja tjera robota da napiše crticu

void crtica () {Serial.println ("početak crtice"); myServo.write (160); kašnjenje (1000); myStepper.step (stepsPerRevolution); kašnjenje (1000); myServo.write (90); kašnjenje (1000); myStepper.step (stepsPerRevolution); kašnjenje (1000); Serial.println ("crtica gotova"); }

// Ovo je metoda koja tjera robota da ostavi razmak između svakog slova

void space () {Serial.println ("početak prostora"); myServo.write (90); kašnjenje (1000); myStepper.step (200); kašnjenje (1000); Serial.println ("prostor gotov"); }

Preporučeni: