Turinys:
- 1 žingsnis: reikalingi komponentai
- 2 žingsnis: nustatykite takelius
- 3 žingsnis: nustatykite aplinką
- 4 žingsnis: „GiggleBot“programavimas
- 5 veiksmas: leiskite jam veikti
Video: „GiggleBot“linijos sekėjas naudojant „Python“: 5 žingsniai
2024 Autorius: John Day | [email protected]. Paskutinį kartą keistas: 2024-01-30 10:46
Šį kartą „MicroPython“programuojame „Dexter Industries GiggleBot“sekti juodą liniją, naudojant įmontuotą linijos sekimo jutiklį.
Kad „GiggleBot“būtų tinkamai valdomas, jis turi būti suporuotas su „BBC micro: bit“.
Jei ši pamoka jums yra per daug pažengusi, o „GiggleBot“programavimo kol kas per daug, visada galite pereiti prie pradinio vadovo, kuriame parodyta, kaip robotą galima užprogramuoti „MakeCode“čia. Susieta pamoka padės išsiaiškinti pagrindinius dalykus.
1 žingsnis: reikalingi komponentai
Reikalingi šie aparatūros komponentai:
- x3 AA baterijos - mano atveju aš naudoju įkraunamas baterijas, kurių bendra įtampa yra mažesnė.
- „Dexter Industries GiggleBot“robotas, skirtas „micro: bit“.
- BBC mikro: bit.
Žinoma, jums taip pat reikia mikro USB kabelio, kad programuotumėte „BBC micro: bit“- šis kabelis paprastai yra „BBC micro: bit“pakuotėje arba visada galite naudoti tą, kuris naudojamas („Android“) išmaniesiems telefonams įkrauti.
Gaukite „GiggleBot for micro: bit“čia
2 žingsnis: nustatykite takelius
Turėsite pereiti prie kai kurių plytelių spausdinimo ir savo takelių kūrimo. Galite naudoti mūsų pačių plyteles, kad būtumėte 100% tikri, jog kartojate mūsų sąlygas. Arba, jei jaučiatės nuotykių kupinas, galite panaudoti juodą juostą ir pasidaryti savo. Čia yra mūsų naudojamų plytelių PDF.
Aukščiau pateiktą takelį sudaro šis skaičius skirtingų plytelių:
- 12 1 tipo plytelių.
- 5 2 tipo plytelės.
- 3 plytelių tipo #5 šablonai.
- 3 6 tipo plytelių šablonai - čia turėsite vieną papildomą plytelę.
Toliau spausdinkite ir supjaustykite. Pabandykite juos išdėstyti kaip aukščiau esančioje nuotraukoje ir atminkite, kad dešinėje viršutinėje takelio pusėje 2 plytelės turi persidengti viena su kita - to tikimasi tuo atveju, jei jums įdomu, ar darote kažką ne taip.
3 žingsnis: nustatykite aplinką
Kad galėtumėte programuoti „BBC micro: bit“„MicroPython“, turite nustatyti jo redaktorių („Mu Editor“) ir nustatyti „GiggleBot MicroPython Runtime“vykdymo laiką. Norėdami tai padaryti, turite vadovautis šiame puslapyje pateiktomis instrukcijomis. Šiuo metu naudojama vykdymo laiko versija v0.4.0.
4 žingsnis: „GiggleBot“programavimas
Prieš pradėdami dirbti, „GiggleBot MicroPython“vykdymo metu yra klasikinis „BBC micro: bit“ir kitų bibliotekų veikimo laikas, palaikantis „GiggleBot“ir kitus „Dexter Industries“jutiklius.
Nustatę, atidarykite šį scenarijų „Mu“redaktoriuje ir spustelėkite „Flash“. Taip mirksės „GiggleBot MicroPython Runtime“ir scenarijus, kurį ką tik atidarėte savo „BBC micro: bit“. Scenarijus taip pat parodytas žemiau.
Baigę mirksėti, sudėkite BBC mikro: bitą į „GiggleBot“taip, kad plokštės neopikseliai būtų nukreipti į priekį, padėkite jį ant takelio ir įjunkite.
Atkreipkite dėmesį, kad scenarijuje PID ir kitos 2 konstantos (greičio nuostata ir minimalios greičio konstantos) jau yra nustatytos.
Pastaba: šiame scenarijuje gali nebūti tarpų ir atrodo, kad tai įvyko dėl tam tikrų problemų rodant „GitHub Gists“. Spustelėkite esmę, kad pateksite į jo „GitHub“puslapį, kuriame galite nukopijuoti ir įklijuoti kodą.
„GiggleBot“PID linijos sekėjas - suderintas su „NeoPixels“
iš mikrobitų importo* |
iš „Gigglebot“importo* |
iš utime importuoti sleep_ms, ticks_us |
importo ustruktūra |
# inicijuoti GB neopikselius |
neo = init () |
# laikas |
update_rate = 50 |
# prieaugis/konstanta (darant prielaidą, kad akumuliatoriaus įtampa yra apie 4,0 voltų) |
Kp = 25,0 |
Ki = 0,5 |
Kd = 35,0 |
trigerio taškas = 0,3 |
min_speed_percent = 0.3 |
bazinis greitis = 70 |
nustatytoji vertė = 0,5 |
last_position = nustatytoji vertė |
integralas = 0,0 |
run_neopixels = Tiesa |
centre_pikselis = 5#, kur centrinis šypsenos pikselis yra GB |
# turquoise = tuple (žemėlapis (lambda x: int (x / 5), (64, 224, 208))) # spalva, naudojama norint piešti klaidą naudojant neopikselius |
# turquoise = (12, 44, 41) # tai yra aukščiau nurodyta turkio spalva |
error_width_per_pixel = 0.5/3# max klaida, padalyta iš segmentų skaičiaus tarp kiekvieno neopikselio |
defupper_bound_linear_speed_reducer (abs_error, trigger_point, viršutinė_bound, mažiausia_motor_power, didžiausia_motor_power): |
pasaulinis bazinis greitis |
jei abs_error> = trigger_point: |
# x0 = 0,0 |
# y0 = 0,0 |
# x1 = viršutinė riba - trigerio taškas |
# y1 = 1,0 |
# x = abs_error - trigger_point |
# y = y0 + (x - x0) * (y1 - y0) / (x1 - x0) |
# taip pat kaip |
y = (abs_error - trigger_point) / (viršutinė_bound - trigger_point) |
variklio galia = bazinis greitis * (mažiausia_variklio galia + (1 -y) * (didžiausia_variklio galia - mažiausia_variklio galia)) |
grąžinti variklio energiją |
Kitas: |
grąžinti bazinį greitį * didžiausią_motorinę galią |
paleisti = klaidinga |
ankstesnė klaida = 0 |
o tiesa: |
# jei paspausite mygtuką a, pradėkite sekti |
jei mygtukas_a.paspaudžiamas (): |
paleisti = tiesa |
# bet jei paspaudžiamas mygtukas b, sustabdykite linijos sekimą |
jei mygtukas_b.is_pressed (): |
paleisti = klaidinga |
integralas = 0,0 |
ankstesnė klaida = 0,0 |
pixels_off () |
sustabdyti() |
miego_ms (500) |
jei paleisti isTrue: |
# perskaitykite linijos jutiklius |
pradžios_ laikas = erkės_ (() |
dešinėn, kairėn = skaitymo jutiklis (LINE_SENSOR, Abi) |
# eilutė yra kairėje, kai padėtis <0,5 |
# eilutė yra dešinėje, kai padėtis> 0,5 |
# eilutė yra viduryje, kai padėtis = 0,5 |
# tai svertinis aritmetinis vidurkis |
bandyti: |
padėtis = dešinė /plūdė (kairė + dešinė) |
išskyrus „ZeroDivisionError“: |
padėtis = 0,5 |
# diapazonas turi būti (0, 1), o ne [0, 1] |
jei pozicija == 0: pozicija = 0,001 |
jei pozicija == 1: pozicija = 0,999 |
# naudokite PD valdiklį |
klaida = padėtis - nustatytoji vertė |
integralas += klaida |
taisymas = Kp * klaida + Ki * integralas + Kd * (klaida - ankstesnė klaida) |
previous_error = klaida |
# apskaičiuokite variklio greitį |
variklio greitis = viršutinis_prilygtas_linijinis_sumažėjimo greitis |
leftMotorSpeed = motor_speed + korekcija |
rightMotorSpeed = motor_speed - korekcija |
# apšvieskite neopikselius pagal nurodytą klaidą |
jei 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 (klaida)> error_width_per_pixel * i: |
jei klaida <0: |
# neo [centre_pixel + i] = turkis |
neo [centre_pixel + i] = (12, 44, 41) |
Kitas: |
# neo [centras_pikselis - i] = turkis |
neo [centre_pixel + i] = (12, 44, 41) |
Kitas: |
procentas = 1- (error_width_per_pixel * i -abs (klaida)) / error_width_per_pixel |
# užsidega dabartinis pikselis |
jei klaida <0: |
# neo [centre_pixel + i] = kortelė (žemėlapis (lambda x: int (x * procentas), turkis)) |
neo [centro_pikselis + i] = (int (64* proc. /5), int (224* proc. /5), int (208* proc. /5)) |
Kitas: |
# neo [centre_pixel - i] = kortelė (žemėlapis (lambda x: int (x * procentas), turkis)) |
neo [centro_pikselis - i] = (int (64* proc. /5), int (224* proc. /5), int (208* proc. /5)) |
pertrauka |
neo.show () |
bandyti: |
# sumažinkite variklio greitį |
jei kairėMotorSpeed> 100: |
leftMotorSpeed = 100 |
rightMotorSpeed = rightMotorSpeed - leftMotorSpeed +100 |
jei rightMotorSpeed> 100: |
rightMotorSpeed = 100 |
leftMotorSpeed = leftMotorSpeed - dešinėMotorSpeed +100 |
jei kairėMotorSpeed <-100: |
leftMotorSpeed = -100 |
jei teisingaiMotorSpeed <-100: |
rightMotorSpeed = -100 |
# įjunkite variklius |
set_speed (leftMotorSpeed, rightMotorSpeed) |
vairuoti () |
# spausdinti ((klaida, variklio greitis)) |
išskyrus: |
# jei patektume į neištaisomą problemą |
praeiti |
# ir palaikykite ciklo dažnį |
pabaigos_ laikas = erkės_ (() |
delay_diff = (pabaigos laikas - pradžios laikas) /1000 |
if1000.0/ update_rate - delay_diff> 0: |
miego režimas (1000.0/ update_rate - delay_diff) |
peržiūrėti rawgigglebot_tuned_line_follower.py, kurį priglobė „GitHub“❤
5 veiksmas: leiskite jam veikti
„BBC micro: bit“yra 2 mygtukai: mygtukas A ir mygtukas B:
- Paspaudus mygtuką A, „GiggleBot“seka eilutę (jei yra).
- Paspaudus mygtuką B, „GiggleBot“sustabdomas ir viskas nustatoma iš naujo, kad galėtumėte vėl jį naudoti.
Labai patariama nepakelti „GiggleBot“, kai ji eina po linijos, ir tada vėl ją uždėti ant jo, nes apskaičiuojama klaida gali kauptis ir visiškai sujaukti roboto maršrutą. Jei norite jį pakelti, paspauskite mygtuką B, o tada, kai įdėsite atgal, dar kartą paspauskite A.
Rekomenduojamas:
Linijos sekėjas „HoGent“- „Synthese“projektas: 8 žingsniai
Linijos sekėjas HoGent - Syntheseproject: Voor het vak syntheseproject kregen we de opdracht een linefollower te maken. In deze instructable zal ik uitleggen hoe ik deze gemaakt heb, en tegen welke problemen ik o.a ben aangelopen
„Tinkercad“linijos sekėjas: 3 žingsniai
„Tinkercad“linijos sekėjas: „A-Line Follower Robot“, kaip rodo pavadinimas, yra automatizuota transporto priemonė, valdoma pagal vizualią liniją, įterptą į grindis ar lubas. Paprastai vaizdinė linija yra kelias, kuriuo eina linijos sekėjas robotas, ir tai bus juoda linija
Įterptas UCL - linijos sekėjas B0B: 9 žingsniai
„UCL Embedded“-B0B „Linefollower“: tai yra B0B.*B0B yra bendras radijo bangomis valdomas automobilis, laikinai aptarnaujantis liniją sekantį robotą. Kaip ir daugelis prieš jį sekančių robotų, jis padarys viską, kad išliktų linija, kurią sukelia perėjimas tarp grindų ir kintamosios srovės
Paprastas linijos sekėjas naudojant „Arduino“: 5 žingsniai
Paprastas linijos sekėjas naudojant „Arduino“: „Arduino“linijos sekimo robotas „Arduino Line“sekimo kompanija
Linijos sekėjas naudojant „Arduino“- Lengvas „pasidaryk pats“projektas: 6 žingsniai
Linijos sekėjas naudojant „Arduino“| Lengvas „pasidaryk pats“projektas: šioje pamokoje mes padarysime linijos sekėją, naudodami „Arduino“. Reikalingos dalys: Laikas: BO varikliai ir ratai: https://amzn.to/2Yjh9I7 L298n variklio tvarkyklė: https://amzn.to/2IWNMWF IR jutiklis : https://amzn.to/2FFtFu3 „Arduino Uno“: https://amzn.to/2FyTrjF J