INHOUDSOPGAWE:

Servodriver-bord met Python-GUI en Arduino: 5 stappe
Servodriver-bord met Python-GUI en Arduino: 5 stappe

Video: Servodriver-bord met Python-GUI en Arduino: 5 stappe

Video: Servodriver-bord met Python-GUI en Arduino: 5 stappe
Video: When Student use phone in class #shortsyoutube #shorts #students #comedy #jennyslectures 2024, November
Anonim
Servodriver-bord met Python-GUI en Arduino
Servodriver-bord met Python-GUI en Arduino

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

Soldeer die bord
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

Stel Python op
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: