Мазмуну:

Ардуино Морз Кодунун Жазуучусу: 7 Кадам (Сүрөттөр менен)
Ардуино Морз Кодунун Жазуучусу: 7 Кадам (Сүрөттөр менен)

Video: Ардуино Морз Кодунун Жазуучусу: 7 Кадам (Сүрөттөр менен)

Video: Ардуино Морз Кодунун Жазуучусу: 7 Кадам (Сүрөттөр менен)
Video: Morse Code Converter with arduino 2024, Июль
Anonim
Image
Image
Ардуино Морз Кодунун Жазуучусу
Ардуино Морз Кодунун Жазуучусу

Мен робот жасадым, ал каалаган текстти Морзе кодуна айлантып, анан жаза алат !! Бул картондон жана Легодон жасалган, электроника үчүн мен Arduino жана эки гана моторду колдондум.

Жабдуулар

Arduino Uno тактайы Stepper мотору Micro servo SG90ULN2003 тепкичтүү мотор айдоочу модулу Электр менен камсыздоо модулу Breadboard4 × Jumper зымдары6 × Аялдан-Эркекке дюпондук зымдар9V1A AdapterUSB кабели Картон 2 × Жыгач дубалдар 2 × Булактар Саман Ак кагаз LegoSuper клей Hot желим тапанча Эластикалык топту (жасоо үчүн) калем кармагыч) кайчы кескич

1 -кадам: базаны куруу

Базаны куруу
Базаны куруу
Базаны куруу
Базаны куруу
Базаны куруу
Базаны куруу

Негизин куруудан баштаңыз. Менин кенендигим 4 туурасы жана 20 таякчасы бар, ошол узундуктар менен бир катмар кургандан кийин, мен тегерегине бир стеклинг кең пансионат куруп, степпердик моторго орун калтыруу үчүн бир жагында боштук калтырып, анан мен кошумчаладым кагаз тилкеси боло турган ортоңку бөлүгүнө плитканын бөлүктөрү. Lego колдонуу аны абдан бышык жана оңой өзгөрткөн. Кагаз түрмөктү жасоо үчүн мен туурасы 1,2 см болгон А4 кагаздын тилкелерин кесип алдым (мен бул туураны тандагам, анткени ал Lego дөңгөлөгүнүн туурасы менен бирдей, сеникиңди дөңгөлөгүңө жараша чоңураак же кичирээк кыла аласың) жана алардын учтарын жабыштырдым. абдан узун тилкени түзүү үчүн, мен аны дөңгөлөккө ороп койдум.

2 -кадам: Servo Piece

Servo Piece
Servo Piece
Servo Piece
Servo Piece
Servo Piece
Servo Piece

Бул кадам үчүн сизге керек:

  • узундугу 4 см болгон эки жыгач дубал
  • узундугу 2 см болгон эки булак
  • бир сабан ар биринин узундугу 2 см болгон эки бөлүккө кесип
  • 12 сантиметрден 4 сантиметрге чейин картон
  • 2 см 4х1,5 см картон
  • бир 4см 2см картон

Биринчиден, дюбелдерди 4төн 1,5ке чейин чаптаңыз, андан кийин пружина менен саманды дубелге салыңыз, анан башка картонду башка жагына жабыштырып, баарын ордуна коюңуз.

Экинчиден, самандардын үстүнө 4смден 2смге чейин кесинди чаптаңыз.

Үчүнчүдөн, бүт бөлүктү оодарып, кичине дубелди анын артына, ортосуна эмес, бир аз солго чаптаңыз. (Биринчи сүрөттөгү кичинекей дубелди кошууну унутуп калдым)

Акыры, карточканын чоң бөлүгүндө сервоприводдун алдыңкы бөлүгүндө тешикти кесип, моторду жабыштырыңыз, андан кийин биз жөн эле дубелдер менен жасаган бөлүктү чоң бөлүккө жабыштырабыз, ошондо servo кыймылга келгенде, кичинекей дубель, бул өз кезегинде булактарды да ылдый түшүрөт.

Мен 12смдин астынкы бөлүгүнөн болжол менен 3смди 4смге кесип, ага дагы 4смди 1,5см кылып чаптап, 5,5смден 4смге картон менен жаап койдум. ийкемдүү боону илип, кичинекей картонго чаптадым, андан кийин мен аны 4смден 2смге чейин чаптадым, ал servo башталганда ылдый жылат. Бул толуктоолор булактар кайра көтөрүлгөндө маркердин ары бери жылышын токтотту.

3 -кадам: Серво моторун жана кагаз түрмөгүн базага кошуу

Серво моторун жана кагаз түрмөгүн базага кошуу
Серво моторун жана кагаз түрмөгүн базага кошуу
Серво моторун жана кагаз түрмөгүн базага кошуу
Серво моторун жана кагаз түрмөгүн базага кошуу

Мен servo бөлүгүн колдоо үчүн базанын бир жагына дагы эки кирпич кошуп, мен аны ордуна чаптадым. Мен базанын эң четине дөңгөлөктү кошуп койдум.

4 -кадам: Stepper Motor Frame куруу

Stepper мотор алкагын куруу
Stepper мотор алкагын куруу
Stepper мотор алкагын куруу
Stepper мотор алкагын куруу
Stepper мотор алкагын куруу
Stepper мотор алкагын куруу

Бул кадам бир аз кыйынчылыкты туудурду, анткени мотор Lego менен толук шайкеш келген эмес. Бирок, мен мотордун эки тешигин колдонуп, аны ордуна койдум. Андан кийин, мен мотордун учуна Lego дөңгөлөгүн чаптадым, анан мен аны 1 -кадамда ачык калтырган капталындагы базанын жанына койдум.

5 -кадам: Тийиштерди бүтүрүү

Тийиштерди бүтүрүү
Тийиштерди бүтүрүү
Тийиштерди бүтүрүү
Тийиштерди бүтүрүү
Тийиштерди бүтүрүү
Тийиштерди бүтүрүү
Тийиштерди бүтүрүү
Тийиштерди бүтүрүү

Кагазды ордуна коюу үчүн дөңгөлөктү жабуу үчүн эки доголду коштум. Мен эки кичинекей догалдарды коштум, бири тепкич моторунун зымдарын кармоо үчүн, экинчиси кагазды кармоо үчүн. Акырында, мен кадам моторунун дөңгөлөгүн бир аз чоңураак кылып алмаштырдым, ал кагазды эски дөңгөлөккө караганда жакшыраак жылдырды.

6 -кадам: Электроника

Электроника
Электроника
Электроника
Электроника

Акыр -аягы, моторлорду Arduino менен туташтырып, кодду жүктөшүңүз керек.

Биз servo моторунан баштайбыз, күрөң зымды (жер зымын) GND пинге, андан кийин кызыл зымды (кубат зымын) 5V пинге жана кызгылт сары зымды (сигнал зымы) Dig #5ке туташтырабыз. кадоо. Кийинки, тепкич мотору, 1N1ди #11ге, 1N2ди #10го, 1N3тү #9га, 1N4ти #8ге, 5Vны нан табактын оң жагына жана жер казыгын терс жагына туташтырыңыз. нан. Энергия менен камсыздоо модулун нан тактасына туташтырууну унутпаңыз, анын оң жана терс жактары нандын тактайындагы тиешелүү жактарга туура келерин текшериңиз. Эгер сиз муну унутуп калсаңыз, анда долбооруңуздун күчүн артка кайтарасыз жана муну кылгыңыз келбейт.

Код үчүн мен төрт ыкманы жаздым, бири чекит жазуу үчүн, бири сызык жазуу үчүн, экөө ар бир тамга менен ар бир сөздүн ортосунда боштук калтыруу үчүн. Ошентип, мен бул ыкмаларды ар бир тамга үчүн кайра жазуунун ордуна, керек болгондо чакырып алам. Андан кийин мен тексттин ар бир тамгасынан өтүп, аны жазуучу for циклин жаздым, анын ичинде мен ар бир тамга үчүн if билдирүүсүн жаздым, бирок сиз кааласаңыз, аны switch операторуна жаза аласыз. Албетте, сиз сандарды окуу программасын иштетүү үчүн кодду кошо аласыз. Бардык зымдар даяр болгондо, кодду IDEге көчүрүп чаптаңыз. Stepper, servo жана string китепканаларын орнотууну унутпаңыз. Андан кийин, барганың жакшы.

Бул кантип иштейт

Arduino программасы иштей баштаганда, тексттин биринчи тамгасын карайт. Жана кайсынысына жараша, аны Морзе кодунда жазган функцияларды чакырат. Мисалы, чекит функциясы чакырылганда, servo мотор калемди ылдый жылдыруучу 160ка орнотулган, андан кийин 90го кайра коюлган, бул булактар калемди жылдырып кайра келишине мүмкүндүк берет. Эгерде сызык функциясы чакырылса, servo калемди ылдый жылдырат, андан кийин кадам мотору кагазды тарткан дөңгөлөктү айландырат, ал калемге сызык жазат. Ал эми космостук функциялардын бири степпер мотору айланат, бирок калеми жогору болгондуктан, кагазды тартып, тамгалар менен сөздөрдүн ортосунда боштукту түзөт. Бүткөндөн кийин, ал кийинки катка барат жана ошол эле процессти кайталайт. Сизге жагат деп үмүттөнөм;)

Коду

#кошуу

#include #include #include const int stepsPerRevolution = 150; // Бул кадам мотору үчүн өзгөрмө String сүйлөм = "*салам"; // Бул өзгөрмөнү башка сөздөрдү жазуу үчүн өзгөртүңүз, бирок кичине тамгалар менен жазыңыз жана сөзүңүздү "*" менен баштаңыз Stepper myStepper (stepsPerRevolution, 8, 10, 9, 11); Servo myServo; // Бул роботту чекитти жокко чыгаруучу ыкма () {Serial.println ("чекитти баштоо"); myServo.write (160); кечигүү (1000); myServo.write (90); кечигүү (1000); myStepper.step (stepsPerRevolution); кечигүү (1000); Serial.println ("чекит бүттү"); } // Бул роботту сызыктын боштугуна сызык жазууга мажбур кылган ыкма () {Serial.println ("тире баштоо"); myServo.write (160); кечигүү (1000); myStepper.step (stepsPerRevolution); кечигүү (1000); myServo.write (90); кечигүү (1000); myStepper.step (stepsPerRevolution); кечигүү (1000); Serial.println ("тире бүттү"); } // Бул роботту ар бир тамганын ортосунда боштук калтырган ыкма () {Serial.println ("боштукту баштоо"); myServo.write (90); кечигүү (1000); myStepper.step (200); кечигүү (1000); Serial.println ("орун бүттү"); } // Бул роботту ар бир сөздүн ортосунда боштук калтырууга мажбур кылган ыкма bigSpace () {myServo.write (90); myStepper.step (250); кечигүү (1000); } void setup () {// бир жолу иштетүү үчүн, орнотуу кодуңузду бул жерге коюңуз: Serial.begin (9600); myStepper.setSpeed (100); myServo.attach (5); int биринчи = сүйлөм.indexOf ('*'); // бул цикл саптын ар бир тамгасы аркылуу өтөт жана андан кийин аны жазуунун туура ыкмаларын чакырат (int i = 0; i <сүйлөмдүн узундугу (); i ++) {if (сүйлөм.чарАт (биринчи+i)) == 'a') {Serial.print (".-"); чекит (); сызык (); боштук (); } else if (sentences.charAt (биринчи + i) == 'b') {Serial.print ("-…"); сызык (); чекит (); чекит (); чекит (); боштук (); } if if (sentences.charAt (first + i) == 'c') {Serial.print ("-.-."); сызык (); чекит (); сызык (); чекит (); боштук (); } if if (sentences.charAt (first + i) == 'd') {Serial.print ("-.."); сызык (); чекит (); чекит (); боштук (); } if if (sentences.charAt (first + i) == 'e') {Serial.print ("."); чекит (); боштук (); } else if (sentences.charAt (first + i) == 'f') {Serial.print ("..-."); чекит (); чекит (); сызык (); чекит (); боштук (); } if if (sentences.charAt (first + i) == 'g') {Serial.print ("-."); сызык (); сызык (); чекит (); боштук (); } else if (sentences.charAt (first + i) == 'h') {Serial.print ("…."); чекит (); чекит (); чекит (); чекит (); боштук (); } else if (sentences.charAt (first + i) == 'i') {Serial.print (".."); чекит (); чекит (); боштук (); } if if (sentences.charAt (first + i) == 'j') {Serial.print (".---"); чекит (); сызык (); сызык (); сызык (); боштук (); } if if (sentences.charAt (first + i) == 'k') {Serial.print ("-.-"); сызык (); чекит (); сызык (); боштук (); } if if (sentences.charAt (first + i) == 'l') {Serial.print (".-.."); чекит (); сызык (); чекит (); чекит (); боштук (); } if if (sentences.charAt (first + i) == 'm') {Serial.print ("-"); сызык (); сызык (); боштук (); } if if (sentences.charAt (first + i) == 'n') {Serial.print ("-."); сызык (); чекит (); боштук (); } if if (sentences.charAt (first + i) == 'o') {Serial.print ("---"); сызык (); сызык (); сызык (); боштук (); } else if (sentences.charAt (first + i) == 'p') {Serial.print (".--."); чекит (); сызык (); сызык (); чекит (); боштук (); } if if (sentences.charAt (first + i) == 'q') {Serial.print ("--.-"); сызык (); сызык (); чекит (); сызык (); боштук (); } if if (sentences.charAt (first + i) == 'r') {Serial.print (".-."); чекит (); сызык (); чекит (); боштук (); } else if (sentences.charAt (биринчи + i) == 's) {Serial.print ("…"); чекит (); чекит (); чекит (); боштук (); } if if (sentences.charAt (first + i) == 't') {Serial.print ("-"); сызык (); боштук (); } if if (sentences.charAt (first + i) == 'u') {Serial.print ("..-"); чекит (); чекит (); сызык (); боштук (); } else if (sentences.charAt (first + i) == 'v') {Serial.print ("…-"); чекит (); чекит (); чекит (); сызык (); боштук (); } if if (sentences.charAt (first + i) == 'w') {Serial.print (".--"); чекит (); сызык (); сызык (); боштук (); } if if (sentences.charAt (first + i) == 'x') {Serial.print ("-..-"); сызык (); чекит (); чекит (); сызык (); боштук (); } if if (sentences.charAt (first + i) == 'y') {Serial.print ("-.--"); сызык (); чекит (); сызык (); сызык (); боштук (); } if if (sentences.charAt (first + i) == 'z') {Serial.print ("-.."); сызык (); сызык (); чекит (); чекит (); боштук (); } if if (sentences.charAt (first + i) == '') {Serial.print ("/"); bigSpace (); }}} void loop () {// Бул жерге эч нерсе жазбаңыз}

7 -кадам: Мүчүлүштүктөрдү оңдоо

Дөңгөлөк кыймылдабайт

Дөңгөлөк менен кагаздын ортосунда өтө көп сүрүлүү болушу мүмкүн, дөңгөлөктү бир аз көтөрүп же алмаштырып көрүңүз.

Дөңгөлөк кагазды тартат, бирок андан кийин кагазды тартпастан айланат

Дөңгөлөктү тепкич моторунун ортосуна чаптаганыңызды текшериңиз

Чекиттер менен сызыктар туташып турат

Чекит, тире жана боштук функциялары туура жазылганын текшериңиз, алар мындай болушу керек:

// Бул роботту чекитти чекитке () {Serial.println ("чекитти баштоо") жаздырган ыкма; myServo.write (160); кечигүү (1000); myServo.write (90); кечигүү (1000); myStepper.step (stepsPerRevolution); кечигүү (1000); Serial.println ("чекит бүттү"); }

// Бул ыкма роботту тире жазууга мажбурлайт

void dash () {Serial.println ("тире баштоо"); myServo.write (160); кечигүү (1000); myStepper.step (stepsPerRevolution); кечигүү (1000); myServo.write (90); кечигүү (1000); myStepper.step (stepsPerRevolution); кечигүү (1000); Serial.println ("тире бүттү"); }

// Бул роботту ар бир тамганын ортосунда боштук калтырган ыкма

боштук боштук () {Serial.println ("боштукту баштоо"); myServo.write (90); кечигүү (1000); myStepper.step (200); кечигүү (1000); Serial.println ("орун бүттү"); }

Сунушталууда: