.NET'ten Lego Mindstorms EV3 ile çalışıyoruz. İki veya daha fazla EV3 Brick'i bağlama Wi-Fi aracılığıyla bağlanma

USB bağlantısı

LEGO Mindstorms EV3, USB bağlantısı aracılığıyla bir PC'ye veya başka bir EV3'e bağlanabilir. Bu durumda bağlantı hızı ve kararlılığı, Bluetooth dahil diğer yöntemlerden daha iyidir.

LEGO Mindstorms EV3'ün iki USB bağlantı noktası vardır.

Papatya zinciri modunda LEGO EV3 ve diğer LEGO EV3 blokları arasındaki iletişim.

Papatya zinciri modu, iki veya daha fazla LEGO EV3 bloğunu bağlamak için kullanılır.

Bu mod:

  • birden fazla LEGO Mindstorms EV3'ü bağlamak için tasarlandı;
  • daha fazla sensörün, motorun ve diğer cihazların bağlanmasına hizmet eder;
  • birden fazla LEGO Mindstorms EV3 (en fazla 4) arasında iletişime izin verir, bu da bize 16 adede kadar harici bağlantı noktası ve aynı sayıda dahili bağlantı noktası sağlar;
  • tüm zincirin ana LEGO Mindstorms EV3'ten kontrol edilmesini mümkün kılar;
  • Wi-Fi veya Bluetooth etkinken çalışamaz.

Papatya zinciri bağlantı modunu etkinleştirmek için proje ayarları penceresine gidin ve kutuyu işaretleyin.

Bu mod seçildiğinde herhangi bir motor için kullanılacak EV3 bloğunu ve gerekli sensörleri seçebiliriz.

Tabloda EV3 bloklarını kullanma seçenekleri gösterilmektedir:

Aksiyon

Orta motorlu

Büyük motor

Direksiyon

Bağımsız yönetim

Jiroskopik

Kızılötesi

Ultrasonik

Motor dönüşü

Sıcaklıklar

Enerji Ölçer

Ses

Bluetooth aracılığıyla bağlantı

Bluetooth, LEGO Mindstorms EV3'ün bir PC'ye, diğer LEGO Mindstorms EV3'e, akıllı telefonlara ve diğer Bluetooth cihazlarına bağlanmasına olanak tanır. Bluetooth üzerinden iletişim aralığı 25 m'ye kadardır.

Bir LEGO Mindstorms EV3'e en fazla 7 blok bağlayabilirsiniz. EV3 Master Brick, her bir EV3 Slave'e mesaj gönderip almanızı sağlar. EV3 Slave'ler birbirlerine değil, yalnızca EV3 Master Brick'e mesaj gönderebilir.

Bluetooth üzerinden EV3 bağlantı sırası

İki veya daha fazla EV3 bloğunu Bluetooth aracılığıyla birbirine bağlamak için aşağıdaki adımları uygulamanız gerekir:

1. Bir sekme açın Ayarlar.

2. Seçin Bluetooth ve orta düğmeye basın.

3. Koyduk Onay kutusu görünürlük Bluetooth.

4. Bluetooth işaretinin ("<") виден на верхней левой стороне.

5. Gerekli sayıda EV3 Brick için yukarıdaki prosedürü uygulayın.

6. Bağlantı sekmesine gidin:

7. Ara düğmesine tıklayın:

8. Bağlanmak istediğiniz (veya bağlanmak istediğiniz) EV3'ü seçin ve orta düğmeye basın.

9. Birinci ve ikinci blokları erişim anahtarıyla birbirine bağlıyoruz.

Her şeyi doğru yaparsanız sol üst köşede " simgesi görünecektir<>", ikiden fazla varsa diğer EV3 bloklarını da aynı şekilde bağlayın.

LEGO EV3'ü kapatırsanız bağlantı kesilecek ve tüm adımları tekrarlamanız gerekecektir.

Önemli: Her bloğun kendi programının yazılı olması gerekir.

Örnek program:

Birinci Blok: Dokunma sensörüne basıldığında, ilk EV3 Bloğu metni 3 saniyelik bir gecikmeyle ikinci Bloğa (Ana Blok) iletir.

Blok 2 için örnek program:

İkinci blok, ilk bloktan metni almayı bekler ve metni aldıktan sonra, 10 saniye boyunca bir kelimeyi (örneğimizde "Merhaba" kelimesi) görüntüler (slave blok).

Wi-Fi aracılığıyla bağlanın

Wi-Fi Dongle'ı EV3'teki USB bağlantı noktasına bağlayarak daha uzun menzilli iletişim mümkündür.

Wi-Fi kullanmak için, bir USB konektörü (Wi-Fi adaptörü (Netgear N150 Kablosuz Adaptör (WNA1100)) kullanarak EV3 bloğuna özel bir modül kurmanız gerekir veya bir Wi-Fi Dongle bağlayabilirsiniz.

Ekran modunu seçin

Mod seçimi
Metin alanını engelle
Girişler
Önizleme düğmesi

Mod seçiciyi kullanarak görmek istediğiniz metin veya grafik türünü seçin. Modu seçtikten sonra giriş değerlerini seçebilirsiniz. Kullanılabilir girişler moda bağlı olarak değişecektir. Modlar ve girişler aşağıda açıklanmıştır.

EV3 ekranında Ekran bloğunun neyi görüntüleyeceğini önizlemek için Önizleme düğmesine tıklayabilirsiniz. Blok için giriş değerlerini seçerken görünümü açık bırakabilirsiniz.

Ekran koordinatları

Ekran bloğu modlarının çoğu, öğenin konumunu belirlemek için X ve Y koordinatlarını kullanır. Koordinatlar, EV3 Brick ekranındaki piksellerin konumunu belirler. (0, 0) konumu, aşağıdaki resimde gösterildiği gibi ekranın sol üst köşesindedir.

Ekran boyutları: 178 piksel genişlik ve 128 piksel yükseklik. X koordinat değerlerinin aralığı soldaki ekranda 0'dan sağda 177'ye kadardır. Y koordinat değerlerinin aralığı üstte 0'dan altta 127'ye kadardır.

Ipuçları ve Püf noktaları

Doğru ekran koordinatlarını bulmanıza yardımcı olması için Ekran bloğunun sol üst köşesindeki Önizleme düğmesini kullanabilirsiniz.

Metin - Piksel

Metin - Piksel modu, metni EV3 Brick ekranının herhangi bir yerinde görüntülemenize olanak tanır.

Pencereyi sıfırla

Pencereyi Sıfırla modu, EV3 Brick ekranını program çalışırken gösterilen standart bilgi ekranına döndürür. Bu ekran program adını ve diğer geri bildirim bilgilerini gösterir. EV3 Brick'te bir program çalıştırdığınızda bu ekran, programın ilk Ekran bloğu çalıştırılmadan önce görüntülenir.

Görüntülenen öğelerin görünürlüğünün sağlanması

EV3 Programı tamamlandığında EV3 Brick ekranı temizlenir ve EV3 Brick Menü ekranına geri döner. Program tarafından görüntülenen tüm metin veya grafikler silinecektir. Örneğin, programınızda bir "Ekran" bloğu varsa ve başka hiçbir şey yoksa, program bittikten hemen sonra ekran o kadar hızlı temizlenir ki "Ekran" bloğunun sonuçlarını görmezsiniz.

Program tamamlandıktan sonra ekranın görünür kalmasını istiyorsanız aşağıdaki örneklerde gösterildiği gibi programın hemen bitmesini önlemek için programın sonuna bir blok eklemelisiniz.

Birden fazla öğe gösteriliyor

Ekranda birden fazla metin veya grafik öğesini aynı anda görüntülemek istiyorsanız EV3 Brick ekranının öğeler arasında temizlenmemesi önemlidir. Ekran bloğunun her modunun bir Ekranı Temizle girişi vardır. Ekranı Temizle seçeneği doğruysa, öğe görüntülenmeden önce ekranın tamamı temizlenir. Bu, birden fazla öğeyi görüntülemek amacıyla, ilki dışındaki her Ekran bloğu için Ekranı Temizle seçeneğini Yanlış olarak ayarlamanız gerektiği anlamına gelir.

Sayıların görüntülenmesi

Programınızda sayısal bir değer görüntülemek için, Metin Görüntüleme bloğunun Metin girişine bir veri yolu bağlayın. Sayısal veri yolu, veri yolu tipi dönüşümü kullanılarak otomatik olarak metne dönüştürülecektir (bkz. bölüm

Tasarımcının mikrobilgisayarını Beaglebone veya başka bir bilgisayarla değiştirme fikri yeni değil. Ancak EV3'ün piyasaya sürülmesiyle yalnızca %100 analog elde etmek değil, aynı zamanda legorobotunuzun performansını artırmak da mümkün hale geldi.

Projenin video sunumu:

E VB, Lego Mindstorms Ev3 sistemini hem donanım hem de yazılım düzeyinde tam olarak destekler ve tüm Lego sensörleri ve motorlarıyla %100 uyumludur. Blok, Lego Mindstorms EV3 bloğuyla aynı şekilde çalışır:

BeagleBone Siyah— tek kartlı Linux bilgisayar. Raspberry Pi'ye rakiptir. Güçlü bir işlemciye sahiptir AM335x 720MHz ARM® işlemci, büyük giriş/çıkış sayısı, yetenekler ek kartlarla genişletilebilir.

Lego Mindstorms EV3, ARM9 (TI Sitara AM180x) 300MHz işlemciye sahip olduğundan ARM Cortex-A8 (TI Sitara AM335x) 1GHz BeagleBone Black işlemciye geçiyor üretkenliği artırır artı ek genişletme kartlarının bağlanması da mümkün hale geliyor!

En önemlisi Lego Mindstorms EV3'ün tüm yazılım ve donanımların açık bir açıklamasına sahip olmasıdır!

Örneğin ünlü Rubik küp çözen robotun montajı ve gösterimi yapıldı. Sadece EV3 yerine geliştirilen EVB'yi kurdular. Sizi videoyu izlemeye davet ediyoruz:

Projenin yazarları halihazırda EVB üretip satıyor. Nisan 2015 sonuna kadar üretimi önemli ölçüde artırmayı planlıyorlar. Ayrıca birçok uyumlu sensör geliştirdiler ve üretiyorlar.

Geleneksel olarak robotlar bir platform üzerine kuruludur. Lego Mindstorms EV3 LabVIEW grafik ortamı kullanılarak programlanır. Bu durumda programlar EV3 kontrol cihazında çalışır ve robot otonom olarak çalışır. Burada robotu kontrol etmenin alternatif bir yolundan bahsedeceğim - bilgisayarda çalışan .NET platformunu kullanarak.

Ancak programlamaya başlamadan önce bunun yararlı olabileceği bazı durumlara bakalım:

  • Robotun bir dizüstü bilgisayardan uzaktan kontrol edilmesini gerektirir (örneğin, düğmelere basılarak)
  • EV3 kontrol cihazından veri toplanması ve harici bir sistemde (örneğin IoT sistemleri için) işlenmesi gerekir.
  • .NET'te bir kontrol algoritması yazmak ve bunu EV3 kontrol cihazına bağlı bir bilgisayardan çalıştırmak istediğiniz diğer durumlar

.NET için LEGO MINDSTORMS EV3 API'si

EV3 denetleyicisi, seri bağlantı noktasına komutlar gönderilerek harici bir sistemden kontrol edilir. Komut formatının kendisi İletişim Geliştirici Kitinde açıklanmıştır.

Ancak bu protokolü manuel olarak uygulamak sıkıcıdır. Bu nedenle Brian Peek'in özenle yazdığı hazır .NET sarmalayıcıyı kullanabilirsiniz. Bu kütüphanenin kaynak kodu Github'da barındırılmaktadır ve kullanıma hazır paket Nuget'te bulunabilir.

EV3 Kontrolörüne Bağlanma

Brick sınıfı EV3 denetleyicisi ile iletişim kurmak için kullanılır. Bu nesneyi oluştururken, ICommunication arayüzünün bir uygulamasını yapıcıya (EV3 denetleyicisine nasıl bağlanılacağını açıklayan bir nesne) iletmeniz gerekir. UsbHaberleşme, BluetoothHaberleşme ve AğHaberleşme (WiFi bağlantısı) uygulamaları mevcuttur.

En popüler bağlantı yöntemi Bluetooth'tur. Bu bağlantı yöntemine daha yakından bakalım.

Denetleyiciye Bluetooth aracılığıyla programlı olarak bağlanabilmemiz için önce denetleyicinin işletim sistemi ayarları kullanılarak bilgisayara bağlanması gerekir.

Denetleyici bağlandıktan sonra Bluetooth ayarlarına gidin ve COM bağlantı noktaları sekmesini seçin. Denetleyicimizi buluyoruz, ihtiyacımız var dışa dönük liman. BluetoothCommunication nesnesini oluştururken bunu belirteceğiz.

Denetleyiciye bağlanacak kod şöyle görünecektir:

Genel eşzamansız Görev Bağlantısı(ICommunication iletişimi) ( var iletişim = new BluetoothCommunication("COM9"); varbrick = _brick = new Brick(iletişim); wait _brick.ConnectAsync(); )

İsteğe bağlı olarak denetleyiciye bağlantı zaman aşımı belirtebilirsiniz:

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

Üniteye USB veya WiFi üzerinden bağlanma, UsbCommunication ve NetworkCommunication nesnelerinin kullanılması dışında aynı şekilde gerçekleştirilir.

Denetleyicide gerçekleştirilen diğer tüm eylemler Brick nesnesi aracılığıyla gerçekleştirilir.

Hadi motorları döndürelim

EV3 kontrol cihazında komutları yürütmek için Brick nesnesinin DirectCommand özelliğine erişiyoruz. İlk önce motorları çalıştırmayı deneyelim.

Motorumuzun kontrolörün A portuna bağlı olduğunu varsayalım, o zaman bu motoru %50 güçte çalıştırmak şöyle görünecektir:

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

Motoru kontrol etmenin başka yöntemleri de vardır. Örneğin, StepMotorAtPowerAsync() ve StepMotorAtSpeedAsync() yöntemlerini kullanarak bir motoru belirli bir açıya döndürebilirsiniz. Motorları çalıştırma modlarının zamana, hıza, güce vb. göre varyasyonları olan çeşitli yöntemler mevcuttur.

Zorla durdurma, StopMotorAsync() yöntemi kullanılarak gerçekleştirilir:

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

İkinci parametre frenin kullanımını gösterir. Yanlış olarak ayarlarsanız motor yavaş yavaş durur.

Sensörlerden değerlerin okunması

EV3 kontrol cihazında sensörleri bağlamak için dört bağlantı noktası bulunur. Buna ek olarak motorlarda sensör olarak kullanılmalarına olanak tanıyan yerleşik kodlayıcılar da bulunur. Sonuç olarak değerlerin okunabileceği 8 adet portumuz var.

Değerleri okumak için kullanılan bağlantı noktalarına Brick nesnesinin Ports özelliği aracılığıyla erişilebilir. Bağlantı noktaları, denetleyicide bulunan bağlantı noktalarının bir koleksiyonudur. Bu nedenle, belirli bir bağlantı noktasıyla çalışmak için onu seçmeniz gerekir. GirişPort.Bir ... GirişPort.Dört sensör bağlantı noktalarıdır ve GirişPort.A ... GirişPort.D motor kodlayıcılardır.

Var port1 = _brick.Ports;

EV3'teki sensörler farklı modlarda çalışabilir. Örneğin EV3 Renk Sensörü ortam ışığını ölçmek, yansıyan ışığı ölçmek veya rengi algılamak için kullanılabilir. Bu nedenle, sensöre onu tam olarak nasıl kullanmak istediğimizi "söylemek" için modunu ayarlamamız gerekir:

Brick.Ports.SetMode(ColorMode.Reflective);

Artık sensör bağlandığı ve çalışma modu ayarlandığı için ondan veri okuyabilirsiniz. “Ham” veriyi, işlenmiş değeri ve yüzde değerini alabilirsiniz.

Float si = _brick.Ports.SIValue; int raw = _brick.Ports.RawValue; bayt yüzdesi = _brick.Ports.PercentValue;

SIValue özelliği işlenmiş verileri döndürür. Her şey hangi sensörün ve hangi modda kullanıldığına bağlıdır. Örneğin yansıyan ışığı ölçerken yansıyan ışığın yoğunluğuna (siyah/beyaz) bağlı olarak 0'dan 100'e kadar değerler alacağız.

RawValue özelliği, ADC'den elde edilen ham değeri döndürür. Bazen daha sonraki işlemler ve kullanım için kullanmak daha uygundur. Bu arada, EV3 geliştirme ortamında "ham" değerler elde etmek de mümkündür - bunun için mavi paneldeki bloğu kullanmanız gerekir.

Kullandığınız sensör yüzde cinsinden değer almayı bekliyorsa PercentValue özelliğini de kullanabilirsiniz.

Komutları toplu olarak yürütme

Diyelim ki iki tekerlekli bir robot arabamız var ve onu yerine yerleştirmek istiyoruz. Bu durumda iki tekerleğin ters yönde dönmesi gerekir. DirectCommand'ı kullanırsak ve denetleyiciye sırayla iki komut gönderirsek, bunların yürütülmesi arasında biraz zaman geçebilir:

Await _brick.DirectCommand.TurnMotorAtPowerAsync(OutputPort.A, 50); wait _brick.DirectCommand.TurnMotorAtPowerAsync(OutputPort.B, -50);

Bu örnekte A motorunu 50 hızla döndürme komutu gönderiyoruz, bu komutu başarılı bir şekilde gönderdikten sonra B portuna bağlı motor için de aynı işlemi tekrarlıyoruz. Sorun şu ki komut gönderimi anında olmuyor dolayısıyla motorlar farklı zamanlarda dönmeye başlayabilir - B portu, A motoru için komut iletilirken çoktan dönmeye başlayacak.

Motorların aynı anda dönmesini sağlamak bizim için kritikse kontrolöre komutları bir “paket” halinde gönderebiliriz. Bu durumda DirectCommand yerine BatchCommand özelliğini kullanmalısınız:

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

Artık iki komut aynı anda hazırlanıyor ve ardından kontrolöre tek paket halinde gönderiliyor. Bu komutları alan kontrolör, motorları aynı anda döndürmeye başlayacaktır.

Başka ne yapabilirim

Motorları döndürmenin ve sensör değerlerini okumanın yanı sıra EV3 kontrol cihazında bir dizi başka işlem de gerçekleştirebilirsiniz. Her biri hakkında detaya girmeyeceğim, sadece neler yapılabileceğini listeleyeceğim:

  • CleanUIAsync(), DrawTextAsync(), DrawLineAsync(), vb. - EV3 denetleyicisinin yerleşik ekranının manipülasyonu
  • PlayToneAsync() ve PlaySoundAsync() - sesleri çalmak için yerleşik hoparlörü kullanın
  • WriteFileAsync() , CopyFileAsync() , SilFileAsync() (SystemCommand'dan) - dosyalarla çalışma

Çözüm

Mindstorms EV3 robotlarını kontrol etmek için .NET'in kullanılması, "farklı dünyalardan" teknolojilerin birlikte nasıl çalışabileceğini iyi bir şekilde gösteriyor. .NET için EV3 API araştırması sonucunda EV3 robotunu bilgisayardan kontrol etmenizi sağlayan küçük bir uygulama oluşturuldu. Ne yazık ki NXT için de benzer uygulamalar mevcut ancak EV3 bunları atladı. Aynı zamanda robot futbolu gibi kontrollü robot müsabakalarında da kullanışlıdırlar.

Uygulama bu bağlantıdan indirilebilir ve kurulabilir: