INHOUDSOPGAWE:
2025 Outeur: John Day | [email protected]. Laas verander: 2025-01-13 06:56
In hierdie handleiding laat ons die GiggleBot die probleme van 'n doolhof aanpak.
Ons monteer 'n servo op die GiggleBot waarop ons 'n afstandsensor heg. Terwyl hy hardloop, gaan die servo heen en weer draai sodat die afstandsensor die afstand tot by elke hindernis kan meet. Dit werk baie soos 'n LIDAR -sensor wat gewoonlik baie duurder is.
Terselfdertyd stuur die GiggleBot hierdie data na 'n afgeleë BBC micro: bit wat op sy 5-by-5 matriks LED's sy relatiewe posisie ten opsigte van die hindernisse vertoon.
U taak is om slegs deur die GiggleBot te kan navigeer deur te kyk wat dit op die ander BBC micro: bit wys. Om die GiggleBot te beheer, word die knoppies op die afgeleë BBC micro: bit gebruik.
Dit klink soos pret! Kom ons gaan daarby uit, of hoe?
Stap 1: Vereiste komponente
Ons gaan nodig hê:
- 'N GiggleBot.
- 'N Batterypak vir die BBC micro: bit. Dit bevat 'n BBC micro: bit in die pakket.
- x3 AA -batterye vir die GiggleBot.
- 'N Grove -kabel om die afstandsensor aan die GiggleBot te koppel.
- 'N Servokit van DexterIndustries.
- x3 BBC -mikro: stukkies. Een vir die GiggleBot en een wat die robot van ver af beheer.
- 'N Afstandsensor van DexterIndustries.
Kry die GiggleBot -robot vir die BBC micro: bit hier!
Stap 2: Monteer die robot
Om die GiggleBot gereed te maak om geprogrammeer te word, moet ons dit saamstel, hoewel daar nie veel nodig is nie.
Plaas die 3 AA -batterye in die kompartement onder die GiggleBot.
Monteer die servopakket. Gebruik die laaste gaatjie aan die draaiende arm van die servo om die servo aan die voorste verbindings van die GiggleBot vas te maak. U kan 'n skroef en/of draad gebruik om dit stabieler te maak. Of jy kan dit warm aan die bord plak. In my geval het ek 'n skroef en kort draad gebruik om die servo -arm aan die GiggleBot -bord vas te maak.
As u die servo -arm op die servo monteer, moet u seker maak dat die servo reeds op posisie 80 is. U kan dit doen deur gigglebot.set_servo te bel (gigglebot. RIGHT, 80). U kan hier meer hieroor lees.
Plaas vervolgens die afstandsensor aan die voorkant van die servopakket en maak dit reg soos in die voorbeeld hierbo.
Koppel laastens die afstandsensor met 'n Grove -kabel aan enige van die 2 I2C -poorte en die servomotor na die regte poort op die GiggleBot - die regte poort word daarop genoem.
Stap 3: Skep u eie doolhof - opsioneel
In hierdie geval het ek 'n klomp bokse gebruik om 'n geslote lusbaan te skep, soortgelyk aan 'n NASCAR.
In hierdie stap kan u regtig kreatief raak en maak hoe verdraaid u dit wil hê, of dit kan baie lank wees, want dit hang van u af.
Of as u glad nie 'n baan wil hê nie, kan u die GiggleBot byvoorbeeld in 'n kombuis of woonkamer sit - dit behoort goed genoeg te wees, want daar is baie mure en hindernisse wat u nog moet vermy.
Stap 4: Die opstel van die omgewing
Om die BBC micro: bit in MicroPython te kan programmeer, moet u 'n redakteur daarvoor opstel (die Mu Editor) en die GiggleBot MicroPython Runtime as tydsduur daarvan stel. Hiervoor moet u die instruksies op hierdie bladsy volg. Vanaf hierdie oomblik word weergawe v0.4.0 van die tydsduur gebruik.
Stap 5: Die programmering van die GiggleBot - Deel I
Laat ons eers die GiggleBot -skrif opstel. Hierdie script sal die GiggleBot sy servomotor 160 grade laat draai (80 grade in elke rigting), terwyl dit terselfdertyd 10 lesings van die afstandsensor per beurt neem.
As dit aangeskakel is, sal die GiggleBot bystaan totdat dit 'n opdrag van die afstandsbediening ontvang. Daar kan slegs 3 opdragte wees: vorentoe, na links of na regs.
Let wel: die volgende skrip ontbreek moontlik witruimtes, en dit lyk asof dit 'n probleem is met die vertoning van GitHub Gists. Klik op die kern om u na die GitHub-bladsy te neem, waar u die kode kan kopieer en plak.
Afstandsbeheerde LIDAR-gebaseerde GiggleBot
vanaf gigglebot invoer* |
vanaf distance_sensor invoer DistanceSensor |
van mikrobit invoer slaap |
vanaf utime invoer ticks_us, sleep_us |
invoerstruktuur |
radio invoer |
# stop die robot as dit reeds beweeg |
stop () |
# aktiveer radio |
radio.on () |
# afstandsensorvoorwerp |
ds = DistanceSensor () |
ds.start_continuous () |
rotate_time = 0.7# gemeet in sekondes |
rotate_span = 160# gemeet in grade |
draai_stappe = 10 |
oorhoofse_vergoeding = 1.05# gedefinieer in persentasies |
time_per_step = 10 ** 6* rotate_time / (rotate_steps* overhead_compensation) |
last_read_time = 0 |
radar = bytearray (rotate_steps) |
servo_rotate_direction = 0# 0 om opwaarts te gaan (0-> 160) en 1 andersins |
radar_index = 0 |
set_servo (REGS, 0) |
terwyl dit waar is: |
# gelees vanaf die radar |
as ticks_us () - last_read_time> time_per_step: |
# gelees vanaf die afstandsensor |
radar [radar_index] = int (ds.read_range_continuous () /10) |
last_read_time = ticks_us () |
druk (radar_index) |
# doen die logika om die servo van links na regs te draai |
as radar_index == rotate_steps -1and servo_rotate_direction == 0: |
set_servo (REGS, 0) |
servo_rotate_direction = 1 |
elif radar_index == 0en servo_rotate_direction == 1: |
set_servo (REGS, draai_span) |
servo_rotate_direction = 0 |
anders: |
radar_index += 1if servo_rotate_direction == 0else-1 |
# en stuur die radarwaardes |
radio.send_bytes (radar) |
probeer: |
# lees robotopdragte |
lmotor, rmotor = ustruct.unpack ('bb', radio.receive_bytes ()) |
# en aktiveer die motors as daar opdragte ontvang word |
set_speed (lmotor, rmotor) |
ry () |
behalwe TypeError: |
slaag |
sien rawgigglebot_lidar_robot.py aangebied deur ❤ deur GitHub
Stap 6: Die afstandsbediening programmeer - Deel II
Wat nog te doen is, is die programmering van die 2de BBC micro: bit wat as 'n afstandsbediening dien.
Die afstandsbediening word gebruik om op sy 5-by-5 pixel gemaakte skerm die relatiewe afstand tot hindernisse te wys. Daar sal hoogstens 10 pixels aangeskakel wees.
Terselfdertyd bied die afstandsbediening u die vermoë om die GiggleBot op afstand te beheer deur op die twee knoppies te druk: vorentoe, links en regs.
Let wel: die volgende skrip ontbreek moontlik witruimtes, en dit lyk asof dit 'n probleem is met die vertoning van GitHub Gists. Klik op die kern om u na die GitHub-bladsy te neem, waar u die kode kan kopieer en plak.
Afstandsbeheerde LIDAR -gebaseerde GiggleBot - afstandskode
vanaf mikrobit invoer slaap, vertoon, button_a, button_b |
invoerstruktuur |
radio invoer |
invoer wiskunde |
radio.on () |
draai_stappe = 10 |
rotate_span = 160# in grade |
rotate_step = rotate_span / rotate_steps |
max_distance = 50# in sentimeter |
side_length_leds = 3 # gemeet in die aantal pixels |
radar = bytearray (draai_stappe) |
xar = bytearray (draai_stappe) |
yar = bytearray (rotate_steps) |
save_xar = bytearray (draai_stappe) |
save_yar = bytearray (draai_stappe) |
motor_snelheid = 50 |
terwyl dit waar is: |
status = radio.ontvang_bytes_into (radar) |
as status nie geeneen is nie: |
# display.clear () |
vir c, val onenumerate (radar): |
as radar [c] <= max_distance: |
# bereken 2d koördinate van elke afstand |
hoek = draai_stappe / (draai_stappe -1) * draai_stap * c |
hoek += (180- rotate_span) /2.0 |
x_c = math.cos (hoek * math.pi /180.0) * radar [c] |
y_c = math.sin (hoek * math.pi /180.0) * radar [c] |
# skaal die afstande om op die 5x5 mikrobit -skerm te pas |
x_c = x_c * (side_length_leds -1) / max_distance |
y_c = y_c * (side_length_leds +1) / max_distance |
# herposisioneer koördinate |
x_c += (sylengte_leds -1) |
y_c = (side_length_leds +1) - y_c |
# ronde koördinate presies waar die LED's gevind word |
as x_c - wiskunde vloer (x_c) <0.5: |
x_c = wiskunde.vloer (x_c) |
anders: |
x_c = wiskunde.seil (x_c) |
as y_c - wiskunde vloer (y_c) <0.5: |
y_c = wiskunde.vloer (y_c) |
anders: |
y_c = wiskunde.seil (y_c) |
xar [c] = x_c |
yar [c] = y_c |
anders: |
xar [c] = 0 |
yar [c] = 0 |
display.clear () |
vir x, y inzip (xar, yar): |
display.set_pixel (x, y, 9) |
# druk (lys (zip (xar, yar, radar))) |
stateA = button_a.is_pressed () |
stateB = button_b.is_pressed () |
as staat A en staat B: |
radio.send_bytes (ustruct.pack ('bb', motor_speed, motor_speed)) |
print ('vorentoe') |
as stateA en nie staat B nie: |
radio.send_bytes (ustruct.pack ('bb', motor_speed, -motor_speed)) |
druk ('links') |
ifnot stateA en stateB: |
radio.send_bytes (ustruct.pack ('bb', -motor_speed, motor_speed)) |
druk ('regs') |
ifnot stateA en nie staat B: |
radio.send_bytes (ustruct.pack ('bb', 0, 0)) |
print ('stop') |
sien rawgigglebot_lidar_remote.py aangebied deur ❤ deur GitHub
Stap 7: Interpretasie van die afstandskerm
"loading =" lui "beheer die GiggleBot, u het die volgende opsies:
- Druk op knoppie A en knoppie B om die GiggleBot vorentoe te beweeg.
- Druk knoppie A om die GiggleBot na links te draai.
- Druk knoppie B om die GiggleBot na regs te draai.
Om te sien in watter rigting die naaste hindernisse bespeur word, kyk net op die afstandsbedienings (die afstandsbediening BBC -mikro: bietjie wat u vashou). U behoort die GiggleBot van ver af te kan beheer sonder om daarna te kyk.