Taula de continguts:

Control de posició angular del motor pas a pas 28BYJ-48 amb Arduino i joystick analògic: 3 passos
Control de posició angular del motor pas a pas 28BYJ-48 amb Arduino i joystick analògic: 3 passos

Vídeo: Control de posició angular del motor pas a pas 28BYJ-48 amb Arduino i joystick analògic: 3 passos

Vídeo: Control de posició angular del motor pas a pas 28BYJ-48 amb Arduino i joystick analògic: 3 passos
Vídeo: CONTROL DE POSICION MOTOR PASO A PASO, POR REALIMENTACION DE POTENCIOMETRO 2024, Juliol
Anonim
Control de posició angular del motor pas a pas 28BYJ-48 amb Arduino i joystick analògic
Control de posició angular del motor pas a pas 28BYJ-48 amb Arduino i joystick analògic

Aquest és un esquema de control per al motor pas a pas 28BYJ-48 que he desenvolupat per utilitzar-lo com a part del meu projecte final de dissertació. No ho he vist abans, així que vaig pensar que penjaria el que vaig descobrir. Amb sort, això ajudarà algú més.

El codi permet bàsicament a un motor pas a pas "copiar" la posició angular d'un joystick analògic, és a dir, si empeny el joystick cap endavant, el motor apunta cap al "nord". empenyeu el joystick cap a l'oest, el motor gira per apuntar en la mateixa direcció.

Per a la meva implementació, he exigit que, si es deixa anar el joystick, és a dir, no té cap posició angular, el motor torni a la direcció "casa". La direcció de casa és cap a l’est i el motor (o en arrendament qualsevol punter / dispositiu que tingueu connectat a l’eix de sortida!) També ha d’estar orientat cap a aquesta direcció quan s’encén.

Subministraments

Arduino Uno o similar

taulers de selecció i selecció de cables de pont (home a home, home a dona)

Alimentació de 5V

Mòdul de joystick analògic (idealment amb una funció de botó instantani momentània, això facilita el descans de la posició "casolana"

Motor pas a pas 28BYJ-48 i controlador pas a pas ULN2003

Bolígraf, paper i blu-tac (o qualsevol altre dispositiu punter per connectar al motor!)

Pas 1: Pas 1: Configuració

Connecteu el motor pas a pas al controlador pas a pas i connecteu els pins de la següent manera:

IN1: pin 8 d'Arduino

IN2: pin 9 d'Arduino

IN3 - Pin 10 d'Arduino

IN4: pin 11 d'Arduino

Connecteu la font d'alimentació de 5v als rails de subministrament de la vostra placa de connexió i connecteu les entrades de 5v d'ULN2003 als rails de subministrament. connecteu el rail de terra a terra del vostre Arduino.

per al joystick, connecteu-vos de la següent manera:

Pin de commutació: pin Arduino 2

Eix X - Arduino A0 (analògic en 0)

Eix Y: Arduino A1

+ 5V: sortida Arduino de 5V

GND: Arduino GND

Finalment, connecteu la terra de la vostra taula de treball a l’altre pin Arduino GND

Pas 2: Pas 2: explicació del codi

He inclòs el codi Arduino complet per descarregar i utilitzar. Però faré tot el possible per explicar aquí les parts pertinents.

La teoria darrere d’aquest codi és que l’espai que ocupa el joystick es divideix en un gràfic, amb 0, 0 al centre. tanmateix, les entrades del joystick es troben a (aproximadament) 512 al centre, de manera que per superar això s'utilitzen dues funcions per "zero" el valor llegit des de l'eix X i Y. depenent de la font d'alimentació que utilitzeu, potser haureu d'alterar els valors de les funcions ZeroX i ZeroY perquè el vostre joystick doni una lectura fiable de 0 quan descanseu.

Quan es llegeixen els valors X, Y, primer es converteixen en radians mitjançant la funció atan2 () de la biblioteca math.h. Explicar aquesta funció està fora de l’abast d’aquesta instrucció, però si us plau, aneu a buscar-la: és un truc de geometria força senzill.

Finalment, per facilitar la vida a aquells que solíem treballar en graus en lloc de rads, el valor rad calculat per atan2 () es converteix en graus.

A la part superior del bucle hi ha un petit fragment de codi que us permet fer clic al botó momentani del joystick per moure la ubicació "de casa". Això va ser increïblement útil en provar el codi, però l’he deixat perquè puc veure com en alguns casos pot ser útil.

Ara es troba al gruix principal del codi. Comencem llegint el joystick X, coordenades Y separades dues vegades per un retard de 10 ms i després comprovant si són iguals. Vaig trobar que el joystick produïa ocasionalment lectures esporàdiques, i aquest lleu retard era suficient per aturar el gir del motor basat en aquestes. També és un retard prou curt que no sembla que interfereixi amb les entrades intencionals.

La resta del codi s’explica per si mateix i he fet tot el possible per documentar-lo; Una sèrie d’afirmacions IF comparen l’angle actual del joystick amb l’angle del motor i mouen el motor a aquest angle. El 28BYJ-48 té 5.689 passos per grau, de manera que multiplicem el moviment requerit per aquest nombre aparentment senar.

L’única part del codi que requereix més explicació és el que he batejat amb el nom de “cas global”. Tot i que el joystick i el motor es trobaven en, per exemple, + 175 °, i el joystick es va moure posteriorment a -175 ° (un moviment de només 10 ° al joystick, des del nord oest fins al sud oest), el motor es mouria EN LA DIRECCIÓ MAL A 350 °. per explicar això, es va escriure el cas especial.

El cas envoltant comença comprovant que el motor i el joystick tenen signes oposats, és a dir, el motor és positiu i el joystick negatiu, o viceversa. També comprova que la suma dels valors absoluts (és a dir, positius) del joystick i del motor estan per sobre de 180 °.

Si aquestes dues afirmacions són certes, la funció comprova si el motor necessita moure's en sentit horari (el valor del motor és negatiu) o en sentit antihorari (si el valor del motor és positiu).

Els valors absoluts de l'angle del motor i l'angle del joystick es sumen i es resten de 360 ° per determinar la distància a moure. Finalment, l'angle del motor (que ara reflecteix l'angle del joystick) s'actualitza com a tal.

Pas 3: ACABAT

Per tant, només queda carregar el codi al vostre Arduino i executar-lo. Vegeu el vídeo anterior per obtenir una bona idea de com funciona el projecte. Això seria útil per a càmeres cardanals, braços robòtics i moltes altres aplicacions.

Si utilitzeu el codi, feu-m'ho saber i, si veieu algun lloc on es pot millorar el codi, m'agradaria escoltar els vostres comentaris.

Recomanat: