Sisukord:

Mikro: bitiroboti ja juhtkangi programmeerimine: bitikontroller MicroPythoni abil: 11 sammu
Mikro: bitiroboti ja juhtkangi programmeerimine: bitikontroller MicroPythoni abil: 11 sammu

Video: Mikro: bitiroboti ja juhtkangi programmeerimine: bitikontroller MicroPythoni abil: 11 sammu

Video: Mikro: bitiroboti ja juhtkangi programmeerimine: bitikontroller MicroPythoni abil: 11 sammu
Video: Контроллер температуры мобильного телефона с модулем WIFI DT 06 | Программирование LDmicro-Roboremo 2024, Detsember
Anonim
Mikro: bitiroboti ja juhtkangi programmeerimine: bitikontroller MicroPythoniga
Mikro: bitiroboti ja juhtkangi programmeerimine: bitikontroller MicroPythoniga

Robocamp 2019, meie suvise robootikalaagri jaoks, joovad, programmeerivad ja ehitavad noored vanuses 10-13 aastat BBC mikro: bitipõhist "kaalulangetusrobotit", samuti programmeerivad mikro: bitti kaugjuhtimispuldina kasutamiseks.

Kui olete praegu Robocampis, jätkake 3. sammuga, kuna oleme esimesed kaks sammu rühmana teinud

See on samm-sammult juhis, kuidas saada mikro: bit robot juhtkangiga: bitikontrolleriga suhtlema.

See ei võta kõige kiiremat teed, et kõik toimiks, vaid proovib asju väikeste tükkidena, et saaksite koodi teekonnal testida, oma templi peale panna ja mõista, miks me teeme asju, mida teeme !

Selle tegevuse jaoks kasutame oma kohandatud robotit, kuid see töötab iga robotiga, mis kasutab sarnast mootorijuhti, näiteks L9110.

Meie roboti disainifailid leiate siit:

See juhend on kirjutatud algajatele, kuid kui te pole kunagi varem MicroPythoniga micro: bitit kasutanud, soovitame kõigepealt proovida lihtsamat programmi, näiteks meie nimemärki Instructable: https://www.instructables.com/id/Felt -Microbit-Nam…

Tarvikud

2x BBC mikro: bit

Robot, mis töötab BBC mikro: bitiga (vt ülaltoodud selgitust)

juhtnupp: bitikontroller (meie saime Cool Componentsist)

Samm: roboti seadistamine

Teil on mõned võimalused MicroPythoni koodi kirjutamiseks oma mikro jaoks: bit:

  • Mu, mille saate alla laadida ja installida siit:
  • Veebitoimetaja, mille leiate siit:

Need juhised eeldavad, et kasutate Mu

Avage Mu ja ühendage oma micro: bit arvutiga. Mu peaks tunnistama, et kasutate micro: bitit, ja valige micro: bit 'Mode', kuid kui ei, siis muutke seda käsitsi.

vali režiim
vali režiim

Hankige robotimootori testikoodi koopia siit:

Kui te pole Githubiga harjunud, võib see olla intuitiivne! Selle koodi hankimiseks on kaks lihtsat viisi:

  1. Salvestage töötlemata fail oma arvutisse ja laadige see seejärel faili Mu:
  2. Kopeerige ja kleepige kogu antud kood uude faili kaustas Mu.
salvesta toores fail
salvesta toores fail

Nüüd klõpsake Mu tööriistaribal nuppu "Flash", et saata oma uus kood micro: bitile.

See ei tööta, kui micro: bit pole ühendatud

Kollane tuli mikro: bit tagaküljel hakkab vilkuma. Kui see on lõpetatud, on teie kood üle kantud.

MOOTORI SUUNADE SEADISTAMINE

See programm lülitab mootorid eri suundades sisse, kui vajutate mikro: bitil nuppu "A".

See, mida soovite juhtuda, on järgmine:

  • Kui kuvatakse „A”, liigub vasak mootor edasi
  • Kui kuvatakse "B", vasak mootor vasakule
  • Kui kuvatakse „C”, liigub parem mootor edasi
  • Kui kuvatakse „D”, parem mootor tagurpidi

Tõenäoliselt see nii ei ole, kuna see sõltub sellest, kuidas olete oma roboti ühendanud!

Koodi ülaosast leiate muutujate loendi, mis määravad, milline mikro: bitti tihvt juhib mootori suunda.

Kui kasutate mõnda meie robotit (faili), vahetage muutujate nimed ümber, et robot liiguks õiges suunas:

vahetada pin muutujad
vahetada pin muutujad

Kui kasutate oma robotit, kontrollige enne koodi muutmist, milliste tihvtidega on mootorijuht ühendatud.

AJAKATSE

Nüüd kontrollige, kuidas teie robot sõidab, asendades põhiahelas oleva testkoodi mõne oma koodiga.

Käskite robotil sõita, kutsudes funktsiooni drive (). Selleks on kaks argumenti - vasaku mootori väärtus ja parema mootori väärtus vahemikus 0 (välja lülitatud) kuni 1023 (maksimaalne kiirus).

Näiteks helistades ajamile (500, 500), ütlete mõlemale mootorile, et need lülituvad edasi, umbes poole kiirusega.

Proovige mõnda võimalust, et mõista, kui sirge see sõidab ja kui hästi see pöörab.

Vihje: mootoritestid olid sees nii mõnda aega True loop kui ka if -väide - mootorid ei pöörle enne, kui vajutate mikro: bitil nuppu A ja see kontrollib igavesti, kas olete nuppu A vajutanud.

Vihje: mootorid ei lülitu välja enne, kui te neile seda ütlete! Nad jätkavad alati oma viimaseid juhiseid.

VALIKULINE: SÕIDU PARANDAMINE SIRGELISELT

Kui teie robot ei sõida sirgjooneliselt, võib üks teie mootoritest pöörduda kiiremini kui teine.

Pärast seda, kui olete kontrollinud, et miski ei takistaks ratta füüsilist pöörlemist vabalt pöörlema, saate ajamisfunktsioonis koodi muuta, et vähendada kiirema mootori kiirust.

Kerige üles, et leida ajamifunktsiooni määratlus, ja vaadake kahte peamist juhist:

def drive (L, R):

# Allpool on reguleerimine mootori kiiruse erinevuse parandamiseks L = int (L*1) R = int (R*1)

Need kaks rida võtavad praegu väärtuse L ja R, korrutavad need 1 -ga, seejärel veenduge, et need on ikka täisarvud (int).

Näiteks kui teie vasak mootor on kiirem, muutke selle joone *1 väärtuseks *0,9 ja vaadake, kas see parandab olukorda.

Te ei saa seda täiuslikuks muuta, kuid saate reguleerimist jätkata, kuni see sirgemaks läheb.

RAADIO SEADISTAMINE

Nüüd seadistage raadio, lisades koodi ülaossa järgmised read:

impordi raadio

radio.config (kanal = 7, grupp = 0, järjekord = 1) radio.on ()

See võimaldab teie robotil saada juhiseid teiselt micro: bitilt, kuid hetkel saab ta juhiseid mis tahes muult micro: bitilt.

Seda seetõttu, et kanal 7 ja rühm 0 on vaikekanalid.

Muutke neid numbreid, valides kanali vahemikus 0-82 ja rühma vahemikus 0-255. Nüüd saab teie micro: bit juhiseid ainult teistelt, kellel on sama konfiguratsiooniteave.

järjekord = 1 tähendab, et mikro: bit hoiab korraga ainult ühte sissetulevat sõnumit - see annab vaikimisi veidi kiirema reageerimisaja, mis on 3.

Nüüd peate oma põhiahela koodi muutma, selle asemel et käivitada juhiseid, kui vajutate nuppu, oodake sissetulevat raadiosõnumit ja vastake asjakohaselt.

Proovige testina järgmist koodi (see ei tee midagi enne, kui olete juhtnupp 2. etapis seadistanud):

kuigi tõsi:

message = radio.recept () if message == 'forward': drive (500, 500)

2. samm: juhtkangi seadistamine

Ühendage oma roboti micro: bit vooluvõrgust lahti ja ühendage hoopis juhtkangi micro: bit

Hankige juhtkangi seadistuskoodi koopia siit:

Seadistage raadio sama konfiguratsiooni (kanali ja grupi numbri) abil, mida kasutasite roboti puhul - see võimaldab neil kahel suhelda.

Programmi lõpus käivitage oma peamine tsükkel:

kuigi tõsi:

if button_a.was_pressed (): radio.send ('edasi')

See kood ei kasuta veel juhtkangi: bit. See kasutab sõnumi saatmiseks nuppu micro: bit.

Veenduge, et nii teie robotil kui ka kontrolleri mikro: bitidel oleks võimsus, seejärel vajutage sõnumi saatmiseks nuppu.

Kui sõnum on edukalt vastu võetud ja teie robot liigub … hästi tehtud! Olete seadistusjuhistega lõpetanud.

VEAVAHETUSED

Kui saate kontrolleri micro: bit veateate, siluge oma kontrolleri kood

Kui saate oma roboti micro: bit veateate … teie raadiosõnum saadeti edukalt! Kuid robot ei saa sellest aru, seega kontrollige, kas teie saadetud sõnum ja sõnum, mille te robotil käskisite kuulata, vastavad.

Kui üldse midagi ei juhtu

  • Veenduge, et vilksaksite igale mikro: bitile õiget koodi - seda on lihtne kogemata vilgutada!
  • Veenduge, et teie kanali ja grupi numbrid vastaksid igale mikro: bitile

3. samm: juhtkangi väärtuste kontrollimine

Järgmised paar sammu kasutavad kontrolleri koodi

Enne kontrolleri juhtkangi kasutamist peate teadma, milliseid väärtusi saate pulga vajutamisel.

Asendage oma põhisilmus järgmise koodiga:

kuigi tõsi:

juhtnupp = joystick_push () print (joystick) unerežiim (500)

Välgutage seda koodi oma micro: bitile, seejärel klõpsake Mu tööriistaribal nuppu REPL. See avab redaktori allosas terminali, mis annab teile reaalajas lingi mikro: bitile.

avage REPL
avage REPL

See ei tööta, kui micro: bit pole ühendatud

Kui REPL on avatud, vajutage lähtestamisnuppu oma mikro: bitti tagaküljel.

Pilt
Pilt

Te peaksite nägema, et mõned väärtused kuvatakse ekraanile trükituna:

väärtused terminalis
väärtused terminalis

Lükake juhtkangi pulka ja vaadake, mis numbritega juhtub.

Märkige väärtused, mis on antud siis, kui juhtkang on keskmises asendis - minu puhul (518, 523).

Selle sulgemiseks klõpsake uuesti Mu tööriistariba nupul REPL - te ei saa uut koodi micro: bitile välgutada, kui see on avatud.

Samm: muutujate X ja Y reguleerimine

Soovite muuta juhthoova funktsiooni antud väärtusi nii, et:

  • keskel on see null
  • üleval on positiivne
  • alla on negatiivne.

See vastab juhistele, mida robot vajab - positiivne number edasi sõitmiseks ja negatiivne number tagurpidi sõitmiseks.

Vaadake viimases etapis saadud numbreid. Esimene number on x ja teine number y.

Muutke programmis juba sisalduvat joystick_push () definitsiooni, vähendades oma väärtused algsest:

def joystick_push ():

x = pin0.read_analog () - 518 y = pin1.read_analog () - 523 return x, y

Kasutage oma numbreid, need võivad minu omast erineda

Välgutage uut koodi, avage REPL, vajutage micro: bit lähtestamisnuppu ja kontrollige oma väärtusi.

Kas saate (0, 0)?

Samm: X ja Y teisendamine vasak- ja paremmootorite väärtusteks

Hetkel ei ole sellest juhtkangist eriti kasu robotiga sõitmiseks. Lõpuni edasi lükates saate väärtuse, näiteks (0, 500).

Kui annaksite need numbrid robotile, lülitaks see sisse parema mootori, kuid mitte vasaku, mis pole see, mida soovite juhtuda!

See diagramm näitab, mis juhtub x- ja y -väärtustega juhtkangi liigutamisel ja mida me tahame, et robot teeks juhtkangi liigutamisel.

diagramm
diagramm

X ja y väärtuste segamiseks peate kasutama mõnda matemaatikat, et anda teile midagi kasulikumat.

n

MATEMAATIKA

Alustuseks lükake juhtkangi lõpuni ette.

Näide väärtustest, mida võite saada, on järgmine:

x = 0

y = 500

Roboti jaoks kasulikuks saamiseks soovite saada selliseid väärtusi:

vasakul = 500

õige = 500

Proovime lisada x ja y erineval viisil, et näha, milliseid numbreid saame:

x + y = 0 + 500 = 500

x - y = 0 - 500 = -500 y + x = 500 + 0 = 500 y - x = 500 - 0 = 500

Nüüd vaatame, mis juhtub, kui lükkame juhtkangi lõpuni paremale.

Näide väärtustest, mida võite saada, on järgmine:

x = 500

y = 0

Roboti paremale pööramiseks soovite, et vasak mootor liiguks edasi ja parem mootor tahapoole:

vasakul = 500

paremal = -500

Proovime oma valemit uuesti:

x + y = 500 + 0 = 500

x - y = 500 - 0 = 500 y + x = 0 + 500 = 500 y - x = 0 - 500 = -500

Võrrelge kahte valemikomplekti, et välja selgitada, milline valik annab teile õige vasaku väärtuse ja milline valik õige õige väärtuse.

Proovige seda mõne väärtusega, mille saate oma juhtkangist, veendumaks, et valitud valem töötab kogu aeg.

n

JOYSTICK FUNKTSIOONI LAIENDAMINE

Laiendage ja muutke juhtkangi funktsiooni, et luua kaks uut muutujat vasakule ja paremale ning tagastada need väärtused x ja y asemel:

def joystick_push ():

x = pin0.read_analog () - 518 y = pin1.read_analog () - 523 left = right = return left, right

Välgutage uut koodi, avage REPL, vajutage micro: bit lähtestamisnuppu ja kontrollige oma väärtusi.

Kas saate väärtused, mida ootate?

Kui vajate rohkem abi, vaadake meie näidiskoodi siit:

6. samm: väärtuste saatmine raadiosõnumitena

Nüüd on teil mõned väärtused robotile saatmiseks valmis.

Muutke oma põhitsüklit nii, et see kontrolliks juhtkangi väärtusi, kuid valmistab seejärel väärtuste printimise asemel need raadiosõnumina saatmiseks valmis.

kuigi tõsi:

juhtnupp = juhtnupp_push () sõnum = str (juhtnupp [0]) + "" + str (juhtnupp [1])

See ei saada tegelikult veel sõnumit!

Mis toimub selles uues koodireas?

  • juhtnupp [0] tähendab esimest teavet, mis väljub juhtkangi funktsioonist (vasakul)
  • juhtnupp [1] on järgmine teave (paremal)
  • str () teisendab mõlemad numbrid stringivorminguks (numbrite asemel tekstiks) - see on vajalik teabe edastamiseks raadio kaudu.

Olete harjunud nägema +, et tähendada liitmist - see võib nii numbreid liita kui ka stringe ühendada, mis tähendab, et kleebib kaks informatsiooni kokku.

Näide:

150 + 100 = 250

str (150) + str (100) = 150100

Seega ühendab liitmine teie vasak- ja parempoolsed väärtused kokku.

Et sundida eraldama kahe teabe bitti (et robot teaks, et need on kaks bitti teavet), ühendage nende vahele täiendav string, kasutades "". Ruumi ümbritsevad kõnemärgid tähendavad, et see on juba string.

Lõpuks laiendage oma koodi, et saata see äsja loodud teade raadio kaudu:

radio.send (sõnum)

magama (10)

Unerežiim aeglustab sõnumite saatmist, nii et vastuvõttev mikro: bit ei koormataks liiga palju teavet!

Enne järgmise sammu juurde liikumist välkuge sellest koodist oma kontrolleri micro: bit ja siluge kõik vead

Samm 7: sõnumite vastuvõtmine oma robotil

Minge algusest peale tagasi oma robotikoodi juurde - ärge unustage oma kontrollerit micro: bit vooluvõrgust lahti ühendada, et te kogemata robotikoodi sellele ei välgutaks

Kerige alla oma põhisilmuseni - eemaldage testkood ja lisage see:

kuigi tõsi:

sõnum = raadio. vastuvõtt () print (sõnum) unerežiim (100)

See määrab muutuja sissetuleva sõnumiga võrdseks ja prindib sõnumi REPL -i, et kontrollida, kas sõnumid tulevad ootuspäraselt.

Välgutage oma uut koodi, mis on ühendatud REPL -iga, seejärel vajutage juhtnuppu.

Peaksite saama midagi sellist:

REPL väärtused
REPL väärtused

VEAVAHETUSED

Kui saate kontrolleri micro: bit veateate, siluge oma kontrolleri kood

Kui saate oma roboti micro: bit veateate … teie raadiosõnum saadeti edukalt! Kuid robot ei saa sellest aru, seega kontrollige, kas teie saadetud sõnum ja sõnum, mille te robotil käskisite kuulata, vastavad.

Kui üldse midagi ei juhtu

  • Veenduge, et vilksaksite igale mikro: bitile õiget koodi - seda on lihtne kogemata vilgutada!
  • Veenduge, et teie kanali ja grupi numbrid vastaksid igale mikro: bitile

8. samm: sissetulevate sõnumite kasutamine roboti mootorite juhtimiseks

Nüüd saadetakse raadio kaudu stringina kaks numbrit.

Peate selle teate jagama kaheks stringiks, seejärel teisendama stringid uuesti numbriteks ja edastama selle draivifunktsiooni. Palju toimub korraga!

Enne seda peate kontrollima, kas saadetav sõnum on õiges vormingus.

Kui sõnumeid ei saadeta, saate selle asemel teate „Puudub”. Kui proovite seda jagada, saate veateate.

kuigi tõsi:

sõnum = raadio.saada (), kui sõnumit pole

Mis siin toimub?

  • Uus kood käivitatakse, kui sõnum on midagi muud kui „Puudub”.
  • message.split () kontrollib sõnumis tühikut (mille lisasime viimases etapis) ja kasutab seda sõnumi kaheks jagamiseks.
  • int (sõnum [0]), int (sõnum [1]) teeb vastupidist sellele, mida tegime eelmises etapis - saab iga teabe eraldi ja teisendab selle täisarvuks (täisarvuks).
  • int (teade [0]) kasutatakse ajamifunktsiooni vasaku mootori väärtuseks ja int (teade [1]) parema mootori väärtuseks.

Kontrollige, kas see töötab - kas mootorid pöörlevad juhtkangi vajutamisel?

Kui ei - aeg silumiseks!

Kui jah, siis fantastiline! Sul on töötav kaugjuhtimispult!

Enne järgmise sammu juurde liikumist kulutage natuke aega oma robotiga harjutamiseks. Kas see sõidab nii, nagu ootate?

Järgmised sammud näitavad teile, kuidas juhtnupu nuppude abil oma robotile lisafunktsioone lisada

Kui soovite näha selle koodi meie senist versiooni:

  • Robot:
  • Kontroller:

9. samm: nuppude kasutamine - lisasõnumite vastuvõtmine

Praegu proovib teie kood jagada mis tahes sõnumi, mis ei ole Puudub. See tähendab, et kui see saab näiteks „tere“, saate veateate.

Selleks, et teie micro: bit saaks teisi sõnumeid tõlgendada, peab ta kõigepealt kontrollima iga oodatud sõnumit ja seejärel jagama kirja ainult siis, kui sellel pole kästud sellega midagi muud teha.

Laiendage oma koodi järgmiselt.

kui sõnum pole Puudub:

if message == 'tere': display.show (Image. HAPPY) elif message == 'duck': display.show (Image. DUCK) else: message = message.split () drive (int (sõnum [0]), int (sõnum [1]))

Esiteks kontrollib ta, kas on saanud teate "tere". Kui on, kuvab see õnneliku pildi, seejärel minge tagasi silmuse ülaossa ja kontrollige järgmist sõnumit.

Kui teade pole tere, kontrollib see järgmisena, kas sõnum on „part”.

Kui teade ei ole „tere” VÕI „part”, teeb see loendis viimase asja, mis jagab sõnumi pooleks ja lülitab mootorid sisse. See ei püüa sõnumit jagada, kui see on saanud tere või pardi, mis tähendab, et te ei saa kummagi sõnumi veateadet.

Kahekordne võrdusmärk on oluline - see tähendab "võrdub", võrreldes ühe võrdusmärgiga, mis määrab midagi (nii et sõnum = "tere" tähendab, et me määrame muutujaks "tere", sõnum == "tere" tähendab, et me küsime, kas sõnum võrdub sõnaga tere).

Proovige seda praegu testimiseks vaid kahe valikuga - saate hiljem lisada nii palju muid sõnumeid kui soovite.

Link töötavale koodile:

Samm 10: Lisasõnumite saatmine kontrolleri nuppude abil

Ühendage oma roboti micro: bit vooluvõrgust lahti ja ühendage hoopis juhtkangi micro: bit

Muutmiseks pöörduge tagasi kontrolleri koodi juurde.

Sarnaselt robotikoodiga soovime, et kontroller kontrolliks enne juhtkangi väärtuste saatmist, kas proovite saata muid sõnumeid.

Silmuse ülaosas tahame ikkagi, et see kontrolliks juhtkangi praeguseid väärtusi, aga ka seda, kas see kontrollib, kas praegu vajutatakse nuppu:

kuigi tõsi:

juhtnupp = joystick_push () nupp = button_press ()

button_press () tagastab väärtuse A, B, C, D, E või F sõltuvalt sellest, millist nuppu praegu vajutatakse (kui midagi ei vajutata, tagastab see nupu None).

Nüüd saame teha if-elif-else avalduse, nagu tegime robotikoodi puhul-kahe nupu abil ja juhtnupu väärtuse saatmise, kui ühtegi nuppu ei vajutata.

kui nupp == 'A':

radio.send ('tere') uni (500) elif nupp == 'B': radio.send ('pard') uni (500) else: message = str (juhtkang [0]) + "" + str (juhtnupp [1]) raadio.saada (sõnum) uni (10)

Kui vajutate nuppu, saatke üks sõnumitest, mida käskisite robotil eelmises etapis jälgida.

Sõnum saadetakse alati, kui nuppu vajutatakse ja arvutid on palju kiiremad kui inimesed! Seega võib see sõnumi saata mitu korda, enne kui teil on õnnestunud sõrm nupult eemaldada.

Unerežiim pärast sõnumi saatmist aeglustab seda, nii et see ei kontrolli nuppu uuesti nii kiiresti - proovige siin mõnda numbrit, et saaksite endale sobiva aja - liiga aeglaselt ja see ei reageeri ka kiiresti ja teie robot saab nii palju nuputeateid, et see võib juhtkangile reageerimise lõpetada!

Kas see töötab?

Kui saate veateateid, mõelge hoolikalt läbi, mida just muutsite ja mis toimub.

Kui saate robotil vea, kui vajutate oma kontrolleri nuppu - teate, et sõnum jõuab kohale, kuid see ajab roboti segadusse. Kontrollige, kas teie saadetud sõnum ja robotile otsitud sõnum on samad.

Link töötavale koodile:

Samm: järgmised sammud

Nüüd on teil teadmised, mida vajate oma roboti mootorite ja juhtkangi: bitikontrolleriga töötamiseks

Kasutage neid teadmisi kahe programmi täiustamiseks ja muutke need enda omaks. Mõned ideed allpool!

Teie kontrolleril on kuus nuppu! Mida sa tahad, et nad teeksid?

  • Kuidas oleks programmeerida tantsurutiin, mida teie robot käsu järgi tegema peaks? Kirjutage drive () käskude algoritm, mis on eraldatud uni () käskudega!
  • Kas soovite muuta roboti liikumissuunda, et see saaks hõlpsalt tagurpidi sõita? Mõelge oma juhtkangi x ja y väärtustele. Mida nad esindavad ja kuidas saaksite nendega manipuleerida?
  • Kas teie robotil on (või võiksite lisada!) Lisafunktsioone, nagu LED -id, kõlar või andurid?

Ideid koodi täiustamiseks

  • Kas saaksite aidata oma robotil tundmatute sõnumitega toime tulla, kasutades proovi/välja arvatud koodi?
  • Juhtkangist vasakule ja paremale väärtuste arvutamiseks kasutatud matemaatika ei anna meile täielikku väärtuste vahemikku (roboti ajam võtab vastu numbri kuni 1023). Kas saate seda koodi parema ulatuse muutmiseks muuta?
  • Juhtkangi väärtuste segamiseks on ka teisi meetodeid - kas saate välja mõelda, kuidas seda paremini teha?

Soovitan: