Sadržaj:
2025 Autor: John Day | [email protected]. Zadnja promjena: 2025-01-13 06:57
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 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
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; }