Cuprins:

Servodriver-Board Cu Python-GUI și Arduino: 5 pași
Servodriver-Board Cu Python-GUI și Arduino: 5 pași

Video: Servodriver-Board Cu Python-GUI și Arduino: 5 pași

Video: Servodriver-Board Cu Python-GUI și Arduino: 5 pași
Video: Complete guide to PCA9685 16 channel Servo controller for Arduino with code Version of 5 ( V1) 2024, Noiembrie
Anonim
Servodriver-Board Cu Python-GUI și Arduino
Servodriver-Board Cu Python-GUI și Arduino

Când faceți prototipuri sau construiți modele de avioane, întâlniți adesea problema, că trebuie să verificați cursa servo sau să setați servo-urile în poziția mijlocie.

În cazul în care nu obișnuiești să-ți construiești întregul sistem RC sau să testezi, cât de departe poți împinge servo-ul sau unde este poziția mediană, atunci această placă este pentru tine! Vă permite să mutați servo în poziții specificate sau să călătorim înainte și înapoi.

Funcționează surprinzător de bine, chiar și cu 6 servo-uri care aleargă dintr-o poziție în alta în buclă.

De asemenea, este un proiect frumos pentru a afla despre comunicarea dintre Python-GUI și Arduino folosind Serial.

Pasul 1: De ce aveți nevoie …

Pentru acest proiect, veți avea nevoie de următoarele:

Hardware

  • Arduino nano cu cablu. Am folosit o clonă, iar codul Python așteaptă de fapt un chip CH340 al unei clone
  • O placă de prototipare. 7x5cm este suficient
  • Unele anteturi și pini de 2, 54mm
  • 1-6 servo
  • Alimentare pentru servomotoare (am folosit un pachet de baterii cu 4 baterii)

Software

  • Python 3:
  • Un driver USB pentru chips-urile CH340: Doar google pentru driverele pentru driverele CH340
  • ID Arduino:

Pasul 2: lipirea bordului

Lipind tabloul
Lipind tabloul

Lipirea este de fapt simplă, în conformitate cu Fritzing din imagine. Doar asigurați-vă că puteți conecta servo-urile cu ușurință la rândurile cu 3 pini.

  • Rândurile cu 3 pini sunt atașate la pinul digital 3, 5, 6, 9, 10 și 11 al nano Arduino.
  • Firul roșu este atașat la pinul de 5V al Arduino
  • Firul negru este conectat la pinul GND al Arduino
  • Perechea de pini de sub rândurile cu 3 pini este menită să atașeze o sursă de alimentare tipică a receptorului RC, puteți adăuga conectori după cum doriți, cum ar fi bornele de înșurubare, conectorii XT, JST sau … sau …

Personal, îmi plac rândurile de antete de sex feminin pentru a introduce Arduino, dar asta depinde de tine.

Vă rugăm să rețineți că anteturile feminine scurtcircuitate sunt un jumper, care vă permit să furnizați servo utilizând sursa de 5V a Arduino în scopuri de testare. Dacă îl strângeți prea mult, Arduino va reseta și va pierde ritmul potrivit. Acestea TREBUIE îndepărtate, înainte de a atașa o altă sursă de alimentare.

Pasul 3: Configurarea Arduino

Instalați Arduino IDE și blocați Arduino nano cu schița atașată.

Pasul 4: Configurarea Python

Configurarea Python
Configurarea Python

Instalați Python 3 după descărcare. Asigurați-vă că bifați opțiunea pentru a crea o variabilă „PATH”.

Trebuie să instalați încă două pachete folosind pip. Pentru aceasta, apăsați tasta „Windows”, tastați „cmd” și apăsați „enter”. În promptul de comandă tastați următoarele comenzi:

  • pip instalează serial
  • piip instalează pyserial
  • pip install tkinter

După cum puteți vedea, am nevoie de module seriale, precum și pyserial, ceea ce cel mai probabil nu este cel mai eficient, deoarece pyserial ar trebui să înlocuiască serialul. Cu toate acestea funcționează și abia încep să învăț;).

Deschideți Python-Script în IDE și rulați-l sau rulați-l direct de la terminal.

În meniul derulant, puteți alege între două moduri, „Go Straight” și „Ping Pong”:

  • Mergeți drept: introduceți o servo-poziție în microsecunde în prima coloană și apăsați „Start” pentru a face servo-ul să se deplaseze în poziția specificată.
  • Ping Pong: introduceți o limită inferioară și una superioară în a doua și a treia coloană. Aceasta este poziția inferioară și superioară, între care servo va merge înainte și înapoi. În coloana „Ping Pong Time” puteți specifica un timp în milisecunde, pe care servo-ul îl va aștepta când a ajuns la poziția superioară sau inferioară. Apăsați „Start” și servo-ul va începe să se miște înainte și înapoi, apăsați „Stop” și servo-ul se va opri.

Pasul 5: Unde se întâmplă magia

Nu în ultimul rând, vreau să subliniez câteva dintre detaliile din cod pentru cei care doresc să intre într-o comunicare în serie între Python și Arduino.

Acum, ce se întâmplă în programul Python?

În primul rând, programul verifică ce este atașat la porturile COM din această linie și îl salvează într-o listă:

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

Apoi trece prin listă până când găsește un chip CH340 notoriu, îl salvează și apoi stabilește o conexiune serială după bucla for. Rețineți că bucla for se întrerupe imediat ce este găsit primul CH340.

pentru p în self. COMPortsList: dacă "CH340" în p [1]: # În căutarea unei clone Arduino self. COMPort = p [0] break else: pass self. Ser = serial. Serial (self. COMPort, 57600)

Conexiunea serială este stabilită cu portul COM cu o viteză de transmisie de 57600.

Și ce face codul Arduino? Ei bine, deoarece Arduino are un singur port COM, conexiunea serială este doar o linie:

Serial.begin (57600);

Acum, putem folosi ambele porturi pentru a comunica. În acest caz, numai mesajele de la Python către Arduino. Mesajele sunt trimise aici din Python. Conexiunea serială transmite octeți în mod implicit. Acesta este, de asemenea, cel mai rapid mod de a trimite date și, din câte știu, este încă destul de răspândit. Deci, inte pentru numărul de servo (deci Arduino știe ce servo să se deplaseze) și poziția în microsecunde sunt transformate într-un octet.

Command = struct.pack ('> B', self. Place) # Variabila int "self. Place" este transformată într-un octet

self. Ser.write (Comandă) # Scrierea octetului pe Comanda Serial-Port = int (self. ServoPos.get ()) // 10 # Citirea intrării din câmp și transformarea int Comandă = struct.pack (' > B ', Comandă) # Întoarcerea int într-un octet self. Ser.write (Comandă) # Scrierea octetului pe portul serial

De asemenea, analizarea datelor necesită timp (de exemplu, interpretarea a patru octeți „1”, „2”, „3” și „0” ca int 1230, nu ca patru caractere diferite) și este mai bine să faceți acest lucru nu pe Arduino.

Pe partea Arduino, informațiile trimise sunt preluate după cum urmează:

if (Serial.available ()> 1) {// Dacă datele seriale sunt disponibile, atunci se introduce bucla c = Serial.read (); // Primul octet (numărul de servo) este salvat într-o variabilă Micros = Serial.read (); // Poziția servo-ului este salvată aici Micros = Micros * 10; }

Recomandat: