Kami bekerja dengan Lego Mindstorms EV3 dari .NET. Menghubungkan dua atau lebih Batu Bata EV3 Menghubungkan melalui Wi-Fi

koneksi USB

LEGO Mindstorms EV3 dapat terhubung ke PC atau EV3 lainnya melalui koneksi USB. Kecepatan dan stabilitas koneksi dalam hal ini lebih baik dibandingkan metode lainnya, termasuk Bluetooth.

LEGO Mindstorms EV3 memiliki dua port USB.

Komunikasi antara LEGO EV3 dan blok LEGO EV3 lainnya dalam mode rantai daisy.

Mode rantai daisy digunakan untuk menghubungkan dua atau lebih blok LEGO EV3.

Modus ini:

  • dirancang untuk menghubungkan lebih dari satu LEGO Mindstorms EV3;
  • berfungsi untuk menghubungkan lebih banyak sensor, motor dan perangkat lainnya;
  • memungkinkan komunikasi antara beberapa LEGO Mindstorms EV3 (hingga 4), yang memberi kita hingga 16 port eksternal dan jumlah port internal yang sama;
  • memungkinkan untuk mengontrol seluruh rantai dari LEGO Mindstorms EV3 utama;
  • tidak dapat berfungsi saat Wi-Fi atau Bluetooth aktif.

Untuk mengaktifkan mode koneksi rantai daisy, buka jendela pengaturan proyek dan centang kotak.

Jika mode ini dipilih, maka untuk motor apa pun kita dapat memilih blok EV3 yang akan digunakan dan sensor yang diperlukan.

Tabel menunjukkan opsi untuk menggunakan blok EV3:

Tindakan

motorik sedang

motorik besar

Pengemudian

Manajemen independen

Giroskopik

Inframerah

ultrasonik

Rotasi motorik

Suhu

Pengukur energi

Suara

Koneksi melalui Bluetooth

Bluetooth memungkinkan LEGO Mindstorms EV3 terhubung ke PC, LEGO Mindstorms EV3 lainnya, ponsel cerdas, dan perangkat Bluetooth lainnya. Jangkauan komunikasi melalui Bluetooth hingga 25 m.

Anda dapat menghubungkan hingga 7 blok ke satu LEGO Mindstorms EV3. EV3 Master Brick memungkinkan Anda mengirim dan menerima pesan ke setiap EV3 Slave. Budak EV3 hanya dapat mengirim pesan ke EV3 Master Brick, tidak satu sama lain.

Urutan koneksi EV3 melalui Bluetooth

Untuk menghubungkan dua atau lebih blok EV3 satu sama lain melalui Bluetooth, Anda perlu melakukan langkah-langkah berikut:

1. Buka tab Pengaturan.

2. Pilih Bluetooth dan tekan tombol tengah.

3. Kami menempatkan kotak centang visibilitas Bluetooth.

4. Periksa apakah tanda Bluetooth ("<") виден на верхней левой стороне.

5. Lakukan prosedur di atas untuk jumlah Batu Bata EV3 yang dibutuhkan.

6. Buka tab Koneksi:

7. Klik tombol Cari:

8. Pilih EV3 yang ingin Anda sambungkan (atau ke mana Anda ingin terhubung) dan tekan tombol tengah.

9. Kami menghubungkan blok pertama dan kedua dengan kunci akses.

Jika Anda melakukan semuanya dengan benar, ikon " akan muncul di pojok kiri atas<>", sambungkan blok EV3 lainnya dengan cara yang sama jika jumlahnya lebih dari dua.

Jika Anda mematikan LEGO EV3, koneksi akan terputus dan Anda harus mengulangi semua langkah.

Penting: setiap blok harus memiliki program tertulisnya sendiri.

Contoh program:

Blok Pertama: Saat sensor sentuh ditekan, Blok EV3 pertama mengirimkan teks ke Blok kedua dengan penundaan 3 detik (Blok Utama).

Contoh program untuk blok 2:

Blok kedua menunggu untuk menerima teks dari blok pertama, dan setelah menerimanya, ia akan menampilkan sebuah kata (dalam contoh kita, kata "Halo") selama 10 detik (blok budak).

Terhubung melalui Wi-Fi

Komunikasi jarak jauh dapat dilakukan dengan menghubungkan Dongle Wi-Fi ke port USB di EV3.

Untuk menggunakan Wi-Fi, Anda perlu memasang modul khusus pada blok EV3 menggunakan konektor USB (adaptor Wi-Fi (Netgear N150 Wireless Adapter (WNA1100), atau Anda dapat menghubungkan Dongle Wi-Fi.

Pilih mode layar

Mode pilihan
Blokir bidang teks
masukan
Tombol pratinjau

Pilih jenis teks atau grafik yang ingin Anda lihat menggunakan pemilih mode. Setelah memilih mode, Anda dapat memilih nilai input. Input yang tersedia akan bervariasi tergantung pada modenya. Mode dan input dijelaskan di bawah ini.

Anda dapat mengklik tombol Pratinjau untuk melihat pratinjau apa yang akan ditampilkan blok Tampilan di layar EV3. Anda dapat membiarkan tampilan terbuka sambil memilih nilai input untuk blok tersebut.

Koordinat layar

Banyak mode blok Layar menggunakan koordinat X dan Y untuk menentukan lokasi elemen. Koordinat menentukan posisi piksel pada layar EV3 Brick. Posisi (0, 0) berada di pojok kiri atas layar seperti terlihat pada gambar di bawah ini.

Dimensi layar: lebar 178 piksel dan tinggi 128 piksel. Kisaran nilai koordinat X adalah dari 0 di layar kiri hingga 177 di kanan. Kisaran nilai koordinat Y adalah dari 0 di atas hingga 127 di bawah.

Tip dan trik

Anda dapat menggunakan tombol Pratinjau di sudut kiri atas blok Layar untuk membantu Anda menemukan koordinat layar yang benar.

Teks - Piksel

Teks - Mode Piksel memungkinkan Anda menampilkan teks di mana saja di layar EV3 Brick.

Setel ulang jendela

Mode Reset Window mengembalikan layar EV3 Brick ke layar informasi standar yang ditampilkan saat program sedang berjalan. Layar ini menampilkan nama program dan informasi umpan balik lainnya. Saat Anda menjalankan program di EV3 Brick, layar ini muncul sebelum blok Layar pertama dari program tersebut dijalankan.

Memastikan visibilitas elemen yang ditampilkan

Ketika Program EV3 selesai, layar EV3 Brick hilang dan kembali ke layar Menu EV3 Brick. Teks atau gambar apa pun yang ditampilkan oleh program akan dihapus. Jika, misalnya, program Anda memiliki satu blok "Layar" dan tidak ada yang lain, maka layar akan dibersihkan dengan sangat cepat segera setelah program berakhir sehingga Anda tidak akan melihat hasil dari blok "Layar".

Jika Anda ingin layar tetap terlihat setelah program selesai, Anda harus menambahkan blok di akhir program untuk mencegah program segera berakhir, seperti yang ditunjukkan pada contoh berikut.

Menampilkan banyak item

Jika Anda ingin menampilkan beberapa teks atau elemen grafis pada layar secara bersamaan, penting untuk tidak menghapus layar EV3 Brick antar elemen. Setiap mode blok Layar memiliki input Clear Screen. Jika Hapus Layar benar, seluruh layar akan dibersihkan sebelum item ditampilkan. Artinya untuk menampilkan banyak item, Anda harus mengatur Clear Screen ke False untuk setiap blok Layar kecuali yang pertama.

Menampilkan angka

Untuk menampilkan nilai numerik dalam program Anda, sambungkan bus data ke input Teks dari blok Tampilan Teks. Bus data numerik akan secara otomatis dikonversi menjadi teks menggunakan konversi jenis bus data (lihat bagian

Ide untuk mengganti komputer mikro pada perancang dengan Beaglebone, atau lainnya bukanlah hal baru. Namun dengan dirilisnya EV3, Anda tidak hanya bisa mendapatkan analog 100%, tetapi juga meningkatkan kinerja Legorobot Anda.

Presentasi video proyek:

E VB mendukung penuh sistem Lego Mindstorms Ev3 baik di tingkat perangkat keras maupun perangkat lunak, 100% kompatibel dengan semua sensor dan motor Lego. Blok ini berfungsi sama dengan blok Lego Mindstorms EV3:

BeagleBone Hitam— komputer Linux papan tunggal. Ini adalah pesaing Raspberry Pi. Memiliki prosesor yang kuat Prosesor ARM® AM335x 720MHz, besar jumlah input/output, kemampuan dapat diperluas dengan papan tambahan.

Lego Mindstorms EV3 memiliki prosesor ARM9 (TI Sitara AM180x) 300MHz, jadi berpindah ke prosesor ARM Cortex-A8 (TI Sitara AM335x) 1GHz BeagleBone Black meningkatkan produktivitas, ditambah lagi dimungkinkan untuk menghubungkan kartu ekspansi tambahan!

Yang paling penting adalah Lego Mindstorms EV3 memiliki deskripsi terbuka tentang semua perangkat lunak dan perangkat keras!

Misalnya, robot pemecah kubus Rubik yang terkenal telah dirakit dan didemonstrasikan. Hanya saja, alih-alih EV3, mereka memasang EVB yang dikembangkan. Kami mengundang Anda untuk menonton videonya:

Penulis proyek sudah memproduksi dan menjual EVB. Mereka berencana untuk memperluas produksi secara signifikan pada akhir April 2015. Selain itu, mereka telah mengembangkan dan memproduksi beberapa sensor yang kompatibel.

Secara tradisional, robot dibangun di atas platform Lego Mindstorms EV3, diprogram menggunakan lingkungan grafis LabVIEW. Dalam hal ini, program dijalankan pada pengontrol EV3 dan robot beroperasi secara mandiri. Di sini saya akan berbicara tentang cara alternatif untuk mengendalikan robot - menggunakan platform .NET yang berjalan di komputer.

Namun sebelum kita masuk ke pemrograman, mari kita lihat beberapa kasus yang mungkin berguna:

  • Memerlukan kendali jarak jauh robot dari laptop (misalnya dengan menekan tombol)
  • Diperlukan untuk mengumpulkan data dari pengontrol EV3 dan memprosesnya pada sistem eksternal (misalnya, untuk sistem IoT)
  • Situasi lain ketika Anda ingin menulis algoritma kontrol di .NET dan menjalankannya dari komputer yang terhubung ke pengontrol EV3

API LEGO MINDSTORMS EV3 untuk .NET

Pengontrol EV3 dikendalikan dari sistem eksternal dengan mengirimkan perintah ke port serial. Format perintahnya sendiri dijelaskan dalam Kit Pengembang Komunikasi.

Namun menerapkan protokol ini secara manual itu membosankan. Oleh karena itu, Anda dapat menggunakan pembungkus .NET yang sudah jadi, yang ditulis dengan cermat oleh Brian Peek. Kode sumber untuk perpustakaan ini dihosting di Github, dan paket siap pakai dapat ditemukan di Nuget.

Menghubungkan ke Pengontrol EV3

Kelas Brick digunakan untuk berkomunikasi dengan pengontrol EV3. Saat membuat objek ini, Anda perlu meneruskan implementasi antarmuka ICommunication ke konstruktor - sebuah objek yang menjelaskan cara menyambung ke pengontrol EV3. Implementasi Komunikasi Usb, Komunikasi Bluetooth, dan Komunikasi Jaringan (koneksi WiFi) tersedia.

Metode koneksi paling populer adalah melalui Bluetooth. Mari kita lihat lebih dekat metode koneksi ini.

Sebelum kita dapat terhubung secara terprogram ke pengontrol melalui Bluetooth, pengontrol harus terhubung ke komputer menggunakan pengaturan sistem operasi.

Setelah pengontrol terhubung, buka pengaturan Bluetooth dan pilih tab port COM. Kami menemukan pengontrol kami, kami membutuhkannya keluar pelabuhan. Kami akan menentukannya saat membuat objek BluetoothCommunication.

Kode untuk terhubung ke pengontrol akan terlihat seperti ini:

Sambungan Tugas async publik (Komunikasi IKomunikasi) ( var komunikasi = komunikasi Bluetooth baru("COM9"); var brick = _brick = bata baru(komunikasi); menunggu _brick.ConnectAsync(); )

Secara opsional, Anda dapat menentukan batas waktu koneksi ke pengontrol:

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

Menghubungkan ke unit melalui USB atau WiFi dilakukan dengan cara yang sama, dengan pengecualian objek UsbCommunication dan NetworkCommunication digunakan.

Semua tindakan lebih lanjut yang dilakukan pada pengontrol dilakukan melalui objek Brick.

Ayo putar mesinnya

Untuk menjalankan perintah pada pengontrol EV3, kita mengakses properti DirectCommand dari objek Brick. Pertama, mari kita coba menghidupkan mesinnya.

Misalkan motor kita terhubung ke port A pengontrol, maka menjalankan motor ini dengan daya 50% akan terlihat seperti ini:

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

Ada metode lain untuk mengendalikan motor. Misalnya, Anda dapat memutar motor ke sudut tertentu menggunakan metode StepMotorAtPowerAsync() dan StepMotorAtSpeedAsync(). Ada beberapa metode yang tersedia, yaitu variasi cara menyalakan motor - berdasarkan waktu, kecepatan, tenaga, dll.

Penghentian paksa dilakukan menggunakan metode StopMotorAsync():

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

Parameter kedua menunjukkan penggunaan rem. Jika Anda menyetelnya ke false, motor akan berhenti.

Membaca nilai dari sensor

Pengontrol EV3 memiliki empat port untuk menghubungkan sensor. Selain itu, motor juga memiliki encoder internal, yang memungkinkannya digunakan sebagai sensor. Hasilnya, kami memiliki 8 port tempat nilainya dapat dibaca.

Port untuk membaca nilai dapat diakses melalui properti Ports pada objek Brick. Ports adalah kumpulan port yang tersedia pada pengontrol. Oleh karena itu, untuk bekerja dengan port tertentu, Anda harus memilihnya. InputPort.One ... InputPort.Four adalah port sensor, dan InputPort.A ... InputPort.D adalah encoder motor.

Var port1 = _brick.Port;

Sensor di EV3 dapat beroperasi dalam mode berbeda. Misalnya, Sensor Warna EV3 dapat digunakan untuk mengukur cahaya sekitar, mengukur cahaya yang dipantulkan, atau mendeteksi warna. Oleh karena itu, untuk “memberi tahu” sensor bagaimana kita ingin menggunakannya, kita perlu mengatur modenya:

Brick.Ports.SetMode(ColorMode.Reflective);

Sekarang sensor telah terhubung dan mode pengoperasiannya telah diatur, Anda dapat membaca data darinya. Anda bisa mendapatkan data “mentah”, nilai olahan, dan nilai persentase.

Float si = _brick.Ports.SIValue; int mentah = _brick.Ports.RawValue; byte persen = _brick.Ports.PercentValue;

Properti SIValue mengembalikan data yang diproses. Itu semua tergantung pada sensor mana yang digunakan dan dalam mode apa. Misalnya saat mengukur cahaya yang dipantulkan, kita akan mendapatkan nilai dari 0 hingga 100 tergantung pada intensitas cahaya yang dipantulkan (hitam/putih).

Properti RawValue mengembalikan nilai mentah yang diperoleh dari ADC. Terkadang lebih nyaman menggunakannya untuk pemrosesan dan penggunaan selanjutnya. Omong-omong, di lingkungan pengembangan EV3 juga dimungkinkan untuk mendapatkan nilai "mentah" - untuk ini Anda perlu menggunakan blok dari panel biru.

Jika sensor yang Anda gunakan mengharapkan menerima nilai dalam persentase, Anda juga dapat menggunakan properti PercentValue.

Menjalankan perintah secara batch

Katakanlah kita memiliki kereta robot beroda dua dan kita ingin memasangnya di tempatnya. Dalam hal ini kedua roda harus berputar berlawanan arah. Jika kita menggunakan DirectCommand dan mengirimkan dua perintah secara berurutan ke pengontrol, mungkin ada waktu yang berlalu di antara eksekusinya:

Tunggu _brick.DirectCommand.TurnMotorAtPowerAsync(OutputPort.A, 50); tunggu _brick.DirectCommand.TurnMotorAtPowerAsync(OutputPort.B, -50);

Pada contoh ini kita mengirimkan perintah untuk memutar motor A dengan kecepatan 50, setelah pengiriman perintah ini berhasil, kita ulangi hal yang sama dengan motor yang terhubung ke port B. Soalnya pengiriman perintah tidak terjadi secara instan, sehingga motor mungkin mulai berputar pada waktu yang berbeda - saat perintah sedang dikirim untuk port B, motor A sudah akan mulai berputar.

Jika penting bagi kita untuk membuat motor berputar pada saat yang sama, kita dapat mengirimkan perintah ke pengontrol dalam sebuah “bundel”. Dalam hal ini, Anda harus menggunakan properti BatchCommand dan bukan DirectCommand:

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

Sekarang dua perintah disiapkan sekaligus, setelah itu dikirim ke pengontrol dalam satu paket. Pengontrol, setelah menerima perintah ini, akan mulai memutar motor secara bersamaan.

Apa lagi yang bisa Anda lakukan

Selain memutar motor dan membaca nilai sensor, Anda dapat melakukan sejumlah tindakan lain pada pengontrol EV3. Saya tidak akan merinci masing-masingnya, saya hanya akan mencantumkan daftar apa yang dapat dilakukan:

  • CleanUIAsync(), DrawTextAsync(), DrawLineAsync(), dll. - manipulasi layar internal pengontrol EV3
  • PlayToneAsync() dan PlaySoundAsync() - gunakan speaker internal untuk memutar suara
  • WriteFileAsync() , CopyFileAsync() , DeleteFileAsync() (dari SystemCommand) - bekerja dengan file

Kesimpulan

Penggunaan .NET untuk mengendalikan robot Mindstorms EV3 menunjukkan dengan baik bagaimana teknologi dari “dunia berbeda” dapat bekerja sama. Sebagai hasil penelitian API EV3 untuk .NET, sebuah aplikasi kecil telah dibuat yang memungkinkan Anda mengontrol robot EV3 dari komputer. Sayangnya, aplikasi serupa ada untuk NXT, tetapi EV3 mengabaikannya. Pada saat yang sama, mereka berguna dalam kompetisi robot yang dikendalikan, seperti robot sepak bola.

Aplikasinya dapat diunduh dan diinstal dari tautan ini: