Përmbajtje:

Servodriver-Board Me Python-GUI dhe Arduino: 5 hapa
Servodriver-Board Me Python-GUI dhe Arduino: 5 hapa

Video: Servodriver-Board Me Python-GUI dhe Arduino: 5 hapa

Video: Servodriver-Board Me Python-GUI dhe Arduino: 5 hapa
Video: Управление 16 серводвигателями с использованием модуля PCA9685 и Arduino V2 2024, Nëntor
Anonim
Servodriver-Board Me Python-GUI dhe Arduino
Servodriver-Board Me Python-GUI dhe Arduino

Kur bëni prototip ose ndërtoni aeroplanë model, shpesh hasni në problemin, që ju duhet të kontrolloni udhëtimin me servo ose t'i vendosni servot në pozicionin e mesëm.

Në rast se nuk e keni zakon të ndërtoni të gjithë sistemin tuaj RC ose testin, sa larg mund ta shtyni servon ose ku është pozicioni i mesëm, atëherë kjo tabelë është për ju! Kjo ju lejon të lëvizni servo në pozicione të caktuara ose le të udhëtojmë mbrapsht.

Punon çuditërisht mirë, edhe me 6 servos që garojnë nga një pozicion në tjetrin në lak.

Gjithashtu, është një projekt i bukur për të mësuar në lidhje me komunikimin midis Python-GUI dhe Arduino duke përdorur Serial.

Hapi 1: Çfarë ju nevojitet…

Për këtë projekt, do t'ju duhet sa vijon:

Hardware

  • Arduino nano me kabllo. Kam përdorur një klon, dhe kodi Python në fakt pret një chip CH340 të një kloni
  • Një tabelë prototipimi. 7x5cm është e mjaftueshme
  • Disa kokë dhe kunja 2, 54 mm
  • 1-6 servos
  • Furnizimi me energji elektrike për servos (kam përdorur një paketë me 4 bateri)

Softuer

  • Python 3:
  • Një Shofer USB për patate të skuqura CH340: Thjesht google për drejtuesit për drejtuesit CH340
  • Arduino IDE:

Hapi 2: Saldimi i Bordit

Saldimi i Bordit
Saldimi i Bordit

Lidhja është në të vërtetë drejtpërdrejt sipas Fritzing në foto. Vetëm sigurohuni që ju mund t'i lidhni servot lehtë me rreshtat me 3 kunja.

  • Rreshtat me 3 kunja janë bashkangjitur në pinin dixhital 3, 5, 6, 9, 10 dhe 11 të Arduino nano.
  • Teli i kuq është ngjitur në pinin 5V të Arduino
  • Teli i zi është i lidhur me pin-in GND të Arduino
  • Çifti i kunjave poshtë rreshtave me 3 kunja kanë për qëllim të lidhin një furnizim me energji tipike të marrësit RC, mund të shtoni lidhje si të doni, si vidhosja e terminaleve, lidhësit XT, JST ose… ose…

Personalisht, më pëlqejnë rreshtat e kokave femra për të vendosur Arduino -n, por kjo varet nga ju.

Ju lutemi vini re, se titujt e shkurtuar të femrave janë një kërcyes, që ju lejojnë të furnizoni servo duke përdorur burimin 5V të Arduino për qëllime testimi. Nëse e tendosni shumë, Arduino do të rivendoset dhe do të humbasë ritmin e duhur. Ato DUHET të hiqen, para se të lidhni një furnizim tjetër me energji elektrike.

Hapi 3: Vendosja e Arduino

Instaloni Arduino IDE dhe ndizni Arduino nano me skicën e bashkangjitur.

Hapi 4: Konfigurimi i Python

Vendosja e Python
Vendosja e Python

Instaloni Python 3 pasi ta keni shkarkuar. Sigurohuni që të kontrolloni opsionin për të krijuar një ndryshore "PATH".

Ju duhet të instaloni dy pako të tjera duke përdorur pip. Për ta bërë këtë, shtypni butonin "Windows", shkruani "cmd" dhe shtypni "enter". Në komandën e shpejtë shkruani komandat e mëposhtme:

  • serial i instalimit të pip
  • piip install pyserial
  • pip instaloni tkinter

Siç mund ta shihni, unë kam nevojë për modulet serik, si dhe pyserial, i cili ka shumë të ngjarë të mos jetë më efikas, pasi pyserial duhet të zëvendësojë serialin. Sidoqoftë funksionon dhe unë sapo kam filluar të mësoj;).

Hapni Python-Script në IDE dhe drejtojeni atë, ose drejtojeni direkt nga terminali.

Në menunë zbritëse, ju mund të zgjidhni midis dy mënyrave, "Shko Drejt" dhe "Ping Pong":

  • Shkoni Drejt: Shkruani një Servo-Position në mikrosekonda në kolonën e parë dhe shtypni "Start" për ta bërë servo-në të lëvizë në pozicionin e specifikuar.
  • Ping Pong: Futni një kufi të poshtëm dhe një kufi të sipërm në kolonën e dytë dhe të tretë. Këto janë pozicionet e poshtme dhe të sipërme, midis të cilave servo do të kthehet mbrapsht. Në kolonën "Koha e Ping Pong" mund të specifikoni një kohë në milisekonda, që servo do të presë kur të ketë arritur pozicionin e sipërm ose të poshtëm. Klikoni "Start" dhe servo do të fillojë të lëvizë mbrapsht, goditni "Stop" dhe servo do të ndalet.

Hapi 5: Ku Ndodh Magjia

E fundit por jo më pak e rëndësishme, unë dua të theksoj disa nga detajet në kodin për ata që duan të hyjnë në pak komunikim serik midis Python dhe Arduino.

Tani, çfarë ndodh në programin Python?

Para së gjithash, programi kontrollon se çfarë i bashkëngjitet portave COM në këtë linjë dhe e ruan atë në një listë:

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

Pastaj kalon nëpër listë derisa të gjejë një çip famëkeq CH340, e ruan atë dhe më pas krijon një lidhje serike pas lakut for. Vini re, se for-loop prishet sapo të gjendet CH340 i parë.

për p në vetvete. COMPortsList: nëse "CH340" në p [1]: # Duke kërkuar për një Arduino Clone self. COMPort = p [0] pushim tjetër: kalo veten. Ser = serial. Serial (self. COMPort, 57600)

Lidhja serike krijohet me portën COM me një baudrate 57600.

Dhe çfarë bën kodi Arduino? Epo, meqenëse Arduino ka vetëm një port COM, lidhja serike është vetëm një linjë:

Serial.filloj (57600);

Tani, ne mund të përdorim të dy portet për të komunikuar. Në këtë rast, vetëm mesazhe nga Python në Arduino. Mesazhet dërgohen këtu nga Python. Lidhja serike transmeton byte si parazgjedhje. Kjo është gjithashtu mënyra më e shpejtë e dërgimit të të dhënave dhe me sa di unë është ende mjaft e përhapur. Pra, ints për numrin e servo (kështu që Arduino e di se cilin servo të lëvizë) dhe pozicioni në mikrosekonda shndërrohen në një bajt.

Command = struct.pack ('> B', self. Place) # Ndryshorja int "self. Place" kthehet në një bajt

self. Ser.write (Command) # Shkrimi i bajtit në Serial-Port Command = int (self. ServoPos.get ()) // 10 # Leximi i hyrjes nga fusha dhe kthimi në int Command = struct.pack (' > B ', Komanda) # Kthimi i int-it në një byte. Ser.write (Command) # Shkrimi i bajtit në Portën Seriale

Gjithashtu, analizimi i të dhënave kërkon kohë (për shembull interpretimi i katër bajtëve "1", "2", "3" dhe "0" si int 1230, jo si katër karaktere të ndryshme) dhe është më mirë ta bëni këtë jo në Arduino.

Nga ana Arduino, informacioni i dërguar merret si më poshtë:

nëse (Serial.disponueshëm ()> 1) {// Nëse të dhënat serike janë të disponueshme, atëherë laku futet c = Serial.read (); // Bajti i parë (numri i servo) ruhet në një ndryshore Micros = Serial.read (); // Pozicioni i servo -s ruhet këtu Micros = Micros * 10; }

Recommended: