Sadržaj:

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

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

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

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

Supplies

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

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 dužinama, 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 komade pločica do srednjeg dijela gdje će biti papirna traka. Korištenje Lego -a učinilo ga je vrlo čvrstim i lakim za izmjenu. Da 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, možete povećati ili smanjiti svoje ovisno o kotaču) i zalijepio sam im krajeve da formiram jednu vrlo dugu traku, zatim sam je omotao oko točka.

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 dugačke 2 cm
  • jedna slamka izrezana na dva komada svaki dužine 2 cm
  • jedan komad kartona dimenzija 12 x 4 cm
  • dva kartona dimenzija 4 x 1,5 cm
  • jedan komad kartona 4 cm po 2 cm

Najprije zalijepite klinove na jedan od komada 4 x 1,5, zatim umetnite opruge i slamke u klinove, a zatim zalijepite drugi kartonski komad s druge strane da sve drži 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 sredinu, ali 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 kada se servo pomakne gurne mali klin dolje koji zauzvrat gura i 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 petlju 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 kada se pokrene servo. Ovi dodaci spriječili su kretanje markera s jedne na drugu stranu kada se opruge podignu.

Korak 3: Dodavanje servo motora i rolne papira u bazu

Dodavanje servo motora i rolne papira u bazu
Dodavanje servo motora i rolne papira u bazu
Dodavanje servo motora i rolne papira u bazu
Dodavanje servo motora i rolne 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 točak na krajnji kraj baze.

Korak 4: 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
Izgradnja okvira koračnog motora

Ovaj korak je bio 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 koraku 1.

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 točak kako bih fiksirao papir. Dodao sam dva manja lučna komada jedan za držanje žica koračnog motora i drugi za držanje papira. Na kraju, promijenio sam kotač koračnog motora u malo veći koji je pomaknuo papir bolje od starog kotača.

Korak 6: Elektronika

Elektronika
Elektronika
Elektronika
Elektronika

Na kraju, morate povezati motore s Arduinom i učitati kôd.

Počet ćemo sa servo motorom, spojiti smeđu žicu (žica za uzemljenje) na GND pin, zatim crvenu žicu (žicu za napajanje) na pin 5V, a narančastu žicu (signalnu žicu) na Dig #5 pin. Zatim koračni motor spojite 1N1 na Dig #11, 1N2 na Dig #10, 1N3 na Dig #9, 1N4 na Dig #9, 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 matičnu ploču pazeći da se njene pozitivne i negativne strane pravilno poravnaju sa odgovarajućim stranama na matičnoj 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 tačke, jednu za crtu i dvije za ostavljanje razmaka između svakog slova i svake riječi. Na taj način mogu jednostavno pozvati ove metode kad mi zatrebaju, umjesto da ih ponovo 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 napisati u switch naredbi 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 stepper, servo i biblioteke 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 dot 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 zatim koračni motor okreće kotač 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 voliš ga;)

Kod

#include

#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 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 tačku void tačku () {Serial.println ("početak tač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 tera 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 čini da robot ostavi veći prostor 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 first = sentences.indexOf ('*'); // ova for petlja prolazi kroz svako slovo niza, a zatim poziva prave metode da to zapiše za (int i = 0; i <statement.length (); i ++) {if (sentences.charAt (first+i) == 'a') {Serial.print (".-"); tačka (); crtica (); svemir(); } else if (sentences.charAt (first + i) == 'b') {Serial.print ("-…"); crtica (); tačka (); tačka (); tačka (); svemir(); } else if (sentences.charAt (first + i) == 'c') {Serial.print ("-.-."); crtica (); tačka (); crtica (); tačka (); svemir(); } else if (sentences.charAt (first + i) == 'd') {Serial.print ("-.."); crtica (); tačka (); tačka (); svemir(); } else if (sentences.charAt (first + i) == 'e') {Serial.print ("."); tačka (); svemir(); } else if (sentences.charAt (first + i) == 'f') {Serial.print ("..-."); tačka (); tačka (); crtica (); tačka (); svemir(); } else if (sentences.charAt (first + i) == 'g') {Serial.print ("-."); crtica (); crtica (); tačka (); svemir(); } else if (sentences.charAt (first + i) == 'h') {Serial.print ("…."); tačka (); tačka (); tačka (); tačka (); svemir(); } else if (sentences.charAt (first + i) == 'i') {Serial.print (".."); tačka (); tačka (); svemir(); } else if (sentences.charAt (first + i) == 'j') {Serial.print (".---"); tačka (); crtica (); crtica (); crtica (); svemir(); } else if (sentences.charAt (first + i) == 'k') {Serial.print ("-.-"); crtica (); tačka (); crtica (); svemir(); } else if (sentences.charAt (first + i) == 'l') {Serial.print (".-.."); tačka (); crtica (); tačka (); tačka (); svemir(); } else if (sentences.charAt (first + i) == 'm') {Serial.print ("-"); crtica (); crtica (); svemir(); } else if (sentences.charAt (first + i) == 'n') {Serial.print ("-."); crtica (); tačka (); svemir(); } else if (sentences.charAt (first + i) == 'o') {Serial.print ("---"); crtica (); crtica (); crtica (); svemir(); } else if (sentences.charAt (first + i) == 'p') {Serial.print (".--."); tačka (); crtica (); crtica (); tačka (); svemir(); } else if (sentences.charAt (first + i) == 'q') {Serial.print ("--.-"); crtica (); crtica (); tačka (); crtica (); svemir(); } else if (sentences.charAt (first + i) == 'r') {Serial.print (".-."); tačka (); crtica (); tačka (); svemir(); } else if (sentences.charAt (first + i) == 's') {Serial.print ("…"); tačka (); tačka (); tačka (); svemir(); } else if (sentences.charAt (first + i) == 't') {Serial.print ("-"); crtica (); svemir(); } else if (sentences.charAt (first + i) == 'u') {Serial.print ("..-"); tačka (); tačka (); crtica (); svemir(); } else if (sentences.charAt (first + i) == 'v') {Serial.print ("…-"); tačka (); tačka (); tačka (); crtica (); svemir(); } else if (sentences.charAt (first + i) == 'w') {Serial.print (".--"); tačka (); crtica (); crtica (); svemir(); } else if (sentences.charAt (first + i) == 'x') {Serial.print ("-..-"); crtica (); tačka (); tačka (); crtica (); svemir(); } else if (sentences.charAt (first + i) == 'y') {Serial.print ("-.--"); crtica (); tačka (); crtica (); crtica (); svemir(); } else if (sentences.charAt (first + i) == 'z') {Serial.print ("-.."); crtica (); crtica (); tačka (); tačka (); svemir(); } else if (sentences.charAt (first + i) == '') {Serial.print ("/"); bigSpace (); }}} void loop () {// Ne pišite ništa ovdje}

Korak 7: Rješavanje problema

Točak se ne pomera

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

Točak povlači papir, ali se onda nastavlja rotirati bez povlačenja papira

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

Tač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 ("dot start"); 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 ("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čuje se: