INHOUDSOPGAWE:
- Stap 1: Wat u nodig het …
- Stap 2: soldeer die bord
- Stap 3: Die opstel van die Arduino
- Stap 4: Stel Python op
- Stap 5: Waar die magie gebeur
Video: Servodriver-bord met Python-GUI en Arduino: 5 stappe
2024 Outeur: John Day | [email protected]. Laas verander: 2024-01-30 07:26
As u prototipes maak of modelvliegtuie bou, kom u gereeld op die probleem dat u die servo -reis moet nagaan of servo's in die middelste posisie moet stel.
As u nie u hele RC-stelsel wil opbou of toets nie, hoe ver u die servo kan stoot of waar die middelposisie is, dan is hierdie bord vir u! Dit stel u in staat om die servo na spesifieke posisies te skuif, of laat ons heen en weer reis.
Dit werk verbasend goed, selfs met 6 servo's wat van die een posisie na die ander in die lus jaag.
Dit is ook 'n goeie projek om te leer oor kommunikasie tussen Python-GUI en Arduino met behulp van Serial.
Stap 1: Wat u nodig het …
Vir hierdie projek benodig u die volgende:
Hardeware
- Arduino nano met kabel. Ek het 'n kloon gebruik, en die Python-kode verwag eintlik 'n CH340-chip van 'n kloon
- 'N Prototipe bord. 7x5 cm is genoeg
- Sowat 2, 54 mm koppe en penne
- 1-6 servos
- Kragtoevoer vir die servo's (ek het 'n batterypak met 4 batterye gebruik)
Sagteware
- Python 3:
- 'N USB-bestuurder vir die CH340-skyfies: Google net vir bestuurders vir CH340-bestuurders
- Arduino IDE:
Stap 2: soldeer die bord
Die soldeer is eintlik reguit volgens Fritzing op die foto. Maak net seker dat u die servo's maklik aan die 3-pen-rye kan koppel.
- Die 3-pen-rye is aan die digitale pen 3, 5, 6, 9, 10 en 11 van die Arduino nano geheg.
- Die rooi draad word aan die 5V-pen van die Arduino geheg
- Die swart draad is gekoppel aan die GND-pen van die Arduino
- Die paar penne onder die 3-pen-rye is bedoel om 'n tipiese RC-ontvanger-kragtoevoer aan te sluit; u kan verbindings byvoeg soos u wil, soos skroefklemme, XT-verbindings, JST of … of …
Persoonlik hou ek van rye vroulike opskrifte om die Arduino in te sit, maar dit is aan jou.
Let daarop dat die kort vroulike koppe 'n trui is, waarmee u die servo kan voorsien met behulp van die 5V-bron van die Arduino vir toetsdoeleindes. As u dit te veel druk, sal die Arduino herstel en die regte pas verloor. Hulle MOET verwyder word voordat 'n ander kragtoevoer aangesluit word.
Stap 3: Die opstel van die Arduino
Installeer die Arduino IDE en flits die Arduino nano met die aangehegte skets.
Stap 4: Stel Python op
Installeer Python 3 nadat u dit afgelaai het. Kontroleer die opsie om 'n "PATH" -variabele te skep.
U moet nog twee pakkette installeer met behulp van pip. Druk hiervoor op die "Windows" -sleutel, tik "cmd" en druk "enter". Tik die volgende opdragte in die opdragprompt:
- pip installeer reeks
- piip installeer pyserial
- pip installeer tkinter
Soos u kan sien, benodig ek die modules serieel sowel as pyseriaal, wat waarskynlik nie die doeltreffendste is nie, aangesien pyserial reeks moet vervang. Tog werk dit en ek het net begin leer;).
Open die Python-script in die IDE en voer dit uit, of voer dit direk vanaf die terminale uit.
In die keuselys kan u kies tussen twee modusse, "Gaan reguit" en "Ping Pong":
- Gaan reguit: voer 'n servoposisie in mikrosekondes in die eerste kolom in en druk 'Start' om die servo na die gespesifiseerde posisie te laat beweeg.
- Ping Pong: voer 'n onderste grens en 'n boonste grens in die tweede en derde kolom in. Dit is die onderste en boonste posisie, waartussen die servo heen en weer gaan. In die kolom "Ping Pong Time" kan u 'n tyd in millisekondes spesifiseer, wat die servo sal wag wanneer dit die boonste of onderste posisie bereik het. Klik op "Start" en die servo begin heen en weer beweeg, druk op "Stop" en die servo stop.
Stap 5: Waar die magie gebeur
Laastens, maar nie die minste nie, wil ek 'n paar besonderhede in die kode aandui vir diegene wat 'n bietjie seriële kommunikasie tussen Python en Arduino wil onderneem.
Nou, wat gebeur in die Python -program?
In die eerste plek kyk die program na wat aan die COM-poorte in hierdie reël gekoppel is en stoor dit in 'n lys:
self. COMPortsList = lys (serial.tools.list_ports.comports ())
Dan loop dit deur die lys totdat dit 'n berugte CH340-chip vind, dit stoor en dan 'n seriële verbinding tot stand bring na die for-lus. Let daarop dat die for-lus breek sodra die eerste CH340 gevind word.
vir p in self. COMPortsList: as "CH340" in p [1]: # Op soek na 'n Arduino Clone self. COMPort = p [0] breek anders: slaag self. Ser = serial. Serial (self. COMPort, 57600)
Die seriële verbinding word tot stand gebring met die COM-poort met 'n baudrate van 57600.
En wat doen die Arduino -kode? Aangesien die Arduino slegs een COM-poort het, is die reeksverbinding slegs een reël:
Serial.begin (57600);
Nou kan ons albei hawens gebruik om te kommunikeer. In hierdie geval slegs boodskappe van die Python na die Arduino. Die boodskappe word vanaf Python hierheen gestuur. Die seriële verbinding stuur standaard grepe uit. Dit is ook die vinnigste manier om data te stuur, en sover ek weet is dit nog steeds redelik wydverspreid. Dus word die ints vir die nommer van die servo (sodat die Arduino weet watter servo hy moet skuif) en die posisie in mikrosekondes in 'n greep verander.
Command = struct.pack ('> B', self. Place) # Die int-veranderlike "self. Place" word in 'n byte verander
self. Ser.write (Command) # Skryf die greep op die Serial-Port Command = int (self. ServoPos.get ()) // 10 # Lees die invoer uit die veld en stuur int Command = struct.pack (' > B ', Command) # Draai die int in 'n byte self. Ser.write (Command) # Skryf die byte op die Serial-poort
Ontleding van data neem ook tyd (byvoorbeeld om vier grepe "1", "2", "3" en "0" as die int 1230 te interpreteer, nie as vier verskillende tekens nie), en dit is beter om dit nie op die Arduino te doen nie.
Aan die Arduino-kant word die gestuurde inligting soos volg opgetel:
if (Serial.available ()> 1) {// As reeksdata beskikbaar is, word die lus ingevoer c = Serial.read (); // Die eerste greep (aantal servo) word gestoor in 'n veranderlike Micros = Serial.read (); // Die posisie van die servo word hier gestoor Micros = Micros * 10; }
Aanbeveel:
Waarnemer vir humiditeit en temperatuur met behulp van Framboos Pi met SHT25 in Python: 6 stappe
Waarnemer vir humiditeit en temperatuur met Raspberry Pi met SHT25 in Python: as 'n entoesias vir Raspberry Pi, het ons gedink aan nog meer skouspelagtige eksperimente. en SHT25, Humidi
Bywoningstelsel deur RFID -data na MySQL -bediener te stuur met behulp van Python met Arduino: 6 stappe
Bywoningstelsel deur RFID-data na MySQL-bediener te stuur met behulp van Python met Arduino: In hierdie projek het ek RFID-RC522 met arduino gekoppel en dan stuur ek data van RFID na phpmyadmin-databasis. Anders as ons vorige projekte, gebruik ons in hierdie geval geen ethernet -skild nie, hier lees ons net die reeksdata van
Draadlose afstandsbediening met 2,4 GHz NRF24L01 -module met Arduino - Nrf24l01 4 -kanaals / 6 -kanaals sender -ontvanger voor quadcopter - Rc Helikopter - Rc -vliegtuig met Arduino: 5 stappe (met foto's)
Draadlose afstandsbediening met 2,4 GHz NRF24L01 -module met Arduino | Nrf24l01 4 -kanaals / 6 -kanaals sender -ontvanger voor quadcopter | Rc Helikopter | Rc -vliegtuig met Arduino: om 'n Rc -motor te bestuur | Quadcopter | Drone | RC -vliegtuig | RC -boot, ons het altyd 'n ontvanger en sender nodig, veronderstel dat ons vir RC QUADCOPTER 'n 6 -kanaals sender en ontvanger nodig het en dat die tipe TX en RX te duur is, so ons maak een op ons
DIY "PC Usage Meter ROG Base" met behulp van Arduino en Python: 5 stappe (met foto's)
DIY "PC Usage Meter ROG Base" met behulp van Arduino en Python: ************************************* +In die eerste plek is hierdie instruksies geskryf deur 'n nie -moedertaalspreker …… nie 'n Engelse professor nie, so stel 'n grammatikale fout in kennis voordat u my spot .:p +En moenie navolg nie
Beheer toegang tot Arduino YÚN met MySQL, PHP5 en Python: 11 stappe (met foto's)
Beheer toegang tot Arduino YÚN met MySQL, PHP5 en Python: Hallo vriende! Soos u weet, in September die nuwe premierskild van Arduino, Arduino YUN. Hierdie vriendin het 'n Linux -ingeboude stelsel waarmee ons alles kan uitvoer waaraan u kan dink (ten minste tot dusver). Alhoewel daar baie min inligting is