Daftar Isi:

Servodriver-Board Dengan Python-GUI dan Arduino: 5 Langkah
Servodriver-Board Dengan Python-GUI dan Arduino: 5 Langkah

Video: Servodriver-Board Dengan Python-GUI dan Arduino: 5 Langkah

Video: Servodriver-Board Dengan Python-GUI dan Arduino: 5 Langkah
Video: Gesture-Controlled Servo with Python and Arduino #electronics #arduinotraining 2024, November
Anonim
Servodriver-Board Dengan Python-GUI dan Arduino
Servodriver-Board Dengan Python-GUI dan Arduino

Saat melakukan prototyping atau membangun model pesawat terbang, Anda sering menemukan masalah, bahwa Anda harus memeriksa perjalanan servo atau mengatur servos ke posisi tengah.

Jika Anda tidak ingin membangun seluruh sistem atau pengujian RC Anda, seberapa jauh Anda dapat mendorong servo atau di mana posisi tengahnya, maka papan ini cocok untuk Anda! Hal ini memungkinkan Anda untuk memindahkan servo ke posisi tertentu atau mari kita melakukan perjalanan bolak-balik.

Ini bekerja dengan sangat baik, bahkan dengan 6 servos yang berpacu dari satu posisi ke posisi lain dalam loop.

Juga, ini adalah proyek yang bagus untuk belajar tentang komunikasi antara Python-GUI dan Arduino menggunakan Serial.

Langkah 1: Yang Anda Butuhkan…

Untuk proyek ini, Anda memerlukan yang berikut:

Perangkat keras

  • Arduino nano dengan kabel. Saya menggunakan klon, dan kode Python sebenarnya mengharapkan chip CH340 dari klon
  • Sebuah papan prototipe. 7x5cm cukup
  • Beberapa header dan pin 2, 54mm
  • 1-6 servo
  • Catu daya untuk servos (saya menggunakan baterai dengan 4 baterai)

Perangkat lunak

  • Python 3:
  • USB-Driver untuk CH340-chip: Hanya google untuk driver untuk driver CH340
  • Arduino IDE:

Langkah 2: Menyolder Papan

Menyolder Papan
Menyolder Papan

Penyolderan sebenarnya lurus ke depan sesuai dengan Fritzing pada gambar. Pastikan saja, bahwa Anda dapat menghubungkan servos dengan mudah ke 3-pin-baris.

  • 3-pin-baris terpasang ke pin digital 3, 5, 6, 9, 10 dan 11 dari Arduino nano.
  • Kabel merah terpasang ke pin 5V Arduino
  • Kabel hitam terhubung ke pin GND Arduino
  • Sepasang pin di bawah 3-pin-baris dimaksudkan untuk memasang catu daya penerima RC biasa, Anda dapat menambahkan konektor sesuka Anda, seperti terminal sekrup, Konektor XT, JST atau… atau…

Secara pribadi, saya suka deretan header wanita untuk memasang Arduino, tapi itu terserah Anda.

Harap dicatat, bahwa header perempuan korsleting adalah jumper, yang memungkinkan Anda memasok servo menggunakan sumber 5V Arduino untuk tujuan pengujian. Jika Anda terlalu memaksakannya, Arduino akan mengatur ulang dan kehilangan kecepatan yang tepat. Mereka HARUS dilepas, sebelum memasang catu daya lain.

Langkah 3: Menyiapkan Arduino

Instal Arduino IDE dan flash Arduino nano dengan sketsa terlampir.

Langkah 4: Menyiapkan Python

Menyiapkan Python
Menyiapkan Python

Instal Python 3 setelah Mengunduhnya. Pastikan untuk mencentang opsi untuk membuat variabel "PATH".

Anda perlu menginstal dua paket lagi menggunakan pip. Untuk itu, tekan tombol "Windows", ketik "cmd" dan tekan "enter". Di command prompt ketik perintah berikut:

  • pip instal serial
  • piip instal pyserial
  • pip instal tkinter

Seperti yang Anda lihat, saya memerlukan modul serial serta pyserial, yang kemungkinan besar bukan yang paling efisien, karena pyserial harus menggantikan serial. Namun demikian itu berhasil dan saya baru mulai belajar;).

Buka Python-Script di IDE dan jalankan, atau jalankan langsung dari terminal.

Di menu tarik-turun, Anda dapat memilih antara dua mode, "Langsung" dan "Ping Pong":

  • Go Straight: Masukkan Posisi Servo dalam mikrodetik di kolom pertama dan tekan "Mulai" untuk membuat servo bergerak ke posisi yang ditentukan.
  • Ping Pong: Masukkan batas bawah dan batas atas di kolom kedua dan ketiga. Itu adalah posisi bawah dan atas, di mana servo akan bolak-balik. Pada kolom "Waktu Ping Pong" Anda dapat menentukan waktu dalam milidetik, bahwa servo akan menunggu ketika telah mencapai posisi atas atau bawah. Tekan "Mulai" dan servo akan mulai bergerak maju mundur, tekan "Berhenti" dan servo akan berhenti.

Langkah 5: Dimana Keajaiban Terjadi

Last but not least, saya ingin menunjukkan beberapa detail dalam kode untuk mereka yang ingin masuk ke sedikit komunikasi serial antara Python dan Arduino.

Sekarang, apa yang terjadi dalam program Python?

Pertama-tama, program memeriksa, apa yang dilampirkan ke port COM di baris ini dan menyimpannya ke daftar:

self. COMPortsList = daftar(serial.tools.list_ports.comports())

Kemudian loop melalui daftar sampai menemukan chip CH340 yang terkenal, menyimpannya dan kemudian membuat koneksi serial setelah for-loop. Perhatikan, bahwa for-loop putus segera setelah CH340 pertama ditemukan.

untuk p di self. COMPortsList: if "CH340" di p[1]: # Mencari Arduino Clone self. COMPort = p[0] break else: pass self. Ser = serial. Serial(self. COMPort, 57600)

Koneksi serial dibuat dengan port COM dengan baudrate 57600.

Dan apa yang dilakukan kode Arduino? Nah, karena Arduino hanya memiliki satu COM-Port, koneksi serial hanya satu baris:

Serial.begin(57600);

Sekarang, kita dapat menggunakan kedua port untuk berkomunikasi. Dalam hal ini, hanya pesan dari Python ke Arduino. Pesan dikirim ke sini dari Python. Koneksi serial mentransmisikan byte sebagai default. Itu juga cara pengiriman data tercepat dan sejauh yang saya tahu juga masih cukup luas. Jadi int untuk jumlah servo (agar Arduino tahu servo mana yang harus dipindahkan) dan posisi dalam mikrodetik diubah menjadi byte.

Command = struct.pack('>B', self. Place) # Variabel int "self. Place" diubah menjadi byte

self. Ser.write(Command) # Menulis byte pada Serial-Port Command = int(self. ServoPos.get())//10 # Membaca Input dari field dan mengaktifkan int Command = struct.pack(' >B', Command) # Mengubah int menjadi byte self. Ser.write(Command) # Menulis byte pada Serial-Port

Juga, penguraian data membutuhkan waktu (misalnya menafsirkan empat byte "1", "2", "3" dan "0" sebagai int 1230, bukan sebagai empat karakter yang berbeda) dan lebih baik melakukannya bukan di Arduino.

Di sisi Arduino, informasi yang dikirim diambil sebagai berikut:

if(Serial.available()>1){ // Jika data serial tersedia, maka loop dimasukkan c = Serial.read(); // Byte pertama (jumlah servo) disimpan ke variabel Micros = Serial.read(); // Posisi servo disimpan disini Micros = Micros * 10; }

Direkomendasikan: