Mēs strādājam ar Lego Mindstorms EV3 no .NET. Divu vai vairāku EV3 ķieģeļu pievienošana Savienojuma izveide, izmantojot Wi-Fi

USB savienojums

LEGO Mindstorms EV3 var savienot ar datoru vai citu EV3, izmantojot USB savienojumu. Savienojuma ātrums un stabilitāte šajā gadījumā ir labāki nekā ar jebkuru citu metodi, ieskaitot Bluetooth.

LEGO Mindstorms EV3 ir divi USB porti.

Komunikācija starp LEGO EV3 un citiem LEGO EV3 klucīšiem margrietiņu ķēdes režīmā.

Margrietiņu ķēdes režīms tiek izmantots, lai savienotu divus vai vairākus LEGO EV3 blokus.

Šis režīms:

  • izstrādāts, lai savienotu vairāk nekā vienu LEGO Mindstorms EV3;
  • kalpo vairāk sensoru, motoru un citu ierīču pieslēgšanai;
  • ļauj sazināties starp vairākiem LEGO Mindstorms EV3 (līdz 4), kas dod mums līdz 16 ārējiem portiem un tikpat daudz iekšējo portu;
  • ļauj kontrolēt visu ķēdi no galvenā LEGO Mindstorms EV3;
  • nevar darboties, ja ir aktīvs Wi-Fi vai Bluetooth.

Lai iespējotu ķēdes savienojuma režīmu, atveriet projekta iestatījumu logu un atzīmējiet izvēles rūtiņu.

Kad šis režīms ir izvēlēts, tad jebkuram motoram varam izvēlēties EV3 bloku, kas tiks izmantots un nepieciešamos sensorus.

Tabulā parādītas EV3 bloku izmantošanas iespējas:

Darbība

Vidējs motors

Liels motors

Stūre

Neatkarīga vadība

Žiroskopisks

Infrasarkanais

Ultraskaņas

Motora rotācija

Temperatūras

Enerģijas skaitītājs

Skaņa

Savienojums, izmantojot Bluetooth

Bluetooth ļauj LEGO Mindstorms EV3 izveidot savienojumu ar datoru, citiem LEGO Mindstorms EV3, viedtālruņiem un citām Bluetooth ierīcēm. Sakaru diapazons, izmantojot Bluetooth, ir līdz 25 m.

Vienam LEGO Mindstorms EV3 var savienot līdz pat 7 klucīšiem. EV3 Master Brick ļauj nosūtīt un saņemt ziņojumus katram EV3 Slave. EV3 Slave var sūtīt ziņojumus tikai uz EV3 Master Brick, nevis viens otram.

EV3 savienojuma secība, izmantojot Bluetooth

Lai savienotu divus vai vairākus EV3 blokus savā starpā, izmantojot Bluetooth, jums jāveic šādas darbības:

1. Atveriet cilni Iestatījumi.

2. Izvēlieties Bluetooth un nospiediet centrālo pogu.

3. Mēs ieliekam Izvēles rūtiņa redzamība Bluetooth.

4. Pārbaudiet, vai Bluetooth zīme ("<") виден на верхней левой стороне.

5. Veiciet iepriekš minēto procedūru vajadzīgajam EV3 ķieģeļu skaitam.

6. Atveriet cilni Savienojums:

7. Noklikšķiniet uz pogas Meklēt:

8. Izvēlieties EV3, ar kuru vēlaties izveidot savienojumu (vai ar kuru vēlaties izveidot savienojumu), un nospiediet centrālo pogu.

9. Mēs savienojam pirmo un otro bloku ar piekļuves atslēgu.

Ja visu izdarīsit pareizi, augšējā kreisajā stūrī parādīsies ikona "<>", pievienojiet citus EV3 blokus tādā pašā veidā, ja no tiem ir vairāk nekā divi.

Ja izslēgsit LEGO EV3, savienojums tiks zaudēts un jums būs jāatkārto visas darbības.

Svarīgi: katram blokam ir jābūt uzrakstītai savai programmai.

Programmas piemērs:

Pirmais bloks: nospiežot skārienjutīgo sensoru, pirmais EV3 bloks pārsūta tekstu uz otro bloku ar 3 sekunžu aizkavi (galvenais bloks).

Programmas piemērs 2. blokam:

Otrais bloks gaida, lai saņemtu tekstu no pirmā bloka, un, tiklīdz tas to saņems, tas 10 sekundes parādīs vārdu (mūsu piemērā vārdu "Sveiki") (pakalpojuma bloks).

Izveidojiet savienojumu, izmantojot Wi-Fi

Saziņa ar lielāku attālumu ir iespējama, pievienojot Wi-Fi sargspraudni EV3 USB portam.

Lai izmantotu Wi-Fi, EV3 blokā ir jāinstalē īpašs modulis, izmantojot USB savienotāju (Wi-Fi adapteris (Netgear N150 bezvadu adapteris (WNA1100), vai arī varat pievienot Wi-Fi sargspraudni).

Izvēlieties ekrāna režīmu

Režīma izvēle
Bloķēt teksta lauku
Ievades
Priekšskatījuma poga

Izmantojot režīma atlasītāju, atlasiet teksta vai grafikas veidu, ko vēlaties redzēt. Pēc režīma izvēles varat izvēlēties ievades vērtības. Pieejamās ievades atšķirsies atkarībā no režīma. Režīmi un ievades ir aprakstītas tālāk.

Varat noklikšķināt uz pogas Priekšskatījums, lai priekšskatītu, ko displeja bloks parādīs EV3 ekrānā. Varat atstāt skatu atvērtu, vienlaikus atlasot bloka ievades vērtības.

Ekrāna koordinātas

Daudzi ekrāna bloku režīmi izmanto X un Y koordinātas, lai noteiktu elementa atrašanās vietu. Koordinātas nosaka pikseļu atrašanās vietu EV3 Brick ekrānā. Pozīcija (0, 0) atrodas ekrāna augšējā kreisajā stūrī, kā parādīts attēlā zemāk.

Ekrāna izmēri: 178 pikseļu platums un 128 pikseļu augsts. X koordinātu vērtību diapazons ir no 0 ekrānā kreisajā pusē līdz 177 labajā pusē. Y koordinātu vērtību diapazons ir no 0 augšpusē līdz 127 apakšā.

Padomi un triki

Varat izmantot pogu Priekšskatījums ekrāna bloka augšējā kreisajā stūrī, lai palīdzētu atrast pareizās ekrāna koordinātas.

Teksts — pikseļi

Teksts — pikseļu režīms ļauj parādīt tekstu jebkurā EV3 Brick ekrāna vietā.

Atiestatīt logu

Loga atiestatīšanas režīms atgriež EV3 Brick ekrānu standarta informācijas ekrānā, kas tiek rādīts programmas darbības laikā. Šajā ekrānā tiek parādīts programmas nosaukums un cita informācija par atsauksmēm. Palaižot programmu EV3 Brick, šis ekrāns parādās pirms programmas pirmā ekrāna bloka palaišanas.

Parādīto elementu redzamības nodrošināšana

Kad EV3 programma ir pabeigta, EV3 Brick ekrāns tiek notīrīts un atgriežas EV3 Brick Menu ekrānā. Jebkurš programmas parādītais teksts vai grafika tiks izdzēsta. Ja, piemēram, jūsu programmā ir viens bloks "Ekrāns" un nekas cits, ekrāns tiks notīrīts tik ātri uzreiz pēc programmas beigām, ka jūs neredzēsit bloka "Screen" rezultātus.

Ja vēlaties, lai ekrāns paliktu redzams pēc programmas pabeigšanas, programmas beigās ir jāpievieno bloks, lai programma netiktu nekavējoties beigta, kā parādīts turpmākajos piemēros.

Parāda vairākus vienumus

Ja vēlaties ekrānā vienlaikus parādīt vairākus teksta vai grafiskos elementus, ir svarīgi nenotīrīt EV3 Brick ekrānu starp elementiem. Katram ekrāna bloka režīmam ir Clear Screen ievade. Ja opcija Clear Screen ir patiesa, viss ekrāns tiks notīrīts, pirms tiek parādīts vienums. Tas nozīmē, ka, lai parādītu vairākus vienumus, katram ekrāna blokam, izņemot pirmo, ir jāiestata Clear Screen uz False.

Parāda skaitļus

Lai programmā parādītu skaitlisku vērtību, pievienojiet datu kopni teksta displeja bloka teksta ievadei. Ciparu datu kopne tiks automātiski pārveidota par tekstu, izmantojot datu kopnes tipa konvertēšanu (skatiet sadaļu

Ideja par dizainera mikrodatora nomaiņu ar Beaglebone vai citu nav jauna. Bet līdz ar EV3 izlaišanu kļuva iespējams ne tikai iegūt 100% analogu, bet arī palielināt sava legorobota veiktspēju.

Projekta video prezentācija:

E VB pilnībā atbalsta Lego Mindstorms Ev3 sistēmu gan aparatūras, gan programmatūras līmenī, 100% savietojams ar visiem Lego sensoriem un motoriem. Bloks darbojas tāpat kā Lego Mindstorms EV3 bloks:

BeagleBone Black— vienas plates Linux dators. Tas ir Raspberry Pi konkurents. Ir jaudīgs procesors AM335x 720MHz ARM® procesors, liels ieeju/izeju skaits, iespējas var paplašināt ar papildus dēļiem.

Lego Mindstorms EV3 ir ARM9 (TI Sitara AM180x) 300 MHz procesors, tāpēc pārejiet uz ARM Cortex-A8 (TI Sitara AM335x) 1 GHz BeagleBone Black procesoru. palielina produktivitāti, kā arī kļūst iespējams pievienot papildu paplašināšanas kartes!

Pats galvenais, ka Lego Mindstorms EV3 ir atvērts visas programmatūras un aparatūras apraksts!

Piemēram, ir samontēts un demonstrēts slavenais Rubika kubu risināšanas robots. Tikai EV3 vietā uzstādīja izstrādāto EVB. Aicinām noskatīties video:

Projekta autori jau ražo un pārdod EVB. Viņi plāno ievērojami paplašināt ražošanu līdz 2015. gada aprīļa beigām. Turklāt viņi ir izstrādājuši un ražo vairākus saderīgus sensorus.

Tradicionāli roboti tiek būvēti uz platformas Lego Mindstorms EV3, ir ieprogrammēti, izmantojot LabVIEW grafisko vidi. Šajā gadījumā programmas darbojas uz EV3 kontrollera un robots darbojas autonomi. Šeit es runāšu par alternatīvu veidu, kā vadīt robotu - izmantojot .NET platformu, kas darbojas datorā.

Bet pirms sākam programmēšanu, apskatīsim dažus gadījumus, kad tas varētu būt noderīgi:

  • Nepieciešama robota tālvadība no klēpjdatora (piemēram, nospiežot pogas)
  • Ir nepieciešams apkopot datus no EV3 kontrollera un apstrādāt tos ārējā sistēmā (piemēram, IoT sistēmām)
  • Citas situācijas, kad vēlaties rakstīt vadības algoritmu .NET un palaist to no datora, kas savienots ar EV3 kontrolleri

LEGO MINDSTORMS EV3 API, kas paredzēta .NET

EV3 kontrolieris tiek vadīts no ārējas sistēmas, nosūtot komandas uz seriālo portu. Pats komandas formāts ir aprakstīts saziņas izstrādātāju komplektā.

Bet šī protokola manuāla ieviešana ir garlaicīga. Tāpēc varat izmantot gatavo .NET iesaiņojumu, kuru Braiens Pīks rūpīgi uzrakstīja. Šīs bibliotēkas pirmkods tiek mitināts vietnē Github, un lietošanai gatavu pakotni var atrast vietnē Nuget.

Savienojuma izveide ar EV3 kontrolieri

Brick klase tiek izmantota, lai sazinātos ar EV3 kontrolieri. Veidojot šo objektu, konstruktoram jānodod ICommunication interfeisa implementācija - objekts, kas apraksta, kā izveidot savienojumu ar EV3 kontrolieri. Ir pieejamas UsbCommunication, BluetoothCommunication un NetworkCommunication (WiFi savienojums) implementācijas.

Populārākā savienojuma metode ir Bluetooth. Sīkāk apskatīsim šo savienojuma metodi.

Pirms mēs varam programmatiski izveidot savienojumu ar kontrolieri, izmantojot Bluetooth, kontrolieris ir jāsavieno ar datoru, izmantojot operētājsistēmas iestatījumus.

Kad kontrolieris ir pievienots, atveriet Bluetooth iestatījumus un atlasiet cilni COM porti. Mēs atrodam savu kontrolieri, mums vajag izejošo osta. Mēs to norādīsim, veidojot BluetoothCommunication objektu.

Kods savienojumam ar kontrolieri izskatīsies šādi:

Publisks asinhronais uzdevums Connect(ICcommunication communication) ( var communication = new BluetoothCommunication("COM9"); var brick = _brick = new Brick(communication); gaidiet _brick.ConnectAsync(); )

Pēc izvēles varat norādīt savienojuma taimautu kontrolierim:

Gaidiet _brick.ConnectAsync(TimeSpan.FromSeconds(5));

Savienojuma izveide ar ierīci, izmantojot USB vai WiFi, tiek veikta tādā pašā veidā, izņemot to, ka tiek izmantoti objekti UsbCommunication un NetworkCommunication.

Visas turpmākās darbības, kas tiek veiktas ar kontrolieri, tiek veiktas caur objektu Brick.

Pagriezīsim dzinējus

Lai izpildītu komandas EV3 kontrollerī, mēs piekļūstam objekta Brick rekvizītam DirectCommand. Vispirms mēģināsim iedarbināt dzinējus.

Pieņemsim, ka mūsu motors ir savienots ar kontroliera portu A, tad šī motora darbināšana ar 50% jaudu izskatīsies šādi:

Gaidiet _brick.DirectCommand.TurnMotorAtPowerAsync(OutputPort.A, 50);

Ir arī citas metodes motora vadīšanai. Piemēram, varat pagriezt motoru noteiktā leņķī, izmantojot StepMotorAtPowerAsync() un StepMotorAtSpeedAsync() metodes. Ir pieejamas vairākas metodes, kas ir variācijas par motoru ieslēgšanas režīmiem - pēc laika, ātruma, jaudas utt.

Piespiedu apturēšana tiek veikta, izmantojot StopMotorAsync() metodi:

Gaidiet _brick.DirectCommand.StopMotorAsync(OutputPort.A, true);

Otrais parametrs norāda uz bremžu lietošanu. Ja iestatīsiet to uz nepatiesu, motors apstāsies, līdz apstāsies.

Vērtību nolasīšana no sensoriem

EV3 kontrolierim ir četri porti sensoru pievienošanai. Papildus tam motoriem ir arī iebūvēti kodētāji, kas ļauj tos izmantot kā sensorus. Rezultātā mums ir 8 porti, no kuriem var nolasīt vērtības.

Vērtību nolasīšanas portiem var piekļūt, izmantojot objekta Brick rekvizītu Ports. Porti ir portu kolekcija, kas pieejama kontrolierī. Tāpēc, lai strādātu ar noteiktu portu, tas ir jāizvēlas. InputPort.One ... InputPort.Four ir sensoru porti, un InputPort.A ... InputPort.D ir motora kodētāji.

Var port1 = _ķieģelis.Porti;

EV3 sensori var darboties dažādos režīmos. Piemēram, EV3 krāsu sensoru var izmantot, lai izmērītu apkārtējo gaismu, izmērītu atstaroto gaismu vai noteiktu krāsu. Tāpēc, lai sensoram precīzi “pastāstītu”, kā mēs to vēlamies izmantot, mums jāiestata tā režīms:

Brick.Ports.SetMode(ColorMode.Reflective);

Tagad, kad sensors ir pievienots un ir iestatīts tā darbības režīms, varat nolasīt datus no tā. Varat iegūt “neapstrādātus” datus, apstrādāto vērtību un procentuālo vērtību.

Float si = _ķieģelis.Ports.SIVvērtība; int raw = _ķieģelis.Ports.RawValue; baitu procenti = _ķieģelis.Ports.PercentValue;

Rekvizīts SIValue atgriež apstrādātos datus. Tas viss ir atkarīgs no tā, kurš sensors tiek izmantots un kādā režīmā. Piemēram, mērot atstaroto gaismu, mēs iegūsim vērtības no 0 līdz 100 atkarībā no atstarotās gaismas intensitātes (melns/balts).

Rekvizīts RawValue atgriež neapstrādāto vērtību, kas iegūta no ADC. Dažreiz to ir ērtāk izmantot turpmākai apstrādei un lietošanai. Starp citu, EV3 izstrādes vidē ir iespējams iegūt arī “neapstrādātas” vērtības - šim nolūkam ir jāizmanto bloks no zilā paneļa.

Ja jūsu izmantotais sensors paredz saņemt vērtības procentos, varat izmantot arī rekvizītu PercentValue.

Komandu izpilde partijās

Pieņemsim, ka mums ir robotu ratiņi ar diviem riteņiem, un mēs vēlamies tos ievietot vietā. Šajā gadījumā diviem riteņiem jāgriežas pretējā virzienā. Ja mēs izmantojam DirectCommand un nosūtām divas komandas secīgi kontrolierim, starp to izpildi var paiet zināms laiks:

Gaidiet _brick.DirectCommand.TurnMotorAtPowerAsync(OutputPort.A, 50); gaidīt _brick.DirectCommand.TurnMotorAtPowerAsync(OutputPort.B, -50);

Šajā piemērā mēs nosūtām komandu griezt motoru A ar ātrumu 50, pēc veiksmīgas šīs komandas nosūtīšanas atkārtojam to pašu ar motoru, kas savienots ar portu B. Problēma ir tāda, ka komandu nosūtīšana nenotiek uzreiz, tāpēc motori var sākt griezties dažādos laikos - kamēr komanda tiek pārraidīta portam B, motoram A jau sāks griezties.

Ja mums ir ļoti svarīgi, lai motori grieztos vienlaikus, mēs varam nosūtīt komandas kontrolierim “saitā”. Šajā gadījumā jums vajadzētu izmantot BatchCommand rekvizītu, nevis DirectCommand:

Brick.BatchCommand.TurnMotorAtPower(OutputPort.A, 50); _ķieģelis.BatchCommand.TurnMotorAtPower(OutputPort.B, -50); gaidīt _brick.BatchCommand.SendCommandAsync();

Tagad tiek sagatavotas divas komandas uzreiz, pēc tam tās tiek nosūtītas kontrolierim vienā paketē. Kontrolieris, saņēmis šīs komandas, vienlaikus sāks griezt motorus.

Ko vēl var darīt

Papildus rotējošiem motoriem un sensoru vērtību nolasīšanai ar EV3 kontrolieri varat veikt vairākas citas darbības. Es nestāstīšu par katru no tiem, es tikai uzskaitīšu sarakstu ar to, ko var izdarīt:

  • CleanUIAsync(), DrawTextAsync(), DrawLineAsync() utt. — manipulācijas ar EV3 kontrollera iebūvēto ekrānu
  • PlayToneAsync() un PlaySoundAsync() — izmantojiet iebūvēto skaļruni, lai atskaņotu skaņas
  • WriteFileAsync() , CopyFileAsync() , DeleteFileAsync() (no SystemCommand) — darbs ar failiem

Secinājums

NET izmantošana Mindstorms EV3 robotu vadīšanai labi parāda, kā tehnoloģijas no “dažādām pasaulēm” var sadarboties. EV3 API izpētes rezultātā .NET tika izveidota neliela aplikācija, kas ļauj vadīt EV3 robotu no datora. Diemžēl līdzīgas lietojumprogrammas pastāv arī NXT, taču EV3 tās apieta. Tajā pašā laikā tie ir noderīgi kontrolētās robotu sacensībās, piemēram, robotu futbolā.

Lietojumprogrammu var lejupielādēt un instalēt no šīs saites: