Turinys:

„Servodriver-Board“su „Python-GUI“ir „Arduino“: 5 žingsniai
„Servodriver-Board“su „Python-GUI“ir „Arduino“: 5 žingsniai

Video: „Servodriver-Board“su „Python-GUI“ir „Arduino“: 5 žingsniai

Video: „Servodriver-Board“su „Python-GUI“ir „Arduino“: 5 žingsniai
Video: How To Control A Standard Servo With Raspberry Pi 2024, Lapkritis
Anonim
„Servodriver-Board“su „Python-GUI“ir „Arduino“
„Servodriver-Board“su „Python-GUI“ir „Arduino“

Kurdami prototipus ar kurdami lėktuvų modelius, dažnai susiduriate su problema, kad turite patikrinti servo judėjimą arba nustatyti servo vidurinę padėtį.

Jei nenorite sukurti visos RC sistemos ar išbandyti, kiek galite pastumti servo arba kur yra vidurinė padėtis, ši lenta yra kaip tik jums! Tai leidžia jums perkelti servo į nurodytas pozicijas arba keliauti pirmyn ir atgal.

Tai veikia stebėtinai gerai, net su 6 servo varikliais, važiuojančiais iš vienos pozicijos į kitą.

Be to, tai puikus projektas, skirtas sužinoti apie bendravimą tarp „Python-GUI“ir „Arduino“naudojant „Serial“.

1 žingsnis: ko jums reikia…

Šiam projektui jums reikės:

Techninė įranga

  • „Arduino nano“su kabeliu. Aš naudojau kloną, o „Python“kodas iš tikrųjų tikisi CH340 lusto
  • Prototipų lenta. Pakanka 7x5 cm
  • Kai kurios 2, 54 mm antraštės ir kaiščiai
  • 1-6 servai
  • Servo maitinimo šaltinis (naudojau baterijų paketą su 4 baterijomis)

Programinė įranga

  • „Python 3“:
  • „CH340“lustų USB tvarkyklė: tiesiog „Google“ieškokite tvarkyklių, skirtų CH340 tvarkyklėms
  • „Arduino IDE“:

2 žingsnis: plokštės litavimas

Lituoti lentą
Lituoti lentą

Lydymas iš tikrųjų yra tiesus į priekį pagal Fritzingą paveikslėlyje. Tiesiog įsitikinkite, kad galite lengvai prijungti servo prie 3 kontaktų eilių.

  • 3 kontaktų eilės yra pritvirtintos prie „Arduino nano“3, 5, 6, 9, 10 ir 11 skaitmeninių kaiščių.
  • Raudona viela pritvirtinta prie „Arduino“5V kaiščio
  • Juoda viela yra prijungta prie „Arduino“GND kaiščio
  • Pora kaiščių žemiau 3 kontaktų eilučių yra skirti tipiškam RC imtuvo maitinimo šaltiniui prijungti, galite pridėti jungčių, kaip jums patinka, pvz., Prisukamus gnybtus, XT jungtis, JST arba … arba …

Asmeniškai man patinka eilutės moterų antraščių, kuriose galima įdėti „Arduino“, bet tai priklauso nuo jūsų.

Atminkite, kad sutrumpintos moteriškos antraštės yra trumpiklis, leidžiantis tiekti servo servisą naudojant 5 V „Arduino“šaltinį bandymams. Jei per daug įtempiate, „Arduino“atstatys ir praras reikiamą tempą. Prieš prijungdami kitą maitinimo šaltinį, jie PRIVALO būti pašalinti.

3 žingsnis: „Arduino“nustatymas

Įdiekite „Arduino IDE“ir blykstelėkite „Arduino nano“su pridėtu eskizu.

4 žingsnis: nustatykite „Python“

„Python“sąranka
„Python“sąranka

Atsisiuntę įdiekite „Python 3“. Būtinai pažymėkite parinktį sukurti „PATH“kintamąjį.

Turite įdiegti dar du paketus naudodami pip. Norėdami tai padaryti, paspauskite „Windows“klavišą, įveskite „cmd“ir paspauskite „Enter“. Komandų eilutėje įveskite šias komandas:

  • pip install serial
  • piip įdiegti pyserial
  • pip įdiegti tkinter

Kaip matote, man reikia serijinių modulių ir „pyserial“, kuris greičiausiai nėra pats efektyviausias, nes „pyserial“turėtų pakeisti serijinį. Nepaisant to, tai veikia ir aš tik pradedu mokytis;).

Atidarykite „Python-Script“IDE ir paleiskite jį arba paleiskite tiesiai iš terminalo.

Išskleidžiamajame meniu galite pasirinkti vieną iš dviejų režimų: „Eiti tiesiai“ir „Ping Pong“:

  • Eiti tiesiai: pirmajame stulpelyje įveskite servo padėtį mikrosekundėmis ir paspauskite „Pradėti“, kad servo judėtų į nurodytą padėtį.
  • Ping Pong: įveskite apatinę ir viršutinę ribas antrame ir trečiame stulpelyje. Tai yra apatinė ir viršutinė padėtis, tarp kurių servo judės pirmyn ir atgal. Stulpelyje „Ping Pong Time“galite nurodyti laiką milisekundėmis, kurį servo lauks, kai jis pasieks viršutinę arba apatinę padėtį. Paspauskite „Start“ir servo pradės judėti pirmyn ir atgal, paspauskite „Stop“ir servo sustos.

5 žingsnis: kur vyksta magija

Paskutinis, bet ne mažiau svarbus dalykas, noriu atkreipti dėmesį į kai kurias detales, susijusias su kodu tiems, kurie nori įsitraukti į tam tikrą serijinį ryšį tarp „Python“ir „Arduino“.

Kas atsitiks programoje „Python“?

Pirmiausia programa patikrina, kas pridedama prie šios eilutės COM prievadų, ir išsaugo jį sąraše:

self. COMPortsList = sąrašas (serial.tools.list_ports.comports ())

Tada jis peržiūri sąrašą, kol randa pagarsėjusį CH340 lustą, jį išsaugo ir po to užmezga serijinį ryšį. Atminkite, kad ciklas nutrūksta, kai tik randamas pirmasis CH340.

„p in self. COMPortsList“: jei „CH340“p [1]: # Ieškau „Arduino Clone self. COMPort = p [0] break else: pass self. Ser = serial. Serial (self. COMPort, 57600)

Serijinis ryšys užmezgamas naudojant COM prievadą, kurio duomenų perdavimo sparta yra 57600.

Ir ką daro „Arduino“kodas? Na, kadangi „Arduino“turi tik vieną COM prievadą, nuoseklusis ryšys yra tik viena eilutė:

Serial.begin (57600);

Dabar mes galime naudoti abu uostus bendravimui. Šiuo atveju tik pranešimai iš „Python“į „Arduino“. Pranešimai čia siunčiami iš „Python“. Serijinis ryšys perduoda baitus kaip numatytąjį. Tai taip pat greičiausias būdas siųsti duomenis ir, kiek žinau, vis dar gana plačiai paplitęs. Taigi servo numerio intai (kad „Arduino“žinotų, kurią servo perkelti) ir padėtis mikrosekundėmis paverčiami baitais.

Komanda = struktura.pack ('> B', self. Place) # Int-kintamasis „self. Place“paverčiamas baitu

self. Ser.write (komanda) # Baito rašymas serijinio prievado komandoje = int (self. ServoPos.get ()) // 10 # Įvesties skaitymas iš lauko ir įvedimas int Command = structure.pack (' > B ', komanda) # Int pasukimas baitu. Ser.write (komanda)

Be to, duomenų analizavimui reikia laiko (pavyzdžiui, keturių baitų „1“, „2“, „3“ir „0“aiškinimas kaip int 1230, o ne kaip keturi skirtingi simboliai), ir geriau tai padaryti ne „Arduino“.

Arduino pusėje siunčiama informacija yra tokia:

if (Serial.available ()> 1) {// Jei serijiniai duomenys yra prieinami, tada ciklas įvedamas c = Serial.read (); // Pirmasis baitas (servo skaičius) išsaugomas kintamajame Micros = Serial.read (); // Čia išsaugoma servo padėtis Micros = Micros * 10; }

Rekomenduojamas: