Kontrol motor nirkabel dari Lego menggunakan Steam Controller



Ketika saya masih muda, saya selalu ingin memiliki perlengkapan Lego Technics untuk mengumpulkan segala macam barang keren dari mereka. Tank otonom dengan menara berputar yang menembakkan batu bata Lego. Tapi kemudian saya tidak punya set seperti itu.

Dan bahkan batu bata biasa dari Lego tidak. Saya hanya punya teman yang saudara lelakinya memiliki semua mainan mahal ini.

Dan sekarang saya memiliki putra seusianya. Dan dia membangun tank yang ... terus menempel dengan bodoh sampai menabrak dinding :)

Dan sekarang, saatnya telah tiba untuk ESP32 dan keajaiban besi solder - kita akan membuat remote control yang tepat untuk mereka!

Tidak, tentu saja, saya tahu tentang keberadaan remote seperti itu. Tapi tidak satu pun dari mereka yang cocok untukku. Mereka inframerah, dengan teknologi tahun 80-an, atau terlalu besar. Atau mahal. Dan yang paling penting - saya tidak bisa mengatakan kepada putra saya tentang salah satu dari mereka: "Saya melakukannya khusus untuk Anda!"

Jadi mari kita buat remote baru yang ditingkatkan untuk memerintah semua orang!



Bahan:

  • ESP32-WROOM-32D | WiFi, BLE, dan prosesor dengan I / O - cukup untuk mengendalikan dua motor dan LED .
  • DRV8833 | double H-bridge dengan tenaga yang cukup untuk motor.
  • TPS62162 | menurunkan tegangan ke 17 V, serta untuk hiburan saat menyolder casing WSON-8 2 × 2 mm
  • CP2104 | untuk pemrograman ESP32
  • . , Lego .

Semua ini akan ditempatkan di papan yang agak kecil - di sini adalah penampilannya di editor EasyEDA:



Kawat yang terlihat di foto header tidak diperlukan untuk memperbaiki kesalahan, tetapi untuk memasok daya dari USB. Mungkin tidak cukup untuk motor, tetapi, sayangnya, kontak dari China masih belum datang kepada saya. Karena itu, saya lebih dulu memeriksa pengoperasian LED. Untuk keindahan dalam foto, saya hanya memasang konektor dari motor di papan tulis.

Pada versi 1.1 board saya (tidak seperti versi 1.2, yang sudah ada di EasyEDA), tidak ada LED, jadi saya menyolder dua dioda anti-paralel ke output sehingga apa yang terjadi terlihat. Jika Anda melihat lebih dekat, video menunjukkan inklusi alternatif sepasang 0603 dioda, yang menunjukkan gerakan maju / mundur.



Sedangkan untuk panel kontrol, pada awalnya saya hanya ingin mengumpulkan papan tambahan dengan tombol dan ESP32 lainnya - remote control klasik.

Namun, kemudian saya ingat bahwa Steam Controllers memiliki Bluetooth Low Energy Mode (BLE). Saya memutuskan untuk mengatasi masalah ini, dan setelah beberapa jam saya belajar bagaimana menerima paket dari controller.

Untuk melakukan ini, cukup cari perangkat HID yang menyebut dirinya SteamController dan sambungkan. Dan kemudian gunakan layanan tidak berdokumen Valve dan beberapa perintah tidak berdokumen yang memungkinkan transfer paket.



Dan saya juga menemukan format laporan tidak berdokumen, yang saya parsing secara manual.



Setelah sekitar satu jam, arti dari flag dan nilai menjadi jelas bagi saya, dan saya berhasil mengedipkan LED menggunakan pengontrol Steam dan ESP32. ¯ \ _ (ツ) _ / ¯

File



v1.0: "pendekatan percobaan"
- opsi pertama yang saya pilih regulator tegangan yang salah. TPS62291 menaikkan tegangan hanya menjadi 6 V. Saya mengembangkan beberapa proyek secara paralel, dan saya lupa bahwa perangkat perlu bekerja dengan 9 V.

v1.1: "cukup baik"
- opsi ini terlihat di iklan, dan semuanya berfungsi

v1.2: "final"
- LED indikator yang ditambahkan ke output dan mengoptimalkan ukuran dan tata letak papan.

Video singkat berikutnya menunjukkan fase koneksi (1-3 detik setelah menyalakan daya) dan kontrol output motor. Konektor Lego belum terhubung. Ini akan pergi ke ruang kosong di sebelah konektor lain, ditandai dengan persegi panjang putih.



Anak saya sekarang secara teratur menggunakan pengontrol ini untuk mengontrol perangkat yang telah ia rakit.

Selama stress test, saya hanya menemukan satu masalah: Saya berpikir bahwa mode "pembusukan cepat" dari pengendara motor akan bekerja paling baik, tetapi karena itu, setelah beberapa detik operasi, kecepatan motor akan turun sangat banyak. Jadi saya mengubah kode sehingga digunakan "peluruhan lambat".



Sejauh ini saya tidak yakin bagaimana DRV bekerja dan mengapa motor pertama-tama berputar dengan cepat, dan kemudian setelah 10 detik mulai melambat secara bertahap. Mungkin MOSFET sedang memanas dan resistensi mereka meningkat terlalu banyak.



Saya harap contoh penggunaan Arduino ini dengan mudah menginspirasi orang lain dan memungkinkan mereka untuk memperkenalkan anak-anak mereka pada elektronik.

All Articles