Kazalo:
- Korak: Potrebne komponente
- 2. korak: Sestavljanje robota
- 3. korak: Ustvarite lasten labirint - neobvezno
- 4. korak: Nastavitev okolja
- 5. korak: Programiranje programa GiggleBot - I. del
- 6. korak: Programiranje daljinskega upravljalnika - II. Del
- 7. korak: Razlaga oddaljenega zaslona
Video: Naredite robota, ki ga vodi Lidar, z GiggleBotom: 8 korakov
2024 Avtor: John Day | [email protected]. Nazadnje spremenjeno: 2024-01-30 12:05
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.
Priporočena:
Naredite jedilnega robota z Arduino Nano - Zlati vijak: 5 korakov
Naredite jedilnega robota z Arduino Nano | Zlati vijak: Ideja za ta projekt je prišla od moje hčerke. Želi si robota in ta robot lahko odpre usta, da mu lahko da hrano v usta. Tako sem v zaprtih prostorih iskal stvari, ki so bile na voljo: karton, arduino nano, ultrazvočni senzor, servo motor
Opozorilo o vodi - naprava za reševanje vašega čolna: 5 korakov (s slikami)
Opozorilo o vodi - naprava za reševanje vašega čolna: Če ste lastnik čolna, obstaja trdno udobje, da čoln končno spravite na suho. Tam ne more potoniti. Povsod drugje se sooča z nenehno bitko, da bi premagala težnjo, da bi zdrsnila pod valove in izginila. Pozimi tukaj, na žalost
Robot VEX Shark (ne plava v vodi): 5 korakov
VEX Shark Robot (Don't Swim in Water): Ta projekt so izvedli Josh Woodworth, Gregory Amberes in Stephen Franckiewicz. Naš cilj je bil izdelati repliko ribe in programirati motor za premikanje repa. Naša zasnova NI potopna, zato je ne gradite in pričakujte, da bo delovala
FinduCar: pametni avtomobilski ključ, ki ljudi vodi do parkiranega avtomobila: 11 korakov (s slikami)
FinduCar: pametni avtomobilski ključ, ki ljudi vodi do parkiranega avtomobila: Za rešitev zgornjih težav ta projekt predlaga razvoj pametnega avtomobilskega ključa, ki bi ljudi lahko usmeril tja, kjer so parkirali avto. In moj načrt je vključiti GPS v avtomobilski ključ. Za sledenje … ni treba uporabljati aplikacije za pametni telefon
Fedora klobuk, ki ga vodi WiFi (ESP8266 + WS2812b): 5 korakov (s slikami)
Fedora klobuk, ki ga vodi WiFi (ESP8266 + WS2812b): To je kul, lepo videti LED klobuk. Barvo in učinke LED lahko spremenite s svojim pametnim telefonom ali računalnikom. Poskušal sem biti čim preprostejši in cenejši. Ima tudi baterijo za ponovno polnjenje, tako da jo lahko vzamete s seboj! Thi