Innholdsfortegnelse:

Servodriver-Board Med Python-GUI og Arduino: 5 trinn
Servodriver-Board Med Python-GUI og Arduino: 5 trinn

Video: Servodriver-Board Med Python-GUI og Arduino: 5 trinn

Video: Servodriver-Board Med Python-GUI og Arduino: 5 trinn
Video: Gesture-Controlled Servo with Python and Arduino #electronics #arduinotraining 2024, November
Anonim
Servodriver-Board Med Python-GUI og Arduino
Servodriver-Board Med Python-GUI og Arduino

Når du gjør prototyper eller bygger modellfly, støter du ofte på problemet, at du må sjekke servo -reiser eller sette servoer til midtstilling.

Hvis du ikke pleier å bygge opp hele RC-systemet eller teste, hvor langt du kan skyve servoen eller hvor midtstillingen er, så er dette brettet for deg! Den lar deg flytte servoen til bestemte posisjoner, eller la oss reise frem og tilbake.

Det fungerer overraskende bra, selv med 6 servoer som løper fra en posisjon til en annen i løkken.

Det er også et fint prosjekt å lære om kommunikasjon mellom Python-GUI og Arduino ved hjelp av Serial.

Trinn 1: Hva du trenger …

For dette prosjektet trenger du følgende:

Maskinvare

  • Arduino nano med kabel. Jeg brukte en klon, og Python-koden forventer faktisk en CH340-brikke av en klon
  • Et prototypebrett. 7x5 cm er nok
  • Noen 2, 54 mm hoder og pinner
  • 1-6 servoer
  • Strømforsyning til servoene (jeg brukte en batteripakke med 4 batterier)

Programvare

  • Python 3:
  • En USB-driver for CH340-brikkene: Bare google etter drivere for CH340-drivere
  • Arduino IDE:

Trinn 2: Lodding av brettet

Lodding av brettet
Lodding av brettet

Loddet er faktisk rett frem ifølge Fritzing på bildet. Bare vær sikker på at du enkelt kan koble servoene til de 3-pinners radene.

  • 3-pins-radene er festet til digital pin 3, 5, 6, 9, 10 og 11 på Arduino nano.
  • Den røde ledningen er festet til 5V-pinnen på Arduino
  • Den svarte ledningen er koblet til GND-pinnen på Arduino
  • Pinnene under 3-pinners radene er ment for å koble til en typisk RC-mottaker strømforsyning. Du kan legge til kontakter som du vil, for eksempel skrueterminaler, XT-kontakter, JST eller … eller …

Personlig liker jeg rader med kvinnelige overskrifter for å sette Arduino i, men det er opp til deg.

Vær oppmerksom på at de korte hunhodene er en jumper, som lar deg levere servoen ved hjelp av 5V-kilden til Arduino for testformål. Hvis du belaster den for mye, vil Arduino nullstille og miste riktig tempo. De MÅ fjernes før du kobler til en annen strømforsyning.

Trinn 3: Sette opp Arduino

Installer Arduino IDE og blits Arduino nano med vedlagte skisse.

Trinn 4: Konfigurere Python

Sette opp Python
Sette opp Python

Installer Python 3 etter nedlasting. Sørg for å sjekke alternativet for å lage en "PATH" -variabel.

Du må installere ytterligere to pakker med pip. For det, trykk på "Windows" -tasten, skriv "cmd" og trykk "enter". Skriv inn følgende kommandoer i ledeteksten:

  • pip installere serienummer
  • piip installer pyserial
  • pip installere tkinter

Som du kan se, trenger jeg modulene både seriell og pyserial, som sannsynligvis ikke er den mest effektive, siden pyserial burde erstatte serien. Likevel fungerer det, og jeg har akkurat begynt å lære;).

Åpne Python-scriptet i IDE og kjør det, eller kjør det rett fra terminalen.

I rullegardinmenyen kan du velge mellom to moduser, "Gå rett" og "Ping Pong":

  • Gå rett: Skriv inn en servoposisjon i mikrosekunder i den første kolonnen, og trykk "Start" for å få servoen til å gå til den angitte posisjonen.
  • Ping Pong: Skriv inn en nedre grense og en øvre grense i den andre og tredje kolonnen. Det er den nedre og øvre posisjonen, mellom hvilken servoen vil gå frem og tilbake. I kolonnen "Ping Pong Time" kan du angi et tidspunkt i millisekunder som servoen skal vente når den har nådd den øvre eller nedre posisjonen. Trykk "Start" og servoen begynner å bevege seg frem og tilbake, trykk "Stop" og servoen stopper.

Trinn 5: Hvor magien skjer

Sist, men ikke minst, vil jeg påpeke noen av detaljene i koden for de som ønsker å komme inn på litt seriell kommunikasjon mellom Python og Arduino.

Hva skjer i Python -programmet?

Først og fremst sjekker programmet hva som er koblet til COM-portene på denne linjen og lagrer det i en liste:

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

Deretter går den gjennom listen til den finner en beryktet CH340-brikke, lagrer den og oppretter deretter en seriell forbindelse etter forløkken. Vær oppmerksom på at forløkken brytes så snart den første CH340 er funnet.

for p i self. COMPortsList: hvis "CH340" i p [1]: # Ser etter en Arduino Clone self. COMPort = p [0] pause annet: pass self. Ser = serial. Serial (self. COMPort, 57600)

Den serielle forbindelsen opprettes med COM-porten med en baudrate på 57600.

Og hva gjør Arduino -koden? Siden Arduino bare har en COM-port, er den serielle tilkoblingen bare en linje:

Serial.begin (57600);

Nå kan vi bruke begge portene til å kommunisere. I dette tilfellet bare meldinger fra Python til Arduino. Meldingene blir sendt hit fra Python. Den serielle tilkoblingen overfører byte som standard. Det er også den raskeste måten å sende data på, og så vidt jeg vet er det fortsatt ganske utbredt. Så intene for nummeret på servoen (slik at Arduino vet hvilken servo han skal flytte) og posisjonen i mikrosekunder blir til en byte.

Kommando = struct.pack ('> B', self. Place) # Int-variabelen "self. Place" blir til en byte

self. Ser.write (Command) # Skrive byte på kommandoen Serial-Port = int (self. ServoPos.get ()) // 10 # Lese inndata fra feltet og send inn int Command = struct.pack (' > B ', kommando) # Slå int i et byte-selv. Ser.write (kommando) # Skrive byte på serieporten

Det tar også tid å analysere data (for eksempel tolke fire byte "1", "2", "3" og "0" som int 1230, ikke som fire forskjellige tegn), og det er bedre å gjøre det ikke på Arduino.

På Arduino-siden hentes informasjonen som sendes slik:

hvis (Serial.available ()> 1) {// Hvis serielle data er tilgjengelige, blir sløyfen angitt c = Serial.read (); // Den første byten (antall servoer) lagres i en variabel Micros = Serial.read (); // Servoens posisjon lagres her Mikro = Mikro * 10; }

Anbefalt: