Sadržaj:
2025 Autor: John Day | [email protected]. Zadnja izmjena: 2025-01-13 06:57
U ovom vodiču pokušavamo GiggleBot -u riješiti poteškoće labirinta.
Montiramo servo na GiggleBot na koji pričvršćujemo senzor udaljenosti. Tokom rada, servo će se rotirati naprijed -natrag tako da senzor udaljenosti može izmjeriti udaljenost do svake prepreke. Ovo funkcionira poput LIDAR senzora koji je obično mnogo skuplji.
U isto vrijeme, GiggleBot šalje ove podatke udaljenom BBC micro: bit-u koji prikazuje na svojoj matrici 5 x 5 LED diode svoj relativni položaj prema preprekama.
Vaš posao je da možete upravljati GiggleBotom samo gledajući ono što je prikazano na drugom BBC micro: bitu. Za kontrolu GiggleBot -a koriste se dugmad na daljinskom BBC micro: bit -u.
To zvuči zabavno! Prijeđimo na to, hoćemo li?
Korak 1: Potrebne komponente
Trebat će nam:
- A GiggleBot.
- Baterija za BBC micro: bit. Dolazi zajedno sa BBC micro: bit u svom pakovanju.
- x3 AA baterije za GiggleBot.
- Grove kabel za povezivanje senzora udaljenosti s GiggleBotom.
- Servo komplet iz kompanije DexterIndustries.
- x3 BBC mikro: bitovi. Jedan za GiggleBot i jedan za upravljanje robotom iz daljine.
- Senzor udaljenosti od DexterIndustries.
Ovdje nabavite robota GiggleBot za BBC micro: bit!
Korak 2: Sklapanje robota
Da bi GiggleBot bio spreman za programiranje, moramo ga sastaviti, iako ne treba mnogo učiniti.
Umetnite 3 AA baterije u odjeljak ispod GiggleBot -a.
Sastavite servo paket. Na njegov rotirajući krak servo -a, upotrijebite njegovu posljednju rupu da pričvrstite servo na prednje konektore GiggleBot -a. Možete upotrijebiti vijak i/ili neku žicu kako biste ga učinili stabilnijim na svom mjestu. Ili ga možete vruće zalijepiti za ploču. U mom slučaju, koristio sam vijak i kratku žicu za vezanje servo kraka na GiggleBot ploču.
Prilikom postavljanja servo kraka na servo, provjerite je li servo već postavljen na položaj 80. To možete učiniti pozivom na adresu gigglebot.set_servo (gigglebot. RIGHT, 80). Više o tome možete pročitati ovdje.
Zatim postavite senzor udaljenosti na prednju stranu servo paketa i popravite ga kao u gornjem primjeru.
Na kraju, spojite senzor udaljenosti pomoću Grove kabela na bilo koji od 2 I2C priključka, a servo motor na desni priključak koji se nalazi na GiggleBotu - na njemu se spominje desni priključak.
Korak 3: Kreirajte vlastiti labirint - izborno
U ovom slučaju, koristio sam hrpu kutija za stvaranje staze zatvorene petlje, slične NASCAR -ovoj.
U ovom koraku možete postati zaista kreativni i učiniti ga kako želite uvrnutim ili ga učiniti jako dugim jer to zaista ovisi o vama.
Ili, ako uopće ne želite pjesmu, možete postaviti GiggleBot u kuhinju ili dnevnu sobu na primjer - to bi trebalo biti dovoljno dobro jer postoji mnogo zidova i prepreka koje još uvijek trebate izbjegavati.
Korak 4: Postavljanje okruženja
Da biste mogli programirati BBC micro: bit u MicroPythonu, morate postaviti uređivač za njega (Mu Editor) i postaviti GiggleBot MicroPython Runtime kao vrijeme izvođenja. Da biste to učinili, morate slijediti upute na ovoj stranici. Od ovog trenutka koristi se verzija v0.4.0 vremena izvođenja.
Korak 5: Programiranje GiggleBot -a - I dio
Prvo, postavimo GiggleBot skriptu. Ova skripta će natjerati GiggleBot da rotira svoj servo motor za 160 stepeni (80 stepeni u svakom smjeru), dok će istovremeno uzeti 10 očitanja sa senzora udaljenosti po okretu.
Kada je uključen, GiggleBot će čekati sve dok ne primi naredbu s daljinskog upravljača. Mogu postojati samo 3 komande: pomaknite se naprijed, ulijevo ili udesno.
Napomena: Sljedećoj skripti možda nedostaju razmaci, a čini se da je to zbog nekog problema u prikazivanju GitHub gista. Kliknite na suštinu da biste se prebacili na njenu stranicu GitHub gdje možete kopirati i zalijepiti kôd.
GiggleBot sa daljinskim upravljanjem baziran na LIDAR-u
iz gigglebot uvoza* |
from distance_sensor import DistanceSensor |
iz stanja mirovanja za uvoz mikrobita |
from utime import ticks_us, sleep_us |
import ustruct |
uvoz radio |
# zaustavite robota ako se već kreće |
stop () |
# omogući radio |
radio.on () |
# objekt senzora udaljenosti |
ds = Senzor udaljenosti () |
ds.start_continuous () |
rotate_time = 0.7# mjereno u sekundama |
rotate_span = 160# mjereno u stupnjevima |
rotate_steps = 10 |
nadzemna_kompenzacija = 1,05# definirano u postocima |
time_per_step = 10 ** 6* rotate_time / (rotate_steps* nadzemna_kompenzacija) |
last_read_time = 0 |
radar = bajtr (niz rotacije_koraci) |
servo_rotate_direction = 0# 0 za kretanje prema gore (0-> 160) i 1 u suprotnom |
radar_index = 0 |
set_servo (DESNO, 0) |
whileTrue: |
# čitanje s radara |
ako ticks_us () - last_read_time> time_per_step: |
# očitavanje sa senzora udaljenosti |
radar [radar_index] = int (ds.read_range_continuous () /10) |
last_read_time = ticks_us () |
ispis (radar_index) |
# uradite logiku za okretanje servo s lijeva na desno |
ako je radar_index == rotirati_korake -1 i servo_rotate_direction == 0: |
set_servo (DESNO, 0) |
servo_rotate_direction = 1 |
elif radar_index == 0i servo_rotate_direction == 1: |
set_servo (DESNO, rotate_span) |
servo_rotate_direction = 0 |
drugo: |
radar_index += 1 ako je servo_rotate_direction == 0else-1 |
# i pošaljite vrijednosti radara |
radio.send_bytes (radar) |
probaj: |
# čitanje naredbi robota |
lmotor, rmotor = ustruct.unpack ('bb', radio.receive_bytes ()) |
# i aktivirajte motore ako postoje primljene naredbe |
set_speed (lmotor, rmotor) |
drive () |
osimTypeError: |
pass |
pogledajte rawgigglebot_lidar_robot.py hostirano sa ❤ od strane GitHub -a
Korak 6: Programiranje daljinskog upravljača - II dio
Ostaje da se uradi programiranje drugog BBC micro: bita koji deluje kao daljinski.
Daljinski upravljač se koristi za prikaz relativne udaljenosti od prepreka na ekranu veličine 5 x 5 piksela. Najviše će biti uključeno 10 piksela.
U isto vrijeme, daljinski upravljač daje vam mogućnost daljinskog upravljanja GiggleBotom pritiskom na njegova 2 gumba: pomaknite se naprijed, ulijevo i udesno.
Napomena: Sljedećoj skripti možda nedostaju razmaci, a čini se da je to zbog nekog problema u prikazivanju GitHub gista. Kliknite na suštinu da biste se prebacili na njenu stranicu GitHub gdje možete kopirati i zalijepiti kôd.
GiggleBot sa daljinskim upravljanjem na bazi LIDAR -a - daljinski kod
iz microbit uvoza sleep, display, button_a, button_b |
import ustruct |
uvoz radio |
uvoz matematike |
radio.on () |
rotate_steps = 10 |
rotate_span = 160# u stupnjevima |
rotate_step = rotate_span / rotate_steps |
max_distance = 50# u centimetrima |
side_length_leds = 3 # mereno u # piksela |
radar = bajtr (niz rotacije_koraci) |
xar = bytearray (rotate_steps) |
yar = bytearray (rotate_steps) |
spremljeni_xar = bajtrni niz (rotacijski_koraci) |
sačuvani_godina = bajtrni niz (rotacijski_koraci) |
brzina_motora = 50 |
whileTrue: |
status = radio.receive_bytes_into (radar) |
ako status nije Nijedan: |
# display.clear () |
za c, val inenumerate (radar): |
ako je radar [c] <= maksimalna_daljenost: |
# izračunajte 2d koordinate svake udaljenosti |
angle = rotate_steps / (rotate_steps -1) * rotate_step * c |
kut += (180- rotacija_span) /2,0 |
x_c = math.cos (kut * math.pi /180.0) * radar [c] |
y_c = math.sin (kut * math.pi /180,0) * radar [c] |
# skalirajte udaljenosti tako da stane na 5x5 mikrobitni ekran |
x_c = x_c * (side_length_leds -1) / max_distance |
y_c = y_c * (side_length_leds +1) / max_distance |
# koordinate repozicije |
x_c += (side_length_leds -1) |
y_c = (side_length_leds +1) - y_c |
# okrugle koordinate tačno gdje se nalaze LED diode |
if x_c - math.floor (x_c) <0,5: |
x_c = math.floor (x_c) |
drugo: |
x_c = math.ceil (x_c) |
if y_c - math.floor (y_c) <0,5: |
y_c = math.floor (y_c) |
drugo: |
y_c = math.ceil (y_c) |
xar [c] = x_c |
yar [c] = y_c |
drugo: |
xar [c] = 0 |
yar [c] = 0 |
display.clear () |
za x, y inzip (xar, yar): |
display.set_pixel (x, y, 9) |
# ispis (lista (zip (xar, yar, radar))) |
stateA = button_a.is_pressed () |
stanjeB = button_b.is_pressed () |
ako stateA i stateB: |
radio.send_bytes (ustruct.pack ('bb', brzina_motora, brzina_motora)) |
print ('naprijed') |
ako stanjeA a ne stanjeB: |
radio.send_bytes (ustruct.pack ('bb', motor_speed, -motor_speed)) |
ispis ('lijevo') |
ifnot stanjeA i stanjeB: |
radio.send_bytes (ustruct.pack ('bb', -motor_speed, motor_speed)) |
ispis ('desno') |
ifnot stanjeA i ne stanjeB: |
radio.send_bytes (ustruct.pack ('bb', 0, 0)) |
print ('stop') |
pogledajte rawgigglebot_lidar_remote.py hostirano sa ❤ od strane GitHub -a
Korak 7: Tumačenje udaljenog ekrana
"loading =" lazy "kontrolirati GiggleBot, imate sljedeće opcije:
- Pritisnite dugme A i dugme B da biste pomerili GiggleBot napred.
- Pritisnite dugme A da biste okrenuli GiggleBot ulijevo.
- Pritisnite dugme B da biste okrenuli GiggleBot udesno.
Da vidite u kojem smjeru su otkrivene najbliže prepreke, samo pogledajte ekran daljinskog upravljača (udaljeni BBC micro: bit koji držite). Trebali biste moći kontrolirati GiggleBot iz daljine, a da ga ne gledate.