Radimo s Lego Mindstorms EV3 iz .NET-a. Povezivanje dvije ili više EV3 kocki Povezivanje putem Wi-Fi-ja

USB priključak

LEGO Mindstorms EV3 može se povezati s računalom ili drugim EV3 putem USB veze. Brzina i stabilnost veze u ovom su slučaju bolje nego kod bilo koje druge metode, uključujući Bluetooth.

LEGO Mindstorms EV3 ima dva USB priključka.

Komunikacija između LEGO EV3 i drugih LEGO EV3 blokova u lančanom načinu rada.

Lančani način rada koristi se za povezivanje dva ili više LEGO EV3 blokova.

Ovaj način rada:

  • dizajniran za povezivanje više od jednog LEGO Mindstorms EV3;
  • služi za spajanje više senzora, motora i drugih uređaja;
  • omogućuje komunikaciju između nekoliko LEGO Mindstorms EV3 (do 4), što nam daje do 16 vanjskih portova i isto toliko internih portova;
  • omogućuje kontrolu cijelog lanca iz glavnog LEGO Mindstorms EV3;
  • ne može raditi kada je Wi-Fi ili Bluetooth aktivan.

Da biste omogućili način lančane veze, idite na prozor postavki projekta i potvrdite okvir.

Kada je odabran ovaj način rada, tada za bilo koji motor možemo odabrati EV3 blok koji će se koristiti i potrebne senzore.

Tablica prikazuje opcije za korištenje EV3 blokova:

Akcijski

Srednji motor

Veliki motor

Upravljanja

Samostalno upravljanje

Žiroskopski

Infracrveni

Ultrazvučni

Rotacija motora

Temperature

Mjerač energije

Zvuk

Povezivanje putem Bluetootha

Bluetooth omogućuje LEGO Mindstorms EV3 povezivanje s računalom, drugim LEGO Mindstorms EV3, pametnim telefonima i drugim Bluetooth uređajima. Domet komunikacije putem Bluetootha je do 25 m.

Možete spojiti do 7 blokova na jedan LEGO Mindstorms EV3. EV3 Master Brick vam omogućuje slanje i primanje poruka svakom EV3 Slave. EV3 podređeni uređaji mogu slati poruke samo EV3 glavnoj kocki, ne jedni drugima.

Slijed povezivanja EV3 putem Bluetootha

Kako biste međusobno povezali dva ili više EV3 blokova putem Bluetootha, morate izvršiti sljedeće korake:

1. Otvorite karticu postavke.

2. Odaberite Bluetooth i pritisnite središnju tipku.

3. Stavili smo Potvrdni okvir vidljivost Bluetooth.

4. Provjerite je li Bluetooth znak ("<") виден на верхней левой стороне.

5. Izvršite gornji postupak za potreban broj EV3 kockica.

6. Idite na karticu Veza:

7. Kliknite gumb Traži:

8. Odaberite EV3 s kojim se želite povezati (ili s kojim se želite povezati) i pritisnite središnji gumb.

9. Povezujemo prvi i drugi blok s pristupnim ključem.

Ako sve učinite ispravno, ikona " će se pojaviti u gornjem lijevom kutu<>", povežite druge EV3 blokove na isti način ako ih ima više od dva.

Ako isključite LEGO EV3, veza će se prekinuti i morat ćete ponoviti sve korake.

Važno: svaki blok mora imati napisan vlastiti program.

Primjer programa:

Prvi blok: Kada se pritisne senzor za dodir, prvi EV3 blok prenosi tekst drugom bloku s odgodom od 3 sekunde (glavni blok).

Primjer programa za blok 2:

Drugi blok čeka da primi tekst iz prvog bloka, a kada ga primi, prikazat će riječ (u našem primjeru, riječ "Hello") 10 sekundi (podređeni blok).

Povežite se putem Wi-Fi mreže

Komunikacija većeg dometa moguća je spajanjem Wi-Fi ključa na USB priključak na EV3.

Da biste koristili Wi-Fi, trebate instalirati poseban modul na EV3 blok pomoću USB konektora (Wi-Fi adapter (Netgear N150 bežični adapter (WNA1100)), ili možete spojiti Wi-Fi ključ.

Odaberite način rada zaslona

Odabir načina rada
Blokiraj tekstualno polje
Unosi
Gumb za pregled

Pomoću birača načina odaberite vrstu teksta ili grafike koju želite vidjeti. Nakon odabira načina, možete odabrati ulazne vrijednosti. Dostupni ulazi će se razlikovati ovisno o načinu rada. Načini rada i ulazi opisani su u nastavku.

Možete kliknuti gumb Preview za pregled onoga što će zaslonski blok prikazati na EV3 zaslonu. Možete ostaviti prikaz otvorenim dok birate ulazne vrijednosti za blok.

Koordinate ekrana

Mnogi načini zaslona koriste X i Y koordinate za određivanje lokacije elementa. Koordinate određuju položaj piksela na zaslonu EV3 Brick. Položaj (0, 0) je u gornjem lijevom kutu zaslona kao što je prikazano na slici ispod.

Dimenzije zaslona: 178 piksela širine i 128 piksela visine. Raspon vrijednosti X koordinate je od 0 na ekranu s lijeve strane do 177 s desne strane. Raspon vrijednosti Y koordinate je od 0 na vrhu do 127 na dnu.

Savjeti i trikovi

Možete koristiti gumb Pregled u gornjem lijevom kutu bloka Zaslon kako biste lakše pronašli točne koordinate na ekranu.

Tekst - pikseli

Tekst - Način rada piksela omogućuje vam prikaz teksta bilo gdje na zaslonu EV3 kocke.

Ponovno postavljanje prozora

Način Reset Window vraća zaslon EV3 Brick na standardni informacijski zaslon prikazan dok je program pokrenut. Ovaj zaslon prikazuje naziv programa i druge povratne informacije. Kada pokrenete program na EV3 kocki, ovaj zaslon se pojavljuje prije pokretanja prvog bloka zaslona programa.

Osiguravanje vidljivosti prikazanih elemenata

Kada program EV3 završi, zaslon EV3 kocke se briše i vraća se na zaslon izbornika EV3 kocke. Sav tekst ili grafika prikazana u programu bit će izbrisana. Ako, na primjer, vaš program ima jedan blok "Screen" i ništa drugo, tada će se ekran tako brzo izbrisati odmah nakon završetka programa da nećete vidjeti rezultate bloka "Screen".

Ako želite da zaslon ostane vidljiv nakon što program završi, morate dodati blok na kraj programa kako biste spriječili da program odmah završi, kao što je prikazano u sljedećim primjerima.

Prikaz više stavki

Ako želite prikazati više tekstualnih ili grafičkih elemenata na zaslonu u isto vrijeme, važno je ne brisati zaslon EV3 Brick između elemenata. Svaki način rada bloka Screen ima Clear Screen unos. Ako je Clear Screen postavljeno na true, cijeli zaslon bit će izbrisan prije nego što se stavka prikaže. To znači da za prikaz više stavki morate postaviti Clear Screen na False za svaki blok zaslona osim prvog.

Prikaz brojeva

Za prikaz numeričke vrijednosti u vašem programu, spojite podatkovnu sabirnicu na tekstualni unos bloka za prikaz teksta. Numerička podatkovna sabirnica automatski će se pretvoriti u tekst pomoću pretvorbe tipa podatkovne sabirnice (pogledajte odjeljak

Ideja da se mikroračunalo u dizajneru zamijeni Beagleboneom ili nekim drugim nije nova. Ali s izdavanjem EV3 postalo je moguće ne samo dobiti 100% analog, već i povećati performanse vašeg legorobota.

Video prezentacija projekta:

E VB u potpunosti podržava sustav Lego Mindstorms Ev3 i na hardverskoj i na softverskoj razini, 100% kompatibilan sa svim Lego senzorima i motorima. Blok radi isto kao i Lego Mindstorms EV3 blok:

BeagleBone Black— jednopločno Linux računalo. Konkurencija je Raspberry Piju. Ima snažan procesor AM335x 720MHz ARM® procesor, velik broj ulaza/izlaza, mogućnosti se mogu proširiti dodatnim pločama.

Lego Mindstorms EV3 ima ARM9 (TI Sitara AM180x) procesor od 300 MHz, stoga prelazimo na ARM Cortex-A8 (TI Sitara AM335x) 1 GHz BeagleBone Black procesor povećava produktivnost, plus postaje moguće spojiti dodatne kartice za proširenje!

Ono što je najvažnije je da Lego Mindstorms EV3 ima otvoren opis svog softvera i hardvera!

Na primjer, sastavljen je i demonstriran poznati robot za rješavanje Rubikove kocke. Samo što su umjesto EV3 ugradili razvijeni EVB. Pozivamo vas da pogledate video:

Autori projekta već proizvode i prodaju EVB. Planiraju značajno proširiti proizvodnju do kraja travnja 2015. Osim toga, razvili su i proizvode nekoliko kompatibilnih senzora.

Tradicionalno, roboti izgrađeni na platformi Lego Mindstorms EV3, programiraju se pomoću grafičkog okruženja LabVIEW. U ovom slučaju, programi se pokreću na EV3 kontroleru i robot radi autonomno. Ovdje ću govoriti o alternativnom načinu upravljanja robotom - pomoću .NET platforme koja radi na računalu.

Ali prije nego krenemo u programiranje, pogledajmo neke slučajeve u kojima bi ovo moglo biti korisno:

  • Zahtijeva daljinsko upravljanje robotom s prijenosnog računala (na primjer, pritiskom na gumbe)
  • Potrebno je prikupiti podatke s EV3 kontrolera i obraditi ih na vanjskom sustavu (na primjer, za IoT sustave)
  • Sve druge situacije kada želite napisati kontrolni algoritam u .NET-u i pokrenuti ga s računala spojenog na EV3 kontroler

LEGO MINDSTORMS EV3 API za .NET

EV3 kontroler se kontrolira iz vanjskog sustava slanjem naredbi na serijski priključak. Sam format naredbe opisan je u Communication Developer Kitu.

Ali ručna implementacija ovog protokola je dosadna. Stoga možete koristiti gotov .NET omotač, koji je Brian Peek pažljivo napisao. Izvorni kod za ovu biblioteku nalazi se na Githubu, a paket spreman za korištenje može se pronaći na Nugetu.

Spajanje na EV3 kontroler

Klasa Brick koristi se za komunikaciju s EV3 kontrolerom. Kada kreirate ovaj objekt, trebate prenijeti implementaciju ICommunication sučelja konstruktoru - objekt koji opisuje kako se povezati s EV3 kontrolerom. Dostupne su implementacije UsbCommunication, BluetoothCommunication i NetworkCommunication (WiFi veza).

Najpopularniji način povezivanja je putem Bluetootha. Pogledajmo pobliže ovu metodu povezivanja.

Prije nego što se možemo programski povezati s kontrolerom putem Bluetootha, kontroler mora biti povezan s računalom pomoću postavki operativnog sustava.

Nakon što se kontroler poveže, idite na Bluetooth postavke i odaberite karticu COM portovi. Pronalazimo našeg kontrolora, koji nam treba odlazni luka. Navest ćemo ga prilikom stvaranja objekta BluetoothCommunication.

Kod za povezivanje s kontrolerom izgledat će ovako:

Javni asinkroni zadatak Connect(ICommunication communication) ( var communication = new BluetoothCommunication("COM9"); var brick = _brick = new Brick(communication); await _brick.ConnectAsync(); )

Po izboru, možete odrediti vremensko ograničenje veze s kontrolerom:

Pričekajte _brick.ConnectAsync(TimeSpan.FromSeconds(5));

Povezivanje s jedinicom putem USB-a ili WiFi-a provodi se na isti način, s tim da se koriste objekti UsbCommunication i NetworkCommunication.

Sve daljnje radnje koje se izvode na kontroleru rade se preko objekta Brick.

Zavrtimo motore

Za izvršavanje naredbi na EV3 kontroleru pristupamo svojstvu DirectCommand objekta Brick. Prvo, pokušajmo pokrenuti motore.

Pretpostavimo da je naš motor spojen na priključak A kontrolera, tada će rad ovog motora na 50% snage izgledati ovako:

Pričekajte _brick.DirectCommand.TurnMotorAtPowerAsync(OutputPort.A, 50);

Postoje i druge metode upravljanja motorom. Na primjer, možete rotirati motor na određeni kut pomoću metoda StepMotorAtPowerAsync() i StepMotorAtSpeedAsync(). Postoji nekoliko dostupnih metoda, a to su varijacije načina uključivanja motora - po vremenu, brzini, snazi ​​itd.

Prisilno zaustavljanje provodi se pomoću metode StopMotorAsync():

Pričekajte _brick.DirectCommand.StopMotorAsync(OutputPort.A, true);

Drugi parametar označava korištenje kočnice. Ako ga postavite na false, motor će se zaustaviti u vožnji.

Očitavanje vrijednosti sa senzora

EV3 kontroler ima četiri priključka za spajanje senzora. Osim toga, motori imaju ugrađene enkodere, što im omogućuje da se koriste kao senzori. Kao rezultat, imamo 8 portova iz kojih se mogu očitati vrijednosti.

Priključcima za čitanje vrijednosti može se pristupiti putem svojstva Ports objekta Brick. Priključci su skup priključaka dostupnih na kontroleru. Stoga, da biste radili s određenim priključkom, morate ga odabrati. InputPort.One ... InputPort.Four su priključci senzora, a InputPort.A ... InputPort.D su enkoderi motora.

Var port1 = _brick.Ports;

Senzori u EV3 mogu raditi u različitim načinima rada. Na primjer, EV3 senzor boja može se koristiti za mjerenje ambijentalnog svjetla, mjerenje reflektiranog svjetla ili otkrivanje boje. Stoga, da bismo "rekli" senzoru točno kako ga želimo koristiti, moramo postaviti njegov način rada:

Brick.Ports.SetMode(ColorMode.Reflective);

Sada kada je senzor povezan i njegov način rada postavljen, možete očitati podatke s njega. Možete dobiti "sirove" podatke, obrađenu vrijednost i postotnu vrijednost.

Float si = _brick.Ports.SIValue; int raw = _brick.Ports.RawValue; postotak bajtova = _brick.Ports.PercentValue;

Svojstvo SIValue vraća obrađene podatke. Sve ovisi o tome koji se senzor koristi i u kojem načinu rada. Na primjer, kada mjerimo reflektirano svjetlo, dobit ćemo vrijednosti od 0 do 100 ovisno o intenzitetu reflektiranog svjetla (crno/bijelo).

Svojstvo RawValue vraća sirovu vrijednost dobivenu iz ADC-a. Ponekad je prikladnije koristiti ga za naknadnu obradu i upotrebu. Usput, u razvojnom okruženju EV3 također je moguće dobiti "sirove" vrijednosti - za to morate koristiti blok s plave ploče.

Ako senzor koji koristite očekuje primanje vrijednosti u postocima, tada također možete koristiti svojstvo PercentValue.

Izvršavanje naredbi u serijama

Recimo da imamo robotska kolica s dva kotača i želimo ih postaviti na mjesto. U tom se slučaju dva kotača moraju okretati u suprotnom smjeru. Ako koristimo DirectCommand i pošaljemo dvije naredbe uzastopno kontroleru, može proći neko vrijeme između njihovog izvršenja:

Pričekajte _brick.DirectCommand.TurnMotorAtPowerAsync(OutputPort.A, 50); čekaj _brick.DirectCommand.TurnMotorAtPowerAsync(OutputPort.B, -50);

U ovom primjeru šaljemo naredbu za rotaciju motora A brzinom od 50, nakon uspješnog slanja ove naredbe, isto ponavljamo s motorom spojenim na priključak B. Problem je što se slanje naredbi ne događa trenutno, pa motori može se početi okretati u različito vrijeme - dok se naredba prenosi za priključak B, motor A već počet će se vrtjeti.

Ako nam je kritično da se motori vrte u isto vrijeme, možemo slati naredbe kontroleru u "snopu". U ovom slučaju, trebali biste koristiti svojstvo BatchCommand umjesto DirectCommand:

Brick.BatchCommand.TurnMotorAtPower(OutputPort.A, 50); _brick.BatchCommand.TurnMotorAtPower(OutputPort.B, -50); čekaj _brick.BatchCommand.SendCommandAsync();

Sada se pripremaju dvije naredbe odjednom, nakon čega se šalju kontroleru u jednom paketu. Kontroler će, nakon što primi ove naredbe, početi okretati motore istovremeno.

Što drugo možete učiniti

Osim rotiranja motora i očitavanja vrijednosti senzora, možete izvršiti niz drugih radnji na EV3 kontroleru. Neću ulaziti u detalje o svakom od njih, samo ću navesti popis onoga što se može učiniti:

  • CleanUIAsync(), DrawTextAsync(), DrawLineAsync() itd. - manipulacija ugrađenim zaslonom EV3 kontrolera
  • PlayToneAsync() i PlaySoundAsync() - koristite ugrađeni zvučnik za reprodukciju zvukova
  • WriteFileAsync() , CopyFileAsync() , DeleteFileAsync() (iz SystemCommand) - rad s datotekama

Zaključak

Korištenje .NET-a za kontrolu Mindstorms EV3 robota dobro pokazuje kako tehnologije iz "različitih svjetova" mogu raditi zajedno. Kao rezultat istraživanja EV3 API-ja za .NET, stvorena je mala aplikacija koja vam omogućuje upravljanje EV3 robotom s računala. Nažalost, slične aplikacije postoje za NXT, ali EV3 ih je zaobišao. Istodobno su korisni u kontroliranim robotskim natjecanjima, poput robotskog nogometa.

Aplikaciju možete preuzeti i instalirati s ove poveznice: