Мазмұны:

Ардуино Морзе кодының авторы: 7 қадам (суреттермен)
Ардуино Морзе кодының авторы: 7 қадам (суреттермен)

Бейне: Ардуино Морзе кодының авторы: 7 қадам (суреттермен)

Бейне: Ардуино Морзе кодының авторы: 7 қадам (суреттермен)
Бейне: Азбука Морзе. Кодируем слова при помощи Arduino 2024, Шілде
Anonim
Image
Image
Ардуино Морзе кодының авторы
Ардуино Морзе кодының авторы

Мен робот жасадым, ол кез келген мәтінді Морзе кодына түрлендіріп, содан кейін оны жаза алады !! Ол картоннан және легодан жасалған, мен электроникаға Arduino мен тек екі қозғалтқышты қолдандым.

Жабдықтар

Arduino Uno тақтасы Қадамдық мотор Micro servo SG90ULN2003 моторлы драйвер модулі Қуат беру модулі Breadboard4 × Өткізгіш сымдар6 × Әйелдер мен ерлерге арналған сымдар9V1A Адаптер USB кабелі Картон 2 × Ағаш дюбельдер 2 × Серіппелер Сабан Ақ қағаз қалам ұстағыш) Қайшы кескіш

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

Базаны құру
Базаны құру
Базаны құру
Базаны құру
Базаны құру
Базаны құру

Негізді құрудан бастаңыз. Менің ені 4 шпилька мен ұзындығы 20 шпилька, сол ұзындықпен бір қабатты салғаннан кейін, мен айналмалы дөңгелекті бір тақтайша салдым, бір жағынан бос моторға орын қалдыру үшін бос орын қалдырдым, содан кейін мен қостым тақтайша бөліктері қағаз жолағы болатын ортаңғы бөлігіне. Lego пайдалану оны өте берік және өзгертуге мүмкіндік берді. Қағаз орамын жасау үшін мен ені 1,2 см болатын А4 форматтағы қағаз жолақтарын кесіп алдым (мен енін таңдадым, бұл Lego дөңгелегінің ені, сіз дөңгелегіңізге байланысты өзіңізді үлкен немесе кішірек етіп жасай аласыз) және мен олардың ұштарын жабыстырдым. бір өте ұзын жолақты қалыптастыру үшін, мен оны дөңгелекке айналдырдым.

2 -қадам: Серво бөлігі

Серво бөлігі
Серво бөлігі
Серво бөлігі
Серво бөлігі
Серво бөлігі
Серво бөлігі

Бұл қадам үшін сізге қажет:

  • ұзындығы 4 см болатын екі ағаш сүлгі
  • ұзындығы 2 см болатын екі бұлақ
  • ұзындығы 2 см болатын екі бөлікке кесілген бір сабан
  • 12 см -ден 4 см -ге дейін картон
  • 4 см -ден 1,5 см -ге дейін екі картон
  • 4 см -ден 2 см -ге дейін бір картон

Алдымен, дюбельдерді 4 -тен 1,5 -ке дейін жабыстырыңыз, содан кейін серіппелер мен сабандарды дюбельге салыңыз, содан кейін бәрін орнына қою үшін екінші жағынан басқа картон бөлігін жабыстырыңыз.

Екіншіден, сабандардың үстіне 4 см -ден 2 см -ге дейін кесінді жабыстырыңыз.

Үшіншіден, бүкіл бөлікті аударып, оның артқы жағына ортасынан емес, сәл солға қарай кішкене дюбель жабыстырыңыз. (Бірінші суреттегі кішкене дюбельді қосуды ұмытып кеттім)

Соңында үлкен картоннан серво қозғалтқышының алдыңғы бөлігіндегі тесікті кесіңіз де, моторды желімдеңіз, содан кейін біз дюбельдермен жасаған бөлікті үлкен бөлікке жабыстырыңыз, сонда серво қозғалғанда ол итеріледі. кішкене дюбель, ол өз кезегінде серіппелерді де итереді.

Мен 12см астыңғы бөлігінен 4см -ге дейін 3см -ге жуық кесіп, оған 4см -ден 1,5см тағы екі дана жапсырдым, содан кейін оны 5,5 см -ден 4 см -ге дейін картонмен жауып қойдым. серпімді таспаның ілмегі мен оны картонның кішкене бөлігіне жапсырдым, содан кейін мен оны 4 см -ден 2 см -ге дейін жапсырдым, ол серво басталғанда төмен қарай жылжиды. Бұл қоспалар серіппелер көтерілген кезде маркердің бүйірден жылжуын тоқтатты.

3 -қадам: Серво қозғалтқышы мен қағаз орамын негізге қосу

Серво қозғалтқышы мен қағаз орамын негізге қосу
Серво қозғалтқышы мен қағаз орамын негізге қосу
Серво қозғалтқышы мен қағаз орамын негізге қосу
Серво қозғалтқышы мен қағаз орамын негізге қосу

Мен серво бөлігін қолдау үшін негіздің бір жағына тағы екі кірпіш қостым, мен оны орнына жапсырдым, содан кейін дөңгелекті негіздің ең шетіне қостым.

4 -қадам: Қадамдық мотор жақтауын құру

Қадамдық мотор жақтауының құрылысы
Қадамдық мотор жақтауының құрылысы
Қадамдық мотор жақтауының құрылысы
Қадамдық мотор жақтауының құрылысы
Қадамдық мотор жақтауының құрылысы
Қадамдық мотор жақтауының құрылысы

Бұл қадам қиын болды, себебі мотор Lego -ға толық сәйкес келмеді. Дегенмен, мен мотордағы екі саңылауды қолдана отырып, оны орнымен бекітуге қол жеткіздім. Содан кейін мен қозғалтқыштың ұшына Lego дөңгелегін жапсырдым, содан кейін мен оны 1 -қадамда ашық қалдырған жақтың негізіне қойдым.

5 -қадам: Түртуді аяқтау

Аяқталатын жанасулар
Аяқталатын жанасулар
Аяқталатын жанасулар
Аяқталатын жанасулар
Аяқталатын жанасулар
Аяқталатын жанасулар
Аяқталатын жанасулар
Аяқталатын жанасулар

Мен қағазды орнына бекіту үшін дөңгелекті жабу үшін екі доға бөлігін қостым. Мен екі кіші доға бөлігін қосты қозғалтқыштың сымдарын ұстап тұру үшін, екіншісін қағазды ұстау үшін қостым. Ақырында, мен қадамдық мотор дөңгелегін қағазды ескі дөңгелекке қарағанда жақсы жылжытатын сәл үлкен дөңгелекке ауыстырдым.

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

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

Соңында, қозғалтқыштарды Arduino -ға қосып, кодты жүктеу керек.

Біз серво қозғалтқышынан бастаймыз, қоңыр сымды (жер сымын) GND түйреуішіне, содан кейін қызыл сымды (қуат сымы) 5В істікшеге, ал қызғылт сары сымды (сигнал сымы) №5 қазанға қосамыз. түйреу. Содан кейін, қадамдық қозғалтқыш, 1N1 -ны №11 -ге, 1N2 -ді №10 -ға, 1N3 -ті №9 -ға, 1N4 -ті №8 -ге, 5 -ті нан тақтасының оң жағына және жерге тұйықтауды теріс жағына қосыңыз. нан тақтасы. Қуат беру модулін нан тақтасына қосуды ұмытпаңыз, оның оң және теріс жақтары тақтаның сәйкес жақтарына дұрыс сәйкес келетініне көз жеткізіңіз. Егер сіз мұны ұмытып кетсеңіз, сіз өзіңіздің жобаңыздың күшін өзгертесіз және сіз мұны қаламайсыз.

Код үшін мен төрт әдісті жаздым: біреуі нүкте, бірі сызықша, екеуі әр әріп пен әр сөз арасында бос орын қалдыру үшін. Осылайша, мен бұл әдістерді әр әріп үшін қайта жазудың орнына, қажет болған кезде ғана атай аламын. Содан кейін мен мәтіннің әр әрпінен өтіп, оны жазатын for циклін жаздым, оның ішінде мен әр әріпке if операторын жаздым, бірақ егер қаласаңыз, оны switch операторына жаза аласыз. Әрине, бағдарламаға сандарды оқу үшін кодты қосуға болады. Барлық сымдар дайын болғанда, кодты IDE -ге көшіріп, қойыңыз. Қадам, сервопривод және жол кітапханаларын орнатуды ұмытпаңыз. Осыдан кейін барғаныңыз жөн.

Бұл қалай жұмыс істейді

Arduino іске қосылған кезде бағдарлама мәтіннің бірінші әрпіне қарайды. Және оның қайсысына байланысты оны Морзе кодында жазатын функцияларды атайды. Мысалы, нүктелік функция шақырылғанда, серво қозғалтқышы қаламды төмен қарай жылжытатын 160 -қа орнатылады, содан кейін ол 90 -ға орнатылады, бұл серіппені қаламмен бірге жылжытуға мүмкіндік береді. Егер сызықша функциясы шақырылса, серво қаламды төмен қарай жылжытады, содан кейін қадамдық қозғалтқыш қағазды тартатын дөңгелекті айналдырады, бұл қаламға сызықша жазуға мүмкіндік береді. Егер ғарыштық функциялардың бірі қадамдық қозғалтқыш деп аталады, бірақ қаламмен жоғары көтеріледі, ол қағазды тартады және әріптер мен сөздер арасында бос орын жасайды. Аяқтағаннан кейін ол келесі әріпке өтеді және сол процесті қайталайды. Саған ұнайды деп үміттенемін;)

Код

#қосу

#include #include #include const int stepsPerRevolution = 150; // Бұл қадамдық қозғалтқыштың айнымалысы String сөйлемі = «*сәлем»; // Бұл айнымалы мәнді әр түрлі сөздер жазу үшін өзгертіңіз, бірақ тек кіші әріптермен жазыңыз және сөзіңізді «*» деп бастаңыз Stepper myStepper (stepsPerRevolution, 8, 10, 9, 11); Сервис 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 first = сөйлем.indexOf ('*'); // бұл цикл жолдың әр әрпінен өтеді, содан кейін оны жазудың дұрыс әдістерін шақырады (int i = 0; i <jumla.length (); i ++) {if (сөйлем.чарАт (бірінші+і)) == 'a') {Serial.print («.-»); нүкте (); сызықша (); ғарыш(); } else if (сөйлем.чарАт (бірінші + i) == 'b') {Serial.print («-…»); сызықша (); нүкте (); нүкте (); нүкте (); ғарыш(); } else if (сөйлем.чарАт (бірінші + i) == 'c') {Serial.print («-.-.»); сызықша (); нүкте (); сызықша (); нүкте (); ғарыш(); } else if (сөйлем.чарАт (бірінші + i) == 'd') {Serial.print («-..»); сызықша (); нүкте (); нүкте (); ғарыш(); } else if (сөйлем.чарАт (бірінші + i) == 'e') {Serial.print («.»); нүкте (); ғарыш(); } else if (сөйлем.чарАт (бірінші + i) == 'f') {Serial.print («..-.»); нүкте (); нүкте (); сызықша (); нүкте (); ғарыш(); } else if (сөйлем.чарАт (бірінші + i) == 'g') {Serial.print («-.»); сызықша (); сызықша (); нүкте (); ғарыш(); } else if (сөйлем.чарАт (бірінші + i) == 'сағ) {Serial.print («….»); нүкте (); нүкте (); нүкте (); нүкте (); ғарыш(); } else if (сөйлем.чарАт (бірінші + i) == 'i') {Serial.print («..»); нүкте (); нүкте (); ғарыш(); } else if (сөйлем.чарАт (бірінші + i) == 'j') {Serial.print («.---»); нүкте (); сызықша (); сызықша (); сызықша (); ғарыш(); } else if (сөйлем.чарАт (бірінші + i) == 'k') {Serial.print («-.-»); сызықша (); нүкте (); сызықша (); ғарыш(); } else if (сөйлем.чарАт (бірінші + i) == 'l') {Serial.print («.-..»); нүкте (); сызықша (); нүкте (); нүкте (); ғарыш(); } else if (сөйлем.чарАт (бірінші + i) == 'm') {Serial.print («-»); сызықша (); сызықша (); ғарыш(); } else if (сөйлем.чарАт (бірінші + i) == 'n') {Serial.print («-.»); сызықша (); нүкте (); ғарыш(); } else if (сөйлем.чарАт (бірінші + i) == 'o') {Serial.print («---»); сызықша (); сызықша (); сызықша (); ғарыш(); } else if (сөйлем.чарАт (бірінші + i) == 'p') {Serial.print («.--.»); нүкте (); сызықша (); сызықша (); нүкте (); ғарыш(); } else if (сөйлем.чарАт (бірінші + i) == 'q') {Serial.print («--.-»); сызықша (); сызықша (); нүкте (); сызықша (); ғарыш(); } else if (сөйлем.чарАт (бірінші + i) == 'r') {Serial.print («.-.»); нүкте (); сызықша (); нүкте (); ғарыш(); } else if (сөйлем.чарАт (бірінші + i) == 's) {Serial.print («…»); нүкте (); нүкте (); нүкте (); ғарыш(); } else if (сөйлем.чарАт (бірінші + i) == 't') {Serial.print («-»); сызықша (); ғарыш(); } else if (сөйлем.чарАт (бірінші + i) == 'u') {Serial.print («..-»); нүкте (); нүкте (); сызықша (); ғарыш(); } else if (сөйлем.чарАт (бірінші + i) == 'v') {Serial.print («…-»); нүкте (); нүкте (); нүкте (); сызықша (); ғарыш(); } else if (сөйлем.чарАт (бірінші + мен) == 'w') {Serial.print («.--»); нүкте (); сызықша (); сызықша (); ғарыш(); } else if (сөйлем.чарАт (бірінші + i) == 'x') {Serial.print («-..-»); сызықша (); нүкте (); нүкте (); сызықша (); ғарыш(); } else if (сөйлем.чарАт (бірінші + мен) == 'y') {Serial.print («-.--»); сызықша (); нүкте (); сызықша (); сызықша (); ғарыш(); } else if (сөйлем.чарАт (бірінші + i) == 'z') {Serial.print («-..»); сызықша (); сызықша (); нүкте (); нүкте (); ғарыш(); } else if (сөйлем.чарАт (бірінші + 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 («бос орын»); }

Ұсынылған: