Mundarija:

Arduino Morze kod yozuvchisi: 7 qadam (rasmlar bilan)
Arduino Morze kod yozuvchisi: 7 qadam (rasmlar bilan)

Video: Arduino Morze kod yozuvchisi: 7 qadam (rasmlar bilan)

Video: Arduino Morze kod yozuvchisi: 7 qadam (rasmlar bilan)
Video: Arduino and Morse code 2024, Noyabr
Anonim
Image
Image
Arduino Morze kod yozuvchisi
Arduino Morze kod yozuvchisi

Men robot yaratdim, u har qanday matnni Morze kodiga aylantira oladi va keyin yozadi !! U karton va Legodan qilingan va elektronika uchun men Arduino va faqat ikkita dvigatelni ishlatganman.

Ta'minotlar

Arduino Uno taxtasi Step motorli mikro servo SG90ULN2003 step motorli haydovchi moduli Quvvat manbai moduli Breadboard 4 × Jumper simlari 6 × Ayol-erkak dupontli simlar 9V1A adapter USB kabeli karton 2 × yog'och dublonlar 2 × buloqlar somonli oq qog'oz qalam ushlagichi) qaychi kesuvchi

1 -qadam: bazani qurish

Baza qurish
Baza qurish
Baza qurish
Baza qurish
Baza qurish
Baza qurish

Baza qurishdan boshlang, menikining kengligi 4 tirgak va uzunligi 20 tirgak, bu uzunlikdagi bir qavatni qurganimdan so'ng, men uning yonida bo'sh dvigatel uchun joy qoldirish uchun bo'sh joy qoldirib, kengligi bitta taxta qurdim. plitka bo'laklari qog'oz tasmasi bo'ladigan o'rta qismga. Lego -dan foydalanish uni juda mustahkam va o'zgartirishni osonlashtirdi. Qog'oz rulosini yasash uchun men 1,2 sm kenglikdagi A4 qog'ozli chiziqlar kesib oldim (men bu kenglikni tanladim, chunki u Lego g'ildiragining kengligi bilan bir xil, siz g'ildirakka qarab siznikini kattaroq yoki kichikroq qilib yasashingiz mumkin) va men ularning uchlarini yopishtirdim. Men bitta uzun tasma hosil qildim, keyin uni g'ildirakka o'rab oldim.

2 -qadam: Servo qismi

Servo qismi
Servo qismi
Servo qismi
Servo qismi
Servo qismi
Servo qismi

Ushbu qadam uchun sizga kerak:

  • uzunligi 4 sm bo'lgan ikkita yog'och dublon
  • uzunligi 2 sm bo'lgan ikkita buloq
  • har birining uzunligi 2 sm bo'lgan ikkita bo'lakka kesilgan bitta somon
  • 12 sm dan 4 sm gacha bo'lgan bitta karton
  • 4 sm dan 1,5 sm gacha bo'lgan ikkita karton
  • 4 sm dan 2 sm gacha bo'lgan bitta karton

Birinchidan, dublonlarni 4 dan 1,5 gacha bo'laklarga yopishtiring, so'ngra buloqlar va poxollarni dublonlar ichiga joylashtiring, so'ngra boshqa karton bo'lagini boshqa tomonga yopishtiring va hamma narsani joyiga qo'ying.

Ikkinchidan, somonlar ustiga 4 sm dan 2 sm gacha bo'lak yopishtiring.

Uchinchidan, butun bo'lakni ag'daring va uning orqa tomoniga o'rtada emas, balki biroz chapda kichik dübel yopishtiring. (Birinchi rasmdagi kichik dublonni qo'shishni unutganman)

Nihoyat, servo dvigatel old qismidagi katta kartondan teshikni kesib, dvigatelni yopishtiring, so'ng biz dublonlar bilan yasagan bo'lakni katta bo'lakka yopishtiring, shunda servo harakatlanayotganda kichik dübel, bu esa buloqlarni ham pastga itaradi.

Men 12 sm pastki qismdan 4 sm bo'lakdan taxminan 3 sm kesib oldim va unga 4 sm dan 1,5 sm gacha ikkita bo'lak yopishtirdim, so'ngra 5,5 sm dan 4 sm gacha bo'lgan karton bilan yopdim va markerni ushlab turish uchun men kichkina qilib qo'ydim. elastik tasma pastadir va uni kartonning kichik bo'lagiga yopishtirdim, keyin uni 4 sm dan 2 sm gacha yopishtirdim, u servo ishga tushganda pastga siljiydi. Bu qo'shimchalar buloqlar qaytib kelganda markerning yonma -yon harakatlanishini to'xtatdi.

3 -qadam: Servo dvigatel va qog'oz rulosini bazaga qo'shish

Servo dvigatel va qog'oz rulosini bazaga qo'shish
Servo dvigatel va qog'oz rulosini bazaga qo'shish
Servo dvigatel va qog'oz rulosini bazaga qo'shish
Servo dvigatel va qog'oz rulosini bazaga qo'shish

Men servo qismini qo'llab -quvvatlash uchun taglikning bir tomoniga yana ikkita g'isht qo'shdim va uni joyiga yopishtirdim, keyin g'ildirakni taglikning eng chetiga qo'shdim.

4 -qadam: Stepper motor ramkasini qurish

Stepper dvigatel ramkasini qurish
Stepper dvigatel ramkasini qurish
Bosqichli motor ramkasini qurish
Bosqichli motor ramkasini qurish
Stepper dvigatel ramkasini qurish
Stepper dvigatel ramkasini qurish

Bu qadam biroz qiyinchilik tug'dirdi, chunki dvigatel Legoga to'liq mos kelmagan. Biroq, men buni dvigateldagi ikkita teshik yordamida joyiga mahkamlab qo'ydim. Keyin men dvigatelning uchiga Lego g'ildiragini yopishtirdim va keyin uni 1 -qadamda ochiq qoldirgan taglikning yoniga qo'ydim.

5 -qadam: teginishni tugatish

Tugatish tegishi
Tugatish tegishi
Tugatish tegishi
Tugatish tegishi
Tugatish tegishi
Tugatish tegishi
Tugatish tegishi
Tugatish tegishi

Men qog'ozni joyiga to'g'rilash uchun g'ildirakni yopish uchun ikkita kamon bo'lagini qo'shdim. Va men ikkita kichikroq kamon qo'shdim, bittasi qadam motorining simlarini ushlab turadi, ikkinchisi qog'ozni ushlab turadi. Oxir -oqibat, men qadam motorining g'ildiragini qog'ozni eski g'ildirakdan yaxshiroq siljitadigan biroz kattaroq qilib o'zgartirdim.

6 -qadam: elektronika

Elektronika
Elektronika
Elektronika
Elektronika

Nihoyat, siz motorlarni Arduino -ga ulashingiz va kodni yuklashingiz kerak.

Biz servo dvigateldan boshlaymiz, jigarrang simni (er simini) GND piniga, keyin qizil simni (quvvat simini) 5V piniga, to'q sariq simni (signal simini) Dig #5 ga ulaymiz. pin Keyingi bosqichli dvigatel, 1N1 - 11 -sonli, 1N2 - 10, 1N3 - 9, 1N4 - 8 -sonli, 5V - non taxtasining ijobiy tomoniga, er pimi - manfiy tomoniga ulang. non taxtasi. Quvvat manbai modulini ulash taxtasiga ulashni unutmang, uning ijobiy va salbiy tomonlari tegishli taxtaning tegishli tomonlariga to'g'ri kelishiga ishonch hosil qiling. Agar siz buni unutib qo'ysangiz, siz o'z loyihangizni kuchini o'zgartirasiz va siz buni xohlamaysiz.

Kod uchun men to'rtta usulni yozdim, bittasi nuqta, bittasi chiziqcha va ikkitasi har bir harf va har bir so'z o'rtasida bo'sh joy qoldirish uchun. Shunday qilib, men bu usullarni har bir harf uchun qayta yozish o'rniga, kerak bo'lganda chaqira olaman. Keyin men matnning har bir harfidan o'tadigan va yozadigan for loop yozdim, uning ichida men har bir harf uchun if ifodasini yozdim, lekin agar xohlasangiz, uni switch so'zida yozishingiz mumkin. Albatta, siz dasturga raqamlarni o'qish uchun kodni qo'shishingiz mumkin. Barcha simlar tayyor bo'lganda, kodni IDE -ga nusxalash va joylashtirish kifoya. Step, servo va torli kutubxonalarni o'rnatishni unutmang. Shundan so'ng, siz borganingiz ma'qul.

U qanday ishlaydi

Arduino ishga tushganda, dastur matnning birinchi harfiga qaraydi. Va qaysi biriga qarab, uni Morze kodida yozadigan funktsiyalarni chaqiradi. Masalan, nuqta funktsiyasi chaqirilganda, servo dvigatel 160 ga o'rnatiladi, u qalamni pastga siljitadi, keyin esa 90 ga o'rnatiladi, bu esa ruchkani o'zlari bilan birga ko'tarish imkonini beradi. Agar chiziq chizig'i funktsiyasi chaqirilsa, servo qalamni pastga siljitadi, keyin qadam dvigateli g'ildirakni aylantiradi, u qog'ozni tortib, qalamni chiziqqa yozadi. Va agar bo'shliq funktsiyalaridan biri deyilgan bo'lsa, qadam dvigateli aylanadi, lekin qalam yuqoriga qarab, qog'ozni tortadi va harflar yoki so'zlar orasidagi bo'shliqni yaratadi. Ish tugagach, u keyingi harfga o'tadi va xuddi shu jarayonni takrorlaydi. Sizga yoqadi degan umiddaman;)

Kod

#qo'shing

#include #include #include const int stepsPerRevolution = 150; // Bu qadam motorining o'zgaruvchisi String jumlasi = "*salom"; // Bu o'zgaruvchini har xil so'zlarni yozish uchun o'zgartiring, lekin faqat kichik harflar bilan yozing va so'zingizni "*" bilan boshlang Stepper myStepper (stepsPerRevolution, 8, 10, 9, 11); MyServo xizmat ko'rsatish; // Bu usul robotni nuqta -nuqta yozishga majbur qiladigan () {Serial.println ("nuqta boshlash"); myServo.write (160); kechikish (1000); myServo.write (90); kechikish (1000); myStepper.step (stepsPerRevolution); kechikish (1000); Serial.println ("nuqta bajarildi"); } // Bu robotni chiziqni bo'sh chizishga yozishga majbur qiladigan usul () {Serial.println ("tire start"); myServo.write (160); kechikish (1000); myStepper.step (stepsPerRevolution); kechikish (1000); myServo.write (90); kechikish (1000); myStepper.step (stepsPerRevolution); kechikish (1000); Serial.println ("chiziqcha tugadi"); } // Bu robotni har bir harf orasida bo'sh joy qoldirishga majbur qiladigan usul () {Serial.println ("bo'sh joyni ishga tushirish"); myServo.write (90); kechikish (1000); myStepper.step (200); kechikish (1000); Serial.println ("bo'sh joy"); } // Bu robotni har bir so'z o'rtasida bo'sh joy qoldirishga majbur qiladigan void bigSpace () {myServo.write (90); myStepper.step (250); kechikish (1000); } void setup () {// bir marta ishga tushirish uchun sozlash kodini bu erga qo'ying: Serial.begin (9600); myStepper.setSpeed (100); myServo.attach (5); int birinchi = jumla.indexOf ('*'); // bu loop uchun satrning har bir harfidan o'tadi va keyin uni yozish uchun to'g'ri usullarni chaqiradi (int i = 0; i <jumla.length (); i ++) {if (jumla.charAt (birinchi+i)) == 'a') {Serial.print (".-"); nuqta (); chiziq (); bo'sh joy (); } else if (jumla.charAt (birinchi + i) == 'b') {Serial.print ("-…"); chiziq (); nuqta (); nuqta (); nuqta (); bo'sh joy (); } else if (jumla.charAt (birinchi + i) == 'c') {Serial.print ("-.-."); chiziq (); nuqta (); chiziq (); nuqta (); bo'sh joy (); } else if (jumla.charAt (birinchi + i) == 'd') {Serial.print ("-.."); chiziq (); nuqta (); nuqta (); bo'sh joy (); } else if (jumla.charAt (birinchi + i) == 'e') {Serial.print ("."); nuqta (); bo'sh joy (); } else if (jumla.charAt (birinchi + i) == 'f') {Serial.print ("..-."); nuqta (); nuqta (); chiziq (); nuqta (); bo'sh joy (); } else if (jumla.charAt (birinchi + i) == 'g') {Serial.print ("-."); chiziq (); chiziq (); nuqta (); bo'sh joy (); } else if (jumla.charAt (birinchi + i) == 'h') {Serial.print ("…."); nuqta (); nuqta (); nuqta (); nuqta (); bo'sh joy (); } else if (jumla.charAt (birinchi + i) == 'i') {Serial.print (".."); nuqta (); nuqta (); bo'sh joy (); } else if (jumla.charAt (birinchi + i) == 'j') {Serial.print (".---"); nuqta (); chiziq (); chiziq (); chiziq (); bo'sh joy (); } else if (jumla.charAt (birinchi + i) == 'k') {Serial.print ("-.-"); chiziq (); nuqta (); chiziq (); bo'sh joy (); } else if (jumla.charAt (birinchi + i) == 'l') {Serial.print (".-.."); nuqta (); chiziq (); nuqta (); nuqta (); bo'sh joy (); } else if (jumla.charAt (birinchi + i) == 'm') {Serial.print ("-"); chiziq (); chiziq (); bo'sh joy (); } else if (jumla.charAt (birinchi + i) == 'n') {Serial.print ("-."); chiziq (); nuqta (); bo'sh joy (); } else if (jumla.charAt (birinchi + i) == 'o') {Serial.print ("---"); chiziq (); chiziq (); chiziq (); bo'sh joy (); } else if (jumla.charAt (birinchi + i) == 'p') {Serial.print (".--."); nuqta (); chiziq (); chiziq (); nuqta (); bo'sh joy (); } else if (jumla.charAt (birinchi + i) == 'q') {Serial.print ("--.-"); chiziq (); chiziq (); nuqta (); chiziq (); bo'sh joy (); } else if (jumla.charAt (birinchi + i) == 'r') {Serial.print (".-."); nuqta (); chiziq (); nuqta (); bo'sh joy (); } else if (jumla.charAt (birinchi + i) == 's) {Serial.print ("…"); nuqta (); nuqta (); nuqta (); bo'sh joy (); } else if (jumla.charAt (birinchi + i) == 't') {Serial.print ("-"); chiziq (); bo'sh joy (); } else if (jumla.charAt (birinchi + i) == 'u') {Serial.print ("..-"); nuqta (); nuqta (); chiziq (); bo'sh joy (); } else if (jumla.charAt (birinchi + i) == 'v') {Serial.print ("…-"); nuqta (); nuqta (); nuqta (); chiziq (); bo'sh joy (); } else if (jumla.charAt (birinchi + i) == 'w') {Serial.print (".--"); nuqta (); chiziq (); chiziq (); bo'sh joy (); } boshqa if (jumla.charAt (birinchi + i) == 'x') {Serial.print ("-..-"); chiziq (); nuqta (); nuqta (); chiziq (); bo'sh joy (); } else if (jumla.charAt (birinchi + i) == 'y') {Serial.print ("-.--"); chiziq (); nuqta (); chiziq (); chiziq (); bo'sh joy (); } else if (jumla.charAt (birinchi + i) == 'z') {Serial.print ("-.."); chiziq (); chiziq (); nuqta (); nuqta (); bo'sh joy (); } else if (jumla.charAt (birinchi + i) == '') {Serial.print ("/"); bigSpace (); }}} void loop () {// Bu erda hech narsa yozmang}

7 -qadam: Muammolarni bartaraf etish

G'ildirak qimirlamayapti

G'ildirak va qog'oz o'rtasida juda ko'p ishqalanish bo'lishi mumkin, g'ildirakni biroz ko'taring yoki o'zgartiring.

G'ildirak qog'ozni tortadi, lekin keyin qog'ozni tortmasdan aylanishda davom etadi

G'ildirakni step motorining o'rtasiga yopishganingizga ishonch hosil qiling

Nuqtalar va chiziqlar bir -biriga bog'langan

Nuqta, chiziq va bo'shliq funktsiyalarining to'g'ri yozilganligini tekshiring, ular shunday bo'lishi kerak:

// Bu usul yordamida robotni nuqta chizishga nuqta qo'yadi () {Serial.println ("nuqta boshlash"); myServo.write (160); kechikish (1000); myServo.write (90); kechikish (1000); myStepper.step (stepsPerRevolution); kechikish (1000); Serial.println ("nuqta bajarildi"); }

// Bu robotni chiziq chizishga majbur qiladigan usul

void dash () {Serial.println ("chiziq chizig'i"); myServo.write (160); kechikish (1000); myStepper.step (stepsPerRevolution); kechikish (1000); myServo.write (90); kechikish (1000); myStepper.step (stepsPerRevolution); kechikish (1000); Serial.println ("chiziqcha tugadi"); }

// Bu usul robotni har bir harf orasida bo'sh joy qoldirishga majbur qiladi

bo'sh joy () {Serial.println ("bo'sh joyni ishga tushirish"); myServo.write (90); kechikish (1000); myStepper.step (200); kechikish (1000); Serial.println ("bo'sh joy"); }

Tavsiya: