
Kazalo:
2025 Avtor: John Day | [email protected]. Nazadnje spremenjeno: 2025-01-23 15:08



Tokrat v MicroPythonu programiramo Dexter Industries GiggleBot, da sledi črni črti z vgrajenim senzorjem sledilca linij.
GiggleBot mora biti seznanjen z BBC micro: bit, da ga lahko ustrezno nadzirate.
Če je ta vadnica za vas preveč napredna in je zaenkrat programiranje GiggleBota preveč, lahko vedno preidete na začetno vadnico, ki vam pokaže, kako lahko robot programirate v MakeCode tukaj. Povezana vadnica vas bo vodila skozi same osnove.
Korak: Potrebne komponente

Potrebne so naslednje komponente strojne opreme:
- x3 AA baterije - v mojem primeru uporabljam baterije za ponovno polnjenje, ki imajo na splošno nižjo napetost.
- Robot Dexter Industries GiggleBot za micro: bit.
- BBC mikro: bit.
Seveda potrebujete tudi mikro USB kabel za programiranje BBC micro: bit - ta kabel je običajno v paketu BBC micro: bit ali pa lahko vedno uporabite tistega, ki se uporablja za polnjenje (Android) pametnih telefonov.
Pridobite GiggleBot za micro: bit tukaj
2. korak: Nastavite skladbe

Morali boste iti skozi tiskanje ploščic in oblikovanje lastnih skladb. Uporabite lahko lastne ploščice, da boste 100% prepričani, da ponavljate naše pogoje. Če pa se počutite pustolovsko, lahko uporabite črni trak in si ga naredite sami. Tukaj je PDF za ploščice, ki smo jih uporabili.
Zgornja skladba je sestavljena iz naslednjega števila različnih ploščic:
- 12 ploščic tipa #1.
- 5 ploščic tipa #2.
- 3 predloge ploščic tipa 5.
- 3 predloge ploščic tipa 6 - tukaj boste dobili eno dodatno ploščico.
Nato jih natisnite in izrežite. Poskusite jih postaviti tako, kot je na zgornji fotografiji. Upoštevajte, da se morata na desni zgornji strani proge 2 ploščici prekrivati drug z drugim - to je pričakovano, če se sprašujete, ali delate kaj narobe.
3. korak: Nastavitev okolja

Če želite programirati BBC micro: bit v MicroPythonu, morate zanj nastaviti urejevalnik (urejevalnik Mu) in kot čas izvajanja nastaviti GiggleBot MicroPython Runtime. Za to morate slediti navodilom na tej strani. Od tega trenutka se uporablja različica v0.4.0 izvajalnega okolja.
4. korak: Programiranje programa GiggleBot
Preden se lotimo tega, čas izvajanja GiggleBot MicroPython vsebuje klasičen čas delovanja za BBC micro: bit in druge knjižnice za podporo GiggleBot in drugih senzorjev Dexter Industries.
Ko ga nastavite, odprite naslednji skript v urejevalniku Mu in kliknite Flash. To bo utripalo čas izvajanja GiggleBot MicroPython in skript, ki ste ga pravkar odprli v svojem BBC micro: bit. Spodaj je prikazan tudi skript.
Ko je postopek utripanja končan, zložite BBC micro: bit v GiggleBot tako, da so neopiksli plošče obrnjeni naprej, ga postavite na stezo in ga vklopite.
Upoštevajte, da sta v skriptu PID in drugi 2 konstanti (nastavljena vrednost hitrosti in najmanjša konstanta hitrosti) že nastavljeni.
Opomba: V tem skriptu morda manjkajo presledki, kar je verjetno posledica neke težave pri prikazovanju GitHub Gists. Kliknite na bistvo, da se pomaknete na njegovo stran GitHub, kjer lahko kopirate in prilepite kodo.
GiggleBot PID Line Follower - Uglašeno z NeoPixels
iz uvoza microbit* |
od gigglebot import* |
iz utime uvoz sleep_ms, ticks_us |
uvozni ustruct |
# inicializirajte neopiksele GB |
neo = init () |
# časovni razpored |
update_rate = 50 |
# dobiček/konstanta (ob predpostavki, da je napetost akumulatorja okoli 4,0 voltov) |
Kp = 25,0 |
Ki = 0,5 |
Kd = 35,0 |
sprožilna točka = 0,3 |
min_hitrost_odstotka = 0,3 |
osnovna_hitrost = 70 |
nastavljena vrednost = 0,5 |
last_position = nastavljena vrednost |
integral = 0,0 |
run_neopixels = Res |
center_pixel = 5#, kjer je osrednja slikovna pika nasmeha na GB |
# turquoise = tuple (zemljevid (lambda x: int (x / 5), (64, 224, 208))) # barvo za risanje napake z neopiksli |
# turquoise = (12, 44, 41) # kar je ravno zgornja turkizna komentirana nad tem |
error_width_per_pixel = 0,5/3# največja napaka, deljena s številom segmentov med vsakim neopikselom |
defupper_bound_linear_speed_reducer (abs_error, trigger_point, upper_bound, najmanjša_motor_power, najvišja_motor_power): |
globalna osnovna_hitrost |
če abs_napaka> = sprožilna točka: |
# x0 = 0,0 |
# y0 = 0,0 |
# x1 = zgornja meja - sprožilna točka |
# y1 = 1,0 |
# x = abs_error - točka sprožilca |
# y = y0 + (x - x0) * (y1 - y0) / (x1 - x0) |
# enako kot |
y = (abs_error - trigger_point) / (upper_bound - trigger_point) |
moč motorja = osnovna hitrost * (najmanjša moč motorja + (1- let) * (najvišja moč motorja - najmanjša moč motorja)) |
vrnitev moči motorja |
drugače: |
vrni osnovno hitrost * najvišjo moč motorja |
run = False |
prejšnja_napaka = 0 |
medtem ko res: |
# če pritisnete gumb a, začnite slediti |
če je gumb_a.is_pressed (): |
run = True |
# če pa pritisnete gumb b, ustavite sledilnik vrstice |
če je button_b.is_pressed (): |
run = False |
integral = 0,0 |
prejšnja_napaka = 0,0 |
pixels_off () |
stop () |
sleep_ms (500) |
če je runTrue: |
# preberite linijske senzorje |
start_time = ticks_us () |
desno, levo = senzor za branje (LINE_SENSOR, OBA) |
# vrstica je na levi, ko je položaj <0,5 |
# vrstica je na desni, ko je položaj> 0,5 |
# vrstica je na sredini, ko je položaj = 0,5 |
# to je utežena aritmetična sredina |
poskusi: |
položaj = desno /plavajoče (levo + desno) |
razenZeroDivisionError: |
položaj = 0,5 |
# obseg mora biti (0, 1) in ne [0, 1] |
če je položaj == 0: položaj = 0,001 |
če je položaj == 1: položaj = 0,999 |
# uporabite krmilnik PD |
napaka = položaj - nastavljena vrednost |
integral += napaka |
popravek = Kp * napaka + Ki * integral + Kd * (napaka - prejšnja_napaka) |
previous_error = napaka |
# izračunajte hitrost motorja |
motor_speed = zgornja_meja_linearna_speed_reducer (abs (napaka), nastavljena vrednost * sprožilna točka, nastavljena vrednost, min_speed_percent, 1,0) |
leftMotorSpeed = hitrost motorja + popravek |
rightMotorSpeed = hitrost_motorja - popravek |
# osvetli neopiksle glede na podano napako |
če je run_neopixelsTrueand total_counts %3 == 0: |
za i inb '\ x00 / x01 / x02 / x03 / x04 / x05 / x06 / x07 / x08': |
neo = (0, 0, 0) |
za i inb '\ x00 / x01 / x02 / x03': |
ifabs (napaka)> error_width_per_pixel * i: |
če je napaka <0: |
# neo [center_pixel + i] = turkizna |
neo [center_pixel + i] = (12, 44, 41) |
drugače: |
# neo [center_pixel - i] = turkizna |
neo [center_pixel + i] = (12, 44, 41) |
drugače: |
odstotek = 1- (širina_napake_za_piks * i -abs (napaka)) / širina_napake_za_piks |
# osvetli trenutno slikovno piko |
če je napaka <0: |
# neo [center_pixel + i] = tuple (zemljevid (lambda x: int (x * odstotek), turkizna)) |
neo [center_pixel + i] = (int (64* odstotkov /5), int (224* odstotkov /5), int (208* odstotkov /5)) |
drugače: |
# neo [center_pixel - i] = tuple (zemljevid (lambda x: int (x * odstotek), turkizna)) |
neo [center_pixel - i] = (int (64* odstotkov /5), int (224* odstotkov /5), int (208* odstotkov /5)) |
prekiniti |
neo.show () |
poskusi: |
# izrežite hitrosti motorja |
če je levoMotorSpeed> 100: |
leftMotorSpeed = 100 |
rightMotorSpeed = rightMotorSpeed - leftMotorSpeed +100 |
če je desnoMotorSpeed> 100: |
rightMotorSpeed = 100 |
leftMotorSpeed = leftMotorSpeed - desnoMotorSpeed +100 |
če je levoMotorSpeed <-100: |
leftMotorSpeed = -100 |
če je desnoMotorSpeed <-100: |
rightMotorSpeed = -100 |
# aktivirajte motorje |
set_speed (leftMotorSpeed, rightMotorSpeed) |
pogon () |
# print ((napaka, hitrost motorja)) |
razen: |
# v primeru, da pridemo v neko težavo, ki je ni mogoče odpraviti |
prehod |
# in vzdržujte frekvenco zanke |
end_time = ticks_us () |
delay_diff = (end_time - start_time) /1000 |
if1000.0/ update_rate - delay_diff> 0: |
spanje (1000.0/ update_rate - delay_diff) |
oglejte si rawgigglebot_tuned_line_follower.py, ki ga gosti ❤ GitHub
5. korak: Pustite ga zagnati

Na BBC micro: bit: gumb A in gumb B sta 2 gumba:
- S pritiskom na gumb A nastavite GiggleBot, da sledi vrstici (če obstaja).
- S pritiskom na gumb B ustavite GiggleBot in ponastavite vse, tako da ga lahko znova uporabite.
Zelo priporočljivo je, da GiggleBota ne dvignete, medtem ko sledi vrstici, in ga nato postavite nazaj, ker bi se napaka pri izračunu lahko kopičila in popolnoma zmotila pot robota. Če ga želite dvigniti, pritisnite gumb B in nato, ko ga postavite nazaj, znova pritisnite A.
Priporočena:
Kako narediti prvo preprosto programsko opremo z uporabo Pythona: 6 korakov

Kako narediti prvo preprosto programsko opremo z uporabo Pythona: Pozdravljeni, dobrodošli v tem navodilu. Tukaj bom povedal, kako narediti svojo programsko opremo. Da, če imate idejo … vendar veste, da želite izvesti ali želite ustvariti nove stvari, potem je to za vas …… Predpogoj: Imeti morate osnovno znanje P
Twitter Bot z uporabo Pythona: 5 korakov

Twitter Bot z uporabo Pythona: Twitter bot
Nadzorna plošča COVID19 na zemljevidu sveta (z uporabo Pythona): 16 korakov

Nadzorna plošča COVID19 na svetovnem zemljevidu (z uporabo Pythona): Vem, da skoraj vsi poznamo večino podatkov o virusu COVID19. To navodilo je namenjeno ustvarjanju zemljevida z mehurčki za risanje podatkov (primerov) v realnem času na zemljevidu sveta. Za več udobja , program sem dodal v skladišče Github: https: //github.co
Poskusi v naprednem beleženju podatkov (z uporabo Pythona): 11 korakov

Poskusi v naprednem beleženju podatkov (z uporabo Pythona): Obstaja veliko navodil za beleženje podatkov, zato sem, ko sem hotel zgraditi svoj projekt beleženja, pogledal naokrog. Nekateri so bili dobri, nekateri ne preveč, zato sem se odločil, da vzamem nekaj boljših idej in se prijavim sam. Ta nadaljevanje
Spremljanje pospeševanja z uporabo Raspberry Pi in AIS328DQTR z uporabo Pythona: 6 korakov

Spremljanje pospeševanja z Raspberry Pi in AIS328DQTR z uporabo Pythona: Po moje je pospeševanje po nekaterih zakonih fizike končno.- Terry Riley Gepard pri lovu uporablja neverjeten pospešek in hitre spremembe hitrosti. Najhitrejše bitje na kopnem včasih izkoristi svojo najvišjo hitrost za ulov plena.