Mündəricat:

Arduino Morse Kod Yazan: 7 Addım (Şəkillərlə birlikdə)
Arduino Morse Kod Yazan: 7 Addım (Şəkillərlə birlikdə)

Video: Arduino Morse Kod Yazan: 7 Addım (Şəkillərlə birlikdə)

Video: Arduino Morse Kod Yazan: 7 Addım (Şəkillərlə birlikdə)
Video: CS50 2013 - Week 9 2024, Iyul
Anonim
Image
Image
Arduino Morse Kod Yazan
Arduino Morse Kod Yazan

Hər hansı bir mətni Morze koduna çevirən və sonra yaza bilən bir robot hazırladım !! Karton və Legodan hazırlanmışdır və elektronika üçün Arduino və yalnız iki mühərrikdən istifadə etmişəm.

Təchizat

Arduino Uno lövhəsi Step motoru Mikro servo SG90ULN2003 step motor sürücüsü modulu Güc təchizatı modulu Çörək lövhəsi 4 × Atlama telləri 6 × Dişi-Kişi dupont telləri 9V1A Adaptor USB kabeli Karton 2 × Taxta dübeller 2 × Yaylar Saman Ağ kağız LegoSuper yapışqan İsti yapışqan tabancası Elastik bant (qələm tutacağı) Qayçı kəsici

Addım 1: Baza qurulması

Baza qurulması
Baza qurulması
Baza qurulması
Baza qurulması
Baza qurulması
Baza qurulması

Baza qurmağa başlayın. Mənim 4 enli və 20 dirək uzunluğundadır, bu uzunluqlarla bir təbəqə qurduqdan sonra, step motoru üçün yer buraxmaq üçün bir tərəfində bir boşluq qoyaraq ətrafına bir saplı geniş bir taxta qurdum, sonra əlavə etdim Kafel parçaları kağız şeridin olacağı orta hissəyə. Lego istifadə etmək çox möhkəm və dəyişdirilməsini asanlaşdırdı. Kağız rulonu etmək üçün 1,2 sm genişliyində A4 kağız zolaqları kəsdim (bu genişliyi istifadə etdiyim Lego təkəri ilə eyni olduğu üçün seçdim, təkərinizə görə özünüzü daha böyük və ya kiçik edə bilərsiniz) və uclarını bir -birinə yapışdırdım. çox uzun bir zolaq düzəltmək üçün onu təkərin ətrafına bükdüm.

Addım 2: Servo Parçası

Servo Parçası
Servo Parçası
Servo Parçası
Servo Parçası
Servo Parçası
Servo Parçası

Bu addım üçün sizə lazımdır:

  • 4 sm uzunluğunda iki taxta dübel
  • 2 sm uzunluğunda iki bulaq
  • hər biri 2 sm uzunluğunda iki hissəyə kəsilmiş bir saman
  • 12x4 sm ölçüdə bir ədəd karton
  • 4 sm x 1,5 sm ölçüdə iki ədəd karton
  • 4 sm x 2 sm ölçüdə karton

Əvvəlcə dübelləri 4 x 1,5 hissədən birinə yapışdırın, sonra yayları və samanları dübellərə daxil edin, sonra hər şeyi yerində saxlamaq üçün digər karton parçasını yapışdırın.

İkincisi, çubuqların üstünə 4 sm -dən 2 sm -ə qədər bir parça yapışdırın.

Üçüncüsü, bütün parçanı çevirin və ortasına deyil, bir az sola arxasına kiçik bir dübel yapışdırın. (İlk şəkildəki kiçik dübel əlavə etməyi unutmuşam)

Nəhayət, servo motorun ön hissəsindəki böyük kartondan bir delik kəsin və mühərriki yapışdırın, sonra dübellərlə düzəltdiyimiz parçanı böyük parçaya yapışdırın ki, servo hərəkət edərkən itələsin. kiçik dübel, bu da yayları aşağı itələyir.

12 sm -in alt hissəsindən təxminən 4 sm enində təxminən 3 sm kəsib, 4 sm -dən 1,5 sm -ə qədər daha iki parça yapışdırıb, sonra 5.5 sm -dən 4 sm -ə qədər kartonla örtdüm. elastik bir bant halqası və kiçik bir karton parçasına yapışdırdım, sonra servo başlayanda aşağıya doğru hərəkət edəcək 4 sm x 2 sm hissəyə yapışdırdım. Bu əlavələr, yaylar yuxarı qalxanda markerin bir tərəfdən digərinə hərəkət etməsini dayandırdı.

Addım 3: Servo Motoru və Kağız Rollunu bazaya əlavə edin

Bazaya Servo Motoru və Kağız Rulosunun əlavə edilməsi
Bazaya Servo Motoru və Kağız Rulosunun əlavə edilməsi
Bazaya Servo Motoru və Kağız Rulosunun əlavə edilməsi
Bazaya Servo Motoru və Kağız Rulosunun əlavə edilməsi

Servo parçasını dəstəkləmək üçün bazanın bir tərəfinə iki kərpic əlavə etdim və yerinə yapışdırdım, sonra çarxı bazanın ən ucuna əlavə etdim.

Addım 4: Stepper Motor Çərçivəsinin qurulması

Stepper Motor Çərçivəsinin qurulması
Stepper Motor Çərçivəsinin qurulması
Stepper Motor Çərçivəsinin qurulması
Stepper Motor Çərçivəsinin qurulması
Stepper Motor Çərçivəsinin qurulması
Stepper Motor Çərçivəsinin qurulması

Bu addım bir az çətin idi, çünki motor Lego ilə mükəmməl uyğunlaşmadı. Bununla birlikdə, mühərrikdəki iki çuxurdan istifadə edərək bunu yerinə gətirməyi bacardım. Sonra, Lego təkərini motorun ucuna yapışdırdım və sonra 1 -ci addımda açıq buraxdığım tərəfdəki əsasın yanına qoydum.

Addım 5: Toxunuşları bitirmək

Toxunuşları bitirmək
Toxunuşları bitirmək
Toxunuşları bitirmək
Toxunuşları bitirmək
Toxunuşları bitirmək
Toxunuşları bitirmək
Toxunuşları bitirmək
Toxunuşları bitirmək

Kağızı yerində düzəltmək üçün təkəri örtmək üçün iki qövs parçası əlavə etdim. Və iki kiçik qövs parçası əlavə etdim, biri step motorunun tellərini tutmaq üçün, digəri də kağızı tutmaq üçün. Nəhayət, step motor təkərini kağızı köhnə təkərdən daha yaxşı hərəkət etdirən bir qədər böyük bir təkərə dəyişdim.

Addım 6: Elektronika

Elektronika
Elektronika
Elektronika
Elektronika

Nəhayət, mühərrikləri Arduinoya bağlamalı və kodu yükləməlisiniz.

Servo mühərriki ilə başlayacağıq, qəhvəyi teli (torpaq telini) GND pininə, sonra qırmızı teli (elektrik telini) 5V pininə və narıncı teli (siqnal teli) Dig #5 -ə bağlayacağıq. pin. Daha sonra, step motoru, 1N1 -i 11 -ci, 1N2 -ni 10 -cu, 1N3 -ü 9 -cu, 1N4 -ü 8 -ci, 5V -ni çörək bişirmənin müsbət tərəfinə və torpaq pinini mənfi tərəfə bağlayın. çörək taxtası. Elektrik təchizatı modulunu çörək taxtasına bağlamağı unutmayın ki, onun müsbət və mənfi tərəfləri çörək taxtasının müvafiq tərəflərinə düzgün uyğun olsun. Bunu unutmusunuzsa, layihənizin gücünü geri çevirəcəksiniz və bunu etmək istəmirsiniz.

Kod üçün biri nöqtə yazmaq, biri tire yazmaq və hər hərflə hər söz arasında boşluq buraxmaq üçün dörd üsul yazdım. Bu şəkildə, hər hərf üçün yenidən yazmaq əvəzinə ehtiyacım olanda bu üsulları çağıra bilərəm. Sonra mətnin hər bir hərfindən keçən və yazan for for loop yazdım, İçərisində hər hərf üçün if ifadəsi yazdım, amma istəsəniz onu switch ifadəsində yaza bilərsiniz. Əlbəttə ki, proqramı nömrələri oxumaq üçün kodu əlavə edə bilərsiniz. Bütün naqillər hazır olduqda, kodu kopyalayıb IDE -yə yapışdırın. Step, servo və simli kitabxanaları quraşdırmağı unutmayın. Bundan sonra getməyiniz yaxşıdır.

Bu necə işləyir

Arduino başladıqda proqram mətnin ilk hərfinə baxır. Hansından asılı olaraq onu Morse kodunda yazan funksiyaları çağırır. Məsələn, nöqtə funksiyası çağırıldığında, servo motoru qələmi aşağıya doğru hərəkət etdirən 160 -a, sonra da qələmi özləri ilə hərəkət etdirərək yayların geri qayıtmasına imkan verən 90 -a geri qoyulur. Və tire funksiyası çağırılırsa, servo qələmi aşağıya doğru hərəkət etdirir, sonra step motoru qələmi tire yazan kağızı çəkən təkəri döndərir. Kosmik funksiyalardan birinə step motoru deyilir, ancaq qələmi yuxarı qaldıraraq kağızı çəkərək hərflər və ya sözlər arasında boşluq yaradır. İş bitdikdə, növbəti hərfə keçir və eyni prosesi təkrarlayır. Ümid edirəm bəyəndiniz;)

Kod

#daxil edin

#include #include #include const int stepsPerRevolution = 150; // Bu, step motor üçün dəyişən String cümlə = "*salam"; // Bu dəyişəni fərqli sözlər yazmaq üçün dəyişdirin, ancaq kiçik hərflərlə yazın və sözünüzə "*" Stepper myStepper ilə başlayın (stepsPerRevolution, 8, 10, 9, 11); Servo myServo; // Robotu nöqtə boş bir nöqtə () {Serial.println ("nöqtə başlanğıcı") yazmağa məcbur edən üsul budur; myServo.write (160); gecikmə (1000); myServo.write (90); gecikmə (1000); myStepper.step (stepsPerRevolution); gecikmə (1000); Serial.println ("nöqtə tamamlandı"); } // Bu, robotu tire boşluğuna tire yazmağa vadar edən metoddur () {Serial.println ("tire start"); myServo.write (160); gecikmə (1000); myStepper.step (stepsPerRevolution); gecikmə (1000); myServo.write (90); gecikmə (1000); myStepper.step (stepsPerRevolution); gecikmə (1000); Serial.println ("tire tamamlandı"); } // Bu, robotu hər bir hərf arasında boşluq buraxan metoddur () {Serial.println ("space start"); myServo.write (90); gecikmə (1000); myStepper.step (200); gecikmə (1000); Serial.println ("yer tamamlandı"); } // Bu, robotun hər bir söz arasında daha böyük bir boşluq buraxmasına səbəb olan BigSpace () {myServo.write (90); myStepper.step (250); gecikmə (1000); } void setup () {// bir dəfə işlətmək üçün quraşdırma kodunuzu bura qoyun: Serial.begin (9600); myStepper.setSpeed (100); myServo.attach (5); int ilk = cümlə.indexOf ('*'); // bu loop üçün sətrin hər bir hərfindən keçir və sonra onu yazmaq üçün doğru üsulları çağırır (int i = 0; i <cümlə.length (); i ++) {if (cümlə.charAt (birinci+i)) == 'a') {Serial.print (".-"); nöqtə (); tire (); boşluq (); } başqa əgər (cümlə.charAt (birinci + i) == 'b') {Serial.print ("-…"); tire (); nöqtə (); nöqtə (); nöqtə (); boşluq (); } başqa əgər (cümlə.charAt (birinci + i) == 'c') {Serial.print ("-.-."); tire (); nöqtə (); tire (); nöqtə (); boşluq (); } başqa if (cümlə.charAt (birinci + i) == 'd') {Serial.print ("-.."); tire (); nöqtə (); nöqtə (); boşluq (); } başqa if (cümlə.charAt (ilk + i) == 'e') {Serial.print ("."); nöqtə (); boşluq (); } başqa əgər (cümlə.charAt (birinci + i) == 'f') {Serial.print ("..-."); nöqtə (); nöqtə (); tire (); nöqtə (); boşluq (); } başqa əgər (cümlə.charAt (ilk + i) == 'g') {Serial.print ("-."); tire (); tire (); nöqtə (); boşluq (); } başqa if (cümlə.charAt (birinci + i) == 'h') {Serial.print ("…."); nöqtə (); nöqtə (); nöqtə (); nöqtə (); boşluq (); } başqa if (cümlə.charAt (ilk + i) == 'i') {Serial.print (".."); nöqtə (); nöqtə (); boşluq (); } başqa əgər (cümlə.charAt (birinci + i) == 'j') {Serial.print (".---"); nöqtə (); tire (); tire (); tire (); boşluq (); } başqa əgər (cümlə.charAt (ilk + i) == 'k') {Serial.print ("-.-"); tire (); nöqtə (); tire (); boşluq (); } başqa əgər (cümlə.charAt (ilk + i) == 'l') {Serial.print (".-.."); nöqtə (); tire (); nöqtə (); nöqtə (); boşluq (); } başqa if (cümlə.charAt (ilk + i) == 'm') {Serial.print ("-"); tire (); tire (); boşluq (); } başqa if (cümlə.charAt (ilk + i) == 'n') {Serial.print ("-."); tire (); nöqtə (); boşluq (); } başqa əgər (cümlə.charAt (birinci + i) == 'o') {Serial.print ("---"); tire (); tire (); tire (); boşluq (); } başqa if (cümlə.charAt (birinci + i) == 'p') {Serial.print (".--."); nöqtə (); tire (); tire (); nöqtə (); boşluq (); } başqa əgər (cümlə.charAt (birinci + i) == 'q') {Serial.print ("--.-"); tire (); tire (); nöqtə (); tire (); boşluq (); } başqa if (cümlə.charAt (ilk + i) == 'r') {Serial.print (".-."); nöqtə (); tire (); nöqtə (); boşluq (); } başqa əgər (cümlə.charAt (ilk + i) == 's) {Serial.print ("…"); nöqtə (); nöqtə (); nöqtə (); boşluq (); } başqa əgər (cümlə.charAt (birinci + i) == 't') {Serial.print ("-"); tire (); boşluq (); } başqa əgər (cümlə.charAt (birinci + i) == 'u') {Serial.print ("..-"); nöqtə (); nöqtə (); tire (); boşluq (); } başqa əgər (cümlə.charAt (birinci + i) == 'v') {Serial.print ("…-"); nöqtə (); nöqtə (); nöqtə (); tire (); boşluq (); } başqa əgər (cümlə.charAt (birinci + i) == 'w') {Serial.print (".--"); nöqtə (); tire (); tire (); boşluq (); } başqa əgər (cümlə.charAt (birinci + i) == 'x') {Serial.print ("-..-"); tire (); nöqtə (); nöqtə (); tire (); boşluq (); } başqa əgər (cümlə.charAt (birinci + i) == 'y') {Serial.print ("-.--"); tire (); nöqtə (); tire (); tire (); boşluq (); } başqa if (cümlə.charAt (birinci + i) == 'z') {Serial.print ("-.."); tire (); tire (); nöqtə (); nöqtə (); boşluq (); } başqa if (cümlə.charAt (ilk + i) == '') {Serial.print ("/"); bigSpace (); }}} void loop () {// Burda heç nə yazmayın}

Addım 7: Problemlərin aradan qaldırılması

Təkər hərəkət etmir

Təkərlə kağız arasında çox sürtünmə ola bilər, təkəri bir qədər qaldırmağa və ya dəyişdirməyə çalışın.

Təkər kağızı çəkir, amma sonra kağızı çəkmədən fırlanmağa davam edir

Çarxı step motorunun ortasına yapışdırdığınızdan əmin olun

Nöqtələr və tire bir -birinə bağlıdır

Nöqtə, tire və boşluq funksiyalarının düzgün yazıldığını yoxlayın, bunlar belə olmalıdır:

// Robotu dotvoid dot () {Serial.println ("nöqtəli başlanğıc") yazmağa məcbur edən üsul budur; myServo.write (160); gecikmə (1000); myServo.write (90); gecikmə (1000); myStepper.step (stepsPerRevolution); gecikmə (1000); Serial.println ("nöqtə tamamlandı"); }

// Robotu tire yazmağa məcbur edən üsul budur

boş xətt () {Serial.println ("tire start"); myServo.write (160); gecikmə (1000); myStepper.step (stepsPerRevolution); gecikmə (1000); myServo.write (90); gecikmə (1000); myStepper.step (stepsPerRevolution); gecikmə (1000); Serial.println ("tire tamamlandı"); }

// Robotu hər hərf arasında boşluq buraxan üsul budur

boş boşluq () {Serial.println ("boşluq başlanğıcı"); myServo.write (90); gecikmə (1000); myStepper.step (200); gecikmə (1000); Serial.println ("yer tamamlandı"); }

Tövsiyə: