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

Ընդլայնված գծի հետևող ռոբոտ. 22 քայլ (նկարներով)
Ընդլայնված գծի հետևող ռոբոտ. 22 քայլ (նկարներով)

Video: Ընդլայնված գծի հետևող ռոբոտ. 22 քայլ (նկարներով)

Video: Ընդլայնված գծի հետևող ռոբոտ. 22 քայլ (նկարներով)
Video: Ինչպես վերահսկել Actuator- ը `օգտագործելով Arduino - Robojax 2024, Հուլիսի
Anonim
Image
Image
Նախատիպերի ստեղծում - պերֆորդ
Նախատիպերի ստեղծում - պերֆորդ

Սա Teensy 3.6 և QTRX գծերի սենսորների վրա հիմնված ռոբոտին հետևող առաջադեմ տող է, որը ես կառուցել եմ և աշխատում եմ բավականին երկար ժամանակ: Դիզայնի և կատարման մեջ կան մի քանի կարևոր բարելավումներ իմ նախորդ ռոբոտին հաջորդող շարքում: Ռոբոտի արագությունն ու արձագանքը բարելավվել են: Ընդհանուր կառուցվածքը կոմպակտ է և թեթև: Բաղադրիչները դասավորված են անիվի առանցքին մոտ, որպեսզի նվազագույնի հասցնեն անկյունային թափը: Բարձր հզորությամբ միկրո մետաղական փոխանցման շարժիչներ ապահովում են համապատասխան ոլորող մոմենտ պտույտ, իսկ ալյումինե հանգույցի սիլիկոնե անիվներն ապահովում են շատ անհրաժեշտ ձգում բարձր արագությունների դեպքում: Հենարանային վահանը և անիվների կոդավորումը ռոբոտին հնարավորություն են տալիս որոշելու իր դիրքն ու կողմնորոշումը: Teensyview- ի վրա տեղադրված բոլոր համապատասխան տեղեկատվությունը կարող է պատկերացվել, և ծրագրի կարևոր պարամետրերը կարող են թարմացվել `օգտագործելով սեղմման կոճակները:

Այս ռոբոտի ստեղծումը սկսելու համար ձեզ հարկավոր են հետևյալ պարագաները (և ձեր տրամադրության տակ շատ ժամանակ և համբերություն):

Պարագաներ

Էլեկտրոնիկա

  • Teensy 3.6 զարգացման խորհուրդ
  • Prop Shield շարժման տվիչներով
  • Sparkfun TeensyView
  • Pololu QTRX-MD-16A Reflectance Sensor Array
  • 15x20 սմ երկկողմանի PCB նախատիպ
  • Pololu Step-Up/Step-Down Լարման կարգավորիչ S9V11F3S5
  • Pololu կարգավորելի 4-5-20V Լարման բարձրացման կարգավորիչ U3V70A
  • MP12 6V 1580 rpm միկրո փոխանցման շարժիչ ՝ կոդավորիչով (x2)
  • DRV8833 Dual Motor Driver Carrier (x2)
  • 3.7V, 750 mAh Li-Po մարտկոց
  • ON/OFF անջատիչ
  • Էլեկտրոլիտիկ կոնդենսատոր 470uF
  • Էլեկտրոլիտիկ կոնդենսատոր 1000uF (x2)
  • Կերամիկական կոնդենսատոր 0.1uF (x5)
  • Կոճակներ (x3)
  • 10 մմ կանաչ LED (x2)

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

  • Ատոմային սիլիկոնե անիվ 37x34 մմ (x2)
  • Pololu Ball Caster 3/8”մետաղական գնդակով
  • N20 շարժիչի լեռ (x2)
  • Պտուտակ և ընկույզ

Մալուխներ և միակցիչներ

  • 24AWG ճկուն լարեր
  • 24 փին FFC- ից DIP ճեղքում և FFC մալուխ (տիպ A, երկարություն 150 մմ)
  • Կլոր իգական կապում վերնագիր
  • Կլոր իգական կապի վերնագիր երկար տերմինալ
  • Ուղղանկյուն կրկնակի տող իգական վերնագիր
  • Ուղղանկյուն երկշարք արական վերնագիր
  • Արական քորոց վերնագիր
  • Արական ասեղի քորոց վերնագիր

Գործիքներ

  • Բազմաչափ
  • Sոդման երկաթ
  • Sոդման մետաղալար
  • Մետաղալար մերկապարուհի
  • Մետաղալար կտրիչ

Քայլ 1: Համակարգերի ակնարկ

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

Ստորև նկարագրված են ռոբոտի հիմնական համակարգերը:

Միկրոկոնտրոլեր. Teensy 3.6 զարգացման տախտակ ՝ 32-բիթանոց 180 ՄՀց ARM Cortex-M4 պրոցեսորով:

Գծի ցուցիչ. Pololu- ի QTRX-MD-16A 16-ալիքային անալոգային ելքային գծի սենսորային զանգված միջին խտության դասավորության մեջ (8 մմ սենսորային սկիպիդար):

Drive: 6V, 1580rpm, բարձր հզորության միկրո մետաղական շարժիչների շարժիչներ `մագնիսական անիվների կոդավորմամբ և սիլիկոնե անիվներով, որոնք տեղադրված են ալյումինե հանգույցների վրա:

Օդոմետրիա. Անիվի մագնիսական կոդավորող զույգ `ծածկված կոորդինատներն ու տարածությունը գնահատելու համար:

Կողմնորոշիչ սենսոր. Ռոբոտի դիրքի և ուղղության գնահատման համար հենարան վահան `շարժման տվիչներով:

Սնուցման աղբյուր ՝ 3.7 Վ, 750 մԱ / ժ լիպո մարտկոց ՝ որպես էներգիայի աղբյուր: 3.3 Վ արագացման/իջեցման կարգավորիչը սնուցում է միկրոկոնտրոլերը, տվիչները և ցուցադրման սարքը: Կարգավորելի բարձրացման կարգավորիչը սնուցում է երկու շարժիչները:

Օգտվողի միջերես. Teensyview ՝ տեղեկատվություն ցուցադրելու համար: Երեք սեղմիչ կոճակ ՝ օգտվողի մուտքերն ընդունելու համար: 10 մմ տրամագծով կանաչ LED- ների երկու համար `կարգավիճակի նշման համար, երբ աշխատում եք:

Քայլ 2: Եկեք սկսենք նախատիպը

Image
Image

Մենք կիրականացնենք վերը նշված միացումը շերտի տախտակի վրա: Մենք նախ պետք է պատրաստ պահենք մեր ճեղքման տախտակները ՝ դրանց վրա վերնագրեր զոդելով: Տեսահոլովակը գաղափար կտա, թե որ վերնագրերը որ փեղկերի վրա պետք է սոսնձվեն:

Բեկումնային տախտակների վրա վերնագրերը միացնելուց հետո Teensyview- ի վրա տեղադրեք Teensyview և կոճակի կոճակը:

Քայլ 3. Նախատիպերի ստեղծում

Նախատիպերի ստեղծում - պերֆորդ
Նախատիպերի ստեղծում - պերֆորդ

Ձեռք բերեք 15x20 սմ երկկողմանի նախատիպի տախտակի նախատիպը և սահմանը նշեք մշտական նշագծով, ինչպես ցույց է տրված նկարում: Հորատեք M2 չափի անցքեր ՝ սենսորային զանգվածը, պտտվող անիվը և միկրո մետաղական փոխանցման շարժիչները տեղադրելու համար ՝ սպիտակ շրջանով նշված վայրերում: Մենք հետագայում կտրելու ենք եզրագիծը եզրագծի երկայնքով `բոլոր բաղադրիչները զոդելուց և փորձարկելուց հետո:

Մենք կսկսենք մեր նախատիպը ՝ կպչելով տախտակի վրա վերնագրի կապումներն ու վարդակները: Բեկման տախտակները հետագայում կտեղադրվեն այս վերնագրերի վրա: Carefulգուշորեն ուշադրություն դարձրեք վերնագրերի դիրքին տախտակի վրա: Մենք կապելու ենք բոլոր լարերը ՝ հիմնվելով վերնագրերի այս դասավորության վրա:

Քայլ 4. Նախատիպավորում - հենարան վահան

Նախատիպավորում - հենարան վահան
Նախատիպավորում - հենարան վահան
Նախատիպավորում - հենարան վահան
Նախատիպավորում - հենարան վահան
Նախատիպավորում - հենարան վահան
Նախատիպավորում - հենարան վահան
Նախատիպավորում - հենարան վահան
Նախատիպավորում - հենարան վահան

Մենք նախ կպցնենք կապի վահանի միացումները: Քանի որ մենք օգտագործում ենք միայն հենարանի վահանի շարժման սենսորները, մենք պետք է միացնենք միայն SCL, SDA և IRQ կապումներն ՝ առանց 3V և հենակետի վահանի գրունտների:

Երբ կապն ավարտվի, տեղադրեք Teensy և հենարան վահան և չափեք շարժման տվիչները ՝ հետևելով այստեղ նշված քայլերին:

Քայլ 5. Նախատիպերի ստեղծում. Ուժ և հող

Նախատիպերի ստեղծում. Ուժ և հող
Նախատիպերի ստեղծում. Ուժ և հող

Sոդեք նկարին վերաբերող բոլոր ուժային և հողային միացումները: Տեղադրեք բոլոր ճեղքման տախտակները տեղում և ապահովեք շարունակականությունը `օգտագործելով բազմաչափ: Ստուգեք նավի վրա գտնվող լարման տարբեր մակարդակները:

  • Li-po ելքային լարումը (սովորաբար 3V- ից 4.2V- ի միջև)
  • Կարգավորիչի ելքային լարումը (3.3V)
  • Կարգավորելի բարձրացման կարգավորիչի ելքային լարումը (սահմանվել է 6 Վ)

Քայլ 6. Նախատիպերի ստեղծում

Նախատիպավորում - շարժիչ վարորդի կրիչ
Նախատիպավորում - շարժիչ վարորդի կրիչ
Նախատիպավորում - շարժիչ վարորդի կրիչ
Նախատիպավորում - շարժիչ վարորդի կրիչ
Նախատիպավորում - շարժիչ վարորդի կրիչ
Նախատիպավորում - շարժիչ վարորդի կրիչ

DRV8833 երկշարժիչանի վարորդի կրիչի տախտակը կարող է ապահովել 1.2 Ա անընդհատ և 2 Ա առավելագույն հոսանքներ մեկ ալիքի համար: Մենք երկու ալիքները զուգահեռաբար կապելու ենք մեկ շարժիչ վարելու համար: Միացրեք կապերը ՝ հետևելով ստորև նշված քայլերին:

  • Driverուգահեռաբար շարժիչի վարորդի երկու մուտքերն ու երկու ելքերը, ինչպես ցույց է տրված նկարում:
  • Միացրեք մուտքի կառավարման լարերը շարժիչի վարորդին:
  • Երկու միացնող տախտակների Vin և Gnd տերմինալների վրա միացրեք 1000uF էլեկտրոլիտիկ կոնդենսատոր և 0.1uF կերամիկական կոնդենսատոր:
  • Շարժիչի վարորդի ելքային տերմինալներին միացրեք 0.1uF կերամիկական կոնդենսատոր:

Քայլ 7. Նախատիպավորում - Line Sensor Array Header

Նախատիպավորում - Line Sensor Array Header
Նախատիպավորում - Line Sensor Array Header
Նախատիպավորում - Line Sensor Array Header
Նախատիպավորում - Line Sensor Array Header
Նախատիպավորում - Line Sensor Array Header
Նախատիպավորում - Line Sensor Array Header
Նախատիպավորում - Line Sensor Array Header
Նախատիպավորում - Line Sensor Array Header

Teensy 3.6- ն ունի երկու ADC ՝ ADC0 և ADC1, որոնք մուլտիպլեքսավորված են 25 հասանելի կապում: Մենք կարող ենք միաժամանակ մուտք գործել երկու ADC- ի ցանկացած երկու կապում: Մենք յուրաքանչյուրը ութ գծի տվիչ կկապենք ADC0- ի և ADC1- ի հետ: Evenույգ թվերի տվիչները միացված կլինեն ADC1- ին, իսկ կենտ թվերի տվիչները ՝ ADC0- ին: Միացրեք կապերը ՝ հետևելով ստորև նշված քայլերին: Հետագայում FFC- ի միջոցով գծի տվիչը կկապենք DIP ադապտերին և մալուխին:

  • Միացրեք բոլոր հավասարաչափ սենսորները (16, 14, 12, 10, 8, 6, 4, 2), ինչպես ցույց է տրված նկարում: Ուղղորդեք մետաղալարը ՝ սենսորային 12 -ը միացնելու համար սալիկի հակառակ կողմով:
  • Միացրեք ճառագայթիչների կառավարման քորոցը (ԱՆԳԱՄ) Teensy pin 30 -ին:
  • Միացրեք բոլոր կենտ սենսորների կապում (15, 13, 11, 9, 7, 5, 3, 1), ինչպես ցույց է տրված նկարում:
  • Միացրեք 470uF էլեկտրոլիտիկ կոնդենսատոր Vcc- ի և Gnd- ի միջով:

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

Քայլ 8. Նախատիպերի ստեղծում - Micro Gear Motor և կոդավորիչ

Նախատիպավորում - Micro Gear Motor և Encoder
Նախատիպավորում - Micro Gear Motor և Encoder
  • Միկրո մետաղական փոխանցման շարժիչը կոդավորիչով ամրացրեք ՝ օգտագործելով N20 շարժիչի ամրակներ:
  • Միացրեք շարժիչի և ծածկագրիչի լարերը, ինչպես ցույց է տրված նկարում:
  • Ձախ կոդավորիչ - դեռահասների կապում 4 և 0
  • Աջ կոդավորիչ - դեռահասների կապում 9 և 27

Քայլ 9. Նախատիպերի ստեղծում

Նախատիպավորում - LED- ներ
Նախատիպավորում - LED- ներ
Նախատիպավորում - LED- ներ
Նախատիպավորում - LED- ներ

Երկու LED- ները ցույց են տալիս ՝ ռոբոտը շրջադարձ է հայտնաբերել, թե ոչ: Ես օգտագործել եմ 470-օմ սերիայի դիմադրություն `LED- ները Teensy- ին միացնելու համար:

  • Ձախ LED անոդը Teensy pin 6 -ին
  • Աջ LED անոդ Teensy pin 8 -ին

Քայլ 10. Նախատիպերի ստեղծում

Image
Image
Նախատիպերի ստեղծում
Նախատիպերի ստեղծում

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

Տեղադրեք բոլոր անջատիչ տախտակները իրենց համապատասխան վարդակների մեջ: FFC-DIP ճեղքվածքը տեղադրելու և QTRX-MD-16A գծի տվիչը ամրացնելու համար տե՛ս տեսանյութը:

Քայլ 11: Softwareրագրային գրադարանների ակնարկ

Softwareրագրային գրադարանների ակնարկ
Softwareրագրային գրադարանների ակնարկ

Մենք ծրագրելու ենք Teensy- ն Arduino IDE- ում: Նախքան սկսելը մեզ անհրաժեշտ կլինեն որոշ գրադարաններ: Գրադարանները, որոնք մենք կօգտագործենք, հետևյալն են.

  • Կոդավորիչ
  • Teensyview
  • EEPROM
  • ADC
  • NXPMotionSense

Եվ ոմանք, որոնք հատուկ գրված են այս ռոբոտի համար,

  • PushButton
  • LineSensor
  • TeensyviewMenu
  • Շարժիչներ

Այս ռոբոտին հատուկ գրադարանները մանրամասն քննարկվում են և հասանելի են ներբեռնման համար հաջորդ քայլերում:

Քայլ 12. Գրադարանները բացատրվում են `սեղմելով կոճակը

Այս գրադարանը Teensy- ի հետ կոճակ կոտրելու տախտակը միացնելու համար է: Օգտագործված գործառույթներն են

PushButton (int leftButtonPin, int centreButtonPin, int rightButtonPin);

Այս կոնստրուկտորին զանգահարելով ՝ ստեղծելով օբյեկտ, կարգավորում է սեղմակի կոճակները դեպի INPUT_PULLUP ռեժիմ:

int8_t waitForButtonPress (անվավեր);

Այս գործառույթը սպասում է մինչև կոճակը սեղմելը և բաց թողնելը և վերադարձնում է առանցքային ծածկագիրը:

int8_t getSingleButtonPress (անվավեր);

Այս գործառույթը ստուգում է, արդյոք կոճակը սեղմված է և բաց թողնված: Եթե այո, ապա վերադարձնում է առանցքային կոդը, հակառակ դեպքում `զրո:

Քայլ 13. Բացատրված գրադարաններ - գծի ցուցիչ

LineSensor- ը գրադարանն է ՝ Teensy- ի հետ գծերի սենսորների զանգվածը միացնելու համար: Հետևյալը օգտագործվող գործառույթներն են:

LineSensor (անվավեր);

Այս կոնստրուկտորին զանգահարելով ՝ ստեղծելով օբյեկտ, սկզբնականացնում է ADC0 և ADC1, կարդում է EEPROM- ի շեմը, նվազագույն և առավելագույն արժեքները և կարգավորում է սենսորի կապում մուտքային ռեժիմին, իսկ թողարկողի կառավարման քորոցը ՝ ելքային ռեժիմին:

անվավեր calibrate (uint8_t calibrationMode);

Այս գործառույթը ճշգրտում է գծի տվիչները: CalibrationMode- ը կարող է լինել MIN_MAX կամ MEDIAN_FILTER: Այս գործառույթը մանրամասն բացատրվում է հետագա քայլում:

void getSensorsAnalog (uint16_t *sensorValue, uint8_t ռեժիմ);

Կարդում է սենսորային զանգվածը որպես փաստարկ ընդունված երեք ռեժիմներից որևէ մեկում: Ռեժիմը արտանետիչների վիճակն է և կարող է լինել ON, OFF կամ TOGGLE: TOGGLE ռեժիմը փոխհատուցում է անդրադարձման տվիչների ընթերցումները շրջակա լույսի պատճառով: ADC0- ի և ADC1- ի հետ կապված սենսորները կարդացվում են համաժամանակյա:

int getLinePosition (uint16_t *sensorValue);

Հաշվում է սենսորային զանգվածի դիրքը գծի վրա միջին կշռված մեթոդով:

uint16_t getSensorsBinary (uint16_t *sensorValue);

Վերադարձնում է տվիչների վիճակի 16-բիթանոց պատկերումը: Երկուական մեկը ցույց է տալիս, որ սենսորը գծից այն կողմ է, իսկ երկուական զրոյը ցույց է տալիս, որ սենսորը գծից դուրս է:

uint8_t countBinary (uint16_t binaryValue);

Այս գործառույթին սենսորային արժեքների 16-բիթ ներկայացումը փոխանցելը վերադարձնում է գծից դուրս գտնվող սենսորների թիվը:

void getSensorsNormalized (uint16_t *sensorValue, uint8_t ռեժիմ);

Կարդում է սենսորի արժեքները և սահմանափակում յուրաքանչյուր սենսորի արժեքը իր համապատասխան նվազագույն և առավելագույն արժեքներին: Սենսորների արժեքները քարտեզագրվում են իրենց համապատասխան min- ից մինչև առավելագույն տիրույթից մինչև 0 -ից մինչև 1000 միջակայք:

Քայլ 14. Բացատրված գրադարաններ - TeensyviewMenu

TeensyviewMenu- ն այն գրադարանն է, որտեղ կարելի է մուտք գործել ցուցադրման ընտրացանկի գործառույթները: Հետևյալը օգտագործվող գործառույթներն են:

TeensyViewMenu (անվավեր);

Այս կոնստրուկտորին կանչելը ստեղծում է LineSensor, PushButton և TeensyView դասի օբյեկտ:

դատարկ ներածություն (անվավեր);

Սա ընտրացանկում նավարկելու համար է:

դատարկության փորձարկում (անվավեր);

Սա ներքին կոչվում է ընտրացանկի ներսում, երբ գծի տվիչների արժեքները պետք է ցուցադրվեն Teensyview- ում ՝ փորձարկման համար:

Քայլ 15. Բացատրված գրադարաններ - շարժիչներ

Motors- ը այն գրադարանն է, որն օգտագործվում է երկու շարժիչներ վարելու համար: Հետևյալը օգտագործվող գործառույթներն են:

Շարժիչներ (անվավեր);

Այս կոնստրուկտորին զանգահարելով ՝ ստեղծելով օբյեկտ, կազմաձևում է շարժիչի ուղղության հսկողությունը և PWM կառավարման կապում ելքային ռեժիմին:

void setSpeed (int leftMotorSpeed, int rightMotorSpeed);

Այս ֆունկցիան կանչելը երկու շարժիչներին քշում է որպես արգումենտներ փոխանցված արագությամբ: Արագության արժեքը կարող է տատանվել -255 -ից +255 -ի սահմաններում `բացասական նշանով, որը ցույց է տալիս, որ պտտման ուղղությունը հակադարձված է:

Քայլ 16. Փորձարկում - Կոդավորիչ հոդոմետրիա

Մենք փորձարկելու ենք մագնիսական անիվի կոդավորիչները և ցուցադրելու ենք ռոբոտի անցած դիրքն ու տարածությունը:

Վերբեռնեք DualEncoderTeensyview.ino- ն: Programրագիրը ցուցադրում է ծածկագրիչի տիզերը Teensyview- ում: Կոդավորողն ավելանում է, եթե ռոբոտին առաջ եք տեղափոխում, և նվազում, եթե այն հետ եք տեղափոխում:

Այժմ վերբեռնեք EncoderOdometry.ino- ն: Այս ծրագիրը ցուցադրում է ռոբոտի դիրքը x-y կոորդինատների առումով, ցուցադրում է սանտիմետրով անցած ընդհանուր հեռավորությունը և աստիճանը վերածված անկյունը:

Ես վկայակոչել եմ Seattle Robotics ընկերության կողմից R/C Servo դիֆերենցիալ շարժիչով ռոբոտի վրա Odometry- ի միջոցով մեռած հաշվարկի իրականացումը `կոդավորող տիզերից դիրքը որոշելու համար:

Քայլ 17. Փորձարկում. Հենարան Shield շարժման տվիչներ

Համոզվեք, որ չափագրել եք շարժման տվիչները ՝ հետևելով այստեղ նշված քայլերին:

Այժմ վերբեռնեք PropShieldTeensyView.ino- ն: Դուք պետք է կարողանաք Teensyview- ում տեսնել բոլոր երեք առանցքների արագացուցիչի, գիրո և մագնիսաչափի արժեքները:

Քայլ 18: Overրագրի ակնարկ

Ընդլայնված գծի հետևորդի համար ծրագիրը գրված է Arduino IDE- ով: Worksրագիրն աշխատում է ստորև բացատրված հետևյալ հաջորդականությամբ.

  • EEPROM- ում պահվող արժեքները կարդացվում են և ցուցադրվում է ընտրացանկը:
  • LAUNCH- ը սեղմելիս ծրագիրը մտնում է օղակը:
  • Կարդացվում են գծերի նորմալացված սենսորների արժեքները:
  • Գծի դիրքի երկուական արժեքը ստացվում է օգտագործելով նորմալացված սենսորային արժեքներ:
  • Գծի վրայով անցնող տվիչների թվի հաշվարկը հաշվարկվում է գծի դիրքի երկուական արժեքից:
  • Կոդավորողի տիզերը թարմացվում են, իսկ ընդհանուր հեռավորությունը ՝ x-y կոորդինատները և անկյունը:
  • 0 -ից 16 -ը երկուական հաշվարկի տարբեր արժեքների համար կատարվում են մի շարք հրահանգներ: Եթե երկուական հաշվարկը գտնվում է 1 -ից 5 միջակայքում, և եթե սենսորները, որոնք գտնվում են գծի վրայով, միմյանց կից են, կանչվում է PID ռեժիմ: Պտտումը կատարվում է երկուական արժեքի և երկուական հաշվարկի այլ համակցություններում:
  • PID ռեժիմում (որը ենթակա է PD ռեժիմի) շարժիչները շարժվում են սխալի, սխալի փոփոխության, Kp և Kd արժեքների հիման վրա հաշվարկված արագությամբ:

Theրագիրը ներկայումս չի չափում կողմնորոշման արժեքները պաշտպանական վահանից: Սա աշխատանք է, որն ընթացքի մեջ է և թարմացվում է:

Վերբեռնեք TestRun20.ino: Մենք կտեսնենք, թե ինչպես նավարկելու ընտրացանկը, կարգավորելու կարգավորումները և ինչպես ճշգրտելու գծի տվիչները հաջորդ քայլերում, որոնցից հետո մենք փորձարկելու ենք մեր ռոբոտը:

Քայլ 19: Նավարկում ընտրացանկ և կարգավորումներ

Մենյուում կան հետևյալ կարգավորումները, որոնցով կարելի է նավարկել ձախ և աջ կոճակները և ընտրել կենտրոնական կոճակը: Կարգավորումները և դրանց գործառույթները նկարագրված են ստորև:

  1. ԿԱՌԱՎԱՐՈՄ. Գծի տվիչների ճշգրտման համար:
  2. ԹԵՍՏ. Lineուցադրել գծի տվիչների արժեքները:
  3. ՄԵԿՆԱՐԿ. Սկսելու համար հետևյալ տողը:
  4. MAX SPEED. Ռոբոտի արագության վերին սահմանը սահմանելու համար:
  5. Պտտվող արագություն. Ռոբոտի արագության վերին սահմանը սահմանելիս, երբ այն կատարում է շրջադարձ, այսինքն `երբ երկու անիվները հավասար արագությամբ պտտվում են հակառակ ուղղություններով:
  6. KP: Համաչափ հաստատուն:
  7. KD: Ածանցյալ հաստատուն:
  8. RUN MODE. Ընտրել երկու գործող ռեժիմների միջև `NORMAL և ACCL: Նորմալ ռեժիմում ռոբոտը աշխատում է գծի դիրքի արժեքներին համապատասխանող կանխորոշված արագությամբ: ACCL ռեժիմում ռոբոտի MAX SPEED- ը փոխարինվում է ACCL SPEED- ով հետագծի կանխորոշված փուլերում: Սա կարող է օգտագործվել ռոբոտին արագացնելու համար ուղու ուղիղ հատվածներում: Հետևյալ կարգավորումները հասանելի են միայն այն դեպքում, եթե RUN MODE- ը սահմանվի որպես ACCL:
  9. LAP DISTANCE. Սահմանել մրցուղու ընդհանուր երկարությունը:
  10. ACCL SPEED. Ռոբոտի արագացման արագությունը սահմանելու համար: Այս արագությունը փոխարինում է MAX SPEED- ին ուղու տարբեր փուլերում, ինչպես սահմանված է ստորև:
  11. ՈՉ ՓՈ STԼԵՐԻ. Սահմանել փուլերի քանակը, որտեղ օգտագործվում է ACCL SPEED:
  12. ՓՈ 1Լ 1. Սահմանել այն փուլի մեկնարկի և ավարտի հեռավորությունները, որոնցում MAX SPEED- ը փոխարինվում է ACCL SPEED- ով: Յուրաքանչյուր փուլի համար մեկնարկի և ավարտի հեռավորությունները կարող են սահմանվել առանձին:

Քայլ 20: Գծի տվիչի չափաբերում

Image
Image

Գծի տվիչների տրամաչափումն այն գործընթացն է, որով որոշվում է 16 սենսորներից յուրաքանչյուրի շեմային արժեքը: Այս շեմային արժեքն օգտագործվում է որոշելու համար, թե արդյոք որոշակի սենսորն անցնում է գծից, թե ոչ: 16 սենսորների շեմային արժեքները որոշելու համար մենք օգտագործում ենք երկու մեթոդներից մեկը:

ՄԵԴԻԱՆ ՖԻԼՏԵՐ. Այս մեթոդով գծի տվիչները տեղադրվում են սպիտակ մակերևույթի վերևում և բոլոր 16 սենսորների համար վերցվում են սենսորների նախապես սահմանված քանակի ընթերցումներ: Բոլոր 16 սենսորների միջին արժեքները որոշվում են: Նույն գործընթացը կրկնվում է գծի տվիչները սև մակերևույթի վրա դնելուց հետո: Շեմային արժեքը սև և սպիտակ մակերևույթների միջին արժեքների միջին արժեքն է:

MIN MAX. Այս մեթոդում սենսորային արժեքները բազմիցս կարդացվում են, մինչև օգտագործողը չխնդրի դադարեցնել: Պահվում են յուրաքանչյուր սենսորի հանդիպած առավելագույն և նվազագույն արժեքները: Շեմային արժեքը նվազագույն և առավելագույն արժեքների միջին արժեքն է:

Այսպիսով ստացված շեմային արժեքները քարտեզագրվում են 0 -ից 1000 միջակայքում:

MIN MAX մեթոդով գծերի տվիչների տրամաչափումը ցուցադրվում է տեսանյութում: Գծի տվիչների ճշգրտումից հետո տվյալները կարող են արտացոլվել, ինչպես ցույց է տրված նկարում: Հետևյալ տեղեկատվությունը ցուցադրվում է:

  • Երկուական 1-ով գծի դիրքի 16-բիթանոց երկուական ներկայացում, որը ցույց է տալիս, որ համապատասխան գծի սենսորը գծից վեր է, և երկուական 0 ՝ նշելով, որ գծի տվիչը գծից դուրս է:
  • Գծից դուրս գտնվող սենսորների ընդհանուր թվի հաշվարկ:
  • 16 սենսորների նվազագույն, առավելագույն և սենսորային արժեքներ (չմշակված և նորմալացված) ՝ մեկ սենսոր մեկ անգամ:
  • Գծի դիրքը -7500 -ից +7500 միջակայքում:

Այնուհետև գծի նվազագույն և առավելագույն սենսորային արժեքները պահվում են EEPROM- ում:

Քայլ 21: Փորձնական աշխատանք

Image
Image

Տեսանյութը փորձնական աշխատանք է, որի ընթացքում ռոբոտը ծրագրված է կանգ առնել մեկ պտույտ կատարելուց հետո:

Քայլ 22. Վերջնական մտքեր և բարելավումներ

Ռոբոտների մրցույթ
Ռոբոտների մրցույթ

Այս ռոբոտը կառուցելու համար հավաքված սարքավորումները ամբողջությամբ չեն օգտագործվում այն գործարկող ծրագրի կողմից: Improveրագրի մասով շատ բարելավումներ կարող են կատարվել: Պաշտպանական վահանի շարժման տվիչները ներկայումս չեն օգտագործվում դիրքի և կողմնորոշման որոշման համար: Կոդավորիչների տվյալները կարող են համակցվել հենարանային վահանի կողմնորոշման տվյալների հետ `ճշգրիտ որոշելու ռոբոտի դիրքն ու անվանումը: Այս տվյալները այնուհետև կարող են օգտագործվել ռոբոտին ծրագրելու համար ՝ մի քանի շրջանով սովորելու հետքը: Ես խրախուսում եմ ձեզ փորձարկել այս մասով և կիսվել ձեր արդյունքներով:

Հաջողություն.

Ռոբոտների մրցույթ
Ռոբոտների մրցույթ

Երկրորդ մրցանակ ռոբոտների մրցույթում

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