Innehållsförteckning:

Servodriver-Board med Python-GUI och Arduino: 5 steg
Servodriver-Board med Python-GUI och Arduino: 5 steg

Video: Servodriver-Board med Python-GUI och Arduino: 5 steg

Video: Servodriver-Board med Python-GUI och Arduino: 5 steg
Video: Глобальные тренды 2020 — от Agile до IoT / Java Tech Talk 2024, November
Anonim
Servodriver-Board med Python-GUI och Arduino
Servodriver-Board med Python-GUI och Arduino

När du gör prototyper eller bygger modellflygplan stöter du ofta på problemet, att du måste kontrollera servorörelser eller ställa in servon till mittläget.

Om du inte brukar bygga upp hela ditt RC-system eller testa, hur långt du kan skjuta servon eller var mittpositionen är, är den här brädan något för dig! Det låter dig flytta servon till specifika positioner eller låt oss resa fram och tillbaka.

Det fungerar förvånansvärt bra, även med 6 servon som springer från en position till en annan i slingan.

Det är också ett trevligt projekt att lära sig om kommunikation mellan Python-GUI och Arduino med Serial.

Steg 1: Vad du behöver …

För detta projekt behöver du följande:

Hårdvara

  • Arduino nano med kabel. Jag använde en klon, och Python-koden förväntar sig faktiskt ett CH340-chip av en klon
  • En prototypplatta. 7x5cm räcker
  • Några 2, 54 mm sidhuvuden och stift
  • 1-6 servos
  • Strömförsörjning för servon (jag använde ett batteripaket med 4 batterier)

programvara

  • Python 3:
  • En USB-drivrutin för CH340-chipsen: Google bara efter drivrutiner för CH340-drivrutiner
  • Arduino IDE:

Steg 2: Lödning av brädet

Lödning av styrelsen
Lödning av styrelsen

Lödningen är faktiskt rakt fram enligt Fritzing på bilden. Se bara till att du enkelt kan ansluta servon till de 3-stifts raderna.

  • De 3-poliga raderna är fästa på digital stift 3, 5, 6, 9, 10 och 11 på Arduino nano.
  • Den röda tråden är ansluten till 5V-stiftet på Arduino
  • Den svarta ledningen är ansluten till GNU-stiftet på Arduino
  • Stiftparet under 3-stiftsraderna är avsett att ansluta en typisk RC-mottagare, du kan lägga till kontakter som du vill, till exempel skruvplintar, XT-kontakter, JST eller … eller …

Personligen gillar jag rader med kvinnliga rubriker för att sätta in Arduino, men det är upp till dig.

Observera att de kortslutna honhuvudena är en bygel, som låter dig leverera servon med Arduino 5V-källa för teständamål. Om du anstränger det för mycket kommer Arduino att återställa och tappa rätt tempo. De MÅSTE tas bort innan en annan strömförsörjning ansluts.

Steg 3: Konfigurera Arduino

Installera Arduino IDE och blinka Arduino nano med den bifogade skissen.

Steg 4: Konfigurera Python

Konfigurera Python
Konfigurera Python

Installera Python 3 efter nedladdning. Se till att markera alternativet för att skapa en "PATH" -variabel.

Du måste installera ytterligare två paket med pip. För det, tryck på "Windows" -tangenten, skriv "cmd" och tryck "enter". Skriv följande kommandon i kommandotolken:

  • pip installera serie
  • piip installera pyserial
  • pip installera tkinter

Som du ser behöver jag modulerna såväl seriella som pyseriala, vilket troligen inte är det mest effektiva, eftersom pyserial bör ersätta seriell. Ändå fungerar det och jag har precis börjat lära mig;).

Öppna Python-Script i IDE och kör det, eller kör det direkt från terminalen.

I rullgardinsmenyn kan du välja mellan två lägen, "Gå rakt" och "Ping Pong":

  • Gå rakt: Ange en servoposition i mikrosekunder i den första kolumnen och tryck på "Start" för att få servon att flytta till den angivna positionen.
  • Ping Pong: Ange en nedre gräns och en övre gräns i den andra och tredje kolumnen. Det är det nedre och övre läget, mellan vilket servon kommer att gå fram och tillbaka. I kolumnen "Ping Pong Time" kan du ange en tid i millisekunder som servon väntar när den har nått den övre eller nedre positionen. Tryck på "Start" och servon börjar röra sig fram och tillbaka, tryck på "Stopp" och servon stannar.

Steg 5: Där magin händer

Sist men inte minst vill jag påpeka några av detaljerna i koden för dem som vill komma in i lite seriell kommunikation mellan Python och Arduino.

Vad händer nu i Python -programmet?

Först och främst kontrollerar programmet vad som är anslutet till COM-portarna på den här raden och sparar det i en lista:

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

Sedan går den igenom listan tills den hittar ett ökänt CH340-chip, sparar det och upprättar sedan en seriell anslutning efter for-loop. Observera att förslingan går sönder så snart den första CH340 hittas.

för p i self. COMPortsList: om "CH340" i p [1]: # Letar efter en Arduino Clone self. COMPort = p [0] paus annars: pass self. Ser = serial. Serial (self. COMPort, 57600)

Den seriella anslutningen upprättas med COM-porten med en baudrate på 57600.

Och vad gör Arduino -koden? Tja, eftersom Arduino bara har en COM-port, är den seriella anslutningen bara en rad:

Serial.begin (57600);

Nu kan vi använda båda portarna för att kommunicera. I detta fall bara meddelanden från Python till Arduino. Meddelandena skickas hit från Python. Den seriella anslutningen överför byte som standard. Det är också det snabbaste sättet att skicka data och så vitt jag vet är det fortfarande ganska utbrett. Så ints för servos nummer (så att Arduino vet vilken servo som ska flyttas) och positionen i mikrosekunder förvandlas till en byte.

Kommando = struct.pack ('> B', self. Place) # Int-variabeln "self. Place" förvandlas till en byte

self. Ser.write (Command) # Skriva byte på Serial-Port Command = int (self. ServoPos.get ()) // 10 # Läser inmatningen från fältet och lämna in int Command = struct.pack (' > B ', Command) # Turning the int in a byte self. Ser.write (Command) # Skriva byte på Serial-Port

Det tar också tid att analysera data (till exempel att tolka fyra byte "1", "2", "3" och "0" som int 1230, inte som fyra olika tecken) och det är bättre att göra det inte på Arduino.

På Arduino-sidan hämtas informationen som skickas enligt följande:

if (Serial.available ()> 1) {// Om seriell data är tillgänglig, matas slingan in c = Serial.read (); // Den första byten (antal servon) sparas i en variabel Micros = Serial.read (); // Servos position sparas här Mikro = Mikro * 10; }

Rekommenderad: