Kazalo:
2025 Avtor: John Day | [email protected]. Nazadnje spremenjeno: 2025-01-13 06:58
V tej vadnici GiggleBot rešuje težave labirinta.
Na GiggleBot namestimo servo, na katerega pritrdimo senzor razdalje. Med tekom se bo servo vrtil naprej in nazaj, tako da lahko senzor razdalje izmeri razdaljo do vsake ovire. To deluje podobno kot senzor LIDAR, ki je običajno veliko dražji.
Hkrati GiggleBot pošilja te podatke v oddaljeni mikro-bit BBC, ki na svoji matriki LED 5 x 5 prikazuje svoj relativni položaj do ovir.
Vaša naloga je, da lahko krmarite po GiggleBotu le tako, da pogledate, kaj je prikazano na drugem BBC micro: bit. Za nadzor GiggleBota se uporabljajo gumbi na oddaljenem BBC micro: bit.
To se sliši zabavno! Gremo k temu, kajne?
Korak: Potrebne komponente
Potrebovali bomo:
- GiggleBot.
- Baterijski paket za BBC micro: bit. V paketu je BBC micro: bit.
- x3 AA baterije za GiggleBot.
- Kabel Grove za povezavo senzorja razdalje z GiggleBotom.
- Servo komplet podjetja DexterIndustries.
- x3 BBC mikro: bitovi. Enega za GiggleBot in enega za upravljanje robota od daleč.
- Senzor razdalje podjetja DexterIndustries.
Pridobite robota GiggleBot za BBC micro: bit tukaj!
2. korak: Sestavljanje robota
Da bi bil GiggleBot pripravljen za programiranje, ga moramo sestaviti, čeprav ni treba storiti veliko.
3 baterije AA vstavite v predal pod GiggleBot.
Sestavite servo paket. Na njegovo vrtljivo roko servomotorja uporabite zadnjo luknjo, da pritrdite servo na sprednje priključke GiggleBot. Za večjo stabilnost lahko uporabite vijak in/ali nekaj žice. Ali pa ga vroče prilepite na desko. V mojem primeru sem z vijakom in kratko žico privezal servo roko na ploščo GiggleBot.
Ko montirate servo roko na servo, se prepričajte, da je servo že nastavljen na položaj 80. To lahko storite tako, da pokličete gigglebot.set_servo (gigglebot. RIGHT, 80). Več o tem si lahko preberete tukaj.
Nato postavite senzor razdalje na sprednjo stran servo paketa in ga pritrdite kot v zgornjem primeru.
Nazadnje, senzor razdalje s kablom Grove priključite na katero koli od 2 vrat I2C, servo motor pa na desna vrata, ki sedijo na GiggleBotu - na njem so navedena desna vrata.
3. korak: Ustvarite lasten labirint - neobvezno
V tem primeru sem uporabil kup škatel za ustvarjanje proge z zaprto zanko, podobno kot pri NASCAR.
Na tem koraku lahko postanete resnično ustvarjalni in naredite, kako želite, da se zvije, ali pa postane zelo dolgo, ker je res odvisno od vas.
Ali pa, če si sploh ne želite skladbe, lahko na primer postavite GiggleBot v kuhinjo ali dnevno sobo - to bi moralo biti dovolj dobro, ker je veliko sten in ovir, ki se jim morate še izogniti.
4. 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.
5. korak: Programiranje programa GiggleBot - I. del
Najprej nastavimo skript GiggleBot. Ta skript bo naredil, da bo GiggleBot zasukal svoj servo motor za 160 stopinj (80 stopinj v vsako smer), hkrati pa odvzel 10 odčitkov senzorja razdalje na zavoj.
Ko je vklopljen, bo GiggleBot miroval, dokler ne prejme ukaza z daljinskega upravljalnika. Obstajajo lahko samo 3 ukazi: premaknite se naprej, v levo ali v desno.
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 na daljavo, ki temelji na LIDAR-u
od gigglebot import* |
from distance_sensor import DistanceSensor |
iz mikrobnega spanja za uvoz |
od utime import ticks_us, sleep_us |
uvozni ustruct |
uvoz radia |
# ustavite robota, če se že premika |
stop () |
# omogoči radio |
radio.on () |
# predmet senzorja razdalje |
ds = Senzor razdalje () |
ds.start_continuous () |
rotate_time = 0.7# merjeno v sekundah |
rotate_span = 160# merjeno v stopinjah |
rotate_steps = 10 |
kompenzacija režijskih stroškov = 1,05# definirano v odstotkih |
time_per_step = 10 ** 6* rotate_time / (rotate_steps* nadzemna_kompenzacija) |
last_read_time = 0 |
radar = bytearray (rotate_steps) |
servo_rotate_direction = 0# 0 za premik navzgor (0-> 160) in 1 drugače |
radar_index = 0 |
set_servo (DESNO, 0) |
medtem ko res: |
# prebrano z radarja |
če ticks_us () - last_read_time> time_per_step: |
# branje s senzorja razdalje |
radar [radar_index] = int (ds.read_range_continuous () /10) |
last_read_time = ticks_us () |
tiskanje (radar_index) |
# naredite logiko za zasuk servomotorja od leve proti desni |
če je radar_index == rotate_steps -1 in servo_rotate_direction == 0: |
set_servo (DESNO, 0) |
servo_rotate_direction = 1 |
elif radar_index == 0in smer servo_rotate_direct == 1: |
set_servo (DESNO, rotate_span) |
servo_rotate_direction = 0 |
drugače: |
radar_index += 1 če je servo_rotate_direction == 0else-1 |
# in pošljite radarske vrednosti |
radio.send_bytes (radar) |
poskusi: |
# preberite ukaze robota |
lmotor, rmotor = ustruct.unpack ('bb', radio.receive_bytes ()) |
# in aktivirajte motorje v primeru prejetih ukazov |
set_speed (lmotor, rmotor) |
pogon () |
razenTypeError: |
prehod |
oglejte si rawgigglebot_lidar_robot.py, ki ga gosti ❤ GitHub
6. korak: Programiranje daljinskega upravljalnika - II. Del
Ostane le še programiranje drugega BBC micro: bita, ki deluje kot daljinski upravljalnik.
Daljinski upravljalnik se uporablja za prikaz razdalje do ovir na zaslonu velikosti 5 x 5 slikovnih pik. Vklopljenih bo največ 10 slikovnih pik.
Hkrati vam daljinski upravljalnik daje možnost daljinskega upravljanja z GiggleBotom s pritiskom na dva gumba: premaknite se naprej, v levo in v desno.
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 na daljavo, ki temelji na LIDAR -u - koda na daljavo
iz uvoza microbit sleep, display, button_a, button_b |
uvozni ustruct |
uvoz radia |
uvoz matematike |
radio.on () |
rotate_steps = 10 |
rotate_span = 160# v stopinjah |
rotate_step = rotate_span / rotate_steps |
max_distance = 50# v centimetrih |
side_length_leds = 3 # merjeno v # pikslih |
radar = bytearray (rotate_steps) |
xar = bytearray (rotate_steps) |
yar = bytearray (rotate_steps) |
save_xar = bytearray (rotate_steps) |
save_yar = bytearray (rotate_steps) |
hitrost_motorja = 50 |
medtem ko res: |
status = radio.receive_bytes_into (radar) |
če status ni Nič: |
# display.clear () |
za c, val nešteto (radar): |
če je radar [c] <= največja_razdalja: |
# izračunajte 2d koordinate vsake razdalje |
kot = vrtljivi_koraki / (vrtljivi_koraki -1) * rotacijski_korak * c |
kot += (180-vrtljivi_razpon) /2,0 |
x_c = math.cos (kot * math.pi /180.0) * radar [c] |
y_c = math.sin (kot * math.pi /180.0) * radar [c] |
# prilagodite razdalje, da se prilegajo zaslonu 5x5 mikrobit |
x_c = x_c * (side_length_leds -1) / max_distance |
y_c = y_c * (side_length_leds +1) / max_distance |
# koordinate premestitve |
x_c += (side_length_leds -1) |
y_c = (side_length_leds +1) - y_c |
# okrogle koordinate točno tam, kjer najdemo LED |
če x_c - math.floor (x_c) <0,5: |
x_c = math.floor (x_c) |
drugače: |
x_c = math.ceil (x_c) |
če y_c - math.floor (y_c) <0,5: |
y_c = math.floor (y_c) |
drugače: |
y_c = math.ceil (y_c) |
xar [c] = x_c |
yar [c] = y_c |
drugače: |
xar [c] = 0 |
yar [c] = 0 |
display.clear () |
za x, y inzip (xar, yar): |
display.set_pixel (x, y, 9) |
# print (seznam (zip (xar, yar, radar))) |
stanjeA = gumb_a.is_pressed () |
stanjeB = gumb_b.is_pressed () |
če sta stateA in stateB: |
radio.send_bytes (ustruct.pack ('bb', motor_speed, motor_speed)) |
print ('naprej') |
če stanjeA in ne stanjeB: |
radio.send_bytes (ustruct.pack ('bb', motor_speed, -motor_speed)) |
tiskanje ("levo") |
če ni stanjeA in stanjeB: |
radio.send_bytes (ustruct.pack ('bb', -motor_speed, motor_speed)) |
print ('desno') |
ifnot stanjeA in ne stanjeB: |
radio.send_bytes (ustruct.pack ('bb', 0, 0)) |
print ('stop') |
oglejte si rawgigglebot_lidar_remote.py, ki ga gosti ❤ GitHub
7. korak: Razlaga oddaljenega zaslona
"loading =" lazy "nadzor GiggleBot, imate naslednje možnosti:
- Pritisnite gumb A in gumb B, da premaknete GiggleBot naprej.
- Pritisnite gumb A, da zavrtite GiggleBot v levo.
- Pritisnite gumb B, da zavrtite GiggleBot v desno.
Če želite videti, v katero smer so zaznane najbližje ovire, samo poglejte na zaslon daljinskega upravljalnika (daljinski mikro -bit BBC, ki ga držite). GiggleBot bi morali nadzorovati od daleč, ne da bi ga gledali.