Indholdsfortegnelse:

Servodriver-board med Python-GUI og Arduino: 5 trin
Servodriver-board med Python-GUI og Arduino: 5 trin

Video: Servodriver-board med Python-GUI og Arduino: 5 trin

Video: Servodriver-board med Python-GUI og Arduino: 5 trin
Video: Controlling Servo motor with Arduino and python 2024, November
Anonim
Servodriver-Board Med Python-GUI og Arduino
Servodriver-Board Med Python-GUI og Arduino

Når du laver prototyper eller bygger modelfly, støder du ofte på problemet, at du skal kontrollere servo -rejser eller indstille servoer til midterpositionen.

Hvis du ikke plejer at opbygge hele dit RC-system eller teste, hvor langt du kan skubbe servoen, eller hvor midpositionen er, så er dette board noget for dig! Det giver dig mulighed for at flytte servoen til bestemte positioner, eller lad os rejse frem og tilbage.

Det fungerer overraskende godt, selv med 6 servoer, der kører fra en position til en anden i sløjfen.

Det er også et godt projekt at lære om kommunikation mellem Python-GUI og Arduino ved hjælp af Serial.

Trin 1: Hvad du har brug for …

Til dette projekt skal du bruge følgende:

Hardware

  • Arduino nano med kabel. Jeg brugte en klon, og Python-koden forventer faktisk en CH340-chip af en klon
  • Et prototypebord. 7x5 cm er nok
  • Nogle 2, 54 mm overskrifter og stifter
  • 1-6 servoer
  • Strømforsyning til servoerne (jeg brugte en batteripakke med 4 batterier)

Software

  • Python 3:
  • En USB-driver til CH340-chips: Bare google efter drivere til CH340-drivere
  • Arduino IDE:

Trin 2: Lodning af brættet

Lodning af brættet
Lodning af brættet

Lodningen er faktisk lige frem ifølge Fritzing på billedet. Bare sørg for, at du let kan tilslutte servoerne til de 3-benede rækker.

  • De 3-benede rækker er fastgjort til digital pin 3, 5, 6, 9, 10 og 11 på Arduino nano.
  • Den røde ledning er fastgjort til 5V-stiften på Arduino
  • Den sorte ledning er forbundet til GND-stiften på Arduino
  • Stiftparret under de 3-benede rækker er beregnet til at tilslutte en typisk RC-modtager strømforsyning, du kan tilføje stik som du vil, f.eks. Skrueterminaler, XT-stik, JST eller … eller …

Personligt kan jeg godt lide rækker af kvindelige overskrifter til at sætte Arduino i, men det er op til dig.

Bemærk, at de kortsluttede kvindelige overskrifter er en jumper, der lader dig levere servoen ved hjælp af 5V-kilden til Arduino til testformål. Hvis du belaster det for meget, nulstilles Arduino og mister det rigtige tempo. De SKAL fjernes, før der tilsluttes en anden strømforsyning.

Trin 3: Opsætning af Arduino

Installer Arduino IDE og flash Arduino nano med den vedhæftede skitse.

Trin 4: Opsætning af Python

Opsætning af Python
Opsætning af Python

Installer Python 3 efter download. Sørg for at markere muligheden for at oprette en "PATH" -variabel.

Du skal installere yderligere to pakker ved hjælp af pip. Til det skal du trykke på "Windows" -tasten, skrive "cmd" og trykke "enter". Skriv følgende kommandoer i kommandoprompten:

  • pip installer serie
  • piip installer pyserial
  • pip installer tkinter

Som du kan se, har jeg brug for modulerne såvel serielle som pyseriale, hvilket sandsynligvis ikke er det mest effektive, da pyserial skulle erstatte seriel. Ikke desto mindre virker det, og jeg er lige begyndt at lære;).

Åbn Python-scriptet i IDE, og kør det, eller kør det direkte fra terminalen.

I rullemenuen kan du vælge mellem to tilstande, "Gå lige ud" og "Ping Pong":

  • Gå ligeud: Indtast en servoposition i mikrosekunder i den første kolonne, og tryk på "Start" for at få servoen til at flytte til den angivne position.
  • Ping Pong: Indtast en nedre grænse og en øvre grænse i den anden og tredje kolonne. Det er den nedre og øvre position, mellem hvilken servoen vil gå frem og tilbage. I kolonnen "Ping Pong Time" kan du angive et tidspunkt i millisekunder, hvor servoen venter, når den har nået den øverste eller nedre position. Tryk på "Start", og servoen begynder at bevæge sig frem og tilbage, tryk på "Stop", og servoen stopper.

Trin 5: Hvor magien sker

Sidst men ikke mindst vil jeg påpege nogle af detaljerne i koden for dem, der ønsker at komme ind i lidt seriel kommunikation mellem Python og Arduino.

Hvad sker der nu i Python -programmet?

Først og fremmest kontrollerer programmet, hvad der er knyttet til COM-portene i denne linje og gemmer det på en liste:

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

Derefter går den gennem listen, indtil den finder en berygtet CH340-chip, gemmer den og derefter opretter en seriel forbindelse efter forløbet. Bemærk, at forløkken går i stykker, så snart den første CH340 er fundet.

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

Den serielle forbindelse etableres med COM-porten med en baudrate på 57600.

Og hvad gør Arduino -koden? Nå, da Arduino kun har en COM-port, er den serielle forbindelse kun en linje:

Serial.begin (57600);

Nu kan vi bruge begge porte til at kommunikere. I dette tilfælde er det kun meddelelser fra Python til Arduino. Beskederne sendes her fra Python. Den serielle forbindelse overfører bytes som standard. Det er også den hurtigste måde at sende data på, og så vidt jeg ved er det stadig ret udbredt. Så ints for servoens nummer (så Arduino ved, hvilken servo der skal flyttes) og positionen i mikrosekunder bliver til en byte.

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

self. Ser.write (Command) # Skriver byte på kommandoen Serial-Port = int (self. ServoPos.get ()) // 10 # Læser input fra feltet og send int Command = struct.pack (' > B ', kommando) # Drej int i et byte-selv. Ser.write (kommando) # Skrivning af byte på Serial-Port

Parsing af data tager også tid (for eksempel at tolke fire bytes "1", "2", "3" og "0" som int 1230, ikke som fire forskellige tegninger), og det er bedre at gøre det ikke på Arduino.

På Arduino-siden hentes de sendte oplysninger som følger:

hvis (Serial.available ()> 1) {// Hvis serielle data er tilgængelige, indtastes sløjfen c = Serial.read (); // Den første byte (antal servoer) gemmes i en variabel Micros = Serial.read (); // Servoens position gemmes her Mikro = Mikro * 10; }

Anbefalede: