Sisällysluettelo:
- Vaihe 1: Tarvittavat komponentit
- Vaihe 2: Määritä jäljet
- Vaihe 3: Ympäristön määrittäminen
- Vaihe 4: GiggleBot -ohjelman ohjelmointi
- Vaihe 5: Anna sen toimia
Video: GiggleBot -linjan seuraaja Pythonin avulla: 5 vaihetta
2024 Kirjoittaja: John Day | [email protected]. Viimeksi muokattu: 2024-01-30 09:01
Tällä kertaa ohjelmoimme MicroPythonissa Dexter Industries GiggleBotin seuraamaan mustaa viivaa sisäänrakennetun linjaseurantatunnistimen avulla.
GiggleBot on yhdistettävä BBC micro: bitin kanssa, jotta sitä voidaan ohjata asianmukaisesti.
Jos tämä opetusohjelma on liian edistynyt sinulle ja GiggleBotin ohjelmointi on toistaiseksi liikaa, voit aina käydä läpi aloitusoppaan, joka näyttää kuinka robotti voidaan ohjelmoida MakeCode -ohjelmassa täällä. Linkitetty opetusohjelma opastaa sinut perusteiden läpi.
Vaihe 1: Tarvittavat komponentit
Seuraavia laitteistokomponentteja tarvitaan:
- x3 AA -paristoa - minun tapauksessani käytän ladattavia paristoja, joiden jännite on alhaisempi.
- Dexter Industries GiggleBot -robotti micro: bitille.
- BBC: n mikro: bitti.
Tietenkin tarvitset myös mikro -USB -kaapelin BBC micro: bit -ohjelmointiin - tämä kaapeli kuuluu yleensä BBC micro: bit -pakettiin tai voit aina käyttää sitä, jota käytetään Android -älypuhelimien lataamiseen.
Hanki GiggleBot for micro: bit täältä
Vaihe 2: Määritä jäljet
Sinun on käytävä läpi joitakin laattoja ja suunniteltava omia kappaleitasi. Voit käyttää omia laattoja, joten olet 100% varma, että toistat olosuhteitamme. Tai jos sinusta tuntuu seikkailunhaluiselta, voit käyttää mustaa teippiä ja tehdä oman. Tässä on PDF käyttämillemme laattoille.
Yllä oleva raita koostuu seuraavasta määrästä erilaisia laattoja:
- 12 laattaa tyyppiä #1.
- 5 laattaa tyyppiä #2.
- 3 laattojen tyyppiä #5.
- 3 laatatyyppiä #6 - tässä saat yhden ylimääräisen laatan.
Seuraavaksi tulosta ne ja leikkaa ne. Yritä sijoittaa ne kuten yllä olevassa kuvassa ja muista, että radan oikeassa yläkulmassa kahden laatan on oltava päällekkäin toistensa kanssa - tämä on odotettavissa, jos mietit, teetkö jotain väärin.
Vaihe 3: Ympäristön määrittäminen
Jotta voit ohjelmoida BBC: n micro: bitin MicroPythonissa, sinun on määritettävä sen editori (Mu Editor) ja asetettava GiggleBot MicroPython Runtime ajonaikaksi. Tätä varten sinun on noudatettava tämän sivun ohjeita. Tästä hetkestä lähtien ajonaikaista versiota v0.4.0 käytetään.
Vaihe 4: GiggleBot -ohjelman ohjelmointi
Ennen kuin aloitat sen, GiggleBot MicroPython ajonaika sisältää klassisen ajonaikaan BBC micro: bitille ja muille kirjastoille, jotka tukevat GiggleBotia ja muita Dexter Industries Sensoreita.
Kun olet määrittänyt sen, avaa seuraava komentosarja Mu -editorissa ja napsauta Flash. Tämä vilkkuu GiggleBot MicroPython Runtime ja komentosarja, jonka olet juuri avannut BBC: n mikro: bitille. Käsikirjoitus näkyy myös alla.
Kun vilkkuva prosessi on valmis, pinoa BBC micro: bit GiggleBotiin levyn neopikselit eteenpäin, aseta se radalle ja kytke se päälle.
Huomaa, että skriptissä PID ja muut 2 vakioita (nopeuden asetuspiste ja vähimmäisnopeusvakiot) on jo asetettu.
Huomautus: Seuraavassa komentosarjassa saattaa olla tyhjiä välilyöntejä, ja tämä näyttää johtuvan jostakin ongelmasta GitHub Gistsin näyttämisessä. Napsauta ydintä viedäksesi sen GitHub-sivulle, jossa voit kopioida ja liittää koodin.
GiggleBot PID -linjan seuraaja - viritetty NeoPixeleillä
mikrobitin tuonnista* |
gigglebot -tuonnista* |
utime -tuonnista sleep_ms, ticks_us |
tuontirakenne |
# alustaa GB -neopikselit |
neo = init () |
# ajoitus |
update_rate = 50 |
# voittoa/vakioita (olettaen, että akun jännite on noin 4,0 volttia) |
Kp = 25,0 |
Ki = 0,5 |
Kd = 35,0 |
liipaisupiste = 0,3 |
min_nopeus_prosentti = 0,3 |
perusnopeus = 70 |
asetuspiste = 0,5 |
last_position = asetusarvo |
integraali = 0,0 |
run_neopixels = Totta |
center_pixel = 5# missä hymyn keskipiste sijaitsee GB: ssä |
# turkoosi = tuple (kartta (lambda x: int (x / 5), (64, 224, 208))) # väri, jota käytetään virheen piirtämiseen neopikseleillä |
# turkoosi = (12, 44, 41) # joka on täsmälleen yllä oleva turkoosi, joka kommentoitiin edellä |
error_width_per_pixel = 0.5/3# max virhe jaettuna kunkin neopikselin välisten segmenttien määrällä |
defupper_bound_linear_speed_reducer (abs_error, trigger_point, ylä_raja, pienin_moottorin teho, suurin_moottorin_teho): |
globaali perusnopeus |
jos abs_error> = trigger_point: |
# x0 = 0,0 |
# y0 = 0,0 |
# x1 = yläraja - liipaisupiste |
# y1 = 1,0 |
# x = abs_error - trigger_point |
# y = y0 + (x - x0) * (y1 - y0) / (x1 - x0) |
# sama kuin |
y = (abs_error - trigger_point) / (ylä_raja - trigger_point) |
moottorin_teho = perusnopeus * (pienin_moottorin_teho + (1- y) * (suurin_moottorin_teho - pienin_moottorin_teho)) |
paluu moottorin_teho |
muu: |
paluu base_speed * suurin_moottorin_teho |
run = epätosi |
edellinen_virhe = 0 |
Vaikka totta: |
# jos painiketta a painetaan, aloita seuranta |
jos button_a.is_pressed (): |
ajaa = totta |
# mutta jos painiketta b painetaan, pysäytä linjan seuraaja |
jos button_b.is_pressed (): |
run = epätosi |
integraali = 0,0 |
edellinen_virhe = 0,0 |
pixels_off () |
lopettaa() |
uni_ms (500) |
jos suoritus on tosi: |
# lue linja -anturit |
start_time = ticks_us () |
oikea, vasen = luku_anturi (LINE_SENSOR, MOTH) |
# viiva on vasemmalla, kun asento <0,5 |
# viiva on oikealla, kun sijainti> 0,5 |
# viiva on keskellä, kun asema = 0,5 |
# se on painotettu aritmeettinen keskiarvo |
yrittää: |
sijainti = oikea /kelluva (vasen + oikea) |
paitsi ZeroDivisionError: |
sijainti = 0,5 |
# alueen on oltava (0, 1) eikä [0, 1] |
jos sijainti == 0: sijainti = 0,001 |
jos sijainti == 1: sijainti = 0,999 |
# Käytä PD -ohjainta |
virhe = sijainti - asetusarvo |
integraali += virhe |
korjaus = Kp * virhe + Ki * integraali + Kd * (virhe - edellinen_virhe) |
edellinen_virhe = virhe |
# laskea moottorin nopeudet |
moottorin_nopeus = ylempi_rajainen_linja_nopeuden pienennys (abs (virhe), asetuspiste * liipaisupiste, asetuspiste, min_nopeusprosentti, 1.0) |
leftMotorSpeed = moottorin_nopeus + korjaus |
rightMotorSpeed = moottorin_nopeus - korjaus |
# sytytä neopikselit annetun virheen mukaan |
jos run_neopixels isTrueand total_counts %3 == 0: |
i inb '\ x00 / x01 / x02 / x03 / x04 / x05 / x06 / x07 / x08': |
neo = (0, 0, 0) |
i inb '\ x00 / x01 / x02 / x03': |
ifabs (virhe)> error_width_per_pixel * i: |
jos virhe <0: |
# neo [center_pixel + i] = turkoosi |
neo [center_pixel + i] = (12, 44, 41) |
muu: |
# neo [center_pixel - i] = turkoosi |
neo [center_pixel + i] = (12, 44, 41) |
muu: |
prosenttia = 1- (error_width_per_pixel * i -abs (error)) / error_width_per_pixel |
# sytyttää nykyisen pikselin |
jos virhe <0: |
# neo [center_pixel + i] = tuple (kartta (lambda x: int (x * prosenttiosuus), turkoosi)) |
neo [center_pixel + i] = (int (64* prosenttia /5), int (224* prosenttia /5), int (208* prosenttia /5)) |
muu: |
# neo [center_pixel - i] = tuple (kartta (lambda x: int (x * prosenttiosuus), turkoosi)) |
neo [keskipiste - i] = (int (64* prosenttia /5), int (224* prosenttia /5), int (208* prosenttia /5)) |
tauko |
neo.show () |
yrittää: |
# leikkaa moottorin nopeudet |
jos vasenMoottorin nopeus> 100: |
leftMotorSpeed = 100 |
rightMotorSpeed = rightMotorSpeed - leftMotorSpeed +100 |
jos oikeaMotorSpeed> 100: |
rightMotorSpeed = 100 |
leftMotorSpeed = leftMotorSpeed - rightMotorSpeed +100 |
jos vasenMoottorin nopeus <-100: |
leftMotorSpeed = -100 |
jos oikeaMotorSpeed <-100: |
rightMotorSpeed = -100 |
# käynnistä moottorit |
set_speed (leftMotorSpeed, rightMotorSpeed) |
ajaa() |
# print ((virhe, moottorin_nopeus)) |
paitsi: |
# jos joudumme korjaamattomaan ongelmaan |
kulkea |
# ja säilytä silmukan taajuus |
end_time = ticks_us () |
delay_diff = (päättymisaika - alkamisaika) /1000 |
if1000.0/ update_rate - delay_diff> 0: |
lepotila (1000,0/ päivitysnopeus - viive_diff) |
katso rawgigglebot_tuned_line_follower.py, jota ylläpitää GitHub ❤
Vaihe 5: Anna sen toimia
BBC micro: ssa on kaksi painiketta: bitti: painike A ja painike B:
- Painikkeen A painaminen asettaa GiggleBotin seuraamaan linjaa (jos sellainen on).
- Painikkeen B painaminen pysäyttää GiggleBotin ja nollaa kaiken, jotta voit käyttää sitä uudelleen.
On erittäin suositeltavaa olla nostamatta GiggleBotia, kun se seuraa viivaa, ja laita se sitten takaisin sille, koska laskentavirhe voi kertyä ja sotkea robotin reitin. Jos haluat nostaa sen, paina painiketta B ja paina sitten uudelleen, kun asetat sen takaisin.
Suositeltava:
Muiden kuin englanninkielisten näppäimistöasettelujen oppiminen Pythonin avulla: 8 vaihetta
Pythonin käyttö muiden kuin englanninkielisten näppäimistöasettelujen oppimiseen: Hei, olen Julien! Olen tietojenkäsittelytieteen opiskelija ja näytän tänään, kuinka voit käyttää Pythonia opettaaksesi itsellesi muun kuin englannin kielen näppäimistöasettelun. Nykyään paljon kielten oppimista tapahtuu verkossa, ja yksi asia, johon ihmiset voivat vastata
Kuinka tehdä ensimmäinen yksinkertainen ohjelmisto Pythonin avulla: 6 vaihetta
Kuinka tehdä ensimmäinen yksinkertainen ohjelmisto Pythonin avulla: Hei, tervetuloa tähän ohjekirjaan. Tässä kerron kuinka tehdä oma ohjelmisto. Kyllä, jos sinulla on idea … mutta tiedät toteuttaa tai olet kiinnostunut uusien asioiden luomisesta, se on sinua varten …… Edellytys: Pitäisi olla perustiedot P
Suuntautumisen opiskelu Raspberry Pi: n ja MXC6226XU: n avulla Pythonin avulla: 6 vaihetta
Suuntautumisen opiskelu Raspberry Pi: n ja MXC6226XU: n avulla Pythonin avulla: Äänet ovat yksinkertaisesti osa ajoneuvon työskentelyä. Hyvin viritetyn ajoneuvomoottorin humina on upea ääni. Renkaiden kulutuspinnat nurisevat tietä vasten, tuuli huutaa peilien, muovikappaleiden ja kojelaudan kappaleiden ympäri
Kiihtyvyyden seuranta Raspberry Pi: n ja AIS328DQTR: n avulla Pythonin avulla: 6 vaihetta
Kiihtyvyyden seuranta Raspberry Pi: n ja AIS328DQTR: n avulla Pythonin avulla: Kiihtyvyys on rajallinen, mielestäni joidenkin fysiikan lakien mukaan.- Terry Riley Gepardi käyttää hämmästyttävää kiihtyvyyttä ja nopeita nopeuden muutoksia jahtaessaan. Nopein olento rannalla silloin tällöin käyttää huipputahdiaan saaliin saamiseen
Kiihtyvyyden vaihtelujen seuranta Raspberry Pi: n ja MMA7455: n avulla Pythonin avulla: 6 vaihetta
Kiihtyvyyden vaihtelujen seuranta Raspberry Pi: n ja MMA7455: n avulla Pythonin avulla: En kompastunut, testasin painovoimaa. Se toimii edelleen … Esitys kiihtyvästä avaruussukkulastä selvensi, että sukkulan korkeimmassa kohdassa oleva kello valitsee nopeammin kuin tukikohdan painovoima -ajan laajenemisen vuoksi. Jonkin verran