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

UCL Embedded - B0B the Linefollower: 9 Steps
UCL Embedded - B0B the Linefollower: 9 Steps

Video: UCL Embedded - B0B the Linefollower: 9 Steps

Video: UCL Embedded - B0B the Linefollower: 9 Steps
Video: How To Make A DIY Arduino Obstacle Avoiding Car At Home 2024, Հուլիսի
Anonim
UCL Embedded - B0B the Linefollower
UCL Embedded - B0B the Linefollower

Սա B0B է:*

B0B- ն ընդհանուր ռադիոկառավարվող մեքենա է, որը ժամանակավորապես ծառայում է գծերի հետևող ռոբոտի հիմքին:

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

Ի տարբերություն գծերի հետևող շատ այլ ռոբոտների, B0B- ն նաև հավաքում է տվյալներ և ուղարկում դրանք WiFi- ի միջոցով:

Լիովին գերբեռնված հոբբի նախագծի համար, այն ներառում է մի շարք առարկաներ, որոնք կարող եք հետաքրքիր համարել: Այս ուղեցույցը նկարագրում է նրա ծնունդը, գործառույթները և ինչպես կարող ես նրան նման լինել:

Այն նաև ներառում է զայրացած լինել տարբեր էլեկտրոնիկայի վրա ՝ մեր ուզածի պես չաշխատելու համար, և այն քայլերը, որոնք մենք ձեռնարկեցինք այդ դժվարությունները հաղթահարելու համար (ես նայում եմ ձեզ ESP 8266-01):

Գոյություն ունի նախագիծն աշխատեցնելու 2 կոդ: Առաջին կոդը ESP8266 մոդուլի համար է, որը մենք օգտագործում ենք Arduino- ն որպես ծրագրավորող, իսկ երկրորդ ծածկագիրը գործելու է Arduino- ի վրա:

Քայլ 1: Բաղադրիչներ

Այս նախագծի համար ձեզ հարկավոր է.

Սարքավորումներ:

• 1x ռադիոկառավարիչ մեքենա, (պետք է ունենա ESC և ղեկային սերվո):

Մենք օգտագործում էինք Traxxas 1/16 E-Revo VXL- ի հիմնական բաժնետոմսերը, հիմնականում այն պատճառով, որ դա այն էր, ինչ մենք ունեինք և լիովին վստահ էինք, որ կկարողանանք վերահսկել այն Arduino- ով: Նաև այն պատճառով, որ այն կավարտի ոչ աննշան քանակությամբ լրացուցիչ սարքավորումներով, մենք վստահ էինք, որ դա 1/16 E-Revo- ի համար խնդիր չի լինի:

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

• Մի տոննա ժապավեն:

Գույնը պետք է հնարավորինս հակադրի հատակին: Մեր փորձարկման միջավայրում մենք օգտագործեցինք սպիտակ ժապավեն մուգ հատակին:

• 1x Arduino Mega 2560:

Փոքրիկ Arduino- երը, հավանաբար, նույնպես լավ են, բայց դուք սեղմված կլինեք:

• 1x մեծ հացի տախտակ:

Մեկը բավական է, բայց մենք ունեինք նաև ավելի փոքր ՝ մյուս լարման էլեկտրահաղորդման գծերն առանձնացնելու համար ՝ օգտագործողի սխալի ռիսկը նվազեցնելու համար:

• 1x TCRT5000 IR անալոգային սենսոր (օգտագործվում է բախումներից խուսափելու համար):

Brandշգրիտ ապրանքանիշը/մոդելը նշանակություն չունի, արդյոք դա Arduino- ի հետ համատեղելի է և չափում է հեռավորությունը: Որոնեք հիմնաբառեր, ինչպիսիք են «Հեռավորություն», «խոչընդոտ» տվիչը: Տեխնիկապես թվային տվիչը կաշխատի նաև կոդի աննշան փոփոխությունների դեպքում, բայց մենք օգտագործում ենք անալոգային:

• 1x կամ 2x Gravity: Analog Grayscale Sensor v2

Մեկը անհրաժեշտություն է գծի հետևորդի համար: Modelշգրիտ մոդելը նշանակություն չունի, քանի դեռ նայում է արտացոլված լույսի ուժգնությանը և թողարկում անալոգային ազդանշան: Երկրորդը «սենյակի» հայտնաբերման համար այնքան էլ լավ չէր աշխատում և կարող էր բաց թողնվել, կամ այլընտրանքային տարբերակ, ինչպիսին է RGB գույնի սենսորը, ենթադրաբար ավելի լավ էֆեկտի համար: Մենք դեռ պետք է փորձարկենք սա:

• 1 x ESP 8266-01:

Առկա են ESP 8266- ի բազմաթիվ տարբերակներ: Մենք ունենք միայն 8266-01-ի փորձ, և չենք կարող երաշխավորել, որ ESP ծածկագիրը կաշխատի այլ տարբերակով:

• 1 x ESP8266-01 Wi-Fi վահան:

Տեխնիկապես կամընտիր է, բայց եթե սա չօգտագործեք, Wi-Fi մոդուլի հետ կապված ամեն ինչ շատ ավելի կբարդանա: Ուղեցույցը, այնուամենայնիվ, ենթադրելու է, որ դուք ունեք դա (եթե ոչ, գտեք ուղեցույցները առցանց ՝ ESP-01- ը Arduino- ին ճիշտ միացնելու համար), քանի որ դա սխալ անելը կարող է և հավանաբար կվնասի մոդուլը:

• Մարտկոցներ մեքենայի համար և մարտկոցներ ՝ լրացուցիչ էլեկտրոնիկայի սնուցման համար:

Մենք օգտագործել ենք զույգ 2.2 AH հզորություն, 7.4V Lipo մարտկոցներ ՝ զուգահեռաբար ամեն ինչ սնուցելու համար: Դուք պետք է կարողանաք օգտագործել այն մարտկոցները, որոնք սովորաբար կօգտագործեիք ձեր նախընտրած մեքենայի հետ: Եթե դուք 5 Վ -ից բարձր եք, բայց 20 Վ -ից ցածր, հզորությունը ավելի կարևոր է, քան անվանական լարումը:

• Շատ jumper մալուխներ:

Ես հրաժարվել եմ դրանց ճշգրիտ թիվը հաշվելուց: Եթե կարծում եք, որ բավականաչափ ունեք, հավանաբար չունեք:

• Ի վերջո, ամեն ինչ ամրացնելու համար ձեզ հարկավոր է տեղադրել Arduino- ն, տվիչները, տախտակը (ներ) ը և Wi-Fi- մոդուլը ձեր նախընտրած մեքենայի վրա: Ձեր արդյունքը կարող է տարբեր լինել ՝ կախված այն բանից, թե ինչ եք օգտագործում որպես հիմք և ինչ նյութեր կան:

Մենք օգտագործեցինք.

• Zip փողկապներ:

• Որոշ սուպեր սոսինձ:

• Թղթի կամ խեժի փոքր կտորներ, որոնք ունեինք համապատասխան տրամագծով:

• Մասոնական հին թիթեղը նկարի շրջանակից ՝ կտրված չափի:

• Մի փոքր ավելի կպչուն ժապավեն:

• Ձեր նախընտրած ռադիոկառավարվող մեքենայի վրա աշխատելու համար անհրաժեշտ ցանկացած գործիք:

Մենք հիմնականում օգտագործում էինք մի փոքր պտուտակահանի հավաքածու ՝ մի քանի բիթով, բայց երբեմն ստիպված էինք դուրս հանել մեքենայի հետ եղած գործիքների հավաքածուն:

Softwareրագրային ապահովում:

• հանգույց-կարմիր

Տվյալների հավաքագրման կարևոր մաս:

• MQTT սերվեր:

Միջին մարդը մեր մեքենայի և Node-red- ի միջև: Սկզբում թեստավորման համար մենք օգտագործեցինք test.mosquitto.org կայքը

Հետագայում մենք օգտագործեցինք.

• CloudMQTT.com

Սա շատ ավելի հուսալի էր, որը ավելին քան փոխհատուցվում էր մի փոքր ավելի բարդ լինելը:

• WampServer.

Տվյալների հավաքագրման վերջին մասը: Մասնավորապես, մենք կօգտագործենք նրա SQL տվյալների բազան ՝ մեր հավաքած տվյալները պահելու համար:

Քայլ 2: Էլեկտրական դիագրամ

Էլեկտրական դիագրամ
Էլեկտրական դիագրամ

Քայլ 3: Ֆիզիկական շինարարություն

Ֆիզիկական շինարարություն
Ֆիզիկական շինարարություն
Ֆիզիկական շինարարություն
Ֆիզիկական շինարարություն
Ֆիզիկական շինարարություն
Ֆիզիկական շինարարություն

Մեր լուծումը ունի ֆիզիկական հավաքման ուղիղ մոտեցում:

Օրիգինալ ընդունիչը և դրա անջրանցիկ պարիսպը հանվել են RC մեքենայից, քանի որ դրա կարիքը չկա:

Մենք պարզեցինք, որ առջևի անիվների միջև կա մեկ հարմար տեղ մեր գծի հետևման սենսորի համար, ուստի մենք այն ամրացրինք տեղում ՝ առջևի սահքի ափսեի վերևում մի ziptie թեքելով:

Սենսորը, որը մենք օգտագործում ենք բախման դեմ, մի տեսակ խրված է առջևի բամպերի հետևում: Այն դեռևս պաշտպանված է հարվածներից, և դրա շփումը տեղին է: Այն ավարտվում է անհամբեր առաջ նայելով դեպի վերև: Սա կատարյալ է:

Մասոնական ափսեն, (նկարի հին շրջանակի հետևի ափսե), վերևում ունի թղթի/խեժի փոքր հատվածներ, որոնք կտրված են չափսերով և սոսնձված են ներքևի մասում: Դրանք համընկնում են մարմնի սյուների ամրակների հետ և պարզապես նստում են վերևում ՝ ամեն ինչ ապահով պահելով: Ենթադրելով, որ խողովակը ափսեի վրա ամրացնող սոսինձը պահվում է, և որ այն չափազանց չթեքվի, այն կմնա տեղում: Հարկ է նաև նշել, որ ափսեը գտնվում է անիվների և բամպերի պաշտպանիչ ոլորտի սահմաններում: Arduino Mega- ն և երկու տախտակները ամրացված են ափսեի վրա կամ երկակի կողային ժապավենով, կամ կպչուն ժապավենի մի հանգույցով, որը սոսնձված է:

WiFi- մոդուլի ապահովման համար հատուկ միջոցներ չեն ձեռնարկվել: Դա մերը չէ, այնպես որ այն սոսնձելը կամ այն կպցնելը ավելորդ համարվեց, քանի որ այն այնքան թեթև է, որ շատ չի շարժվի, և լարերը բավական են այն տեղում պահելու համար:

Ի վերջո, մենք ունենք սենսոր `« սենյակներ »հայտնաբերելու համար, որը հետևի անիվներից մեկի օգնությամբ ամրացվել է կախոցի բաղադրիչներին: Գործողության ընթացքում դա պետք է հեռու լինի գծից, որը մեքենան օգտագործում է նավարկելու համար:

Քայլ 4: ESP8266 մոդուլ

ESP8266 Մոդուլ
ESP8266 Մոդուլ
ESP8266 Մոդուլ
ESP8266 Մոդուլ

WiFi մոդուլը ՝ ESP8266, պահանջում է երկու տարբեր քորոցների կարգավորում: Մեկ կարգավորումը պետք է օգտագործվի մոդուլը նոր ծրագրով բռնկելիս և Arduino Mega 2560 -ը որպես ծրագրավորող օգտագործելիս: Մյուս կարգավորումը մոդուլի համար է, երբ այն օգտագործվում է և տեղեկատվություն է ուղարկում MQTT բրոքերին:

Օգտագործելով Arduino IDE- ն ՝ ESP8266 մոդուլում կոդը վերբեռնելու համար, ձեզ հարկավոր է տեղադրել տախտակի կառավարիչ և լրացուցիչ տախտակների կառավարիչ

Տախտակի կառավարման ներքո տեղադրեք esp8266 տախտակի կառավարիչը: Այն հեշտությամբ կգտնվի ՝ որոնելով «esp»: Կարևոր է, եթե դուք տեղադրեք 2.5.0 տարբերակը ՝ ոչ հին, ոչ ավելի նոր:

Տախտակների կառավարչի լրացուցիչ URL- ների կարգավորումների ներքո պատճենեք այս տողում.

arduino.esp8266.com/stable/package_esp8266c…

ESP8266 մոդուլում որևէ բան վերբեռնելու համար ձեզ հարկավոր է օգտագործել հատուկ կապի կարգավորում, որպեսզի կարողանաք լուսավորել մոդուլը: Սա պետք է արվի ամեն անգամ, երբ ցանկանում եք փոփոխություն կատարել մոդուլում աշխատող ընթացիկ կոդի վրա: Մի մոռացեք տախտակի կառավարիչից ընտրել ճիշտ ESP8266 մոդուլը, նախքան մոդուլը թարթելը: Այս նախագծում մենք ընտրեցինք ընդհանուր ESP8266 տախտակը: Մոդուլի առկայծման համար քորոցների տեղադրումը գտնվում է այս հատվածի առաջին նկարի վրա:

ESP8266 մոդուլը բռնկելուց հետո դուք պետք է փոխեք քորոցի կարգավորումը: Կարող եք նաև ընտրել ադապտեր ՝ կարգավորումն ավելի դյուրին դարձնելու համար: Այս նախագծում մենք ընտրեցինք ունենալ ադապտեր, երբ մոդուլն աշխատում էր: Այս հատվածի երկրորդ նկարի վրա տեղադրված է ադապտեր կապի կարգավորումը:

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

Քայլ 5: Arduino

WiFi մոդուլը կազմաձևելուց հետո մենք նայում ենք այն ծրագրին, որը կօգտագործվի RC մեքենայի շարժիչի և servo- ի վերահսկման համար: Մեքենան կարձագանքի կենտրոնական սենսորից ստացված մոխրագույն մասշտաբի տեղեկատվության համաձայն, որը այս նախագծում հայտնի է նաև որպես «Գծի դետեկտոր»: Պարզապես այն նպատակ ունի պահպանել Գծային դետեկտորից ստացված տեղեկատվությունը մոտակայված արժեքի մոտ, որը հավասար է լույսի և խավարի կամ այս նախագծի ՝ սպիտակ և սևի փոփոխության ժամանակ գրանցված տեղեկատվությանը: Այսպիսով, եթե արժեքը շատ է տարբերվում իրարից, սերվոյի համապատասխան ելքը մեքենան կուղղորդի գծի կանխադրված արժեքի մոտ:

Hasրագիրն ունի երկու կոճակ, որը գործում է որպես RC մեքենայի մեկնարկի և կանգառի կոճակ: Տեխնիկապես «կանգառի» կոճակը «զինելու» կոճակ է, որն իր առումով հավասար է շարժիչին ուղարկված PWM արժեքին, որն առաջացնում է RC մեքենայի կանգառ: Մեկնարկի կոճակը ուղարկում է PWM արժեք, որը հավասար է RC մեքենային, որը հազիվ է առաջ շարժվում, քանի որ այն շատ արագ կշարժի, եթե այն մեծ թափ ստանա:

Բախման խուսափման դետեկտորը ավելացվում է RC մեքենայի առջևի մասում ՝ պարզելու համար, թե արդյոք առջևի ճանապարհը պարզ է, թե ոչ: Եթե այն արգելափակված է, RC մեքենան կանգ կառնի մինչև խոչընդոտը չվերանա/հեռացվի: Դետեկտորի անալոգային ազդանշանը օգտագործվում է որոշելու, թե ինչ -որ բան խոչընդոտում է ճանապարհը, թե ոչ, և այն չափանիշ է դառնում, որպեսզի կարողանաք նաև առաջ շարժվել, ինչպես նաև կանգ առնելը:

Երկրորդ գորշ սանդղակի սենսորը `« Սենյակի դետեկտոր », օգտագործվում է` պարզելու համար, թե որ սենյակ է մտել RC մեքենան: Այն գործում է նման սկզբունքով, ինչպես գծի դետեկտորը, բայց այն չի փնտրում լույսի և խավարի միջև փոփոխություն, այլ որոշակի սահմաններում գտնվող արժեքներ, որոնք համապատասխանում են տարբեր սենյակներին `կախված սենյակի դետեկտորից նկատվող արժեքից:

Վերջապես, ծրագիրը ստեղծում է սենսորներից ստացված տեղեկատվության գիծը WiFi մոդուլի համար `այն կարդալու և այնուհետև ուղարկելու համար MQTT բրոքերին: Տեղեկատվության տողը ստեղծվում է որպես տող և գրվում է համապատասխան սերիայի վրա, որի WiFi մոդուլը միացված է: Կարևոր է, որ սերիալին գրելն այնքան հաճախ լինի, որքան WiFi մոդուլը կարող է կարդալ մուտքային հաղորդագրությունը, բայց հիշեք, որ այս ծածկագրում որևէ ուշացում չկիրառեք, քանի որ դա կխանգարի RC մեքենայի ՝ գծին հետևելու ունակությանը: Փոխարենը օգտագործեք «millis» - ը, քանի որ այն թույլ կտա ծրագիրը գործարկել առանց հապաղման, սակայն Arduino- ի միացման պահից որոշված միլիոնի անցնելուց հետո հաղորդագրություն կգրվի սերիալին ՝ առանց ծածկագրի ծածկագրման նույն ձևով:

Arduino Mega 2560- ի ծածկագիրը.

Քայլ 6: MySQL տվյալների շտեմարան

WampServer- ը Windows- ի համար վեբ զարգացման միջավայր է, որը թույլ է տալիս մեզ ծրագրեր ստեղծել PHP- ով և MySQL տվյալների բազայով: PhpMyAdmin- ը մեզ թույլ է տալիս հեշտությամբ կառավարել մեր տվյալների բազաները:

Սկսելու համար այցելեք ՝

Այս նախագծում մենք օգտագործում ենք 3.17 x64 բիթ տարբերակ Windows- ի համար: Տեղադրվելուց հետո համոզվեք, որ բոլոր ծառայություններն աշխատում են, ինչը նշանակում է, որ փոքր պատկերակը կարմիրի կամ նարնջի փոխարեն կանաչ է դառնում: Եթե պատկերակը կանաչ է, ապա կարող եք մուտք գործել PhpMyAdmin ՝ ձեր MySQL տվյալների բազան կառավարելու համար:

Մուտք գործեք MySQL ՝ օգտագործելով PhpMyAdmin և ստեղծեք նոր տվյալների բազա: Անվանեք այն ինչ -որ տեղին, որը կարող եք հիշել, այս նախագծում այն կոչվում էր «line_follow_log»: Տվյալների բազան ստեղծելուց հետո դուք պետք է աղյուսակ ստեղծեք տվյալների բազայում: Համոզվեք, որ սյունակների քանակը տեղավորվում է: Նախագծում մենք օգտագործում ենք 4 սյունակ: Մեկ սյունակը նախատեսված է ժամանակային նշանի համար, իսկ վերջին երեքը օգտագործվում են մեքենայից տվյալները պահելու համար: Յուրաքանչյուր սյունակի համար օգտագործեք տվյալների համապատասխան տեսակը: Usedամկետային նշման սյունակի համար օգտագործեցինք «երկարատեքստ», իսկ մնացածի համար «միջին տեքստ»:

Դա պետք է լինի այն ամենը, ինչ պետք է անեք PhpMyAdmin- ում և MySQL- ում: Հիշեք ձեր տվյալների բազան և Node-Red- ի մասին բաժնի աղյուսակը:

Քայլ 7: Հանգույց-կարմիր

Տվյալների հավաքագրումը կարգավորելու համար մենք կօգտագործենք բավականին պարզ հոսք Node-red- ով: Այն միանում է մեր MQTT սերվերին և գրում մեր MYSQL տվյալների բազային:

Դա անելու համար մեզ անհրաժեշտ են մի քանի ներկապնակ ՝ տարբեր գործառույթների աշխատանքի համար, և մեզ անհրաժեշտ է մի քանի փաստացի կոդ այն գործարկելու համար:

Առաջին բաները առաջին հերթին: Մեզ պետք են հետևյալ պալետները:

Node-red-contrib-mqtt-broker: Սա կապ է մեր MQTT բրոքերի հետ:

Node-red-dashboard: Մեր վահանակը, որն անհրաժեշտ է հավաքված տվյալները տեսողականորեն ներկայացնելու համար:

Node-red-node-mysql: Մեր կապը SQL տվյալների բազայի հետ:

Սա չի նշանակում լինել հանգույց-կարմիրի լիարժեք ուղեցույց, բայց ես կբացատրեմ, թե ինչ է անում հանգույց-կարմիր հոսքը:

Վաղ, մենք խնդիրներ ունեինք մեր ընտրովի MQTT սերվերի հետ, որը մահանում/անջատվում էր, կարծես պատահականորեն, ինչը ցանկացած փոփոխություն անելը հիասթափեցնող ջանք էր դարձնում, քանի որ անհասկանալի էր, արդյոք փոփոխությունները ձեռնտու էին, թե ոչ, երբ արդյունքը չէինք տեսնում: Այսպիսով, «Սերվերը մահացե՞լ է» կոճակը: ներարկում է «Ոչ» հետևյալ բլոկը այն ներարկում է մեր MQTT սերվերին: Եթե այն մեռած չէ, «Ոչ» -ը կհայտնվի Debug պատուհանում: Սա արվում է ոչ միայն փորձարկելու, այլ Node-red- ին ստիպելու համար փորձել նորից միանալ MQTT սերվերին:

«Փորձարկման տողը» կոստյումի լար է ուղարկում MQTT բրոքերին: Մենք այս տողը ձևաչափեցինք այնպես, ինչպես այն, ինչ կստանանք Arduino- ից: Սա ավելի հեշտ կլիներ կարգավորել հաղորդագրությունները վերծանող ցանցը ՝ առանց նախագծի գործարկման, տվյալների հավաքման անհրաժեշտության:

Աշխատանքային տարածքի վերջին հոսքը կարելի է բաժանել երկու հատվածի: Ներքևի մասնաճյուղը պարզապես կարդում է հավաքվող հաղորդագրությունները, տեղադրում դրանք վրիպազերծման պատուհանում և պահում դրանք SQL սերվերում:

Միացված անջատիչների մեծ ցանց, որը հետևում է ֆունկցիոնալ հանգույցին, եթե այնտեղ տեղի է ունենում իրական «կախարդանքը»:

Շարունակվող գործառույթը կարդում է մուտքային տողը ՝ այն կիսելով յուրաքանչյուր կիսակոնկոնի հետ և հատվածները փոխանցում յուրաքանչյուր ելքի վրա: Հետևյալ անջատիչները փնտրում են երկու տարբեր մուտքային տեղեկություններից մեկը: Մի կոնկրետ տեղեկատվություն միշտ փոխանցվում է մեկ ելքից, մյուս տարբերակը թողնում է երկրորդ ելքով: Դրանից հետո անջատիչների բլոկների երկրորդ խումբն է: Նրանք կակտիվանան միայն մեկ հատուկ մուտքագրմամբ, և դուրս կգան այլ բանով:

Օրինակ ՝ «խոչընդոտ», ինչպես և մյուսները երկուական ընտրություն են, կամ պարզ է վարելը, կամ ոչ: Այսպիսով, այն կստանա 0, կամ 1. A 0 կուղարկվի «հստակ» մասնաճյուղ, 1 -ը կուղարկվի «խոչընդոտված» մասնաճյուղ: «Մաքրել», «Արգելափակված» անջատիչները, ակտիվացված լինելու դեպքում, համապատասխանաբար հստակ, մաքուր կամ խոչընդոտված ինչ -որ բան են տալիս: Կանաչ ընթացող բլոկները կփակցվեն վրիպազերծման պատուհանում, իսկ կապույտը ՝ մեր վահանակին:

«Կարգավիճակի» և «գտնվելու վայրի» մասնաճյուղերը գործում են նույն կերպ:

Քայլ 8: MQTT բրոքեր

Բրոքերը սերվեր է, որը հաճախորդներից ուղարկում է հաղորդագրությունները համապատասխան նպատակակետային հաճախորդներին: MQTT բրոքերն այն է, որտեղ հաճախորդները օգտագործում են MQTT գրադարանը ՝ ցանցի միջոցով միջնորդին միանալու համար:

Այս նախագծի համար մենք ստեղծեցինք MQTT բրոքեր ՝ օգտագործելով CloudMQTT ծառայությունը ՝ «Cute Cat» տարբերակի անվճար բաժանորդագրությամբ: Այն ունի իր սահմանափակումները, բայց մենք չենք գերազանցում այս նախագծում ընդգրկվածներին: WiFi մոդուլը կարող է միանալ բրոքերին և միջնորդին, այնուհետև ուղարկել հաղորդագրությունները համապատասխան նպատակակետային հաճախորդի: Այս դեպքում հաճախորդը մեր Node-Red- ն է: CloudMQTT ծառայությունը սահմանում է օգտվողի անուն և գաղտնաբառ իրենց սերվերի համար, ուստի մեզ երաշխավորված է ավելի բարձր անվտանգություն: Հիմնականում նշանակում է, որ միայն օգտվողի անուն և գաղտնաբառ ունեցողները կարող են մուտք գործել այս հատուկ CloudMQTT ծառայություն: Օգտվողի անունն ու գաղտնաբառը վճռորոշ նշանակություն ունեն ESP8266 կոդի վրա կապը ստեղծելիս, ինչպես նաև Node-Red- ում:

Բրոքերի կողմից ստացված հաղորդագրությունների ընթացիկ վիճակագրությունը հաճելի հատկություն է, որը կարող է օգտագործվել ՝ տեսնելու համար, թե որքանով է ձեր բաժանորդագրության պլանը լավ կառավարում այն տեղեկատվությունը, որը նա ուղղորդում է:

Գեղեցիկ առանձնահատկությունն այն է, որ միջնորդից հաղորդագրություններ ուղարկեք WiFi մոդուլին, բայց մենք չենք օգտագործել այս նախագծում:

Քայլ 9: Hobby Electronics

Նախքան սկսելը մենք գիտեինք անցյալ նախագծից, որ ղեկի սպասարկիչը կարող է կառավարվել Arduino- ից PWM ազդանշանով, ունենալով նման միացում և միանալով նույն ռադիոընդունիչին տարբեր ալիքներին, ենթադրեցինք արագության էլեկտրոնային կառավարում (ESC- ից այժմ), որը վերահսկում է շարժիչը, նույն կերպ կարելի է կառավարել PWM- ի միջոցով Arduino- ից:

Այս տեսությունը ստուգելու համար մենք սարքում ենք Arduino- ի փոքր ուրվագիծը: Էսքիզը կարդում է պոտենցիոմետրից անալոգային մուտքագրումը, արժեքը վերափոխում է 0 -ից, 1024 -ից 0, 255 -ի և արդյունքում ստացված արժեքը թողնում է PWM քորոցին ՝ օգտագործելով analogWrite (), մինչդեռ R/C մեքենան փոքր տուփի վրա էր և անիվները հանված են:

Կաթսայի հաշվիչի միջակայքն անցնելուց հետո ESC- ն կարծես «արթնացավ», և մենք կարող էինք այն վեր ու վար գցել, մենք նաև Arduino- ին հանձնեցինք արժեքները սերիական միացման վրա, որպեսզի կարողանանք դրանք վերահսկել:

Թվում էր, թե ESC- ին դուր չեն գալիս որոշակի շեմից ցածր արժեքները, այս դեպքում `128 -ը: Այն 191 ազդանշանը տեսնում էր որպես չեզոք շնչափող, իսկ 255 -ը` առավելագույն շնչափող:

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

Պոտենցիոմետրը շրջանցելը և կոդի մեջ ֆիքսված արժեք դնելը, սակայն, չաշխատեց: Բաժնետոմսերի ESC- ն պարզապես թարթեց և չշարժեց շարժիչը, «կարգավորեք շնչափողի զարդանախշը» `համաձայն ձեռնարկի:

Uriousայրահեղ դժվարությունների նկարահանումները, տարբեր արժեքներ նետելը, տարբեր լարերի օգտագործումը և նույնիսկ PWM հաճախականությունը փոխելու փորձերը, որոնցով Arduino- ն օգտագործում է, ավելի տարօրինակություն բերեց:

Թվում էր, թե դա ընդհատվող հարց էր, երբեմն այն կանցներ, մյուս անգամ հրաժարվում էր որևէ բան անել: Այն պարզապես շարունակեց թարթել: Սկզբնական վերահսկիչի և ընդունիչի հետ փորձարկումը հաստատեց, որ ESC- ն դեռ աշխատում է ճիշտ այնպես, ինչպես նախատեսված էր, ինչը հարցերն ավելի տարօրինակ դարձրեց:Ավելի բարձր արժեքներ, այն անտեսեց և շարունակեց թարթել աչքերը, իսկ ավելի ցածր արժեքները ՝ ESC- ն, վերադարձան ուրախ կանաչ գույնի, բայց այդպես էլ չշրջվեցին:

Ինչո՞վ էր տարբերվում պոտենցիոմետրից կամ ֆոնդային հաղորդիչից և ընդունիչից և ֆիքսված արժեքներ ապահովող տարբերակից:

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

«Կարգավորեք շնչափողի զարդարանք», դա հենց դա է նշանակում: ESC- ն ակնկալում է չեզոք ազդանշան, երբ այն միանա, նախքան դա ստանալը, որ ոչինչ չի անի: Սովորաբար հաղորդիչը միշտ չեզոք վիճակում է, երբ ESC- ն միացված է, և այնտեղից հաճույքով քշելու է: Եթե դա չլինի, ամենայն հավանականությամբ, գոնե մեկ անգամ, երբ մոդելը ամուր կանգնած է գետնին, և օպերատորն իրեն պատրաստ է մրցել:

Պոտենցիոմետրը օգտագործելիս մենք «մաքրում» էինք միջակայքերը, իսկ հետո այն կսկսեր աշխատել: Այն պարզապես զինված էր, քանի որ պոտենցիոմետրը անցնում էր չեզոք դիրքով, իսկ հետո այն աշխատում էր:

Lածր տիրույթները, սակայն, դեռևս դժգոհ էին ESC- ից: Պարզվում է, որ դա PWM աշխատանքային ցիկլերի արդյունք է:

Կամ նախագծված կամ տեխնիկական պատճառով կատարված, այնպես էլ ղեկային սերվերը և ESC- ն անտեսում են 50% -ից ցածր աշխատանքային ցիկլերից ցածր ազդանշանները: Սա կարող է լինել այն դեպքում, երբ ստացողը/հաղորդիչը դադարում է աշխատել կամ ուժը սպառվել է, մոդելը կվերադառնա չեզոք դիրքի և ոչ մի հեռավորություն չի թռչի լրիվ հակառակ սղոցով: Հավասարապես, servo- ն պտտվում է միայն 180 աստիճանով և կարիք չունի ամբողջ տիրույթի:

Այս նոր գիտելիքները ձեռքին ստեղծվեց Arduino- ի նոր ուրվագիծ: Նախնական տարբերակն ընդունում է Սերիալ մոնիտորի մեջ մուտքագրված տողերը, այն վերածում է ամբողջի և տեղափոխում այն PWM կապին ՝ օգտագործելով servo գրադարանը և գրում ()*: Եթե սերիական մոնիտորի մեջ մուտքագրվում է նոր արժեք, գրելու () արժեքը թարմացվում է:

Փորձարկման ընթացքում Traxxas ESC ֆոնդն փոխարինվեց Mtroniks G2 Micro- ով, սակայն դրանք պետք է աշխատեն նույնը, չնայած ճշգրիտ արժեքները կարող են փոքր -ինչ տարբեր լինել:

Այս գրադարանը ESC- ին վերաբերվում է որպես սերվոյի: Սա, ըստ երևույթին, լավ է: Servo.h գրադարանից գրելու () գործառույթը 0 -ից հասնում է 180 -ի, ակնկալվում է, որ սպառազինման ազդանշանը կլինի մեջտեղում:

G2 Micro- ն գրում է () 90 -ի սահմաններում գտնվող մի շարք արժեքներով, սակայն դժվար էր ճշգրիտ նշել, քանի որ այն, կարծես, «հիշում» էր զինված լինելու մասին:

Սպասվում է, որ Traxxas VXL-s3- ը կզինվի 91 գրելու () արժեքով:

Theինման ազդանշանից հետո կամ ESC- ն ուրախությամբ ընդունեց PWM ազդանշանները, անկախ Arduino- ի գործառույթներից, որոնք կոչված են դրանք առաջացնել, և համապատասխանաբար վերահսկում է շարժիչը:

Խոսելով գործառույթների մասին; ստանդարտ analogWrite (), ինչպես նաև գրելու () և writeMicroseconds () Servo.h գրադարանից բոլորը կարող են փոխադարձաբար օգտագործվել, պարզապես հիշեք, թե ինչ է անում, և, ի վերջո, ոչ այլ ինչ, քան աշխատանքային ցիկլը: WriteMicroseconds () կարող են օգտագործվել, եթե պահանջվում է ավելի մեծ մանրամասնություն, պարզապես հիշեք, որ այստեղ միջակայքը 1000 -ից 2000 է, իսկ սպառազինությունը կամ «չեզոք» ակնկալվում է 1500 -ը: Ստանդարտ analogWrite- ով () սպասվում է, որ օգտագործելի լինել 128 -ից 255 -ը, իսկ 191 -ը ՝ չեզոք:

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