Բովանդակություն:
- Հեղինակ John Day [email protected].
- Public 2024-01-30 09:48.
- Վերջին փոփոխված 2025-01-23 14:48.
Այս անգամ մենք ծրագրավորում ենք MicroPython- ում Dexter Industries GiggleBot- ում ՝ հետևելու սև գծին ՝ օգտագործելով ներկառուցված գծի հետևորդի սենսորը:
GiggleBot- ը պետք է զուգակցվի BBC- ի միկրո.
Եթե այս ձեռնարկը ձեզ համար չափազանց առաջադեմ է, իսկ GiggleBot- ի ծրագրավորումն առայժմ չափազանց շատ է, միշտ կարող եք անցնել մեկնարկային ձեռնարկով, որը ցույց է տալիս, թե ինչպես կարելի է ռոբոտը ծրագրավորել այստեղ MakeCode- ում: Կապված ձեռնարկը ձեզ կտանի հիմնական հիմունքներով:
Քայլ 1: Պահանջվող բաղադրիչներ
Պահանջվում են ապարատային հետևյալ բաղադրիչները.
- x3 AA մարտկոցներ - իմ դեպքում ես օգտագործում եմ վերալիցքավորվող մարտկոցներ, որոնք ընդհանուր առմամբ ավելի ցածր լարման են:
- Dexter Industries GiggleBot ռոբոտը միկրո.
- BBC- ի միկրո.
Իհարկե, ձեզ անհրաժեշտ է նաև միկրո USB մալուխ ՝ BBC միկրո:
Ստացեք GiggleBot- ը միկրո
Քայլ 2: Կարգավորեք հետքերը
Դուք ստիպված կլինեք տպել որոշ սալիկներ և նախագծել ձեր սեփական հետքերը: Դուք կարող եք օգտագործել մեր սեփական սալիկները, որպեսզի 100% վստահ լինեք, որ դուք կրկնում եք մեր պայմանները: Կամ եթե դուք արկածախնդիր եք զգում, կարող եք օգտագործել ինչ -որ սև ժապավեն և պատրաստել ձեր սեփականը: Ահա մեր օգտագործած սալիկների PDF- ը:
Վերոնշյալ ուղին կազմված է հետևյալ թվով տարբեր սալիկներից.
- #1 տիպի 12 սալիկ:
- #2 տիպի 5 սալիկ:
- #5 սալիկի տիպի 3 կաղապար:
- 3 ձևանմուշ կղմինդր #6 - այստեղ դուք կավարտեք մեկ լրացուցիչ սալիկով:
Հաջորդը, տպեք դրանք և կտրեք դրանք: Փորձեք տեղադրել դրանք, ինչպես վերը նշված լուսանկարում, և հիշեք, որ ուղու աջ վերևում 2 սալիկ պետք է համընկնեն մեկը մյուսի հետ:
Քայլ 3: Շրջակա միջավայրի ստեղծում
Որպեսզի կարողանաք ծրագրավորել BBC micro: bit- ը MicroPython- ում, դուք պետք է դրա համար խմբագիր ստեղծեք (Mu Editor) և դրա գործարկման ժամանակը սահմանեք GiggleBot MicroPython Runtime- ը: Դրա համար պետք է հետևել այս էջի հրահանգներին: Այս պահի դրությամբ օգտագործվում է գործարկման ժամանակի v0.4.0 տարբերակը:
Քայլ 4: GiggleBot- ի ծրագրավորում
Մինչև դրան անդրադառնալը, GiggleBot MicroPython- ի գործարկման ժամանակը պարունակում է դասական աշխատաժամանակ BBC- ի միկրո.
Այն կարգավորելուց հետո Mu խմբագրիչում բացեք հետևյալ սցենարը և կտտացրեք Flash- ին: Սա կբացահայտի GiggleBot MicroPython Runtime- ը և այն սցենարը, որը դուք պարզապես բացել եք ձեր BBC micro- ի համար: bit. Սցենարը ցուցադրվում է նաև ներքևում:
Theրամեկուսացման գործընթացն ավարտվելուց հետո տեղադրեք BBC- ի միկրո.
Ուշադրություն դարձրեք, որ սցենարում PID- ն և մյուս 2 հաստատունները (արագության սահմանման կետը և նվազագույն արագության հաստատունները) արդեն սահմանված են:
Նշում. Հետևյալ սցենարի վրա կարող են բաց թողնվել սպիտակ տարածքներ, և դա, ըստ երևույթին, պայմանավորված է GitHub Gists- ի ցուցադրման որոշ խնդիրներով: Կտտացրեք բովանդակությունը ՝ ձեզ GitHub էջ տանելու համար, որտեղ կարող եք պատճենել-տեղադրեք ծածկագիրը:
GiggleBot PID Line Follower - Կարգավորված է NeoPixels- ով
| միկրոբիտ ներմուծումից* |
| gigglebot ներմուծումից* |
| utime import sleep_ms, ticks_us- ից |
| ներմուծել ustruct |
| # նախաստորագրեք ԳԲ նեոպիքսելները |
| neo = init () |
| # ժամկետ |
| update_rate = 50 |
| # շահում/հաստատունություն (ենթադրելով, որ մարտկոցի լարումը մոտ 4.0 վոլտ է) |
| Kp = 25.0 |
| Ki = 0.5 |
| Kd = 35.0 |
| ձգան_ կետ = 0.3 |
| min_speed_percent = 0.3 |
| բազային_արագություն = 70 |
| սահմանային կետ = 0.5 |
| last_position = setpoint |
| ինտեգրալ = 0.0 |
| run_neopixels = Trueիշտ է |
| center_pixel = 5# որտեղ ժպիտի կենտրոնական պիքսելը գտնվում է ԳԲ -ում |
| # փիրուզագույն = դուփ (քարտեզ (lambda x: int (x / 5), (64, 224, 208))) |
| # փիրուզագույն = (12, 44, 41) # որը հենց վերը նշված փիրուզագույնն է, որը մեկնաբանվել է սրա վերևում |
| error_width_per_pixel = 0.5/3# max սխալ բաժանված յուրաքանչյուր նեոպիքսելի միջև ընկած հատվածների քանակով |
| defupper_bound_linear_speed_reducer (abs_error, trigger_point, above_bound, ամենափոքր_շարժիչ_ուժը, ամենաբարձր_շարժիչ_ուժը). |
| գլոբալ բազային_արագություն |
| եթե abs_error> = trigger_point: |
| # x0 = 0.0 |
| # y0 = 0.0 |
| # x1 = վերին_սահմանափակ - ձգան_ կետ |
| # y1 = 1.0 |
| # x = abs_error - ձգան_ կետ |
| # y = y0 + (x - x0) * (y1 - y0) / (x1 - x0) |
| # նույնը, ինչ |
| y = (abs_error - trigger_point) / (above_bound - trigger_point) |
| շարժիչ_էներգիա = բազային_արագություն * (ամենափոքր_շարժիչ_հզորությունը + (1- յ)) * (ամենաբարձր_շարժիչ_ուժը - ամենափոքր_շարժիչ_ուժը)) |
| վերադարձնել շարժիչ_հզորությունը |
| այլ: |
| վերադարձնել բազային_ արագությունը * ամենաբարձր_շարժիչ_ուժը |
| վազել = Կեղծ |
| նախորդ_սխալ = 0 |
| իսկ ճշմարիտ: |
| # եթե կոճակը սեղմված է, ապա սկսեք հետևել |
| եթե button_a.is_pressed (): |
| վազել = Trueշմարիտ |
| # բայց եթե կոճակը b սեղմված է, դադարեցրեք տողի հետևորդին |
| եթե button_b.is_pressed (): |
| վազել = Կեղծ |
| ինտեգրալ = 0.0 |
| նախորդ_սխալ = 0.0 |
| pixels_off () |
| կանգ առնել () |
| sleep_ms (500) |
| եթե վազում է ruշմարիտ. |
| # կարդալ գծի տվիչները |
| start_time = ticks_us () |
| աջ, ձախ = կարդալ_սենսոր (LINE_SENSOR, ԵՐԿՈ) |
| # տողը ձախ կողմում է, երբ դիրքը <0.5 է |
| # տողը աջից է, երբ դիրքը> 0.5 է |
| # տողը մեջտեղում է, երբ դիրքը = 0.5 է |
| # դա կշռված թվաբանական միջին է |
| փորձել: |
| դիրք = աջ /բոց (ձախ + աջ) |
| բացառությամբ ZeroDivisionError: |
| դիրք = 0.5 |
| # միջակայքը պետք է լինի (0, 1) և ոչ [0, 1] |
| եթե դիրքը == 0: դիրքը = 0.001 |
| եթե դիրքը == 1: դիրքը = 0.999 |
| # օգտագործել PD վերահսկիչ |
| սխալ = դիրքորոշում - սահմանման կետ |
| ինտեգրալ += սխալ |
| ուղղում = Kp * սխալ + Ki * ինտեգրալ + Kd * (սխալ - նախորդ_սխալ) |
| previous_error = սխալ |
| # հաշվեք շարժիչի արագությունը |
| motor_speed = above_bound_linear_speed_reducer (abs (սխալ), setpoint * trigger_point, setpoint, min_speed_percent, 1.0) |
| leftMotorSpeed = շարժիչ_արագություն + ուղղում |
| rightMotorSpeed = շարժիչ_ արագություն - ուղղում |
| # լուսավորեք նեոպիքսելներն ըստ տրված սխալի |
| եթե run_neopixels- ը ճշմարիտ է և ընդհանուր_հաշիվներ %3 == 0: |
| i inb '\ x00 / x01 / x02 / x03 / x04 / x05 / x06 / x07 / x08': |
| neo = (0, 0, 0) |
| i inb '\ x00 / x01 / x02 / x03': |
| ifabs (սխալ)> error_width_per_pixel * i: |
| եթե սխալ <0: |
| # նեո [center_pixel + i] = փիրուզագույն |
| neo [center_pixel + i] = (12, 44, 41) |
| այլ: |
| # neo [center_pixel - i] = փիրուզագույն |
| neo [center_pixel + i] = (12, 44, 41) |
| այլ: |
| տոկոս = 1- (error_width_per_pixel * i -abs (error)) / error_width_per_pixel |
| # լուսավորեք ընթացիկ պիքսելները |
| եթե սխալ <0: |
| # neo [center_pixel + i] = դուփ (քարտեզ (lambda x: int (x * տոկոս), փիրուզագույն)) |
| neo [center_pixel + i] = (int (64* տոկոս /5), int (224* տոկոս /5), int (208* տոկոս /5)) |
| այլ: |
| # neo [center_pixel - i] = tuple (քարտեզ (lambda x: int (x * տոկոս), փիրուզագույն)) |
| neo [center_pixel - i] = (int (64* տոկոս /5), int (224* տոկոս /5), int (208* տոկոս /5)) |
| ընդմիջում |
| neo.show () |
| փորձել: |
| # սեղմեք շարժիչի արագությունները |
| եթե մնացել է MotorSpeed> 100: |
| leftMotorSpeed = 100 |
| rightMotorSpeed = rightMotorSpeed - leftMotorSpeed +100 |
| եթե ճիշտ է MotorSpeed> 100: |
| rightMotorSpeed = 100 |
| leftMotorSpeed = leftMotorSpeed - rightMotorSpeed +100 |
| եթե մնացել է MotorSpeed <-100: |
| leftMotorSpeed = -100 |
| եթե ճիշտ է MotorSpeed <-100: |
| rightMotorSpeed = -100 |
| # գործարկել շարժիչները |
| set_speed (leftMotorSpeed, rightMotorSpeed) |
| քշել () |
| # տպել ((սխալ, շարժիչ_արագություն)) |
| բացառությամբ ՝ |
| # այն դեպքում, երբ մենք բախվենք ինչ -որ անլուծելի խնդրի |
| անցնել |
| # և պահպանեք օղակի հաճախականությունը |
| վերջ_ժամանակ = ticks_us () |
| delay_diff = (ավարտի ժամանակը - մեկնարկի ժամանակը) /1000 |
| if1000.0/ update_rate - delay_diff> 0: |
| քուն (1000.0/ update_rate - delay_diff) |
դիտել rawgigglebot_tuned_line_follower.py հյուրընկալված ❤ -ի կողմից GitHub- ի կողմից
Քայլ 5: Թողնել այն գործի
BBC micro- ում կա 2 կոճակ ՝ bit: կոճակ A և կոճակ B:
- A կոճակի վրա սեղմելը սահմանում է, որ GiggleBot- ը հետևի տողին (եթե այն կա):
- B կոճակին սեղմելը դադարեցնում է GiggleBot- ը և վերակայում է ամեն ինչ, որպեսզի կարողանաք նորից օգտագործել այն:
Խիստ խորհուրդ է տրվում չբարձրացնել GiggleBot- ը, երբ այն հետևում է տողին, այնուհետև այն նորից տեղադրել դրա վրա, քանի որ հաշվարկվող սխալը կարող է կուտակել և ամբողջովին խառնել ռոբոտի երթուղին: Եթե ցանկանում եք այն բարձրացնել, սեղմեք B կոճակի վրա, այնուհետև այն հետ տեղադրելիս կրկին սեղմեք A:
Խորհուրդ ենք տալիս:
Ընդլայնված գծի հետևորդ ռոբոտ ՝ 7 քայլ
Ընդլայնված գծի հետևորդ ռոբոտ. Սա գծի հետևորդ ռոբոտ է `որոշ լրացուցիչ հնարավորություններով: Այս նախատիպը կարող է օգտագործվել գործարանի ներսում `առանց վարորդական նյութերի տեղաշարժի: Կա երկու կայան Բեռնման կայան Բեռնաթափման կայան: Բեռնման կայանից ռոբոտը կսպասի Materia
Ինչպես կատարել գծի հետևորդ ռոբոտ ՝ առանց Arduino (միկրոկոնտրոլեր) օգտագործելու. 5 քայլ
Ինչպես կատարել գծի հետևորդ ռոբոտ ՝ առանց Arduino- ի (միկրոկառավարիչ) օգտագործելու. Այս ուսուցանվող դասում ես ձեզ կսովորեցնեմ, թե ինչպես կարելի է առանց Arduino- ի չօգտագործել ռոբոտի հաջորդ տող: Ես բացատրելու համար շատ հեշտ քայլեր կկիրառեմ: Այս ռոբոտը կօգտագործի IR Proximity Sensor- ը հետևեք տողին: willրագրավորման որևէ փորձի կարիք չեք ունենա
Պարզ գծի հետևորդ Arduino- ի միջոցով. 5 քայլ
Պարզ գծի հետևորդ ՝ օգտագործելով Arduino: Arduino Line Follower Robot Arduino Line Follower Co
Մաս 3 ՝ GPIO ՝ ARM հավաք. Գծի հետևորդ ՝ TI-RSLK ՝ 6 քայլ
Մաս 3 ՝ GPIO: ARM հավաք. Գծի հետևորդ ՝ TI-RSLK: Բարև: Սա հաջորդ մասն է, որտեղ մենք շարունակում ենք օգտագործել ARM հավաքածուն (ավելի բարձր մակարդակի լեզվի փոխարեն): Այս Instructable- ի ոգեշնչումը Texas Instruments Robotics System Learning Kit- ի Lab 6-ն է կամ TI-RSLK- ը: Մենք կօգտագործենք խոսափողը
Գծի հետևորդ ՝ օգտագործելով Arduino - Հեշտ DIY նախագիծ. 6 քայլ
Գծի հետևորդ ՝ օգտագործելով Arduino | Հեշտ DIY նախագիծ. Այս ձեռնարկում մենք կդարձնենք գծի հետևորդ ՝ օգտագործելով ArduinoParts- ը ՝ անհրաժեշտ. Chasis: BO Motors and Wheels: https://amzn.to/2Yjh9I7 L298n շարժիչ Վարորդ ՝ https://amzn.to/2IWNMWF IR տվիչ ՝ https://amzn.to/2FFtFu3 Arduino Uno ՝ https://amzn.to/2FyTrjF J
