Sadržaj:

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

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

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

Prilikom izrade prototipova ili izgradnje modela zrakoplova često nailazite na problem da morate provjeriti vožnju servom ili postaviti servo u srednji položaj.

U slučaju da ne želite izgraditi cijeli RC sustav ili testirati, koliko daleko možete gurnuti servo ili gdje je sredina, onda je ova ploča za vas! Omogućuje 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 jednog položaja na drugi.

Također, to je lijep projekt za učenje o komunikaciji između Python-GUI-ja i Arduina pomoću Seriala.

Korak 1: Što vam treba …

Za ovaj projekt trebat će vam sljedeće:

Hardver

  • Arduino nano s kabelom. Koristio sam klon, a Python kod zapravo očekuje CH340-čip klona
  • Ploča za izradu prototipa. 7x5 cm je dovoljno
  • Nekih 2, 54 mm zaglavlja i igle
  • 1-6 servo pogona
  • Napajanje za servomotore (koristio sam bateriju 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 provjerite možete li jednostavno priključiti servo pogone na 3-polne redove.

  • 3-pinski redovi pričvršćeni su na digitalni pin 3, 5, 6, 9, 10 i 11 Arduino nano.
  • Crvena žica je pričvršćena na 5V pin Arduina
  • Crna žica spojena je na GND-pin Arduina
  • Par pinova ispod 3-polnog reda namijenjen je priključivanju tipičnog napajanja RC-prijamnika, 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 stvaranje varijable "PATH".

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

  • pip install serijski
  • piip instalirajte pyserial
  • pip install tkinter

Kao što vidite, potrebni su mi moduli serijski, kao i pyserial, što najvjerojatnije nije najučinkovitije, budući da bi pyserial trebao zamijeniti serijski. Ipak djeluje i tek počinjem učiti;).

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

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

  • Idi ravno: Unesite servo-poziciju u mikrosekundama u prvi stupac i pritisnite "Start" kako bi se servo pomaknuo na navedeni položaj.
  • Ping Pong: Unesite donju granicu i gornju granicu u drugi i treći stupac. To su donji i gornji položaj, između kojih će se servo kretati naprijed -natrag. U stupcu "Vrijeme za stolni tenis" možete odrediti vrijeme u milisekundama koje će servo čekati kada dosegne gornji ili donji položaj. 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.

Što se događa u Python programu?

Prije svega, program provjerava što je priključeno na COM-portove u ovom retku i sprema ga na popis:

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

Zatim se petlja po popisu sve dok ne pronađe ozloglašeni CH340 čip, spremi ga, a 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 s COM-portom s brzinom prijenosa od 57600.

A što 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 raširen. Dakle, ints za broj serva (tako da Arduino zna koji servo premjestiti) i položaj u mikrosekundama pretvoreni su u bajt.

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

self. Ser.write (Command) # Zapisivanje bajta u naredbu 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.

Na strani Arduina, 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) sprema se u varijablu Micros = Serial.read (); // Ovdje se sprema položaj serva Micros = Micros * 10; }

Preporučeni: