Բովանդակություն:

Arduino Morse Code Writer: 7 քայլ (նկարներով)
Arduino Morse Code Writer: 7 քայլ (նկարներով)

Video: Arduino Morse Code Writer: 7 քայլ (նկարներով)

Video: Arduino Morse Code Writer: 7 քայլ (նկարներով)
Video: REAL RACING 3 LEAD FOOT EDITION 2024, Հուլիսի
Anonim
Image
Image
Arduino Morse Code Writer
Arduino Morse Code Writer

Ես պատրաստել եմ ռոբոտ, որը կարող է ցանկացած տեքստ փոխակերպել Մորզեի կոդի և այնուհետև գրել այն: Այն պատրաստված է ստվարաթղթից և Lego- ից, իսկ էլեկտրոնիկայի համար ես օգտագործել եմ Arduino և ընդամենը երկու շարժիչ:

Պարագաներ

Arduino Uno տախտակ Stepper motor Micro servo SG90ULN2003 stepper motor վարորդ մոդուլ Էլեկտրամատակարարման մոդուլ Breadboard4 × Jumper լարեր 6 × իգական սեռի տղամարդկանց dupont լարեր 9V1A Adapter USB մալուխ Ստվարաթուղթ 2 × Փայտե դոդներ 2 × Springs Straw White paperLegoSuper սոսինձ glueենք գրիչ պահող) Մկրատ Դանակ

Քայլ 1: Հիմքի կառուցում

Հիմքի կառուցում
Հիմքի կառուցում
Հիմքի կառուցում
Հիմքի կառուցում
Հիմքի կառուցում
Հիմքի կառուցում

Սկսեք հիմքը կառուցելով: Իմը 4 գամասեղների լայնություն և 20 գամասեղներ են, այդ երկարություններով մեկ շերտ կառուցելուց հետո ես դրա շուրջը կառուցեցի մեկ գամասեղով լայնակողմանի սահման ՝ մի կողմում բաց թողնելով, որ տեղ թողնի քայլող շարժիչի համար, այնուհետև ավելացրի կղմինդր կտորներ դեպի միջին մաս, որտեղ թղթի ժապավենը կլինի: Lego- ի օգտագործումը այն դարձրեց շատ ամուր և հեշտ փոփոխելի: Թուղթը գլորելու համար ես կտրեցի A4 թղթի շերտեր ՝ 1,2 սմ լայնությամբ (ես ընտրեցի այս լայնությունը, քանի որ այն նույն լայնությունն է, ինչ ես օգտագործել էի Lego անիվը, կարող եք ձերը ավելի մեծ կամ փոքր դարձնել ՝ կախված ձեր անիվից) և ես դրանց ծայրերը սոսնձեցի միասին: մեկ շատ երկար շերտ կազմելու համար, այնուհետև այն փաթաթեցի անիվի շուրջը:

Քայլ 2: Servo կտոր

Servo կտորը
Servo կտորը
Servo կտորը
Servo կտորը
Servo կտորը
Servo կտորը

Այս քայլի համար ձեզ հարկավոր է

  • երկու փայտե աշտարակ 4 սմ երկարությամբ
  • երկու աղբյուր 2 սմ երկարությամբ
  • մեկ ծղոտ, որը կտրված է երկու կտորի ՝ յուրաքանչյուրը 2 սմ երկարությամբ
  • մեկ ստվարաթուղթ `12 սմ 4 սմ -ով
  • երկու ստվարաթուղթ 4 սմ 1.5 սմ չափսերով
  • մեկ ստվարաթուղթ `4 սմ 2 սմ -ով

Սկզբում կպցրեք դոդերը 4 -ից 1,5 կտորներից մեկին, այնուհետև զսպանակները և ծղոտները տեղադրեք dowels- ի մեջ, այնուհետև մյուս կողմից ստվարաթղթե կտորը կպցրեք ՝ ամեն ինչ տեղում պահելու համար:

Երկրորդ, 4 սմ 2 սմ չափսով կտորը կպցրեք ծղոտների վրա:

Երրորդ, շրջեք ամբողջ կտորը և սոսնձեք մի փոքր գմբեթով դրա հետևի մասում, ոչ թե մեջտեղում, այլ մի փոքր ձախ: (Մոռացա առաջին նկարի վրա ավելացնել փոքրիկ գագաթը)

Ի վերջո, կտրեք ստվարաթղթի մեծ կտորը սերվո շարժիչի առջևի չափով և կպցրեք շարժիչը, այնուհետև կպցրեք այն կտորը, որը մենք պատրաստել ենք dowels- ով, մեծ կտորի վրա, որպեսզի երբ սերվոն շարժվի, այն դրդի փոքր գագաթ ներքև, որն իր հերթին աղբյուրները նույնպես ներքև է մղում:

Ես վերջացրեցի 12 սմ 4 սմ կտորի ներքևի մասից մոտ 3 սմ կտրելով և դրան կպցնելով ևս երկու 4 սմ 1.5 սմ կտորով, այնուհետև այն ծածկեցի 5,5 սմ 4 սմ ստվարաթղթե կտորով: Եվ նշիչը պահելու համար ես պատրաստեցի մի փոքրիկ առաձգական խմբի օղակը և կպցրեցի այն ստվարաթղթի մի փոքր կտորի վրա, այնուհետև ես սոսնձեցի 4 սմ 2 սմ կտորով, որը կշարժվի ներքև, երբ սերվոն սկսվի: Այս լրացումները դադարեցրեցին նշիչը մի կողմից մյուսը շարժվելուց, երբ աղբյուրները վեր են բարձրանում:

Քայլ 3. Servo Motor- ի և Paper Roll- ի ավելացում հիմքին

Servo Motor- ը և Paper Roll- ը բազային ավելացնելով
Servo Motor- ը և Paper Roll- ը բազային ավելացնելով
Servo Motor- ը և Paper Roll- ը բազային ավելացնելով
Servo Motor- ը և Paper Roll- ը բազային ավելացնելով

Ես ևս երկու աղյուս ավելացրի հիմքի մի կողմում ՝ սերվոյի կտորը պահելու համար, և ես այն սոսնձեցի տեղում: Այնուհետև ես անիվը ավելացրեցի հիմքի հեռավոր ծայրին:

Քայլ 4. Կառուցեք Stepper Motor Frame- ը

Stepper Motor Frame- ի կառուցում
Stepper Motor Frame- ի կառուցում
Stepper Motor Frame- ի կառուցում
Stepper Motor Frame- ի կառուցում
Stepper Motor Frame- ի կառուցում
Stepper Motor Frame- ի կառուցում

Այս քայլը մի փոքր մարտահրավեր էր, քանի որ շարժիչը լիովին հարմարեցված չէր Lego- ի հետ: Այնուամենայնիվ, ես իսկապես կարողացա դա անել, օգտագործելով շարժիչի երկու անցքերը `այն ամրացնելու համար: Հաջորդը, ես Lego անիվը սոսնձեցի շարժիչի ծայրին, այնուհետև այն դրեցի բազայի կողքին այն կողմում, որը բաց էի թողել 1 -ին քայլում:

Քայլ 5: Ավարտելով հպումները

Վերջնական հպումներ
Վերջնական հպումներ
Վերջնական հպումներ
Վերջնական հպումներ
Վերջնական հպումներ
Վերջնական հպումներ
Վերջնական հպումներ
Վերջնական հպումներ

Անիվը ծածկելու համար ես ավելացրի երկու աղեղի կտոր `թուղթը տեղում ամրացնելու համար: Եվ ես ավելացրեցի երկու ավելի փոքր կամարի կտոր `մեկը` սլաքի շարժիչի լարերը պահելու համար, իսկ մյուսը `թուղթը պահելու համար: Ի վերջո, ես փոխեցի շարժիչի անիվը մի փոքր ավելի մեծ, որը թուղթն ավելի լավ էր տեղափոխում, քան հին անիվը:

Քայլ 6: Էլեկտրոնիկա

Էլեկտրոնիկա
Էլեկտրոնիկա
Էլեկտրոնիկա
Էլեկտրոնիկա

Վերջապես, դուք պետք է շարժիչները միացնեք Arduino- ին և վերբեռնեք ծածկագիրը:

Մենք կսկսենք servo շարժիչով, միացրեք շագանակագույն մետաղալարը (հիմնային մետաղալարը) GND կապին, այնուհետև կարմիր մետաղալարը (հոսանքի լարը) 5V պինին, իսկ նարնջագույն մետաղալարը (ազդանշանային մետաղալարը) ՝ Dig 5 -ին: կապում: Հաջորդը ՝ սլաքային շարժիչը, 1N1- ը միացրեք #11 -ին, 1N2- ը ՝ #10 -ին, 1N3- ը ՝ #9 -ին, 1N4- ը ՝ #8 -ին, 5V- ն ՝ հացահատիկի դրական կողմին, իսկ աղացած քորոցը ՝ բացասական կողմին: տախտակ. Եվ մի մոռացեք, որ էլեկտրամատակարարման մոդուլը միացնեք տախտակին `համոզվելով, որ դրա դրական և բացասական կողմերը ճիշտ են համընկնում տախտակի համապատասխան կողմերին: Եթե դուք մոռանաք դա անել, դուք կվերադարձնեք ձեր նախագծի ուժը, և դուք չեք ցանկանում դա անել:

Կոդի համար ես գրել եմ չորս մեթոդ, մեկը `կետ, մեկը` գծիկ և երկուսը `յուրաքանչյուր տառի և յուրաքանչյուր բառի միջև տարածություն թողնելու համար: Այդ կերպ, ես կարող եմ պարզապես անվանել այս մեթոդները, երբ դրանք ինձ պետք են, այլ ոչ թե նորից գրել յուրաքանչյուր տառի համար: Այնուհետև ես գրեցի տեքստի յուրաքանչյուր տառով անցնող մի օղակ և գրեցի այն: Նրա ներսում ես գրեցի if հայտարարություն յուրաքանչյուր տառի համար, բայց եթե նախընտրում եք, կարող եք այն գրել անջատիչ հայտարարության մեջ: Իհարկե, կարող եք ավելացնել ծածկագրին, որպեսզի ծրագիրը հնարավորություն տա կարդալ թվեր: Երբ բոլոր էլեկտրագծերը պատրաստ են, պարզապես պատճենեք և տեղադրեք ծածկագիրը ձեր IDE- ում: Մի մոռացեք տեղադրել stepper, servo և լարային գրադարաններ: Դրանից հետո դու լավ ես գնում:

Ինչպես է դա աշխատում

Երբ Arduino- ն սկսում է, ծրագիրը նայում է տեքստի առաջին տառին: և կախված նրանից, թե որն է այն, այն կանչում է այն գործառույթները, որոնք այն գրում են Մորզեի ծածկագրով: Օրինակ, երբ կետի գործառույթը կանչվում է, servo շարժիչը սահմանվում է 160 -ի վրա, որը գրիչը ներքև է տեղափոխում, այնուհետև այն դրվում է 90 -ի վրա, ինչը թույլ է տալիս, որ աղբյուրները վերադառնան վեր ՝ շարժելով գրիչը նրանց հետ: Եվ եթե գծանշման գործառույթը կոչվում է, սերվոն գրիչը ցած է տեղափոխում, այնուհետև քայլող շարժիչը պտտեցնում է անիվը, որը քաշում է թուղթը ՝ գրիչը գրելով գծիկ: Եվ եթե տիեզերական գործառույթներից մեկը կոչվում է քայլող շարժիչ, այն պտտվում է, բայց գրիչը դեպի վեր, այն ձգում է թուղթը ՝ տարածություն կազմելով տառերի կամ բառերի միջև: Ավարտելուց հետո այն անցնում է հաջորդ տառին և կրկնում նույն գործընթացը: Հուսով եմ, որ Ձեզ դուր է գալիս այն;)

Ծածկագիրը

#ներառում

#ներառել #ներառել #ներառել const int stepsPerRevolution = 150; // Սա փոփոխական է քայլող շարժիչի համար Լարային նախադասություն = "*բարև"; // Փոփոխեք այս փոփոխականը ՝ տարբեր բառեր գրելու համար, բայց գրեք միայն փոքր տառերով և սկսեք ձեր բառը «*» Stepper myStepper- ով (stepsPerRevolution, 8, 10, 9, 11); Servo myServo; // Սա այն մեթոդն է, որը ստիպում է ռոբոտին գրել dot void dot () {Serial.println («կետի սկիզբ»); myServo.write (160); ուշացում (1000); myServo.write (90); ուշացում (1000); myStepper.step (stepsPerRevolution); ուշացում (1000); Serial.println («կետը կատարված է»); } // Սա այն մեթոդն է, որը ստիպում է ռոբոտին գրել գծիկ void dash () {Serial.println ("dash dash start"); 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 («տարածությունը կատարված է»); } // Սա այն մեթոդն է, որը ստիպում է ռոբոտին ավելի մեծ տարածք թողնել յուրաքանչյուր բառի միջև void bigSpace () {myServo.write (90); myStepper.step (250); ուշացում (1000); } void setup () {// տեղադրեք ձեր տեղադրման կոդը այստեղ ՝ մեկ անգամ գործարկելու համար. Serial.begin (9600); myStepper.setSpeed (100); myServo.attach (5); int առաջին = նախադասություն.indexOf ('*'); // this for loop- ն անցնում է տողի յուրաքանչյուր տառով, այնուհետև կոչ է անում այն ճիշտ գրելու մեթոդներ (int i = 0; i <նախադասություն. երկարություն (); i ++) {if (նախադասություն. CharAt (առաջին+i) == 'ա') {Serial.print (".-"); կետ (); գծիկ (); տարածք (); } else if (նախադասություն. CharAt (առաջին + i) == 'բ') {Serial.print ("-…"); գծիկ (); կետ (); կետ (); կետ (); տարածք (); } else if (նախադասություն. charAt (առաջին + i) == 'c') {Serial.print ("-.-."); գծիկ (); կետ (); գծիկ (); կետ (); տարածք (); } else if (նախադասություն. charAt (առաջին + i) == 'd') {Serial.print ("-.."); գծիկ (); կետ (); կետ (); տարածք (); } else if (նախադասություն. charAt (առաջին + i) == 'e') {Serial.print ("."); կետ (); տարածք (); } else if (նախադասություն. charAt (առաջին + i) == 'f') {Serial.print ("..-."); կետ (); կետ (); գծիկ (); կետ (); տարածք (); } else if (նախադասություն. charAt (առաջին + i) == 'g') {Serial.print ("-."); գծիկ (); գծիկ (); կետ (); տարածք (); } else if (նախադասություն. charAt (առաջին + i) == 'h') {Serial.print ("…."); կետ (); կետ (); կետ (); կետ (); տարածք (); } else if (նախադասություն. charAt (առաջին + i) == 'i') {Serial.print (".."); կետ (); կետ (); տարածք (); } else if (նախադասություն. charAt (առաջին + i) == 'j') {Serial.print (".---"); կետ (); գծիկ (); գծիկ (); գծիկ (); տարածք (); } else if (նախադասություն. charAt (առաջին + i) == 'k') {Serial.print ("-.-"); գծիկ (); կետ (); գծիկ (); տարածք (); } else if (նախադասություն. charAt (առաջին + i) == 'l') {Serial.print (".-.."); կետ (); գծիկ (); կետ (); կետ (); տարածք (); } else if (նախադասություն. charAt (առաջին + i) == 'm') {Serial.print ("-"); գծիկ (); գծիկ (); տարածք (); } else if (նախադասություն. charAt (առաջին + i) == 'n') {Serial.print ("-."); գծիկ (); կետ (); տարածք (); } else if (նախադասություն. charAt (առաջին + i) == 'o') {Serial.print ("---"); գծիկ (); գծիկ (); գծիկ (); տարածք (); } else if (նախադասություն. charAt (առաջին + i) == 'p') {Serial.print (".--."); կետ (); գծիկ (); գծիկ (); կետ (); տարածք (); } else if (նախադասություն.charAt (առաջին + i) == 'q') {Serial.print ("--.-"); գծիկ (); գծիկ (); կետ (); գծիկ (); տարածք (); } else if (նախադասություն. charAt (առաջին + i) == 'r') {Serial.print (".-."); կետ (); գծիկ (); կետ (); տարածք (); } else if (նախադասություն. charAt (առաջին + i) == 's') {Serial.print ("…"); կետ (); կետ (); կետ (); տարածք (); } else if (նախադասություն. charAt (առաջին + i) == 't') {Serial.print ("-"); գծիկ (); տարածք (); } else if (նախադասություն.charAt (առաջին + i) == 'u') {Serial.print ("..-"); կետ (); կետ (); գծիկ (); տարածք (); } else if (նախադասություն.charAt (առաջին + i) == 'v') {Serial.print ("…-"); կետ (); կետ (); կետ (); գծիկ (); տարածք (); } else if (նախադասություն. charAt (առաջին + i) == 'w') {Serial.print (".--"); կետ (); գծիկ (); գծիկ (); տարածք (); } else if (նախադասություն. CharAt (առաջին + i) == 'x') {Serial.print ("-..-"); գծիկ (); կետ (); կետ (); գծիկ (); տարածք (); } else if (նախադասություն. CharAt (առաջին + i) == 'y') {Serial.print ("-.--"); գծիկ (); կետ (); գծիկ (); գծիկ (); տարածք (); } else if (նախադասություն. charAt (առաջին + i) == 'z') {Serial.print ("-.."); գծիկ (); գծիկ (); կետ (); կետ (); տարածք (); } else if (նախադասություն. charAt (առաջին + i) == '') {Serial.print ("/"); bigSpace (); }}} void loop () {// այստեղ ոչինչ չգրես}

Քայլ 7: Խնդիրների վերացում

Անիվը չի շարժվում

Անիվի և թղթի միջև կարող է չափազանց մեծ շփում լինել, փորձեք մի փոքր բարձրացնել անիվը կամ փոխել այն:

Անիվը քաշում է թուղթը, բայց այն շարունակում է պտտվել ՝ առանց թուղթը քաշելու

Համոզվեք, որ անիվը սոսնձել եք քայլող շարժիչի կենտրոնում

Կետերն ու գծերը միացված են

Ստուգեք, արդյոք կետի, գծիկի և տարածության գործառույթները ճիշտ են գրված, դրանք պետք է լինեն այսպիսին.

// Սա այն մեթոդն է, որը ստիպում է ռոբոտին գրել dotvoid կետ () {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 («տարածքը կատարված է»); }

Խորհուրդ ենք տալիս: