Sisukord:

Servodriver-plaat Python-GUI ja Arduino abil: 5 sammu
Servodriver-plaat Python-GUI ja Arduino abil: 5 sammu

Video: Servodriver-plaat Python-GUI ja Arduino abil: 5 sammu

Video: Servodriver-plaat Python-GUI ja Arduino abil: 5 sammu
Video: Flipper Zero Alternative? - m5stickC plus 🤯 #shorts 2024, November
Anonim
Servodriver-plaat Python-GUI ja Arduino abil
Servodriver-plaat Python-GUI ja Arduino abil

Prototüüpide tegemisel või lennukimudelite ehitamisel puutute sageli kokku probleemiga, et peate kontrollima servosõitu või seadma servod keskasendisse.

Kui te ei kavatse kogu oma RC-süsteemi üles ehitada ega katsetada, kui kaugele saate servot lükata või kus on keskpositsioon, siis on see plaat teie jaoks! See võimaldab teil servo liigutada määratud asenditesse või reisida edasi -tagasi.

See töötab üllatavalt hästi, isegi kuue servoga, mis liiguvad silmuses ühelt positsioonilt teisele.

Samuti on see tore projekt õppida Python-GUI ja Arduino vahelist suhtlust Seriali abil.

Samm: mida vajate…

Selle projekti jaoks vajate järgmist:

Riistvara

  • Arduino nano kaabliga. Ma kasutasin klooni ja Pythoni kood ootab tegelikult klooni CH340-kiipi
  • Prototüüpimisplaat. Piisab 7x5 cm
  • Umbes 2, 54 mm päised ja tihvtid
  • 1-6 servot
  • Servode toiteallikas (kasutasin 4 patareiga akupakki)

Tarkvara

  • Python 3:
  • USB-draiver CH340-kiipidele: googeldage lihtsalt CH340 draiverite jaoks
  • Arduino IDE:

2. samm: plaadi jootmine

Tahvli jootmine
Tahvli jootmine

Jootmine on pildil oleva Fritzingi sõnul tegelikult otse edasi. Lihtsalt veenduge, et saate servod hõlpsalt 3-kontaktiliste ridade külge ühendada.

  • 3-pin-ridad on kinnitatud Arduino nano digitaalsete tihvtide 3, 5, 6, 9, 10 ja 11 külge.
  • Punane juhe on kinnitatud Arduino 5V-kontakti külge
  • Must juhe on ühendatud Arduino GND-tihvtiga
  • 3-kontaktiliste ridade all olevad tihvtide paarid on mõeldud tüüpilise RC-vastuvõtja toiteallika kinnitamiseks, saate lisada pistikuid, nagu soovite, nagu kruviklemmid, XT-pistikud, JST või… või…

Mulle isiklikult meeldivad rida naissoost päiseid, kuhu Arduino panna, aga see on teie otsustada.

Pange tähele, et lühikesed naissoost päised on hüppaja, mis võimaldab teil tarnida servot, kasutades testimiseks Arduino 5 V allikat. Kui pingutate seda liiga palju, lähtestab Arduino ja kaotab õige tempo. Need tuleb enne teise toiteallika ühendamist eemaldada.

Samm: seadistage Arduino

Paigaldage Arduino IDE ja välgutage Arduino nano koos lisatud visandiga.

Samm: Pythoni seadistamine

Pythoni seadistamine
Pythoni seadistamine

Pärast allalaadimist installige Python 3. Kontrollige kindlasti "PATH" muutuja loomise võimalust.

Peate pip abil installima veel kaks paketti. Selleks vajutage klahvi "Windows", tippige "cmd" ja vajutage "enter". Tippige käsureale järgmised käsud:

  • pip install jada
  • piip install pyserial
  • pip paigaldada tkinter

Nagu näete, vajan nii moodulite seeriat kui ka pyserialit, mis pole tõenäoliselt kõige tõhusam, kuna pyserial peaks asendama seeria. Sellest hoolimata see toimib ja ma alles hakkan õppima;).

Avage Python-Script IDE-s ja käivitage see või käivitage see otse terminalist.

Rippmenüüst saate valida kahe režiimi vahel: "Mine otse" ja "Ping Pong":

  • Minge otse: sisestage esimeses veerus servoasend mikrosekundites ja vajutage "Start", et servo liiguks määratud asendisse.
  • Pingpong: sisestage teise ja kolmanda veeru alumine ja ülemine piir. See on alumine ja ülemine asend, mille vahel servo liigub edasi -tagasi. Veerus "Ping Pong Time" saate määrata aja millisekundites, mida servo ootab, kui on jõudnud ülemisse või alumisse asendisse. Vajuta "Start" ja servo hakkab edasi -tagasi liikuma, vajuta "Stopp" ja servo peatub.

Samm: kus maagia toimub

Viimaseks, kuid mitte vähem tähtsaks, tahan juhtida tähelepanu mõnele üksikasjale koodis neile, kes soovivad siseneda Pythoni ja Arduino vahelisse jadasuhtlusse.

Mis juhtub Pythoni programmis?

Esiteks kontrollib programm, mis on selle rea COM-portide külge kinnitatud, ja salvestab selle loendisse:

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

Seejärel loeb see loendit, kuni leiab kurikuulsa CH340-kiibi, salvestab selle ja loob seejärel pärast for-loopi jadaühenduse. Pange tähele, et tsükkel katkeb kohe, kui esimene CH340 on leitud.

p jaoks self. COMPortsList: kui "CH340" p [1]: # Otsin Arduino klooni ise. COMPort = p [0] break else: pass self. Ser = serial. Serial (self. COMPort, 57600)

Jadaühendus luuakse COM-pordiga, mille andmeedastuskiirus on 57600.

Ja mida teeb Arduino kood? Noh, kuna Arduinol on ainult üks COM-port, on jadaühendus ainult üks rida:

Seriaalne algus (57600);

Nüüd saame mõlemat pordi kasutada suhtlemiseks. Sel juhul ainult sõnumid Pythonist Arduinole. Sõnumid saadetakse siia Pythonist. Jadaühendus edastab vaikimisi baite. See on ka kiireim viis andmete saatmiseks ja minu teada on see endiselt üsna laialt levinud. Seega muudetakse servo numbri (nii Arduino teab, millist servot liigutada) ja positsiooni mikrosekundites baitideks.

Command = structure.pack ('> B', self. Place) # Int-muutuja "self. Place" muudetakse baidiks

self. Ser.write (käsk) # Baidi kirjutamine käsk Serial-Port Command = int (self. ServoPos.get ()) // 10 # Sisendi lugemine väljalt ja sisselülitamine int Command = structure.pack (' > B ', käsk) # Int muutmine baitides. Ser.write (käsk) # Baidi kirjutamine jadapordile

Samuti võtab andmete parsimine aega (näiteks nelja baidi "1", "2", "3" ja "0" tõlgendamine kui int 1230, mitte nelja erineva märgina) ja parem on seda mitte teha Arduino puhul.

Arduino poolel saadetakse saadetud teave järgmiselt:

if (Serial.available ()> 1) {// Kui seeriaandmed on saadaval, sisestatakse tsükkel c = Serial.read (); // Esimene bait (servo arv) salvestatakse muutujale Micros = Serial.read (); // Servo asukoht salvestatakse siia Micros = Micros * 10; }

Soovitan: