Taula de continguts:

Servodriver-Board amb Python-GUI i Arduino: 5 passos
Servodriver-Board amb Python-GUI i Arduino: 5 passos

Vídeo: Servodriver-Board amb Python-GUI i Arduino: 5 passos

Vídeo: Servodriver-Board amb Python-GUI i Arduino: 5 passos
Vídeo: Episode 6: Stepper Motor Control with GUI using Python - Arduino Com 2024, De novembre
Anonim
Servodriver-Board Amb Python-GUI i Arduino
Servodriver-Board Amb Python-GUI i Arduino

Quan es fan prototips o es construeixen models d’avions, sovint es troba el problema, que ha de comprovar el recorregut del servo o posar els servos a la posició mitjana.

En cas que no vulgueu acumular tot el vostre sistema RC o provar, fins a quin punt podeu empènyer el servo o on es troba la posició mitjana, llavors aquest tauler és per a vosaltres. Us permet moure el servo a posicions especificades o bé anem cap enrere i cap enrere.

Funciona sorprenentment, fins i tot amb 6 servos que corren d'una posició a una altra al bucle.

A més, és un bon projecte per aprendre sobre la comunicació entre Python-GUI i Arduino mitjançant Serial.

Pas 1: què necessiteu …

Per a aquest projecte, necessitareu el següent:

Maquinari

  • Arduino nano amb cable. He utilitzat un clon i el codi Python realment espera un xip CH340 d’un clon
  • Una placa de prototipatge. N’hi ha prou amb 7x5cm
  • Alguns capçals i pins de 2, 54 mm
  • 1-6 servos
  • Font d'alimentació per als servos (he utilitzat una bateria amb 4 bateries)

Programari

  • Python 3:
  • Un controlador USB per als xips CH340: només necessiteu google per als controladors CH340
  • ID Arduino:

Pas 2: Soldar la Junta

Soldant la Junta
Soldant la Junta

La soldadura és realment senzilla segons Fritzing a la imatge. Assegureu-vos que podeu connectar els servos fàcilment a les files de 3 pins.

  • Les files de 3 pins s’uneixen als pins digitals 3, 5, 6, 9, 10 i 11 de l’Arduino nano.
  • El cable vermell està unit al pin de 5V de l’Arduino
  • El cable negre està connectat al pin GND de l’Arduino
  • El parell de pins a sota de les files de 3 pins està dissenyat per connectar una font d’alimentació típica del receptor RC; podeu afegir connectors com vulgueu, com ara terminals de rosca, connectors XT, JST o … o …

Personalment, m’agraden les files de capçaleres femenines per posar l’Arduino, però això depèn de vosaltres.

Tingueu en compte que les capçaleres femenines en curtcircuit són un pont, que us permet subministrar el servo mitjançant la font de 5 V de l’Arduino per a proves. Si el coleu massa, l'Arduino es restablirà i perdrà el ritme adequat. S’han d’eliminar abans de connectar una altra font d’alimentació.

Pas 3: Configuració de l'Arduino

Instal·leu l'Arduino IDE i feu flaixar Arduino nano amb l'esbós adjunt.

Pas 4: Configuració de Python

Configuració de Python
Configuració de Python

Instal·leu Python 3 després de descarregar-lo. Assegureu-vos de marcar l'opció per crear una variable "PATH".

Cal instal·lar dos paquets més amb pip. Per a això, premeu la tecla "Windows", escriviu "cmd" i premeu "enter". Al símbol del sistema, escriviu les ordres següents:

  • pip instal·la la sèrie
  • piip instal·lar pyserial
  • pip install tkinter

Com podeu veure, necessito tant els mòduls sèrie com pyserial, que probablement no siguin els més eficients, ja que pyserial hauria de substituir la sèrie. Tot i això, funciona i estic començant a aprendre;).

Obriu Python-Script a l'IDE i executeu-lo, o executeu-lo directament des del terminal.

Al menú desplegable, podeu triar entre dos modes, "Ves directament" i "Ping Pong":

  • Ves directament: introdueix una posició de servo en microsegons a la primera columna i prem "Inici" per fer que el servo es mogui a la posició especificada.
  • Ping Pong: introduïu un límit inferior i un límit superior a la segona i tercera columna. Aquesta és la posició inferior i superior, entre les quals el servo anirà i tornarà. A la columna "Temps de Ping Pong" podeu especificar un temps en mil·lisegons que el servo esperarà quan hagi assolit la posició superior o inferior. Feu clic a "Inici" i el servo començarà a moure's cap endavant i cap enrere, premeu "Stop" i el servo s'aturarà.

Pas 5: On succeeix la màgia

Per últim, però no menys important, vull assenyalar alguns dels detalls del codi per a aquells que vulguin entrar en una mica de comunicació en sèrie entre Python i Arduino.

Ara, què passa al programa Python?

Primer de tot, el programa comprova què s’adjunta als ports COM d’aquesta línia i el desa en una llista:

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

Després passa per la llista fins que troba un famós xip CH340, el desa i, a continuació, estableix una connexió sèrie després del bucle for. Tingueu en compte que el bucle for es trenca tan aviat com es troba el primer CH340.

per p a self. COMPortsList: si "CH340" a p [1]: # Cerqueu un clon Arduino self. COMPort = p [0] break else: pass self. Ser = serial. Serial (self. COMPort, 57600)

La connexió sèrie s’estableix amb el port COM amb una velocitat de transmissió de 57600.

I què fa el codi Arduino? Bé, donat que l'Arduino només té un port COM, la connexió sèrie només és una línia:

Serial.begin (57600);

Ara, podem utilitzar els dos ports per comunicar-nos. En aquest cas, només els missatges de Python a Arduino. Els missatges s’envien aquí des de Python. La connexió sèrie transmet els bytes per defecte. Aquesta és també la forma més ràpida d’enviar dades i, pel que sé, encara està força estesa. Per tant, les intes del nombre del servo (per tant, l’Arduino sap quin servo s’ha de moure) i la posició en microsegons es converteixen en un byte.

Command = struct.pack ('> B', self. Place) # La variable int "self. Place" es converteix en un byte

self. Ser.write (Ordre) # Escriptura del byte a l'ordre de port sèrie = int (self. ServoPos.get ()) // 10 # Llegint l'entrada des del camp i gireu int Ordre = struct.pack (' > B ', ordre) # Girar l'int en un byte self. Ser.write (ordre) # Escriure el byte al port sèrie

A més, analitzar les dades requereix temps (per exemple, interpretar quatre bytes "1", "2", "3" i "0" com a int 1230, no com a quatre caràcters diferents) i és millor fer-ho no a l'Arduino.

Al costat d'Arduino, la informació enviada es recull de la manera següent:

if (Serial.available ()> 1) {// Si hi ha dades de sèrie disponibles, s'introdueix el bucle c = Serial.read (); // El primer byte (nombre de servo) es desa en una variable Micros = Serial.read (); // Aquí es guarda la posició del servo Micros = Micros * 10; }

Recomanat: