Inhoudsopgave:
- Stap 1: Wat u nodig heeft…
- Stap 2: Het bord solderen
- Stap 3: De Arduino instellen
- Stap 4: Python instellen
- Stap 5: Waar de magie gebeurt
Video: Servodriver-board met Python-GUI en Arduino: 5 stappen
2024 Auteur: John Day | [email protected]. Laatst gewijzigd: 2024-01-30 11:17
Bij het maken van prototyping of het bouwen van modelvliegtuigen kom je vaak het probleem tegen, dat je servobewegingen moet controleren of servo's in de middenpositie moet zetten.
Als je niet je hele RC-systeem wilt opbouwen of testen, hoe ver je de servo kunt duwen of waar de middenpositie is, dan is dit board iets voor jou! Hiermee kunt u de servo naar bepaalde posities verplaatsen of heen en weer reizen.
Het werkt verrassend goed, zelfs met 6 servo's die in de lus van de ene naar de andere positie racen.
Het is ook een leuk project om te leren over communicatie tussen Python-GUI en Arduino met behulp van serieel.
Stap 1: Wat u nodig heeft…
Voor dit project heb je het volgende nodig:
Hardware
- Arduino nano met kabel. Ik heb een kloon gebruikt, en de Python-code verwacht eigenlijk een CH340-chip van een kloon
- Een prototypebord. 7x5cm is genoeg
- Enkele headers en pinnen van 2,54 mm
- 1-6 servo's
- Voeding voor de servo's (ik gebruikte een batterypack met 4 batterijen)
Software
- Python 3:
- Een USB-stuurprogramma voor de CH340-chips: Google maar eens voor drivers voor CH340-stuurprogramma's
- Arduino IDE:
Stap 2: Het bord solderen
Het solderen is eigenlijk rechttoe rechtaan volgens Fritzing op de foto. Zorg er wel voor dat u de servo's eenvoudig kunt aansluiten op de 3-pins-rijen.
- De 3-pin-rijen zijn bevestigd aan digitale pin 3, 5, 6, 9, 10 en 11 van de Arduino nano.
- De rode draad zit vast aan de 5V-pin van de Arduino
- De zwarte draad is verbonden met de GND-pin van de Arduino
- Het paar pinnen onder de 3-pins rijen zijn bedoeld om een typische RC-ontvangervoeding aan te sluiten, je kunt connectoren toevoegen zoals je wilt, zoals schroefklemmen, XT-connectoren, JST of … of …
Persoonlijk hou ik van rijen vrouwelijke headers om de Arduino in te plaatsen, maar dat is aan jou.
Houd er rekening mee dat de kortgesloten vrouwelijke headers een jumper zijn, waarmee u de servo kunt voeden met behulp van de 5V-bron van de Arduino voor testdoeleinden. Als je het te veel belast, zal de Arduino resetten en het juiste tempo verliezen. Ze MOETEN worden verwijderd voordat u een andere voeding aansluit.
Stap 3: De Arduino instellen
Installeer de Arduino IDE en flash de Arduino nano met de bijgevoegde schets.
Stap 4: Python instellen
Installeer Python 3 na het downloaden. Zorg ervoor dat u de optie aanvinkt om een "PATH"-variabele aan te maken.
U moet nog twee pakketten installeren met pip. Druk daarvoor op de "Windows"-toets, typ "cmd" en druk op "enter". Typ de volgende opdrachten in de opdrachtprompt:
- pip serieel installeren
- piip installeer pyserial
- pip installeer tkinter
Zoals je kunt zien, heb ik de modules zowel serieel als pyseriaal nodig, wat waarschijnlijk niet de meest efficiënte is, omdat pyserial serieel zou moeten vervangen. Toch werkt het en begin ik het net te leren;).
Open het Python-script in de IDE en voer het uit, of voer het rechtstreeks vanaf de terminal uit.
In het vervolgkeuzemenu kunt u kiezen tussen twee modi, "Go Straight" en "Ping Pong":
- Ga rechtdoor: Voer een servopositie in microseconden in de eerste kolom in en druk op "Start" om de servo naar de opgegeven positie te laten bewegen.
- Ping Pong: Vul in de tweede en derde kolom een ondergrens en een bovengrens in. Dat zijn de onderste en bovenste positie, waartussen de servo heen en weer zal gaan. In de kolom "Ping Pong Time" kunt u een tijd in milliseconden specificeren, dat de servo zal wachten wanneer deze de bovenste of de onderste positie heeft bereikt. Druk op "Start" en de servo begint heen en weer te bewegen, druk op "Stop" en de servo stopt.
Stap 5: Waar de magie gebeurt
Last but not least wil ik wijzen op enkele details in de code voor degenen die een beetje seriële communicatie tussen Python en Arduino willen krijgen.
Wat gebeurt er nu in het Python-programma?
Allereerst controleert het programma wat er aan de COM-poorten in deze regel is gekoppeld en slaat het op in een lijst:
self. COMPortsList = lijst(serial.tools.list_ports.comports())
Vervolgens doorloopt het de lijst totdat het een beruchte CH340-chip vindt, het opslaat en vervolgens een seriële verbinding tot stand brengt na de for-loop. Merk op dat de for-lus breekt zodra de eerste CH340 wordt gevonden.
for p in self. COMPortsList: if "CH340" in p[1]: # Op zoek naar een Arduino Clone self. COMPort = p[0] break else: pass self. Ser = serial. Serial(self. COMPort, 57600)
De seriële verbinding wordt tot stand gebracht met de COM-poort met een baudrate van 57600.
En wat doet de Arduino-code? Welnu, aangezien de Arduino maar één COM-poort heeft, is de seriële verbinding slechts één lijn:
Serieel.begin(57600);
Nu kunnen we beide poorten gebruiken om te communiceren. In dit geval alleen berichten van de Python naar de Arduino. De berichten worden hier vanuit Python verzonden. De seriële verbinding verzendt standaard bytes. Dat is ook de snelste manier om data te versturen en voor zover ik weet ook nog vrij wijdverbreid. Dus de ints voor het nummer van de servo (zodat de Arduino weet welke servo hij moet verplaatsen) en de positie in microseconden worden omgezet in een byte.
Command = struct.pack('>B', self. Place) # De int-variabele "self. Place" wordt omgezet in een byte
self. Ser.write(Command) # De byte op de seriële poort schrijven Command = int(self. ServoPos.get())//10 # De invoer uit het veld lezen en int Command = struct.pack(' >B', Command) # De int omzetten in een byte self. Ser.write(Command) # De byte op de seriële poort schrijven
Ook kost het ontleden van gegevens tijd (bijvoorbeeld het interpreteren van vier bytes "1", "2", "3" en "0" als de int 1230, niet als vier verschillende tekens) en het is beter om dat niet op de Arduino te doen.
Aan de Arduino-kant wordt de verzonden informatie als volgt opgehaald:
if(Serial.available()>1){ // Als seriële gegevens beschikbaar zijn, wordt de lus ingevoerd c = Serial.read(); // De eerste byte (aantal servo) wordt opgeslagen in een variabele Micros = Serial.read(); // De positie van de servo wordt hier opgeslagen Micros = Micros * 10; }
Aanbevolen:
Meerdere LED's besturen met Python en de GPIO-pinnen van je Raspberry Pi: 4 stappen (met afbeeldingen)
Meerdere LED's besturen met Python en de GPIO-pinnen van je Raspberry Pi: deze Instructable laat zien hoe je meerdere GPIO-pinnen op je RaspberryPi kunt besturen om 4 LED's van stroom te voorzien. Het zal je ook kennis laten maken met parameters en voorwaardelijke uitspraken in Python.Onze vorige Instructable met behulp van de GPIO-pinnen van je Raspberry Pi om
Aan de slag met Python: 7 stappen (met afbeeldingen)
Aan de slag met Python: programmeren is geweldig! Het is creatief, leuk en het geeft je hersenen een mentale training. Velen van ons willen meer leren over programmeren, maar overtuigen onszelf ervan dat dat niet kan. Misschien heeft het te veel wiskunde, misschien schrikt het jargon dat eromheen wordt gegooid
DIY slimme weegschaal met wekker (met wifi, ESP8266, Arduino IDE en Adafruit.io): 10 stappen (met afbeeldingen)
DIY Slimme Weegschaal Met Wekker (met Wi-Fi, ESP8266, Arduino IDE en Adafruit.io): In mijn vorige project ontwikkelde ik een slimme weegschaal met Wi-Fi. Het kan het gewicht van de gebruiker meten, het lokaal weergeven en naar de cloud sturen. U kunt hier meer informatie over krijgen op onderstaande link: https://www.instructables.com/id/Wi-Fi-Smart-Scale-wi
Draadloze afstandsbediening met 2,4 GHz NRF24L01-module met Arduino - Nrf24l01 4-kanaals / 6-kanaals zenderontvanger voor quadcopter - RC Helikopter - RC-vliegtuig met Arduino: 5 stappen (met afbeeldingen)
Draadloze afstandsbediening met 2,4 GHz NRF24L01-module met Arduino | Nrf24l01 4-kanaals / 6-kanaals zenderontvanger voor quadcopter | RC Helikopter | Rc-vliegtuig met Arduino: een Rc-auto besturen | Quadcopter | Drone | RC vliegtuig | RC-boot, we hebben altijd een ontvanger en zender nodig, stel dat we voor RC QUADCOPTER een 6-kanaals zender en ontvanger nodig hebben en dat type TX en RX is te duur, dus we gaan er een maken op onze
Toegang tot Arduino YÚN beheren met MySQL, PHP5 en Python: 11 stappen (met afbeeldingen)
Beheer de toegang van Arduino YÚN met MySQL, PHP5 en Python: Hallo vrienden! Nou, zoals je weet, in september het nieuwe première schild van Arduino, Arduino YUN. Deze kleine vriend heeft een Linux embedded systeem waarmee we alles kunnen draaien wat je maar kunt bedenken (tenminste tot nu toe). Hoewel er weinig informatie is