Sadržaj:

Servodriver ploča sa Python-GUI-om i Arduinom: 5 koraka
Servodriver ploča sa Python-GUI-om i Arduinom: 5 koraka

Video: Servodriver ploča sa Python-GUI-om i Arduinom: 5 koraka

Video: Servodriver ploča sa Python-GUI-om i Arduinom: 5 koraka
Video: Глобальные тренды 2020 — от Agile до IoT / Java Tech Talk 2024, Novembar
Anonim
Servodriver ploča sa Python-GUI-om i Arduinom
Servodriver ploča sa Python-GUI-om i Arduinom

Prilikom izrade prototipova ili izgradnje modela aviona, često nailazite na problem da morate provjeriti servo hod ili postaviti servo u srednji položaj.

U slučaju da ne želite izgraditi cijeli RC sistem ili testirati, koliko daleko možete gurnuti servo ili gdje je sredina, onda je ova ploča za vas! Omogućava vam da pomaknete servo u određene položaje ili da putujemo naprijed -nazad.

Radi iznenađujuće dobro, čak i sa 6 servo pogona koji petljaju s jedne pozicije na drugu.

Također, to je lijep projekt za učenje o komunikaciji između Python-GUI-a i Arduina koristeći Serial.

Korak 1: Šta vam treba …

Za ovaj projekat trebat će vam sljedeće:

Hardver

  • Arduino nano sa kablom. Koristio sam klon, a Python kod zapravo očekuje CH340 čip klona
  • Ploča za izradu prototipova. 7x5cm je dovoljno
  • Nekih 2, 54 mm zaglavlja i igle
  • 1-6 servomotora
  • Napajanje za servomotore (koristio sam komplet baterija sa 4 baterije)

Softver

  • Python 3:
  • USB-upravljački program za čipove CH340: Samo potražite u Googleu upravljačke programe za upravljačke programe CH340
  • Arduino IDE:

Korak 2: Lemljenje ploče

Lemljenje ploče
Lemljenje ploče

Lemljenje je zapravo ravno prema Fritzingu na slici. Samo pazite da možete jednostavno priključiti servo pogone na 3-pinske redove.

  • 3-pinski redovi su spojeni na digitalni pin 3, 5, 6, 9, 10 i 11 Arduino nano.
  • Crvena žica je pričvršćena na 5V pin Arduina
  • Crna žica je spojena na GND-pin Arduina
  • Par pinova ispod 3-polnog reda namijenjen je za priključivanje tipičnog napajanja RC prijemnika, možete dodati konektore po želji, poput vijaka, XT-konektora, JST ili … ili …

Osobno volim redove ženskih zaglavlja u koje se stavlja Arduino, ali to ovisi o vama.

Imajte na umu da su kratki ženski zaglavlji kratkospojnici koji vam omogućuju napajanje servo uređaja pomoću 5V izvora Arduina za potrebe testiranja. Ako ga previše naprežete, Arduino će se resetirati i izgubiti pravi tempo. MORAJU se ukloniti prije priključivanja drugog izvora napajanja.

Korak 3: Postavljanje Arduina

Instalirajte Arduino IDE i bljesnite Arduino nano s priloženom skicom.

Korak 4: Postavljanje Pythona

Postavljanje Pythona
Postavljanje Pythona

Instalirajte Python 3 nakon preuzimanja. Provjerite opciju za kreiranje "PATH" -varijable.

Morate instalirati još dva paketa pomoću pipa. U tu svrhu pritisnite tipku "Windows", upišite "cmd" i pritisnite "enter". U naredbeni redak upišite sljedeće naredbe:

  • pip install serial
  • piip install pyserial
  • pip install tkinter

Kao što vidite, potrebni su mi moduli serijski, kao i pyserial, koji najvjerojatnije nije najefikasniji, jer bi pyserial trebao zamijeniti serijski. Ipak funkcionira i tek počinjem učiti;).

Otvorite Python-Script u IDE-u i pokrenite ga ili pokrenite direktno s terminala.

U padajućem izborniku možete birati između dva načina rada, "Idi ravno" i "Ping Pong":

  • Idi ravno: Unesite servo-poziciju u mikrosekundama u prvu kolonu i pritisnite "Start" da se servo pomakne na zadani položaj.
  • Ping Pong: Unesite donju granicu i gornju granicu u drugu i treću kolonu. To su donji i gornji položaj, između kojih će se servo kretati naprijed -nazad. U koloni "Vrijeme za ping pong" možete odrediti vrijeme u milisekundama koje će servo čekati kada dosegne gornju ili donju poziciju. Pritisnite "Start" i servo će se početi kretati naprijed -nazad, pritisnite "Stop" i servo će se zaustaviti.

Korak 5: Gdje se čarolija događa

Na kraju, ali ne i najmanje važno, želim istaknuti neke detalje u kodu za one koji žele ući u malo serijske komunikacije između Pythona i Arduina.

Šta se dešava u Python programu?

Prije svega, program provjerava šta je priključeno na COM portove u ovoj liniji i sprema ga na listu:

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

Zatim se petlja po popisu dok ne pronađe ozloglašeni CH340 čip, spremi ga i zatim uspostavi serijsku vezu nakon for-petlje. Imajte na umu da se for-loop prekida čim se pronađe prvi CH340.

za p u self. COMPortsList: ako je "CH340" u p [1]: # Tražim Arduino Clone self. COMPort = p [0] break else: pass self. Ser = serial. Serial (self. COMPort, 57600)

Serijska veza je uspostavljena sa COM-portom sa brzinom prijenosa od 57600.

I šta radi Arduino kod? Pa, budući da Arduino ima samo jedan COM-port, serijska veza je samo jedna linija:

Serial.begin (57600);

Sada možemo koristiti oba porta za komunikaciju. U ovom slučaju samo poruke s Pythona na Arduino. Poruke se ovdje šalju s Pythona. Serijska veza prema zadanim postavkama prenosi bajtove. To je ujedno i najbrži način slanja podataka, a koliko ja znam i dalje je prilično rasprostranjen. Dakle, ints za broj serva (tako da Arduino zna koji servo premjestiti) i položaj u mikrosekundama pretvaraju se u bajt.

Command = struct.pack ('> B', self. Place) # Int-varijabla "self. Place" je pretvorena u bajt

self. Ser.write (Command) # Zapisivanje bajta na naredbi serijskog porta = int (self. ServoPos.get ()) // 10 # Čitanje unosa iz polja i uključivanje int Command = struct.pack (' > B ', Command) # Pretvaranje int-a u bajtu self. Ser.write (Command) # Zapisivanje bajta na serijski port

Također, za raščlanjivanje podataka potrebno je vrijeme (na primjer tumačenje četiri bajta "1", "2", "3" i "0" kao int 1230, a ne kao četiri različita znaka) i bolje je to učiniti ne na Arduinu.

Sa Arduino strane, poslane informacije se prikupljaju na sljedeći način:

if (Serial.available ()> 1) {// Ako su serijski podaci dostupni, tada se unosi petlja c = Serial.read (); // Prvi bajt (broj serva) se sprema u varijablu Micros = Serial.read (); // Položaj serva je sačuvan ovdje Micros = Micros * 10; }

Preporučuje se: