Isi kandungan:

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: Tutorial Pemrograman Arduino [Medium] - Tutorial Servo Motor Arduino Dengan Python dan Firmata 2024, November
Anonim
Servodriver-Board Dengan Python-GUI dan Arduino
Servodriver-Board Dengan Python-GUI dan Arduino

Semasa melakukan prototaip atau membina pesawat terbang model, anda sering menemui masalah, bahawa anda harus memeriksa perjalanan servo atau mengatur servo ke posisi pertengahan.

Sekiranya anda tidak mahu membina keseluruhan sistem RC atau ujian anda, sejauh mana anda boleh mendorong servo atau di mana kedudukan pertengahan, maka papan ini sesuai untuk anda! Ini membolehkan anda memindahkan servo ke kedudukan yang ditentukan atau mari kita pergi dan balik.

Ia berfungsi dengan baik, walaupun dengan 6 servo yang berlumba dari satu kedudukan ke kedudukan yang lain dalam satu pusingan.

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

Langkah 1: Apa yang Anda Perlu …

Untuk projek ini, anda memerlukan perkara berikut:

Perkakasan

  • Arduino nano dengan kabel. Saya menggunakan klon, dan kod Python sebenarnya menjangkakan CH340-chip klon
  • Papan prototaip. 7x5cm sudah cukup
  • Sebilangan kepala dan pin 2, 54mm
  • 1-6 servos
  • Bekalan kuasa untuk servos (saya menggunakan bateri dengan 4 bateri)

Perisian

  • Python 3:
  • Pemacu USB untuk cip CH340: Hanya google untuk pemacu untuk pemandu CH340
  • Arduino IDE:

Langkah 2: Memateri Papan

Memateri Lembaga
Memateri Lembaga

Pematerian itu betul-betul lurus ke depan mengikut Fritzing pada gambar. Pastikan, anda boleh menghubungkan servo dengan mudah ke baris 3-pin.

  • Baris 3-pin dilampirkan pada pin digital 3, 5, 6, 9, 10 dan 11 dari Arduino nano.
  • Kawat merah dilekatkan pada pin 5V Arduino
  • Kawat hitam disambungkan ke pin GND Arduino
  • Pasangan pin di bawah baris 3-pin dimaksudkan untuk memasang bekalan kuasa penerima RC biasa, anda boleh menambahkan penyambung yang anda suka, seperti terminal skru, Penyambung XT, JST atau… atau…

Secara peribadi, saya suka barisan tajuk wanita memasukkan Arduino, tetapi itu terpulang kepada anda.

Harap diperhatikan, bahawa header wanita pendek adalah pelompat, yang membolehkan anda membekalkan servo menggunakan sumber 5V Arduino untuk tujuan ujian. Sekiranya anda terlalu kuat, Arduino akan menetapkan semula dan kehilangan langkah yang betul. Mereka HARUS dikeluarkan, sebelum memasang bekalan kuasa yang lain.

Langkah 3: Menyiapkan Arduino

Pasang Arduino IDE dan nyalakan Arduino nano dengan lakaran yang dilampirkan.

Langkah 4: Menyiapkan Python

Menyiapkan Python
Menyiapkan Python

Pasang Python 3 setelah memuat turunnya. Pastikan untuk memilih pilihan untuk membuat "PATH" -berubah.

Anda perlu memasang dua pakej lagi menggunakan pip. Untuk itu, tekan kekunci "Windows", ketik "cmd" dan tekan "enter". Dalam command prompt ketik perintah berikut:

  • memasang siri pip
  • piip pasang pyserial
  • pip memasang tkinter

Seperti yang anda lihat, saya memerlukan modul bersiri dan juga pyserial, yang kemungkinan besar tidak paling berkesan, kerana pyserial harus menggantikan siri. Walaupun begitu ia berjaya dan saya baru mula belajar;).

Buka Skrip Python di IDE dan jalankan, atau jalankan terus dari terminal.

Dalam menu lungsur turun, anda boleh memilih antara dua mod, "Go Straight" dan "Ping Pong":

  • Pergi Lurus: Masukkan Servo-Position dalam mikrodetik pada lajur pertama dan tekan "Mula" untuk membuat servo bergerak ke kedudukan yang ditentukan.
  • Ping Pong: Masukkan sempadan bawah dan batas atas pada lajur kedua dan ketiga. Itu adalah kedudukan bawah dan atas, di mana servo akan kembali dan ke sana kemari. Dalam lajur "Waktu Ping Pong" anda dapat menentukan waktu dalam milisaat, bahawa servo akan menunggu ketika ia telah mencapai posisi atas atau bawah. Tekan "Mula" dan servo akan mula bergerak mundur, tekan "Stop" dan servo akan berhenti.

Langkah 5: Tempat Sihir Berlaku

Akhir sekali, saya ingin menunjukkan beberapa butiran dalam kod mereka, yang ingin memasuki sedikit komunikasi bersiri antara Python dan Arduino.

Sekarang, apa yang berlaku dalam program Python?

Pertama sekali, program memeriksa, apa yang dilampirkan ke port COM di baris ini dan menyimpannya ke senarai:

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

Kemudian melalui senarai sehingga ia menemui cip CH340 yang terkenal, menyimpannya dan kemudian membuat sambungan bersiri selepas gelung untuk. Perhatikan, bahawa untuk gelung putus sebaik sahaja CH340 pertama dijumpai.

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

Sambungan bersiri dibuat dengan port COM dengan kadar baud 57600.

Dan apa yang dilakukan oleh kod Arduino? Oleh kerana Arduino hanya mempunyai satu COM-Port, sambungan bersiri hanya satu talian:

Serial.begin (57600);

Sekarang, kita boleh menggunakan kedua-dua port untuk berkomunikasi. Dalam kes ini, hanya mesej dari Python ke Arduino. Mesej dihantar di sini dari Python. Sambungan bersiri menghantar bait sebagai lalai. Itu juga cara terpantas untuk menghantar data dan sejauh yang saya tahu juga masih cukup meluas. Jadi int untuk bilangan servo (sehingga Arduino tahu servo mana yang hendak dipindahkan) dan kedudukan dalam mikrodetik berubah menjadi bait.

Command = struct.pack ('> B', self. Place) # "self. Place" pemboleh ubah int berubah menjadi bait

self. Ser.write (Command) # Menulis byte pada Serial-Port Command = int (self. ServoPos.get ()) // 10 # Membaca Input dari medan dan membalikkan int Command = struct.pack (' > B ', Command) # Menghidupkan int dalam diri byte. Ser.write (Command) # Menulis bait pada Serial-Port

Juga, penguraian data memerlukan masa (misalnya menafsirkan empat bait "1", "2", "3" dan "0" sebagai int 1230, bukan sebagai empat watak yang berbeza) dan lebih baik melakukannya bukan di Arduino.

Di sisi Arduino, maklumat yang dihantar diambil seperti berikut:

if (Serial.available ()> 1) {// Sekiranya data bersiri tersedia, maka gelung dimasukkan c = Serial.read (); // Byte pertama (bilangan servo) disimpan ke pembolehubah Micros = Serial.read (); // Kedudukan servo disimpan di sini Mikro = Mikro * 10; }

Disyorkan: