Sommario:

Controllo della posizione angolare del motore passo-passo 28BYJ-48 con Arduino e joystick analogico: 3 passaggi
Controllo della posizione angolare del motore passo-passo 28BYJ-48 con Arduino e joystick analogico: 3 passaggi

Video: Controllo della posizione angolare del motore passo-passo 28BYJ-48 con Arduino e joystick analogico: 3 passaggi

Video: Controllo della posizione angolare del motore passo-passo 28BYJ-48 con Arduino e joystick analogico: 3 passaggi
Video: ESPSTP-2 Отправить шаговый двигатель через WiFi с ESP32 на любой угол 2024, Luglio
Anonim
Controllo della posizione angolare del motore passo-passo 28BYJ-48 con Arduino e joystick analogico
Controllo della posizione angolare del motore passo-passo 28BYJ-48 con Arduino e joystick analogico

Questo è uno schema di controllo per il motore passo-passo 28BYJ-48 che ho sviluppato per essere utilizzato come parte del mio progetto di tesi dell'ultimo anno. Non l'avevo mai visto prima, quindi ho pensato di caricare ciò che ho scoperto. Speriamo che questo aiuti qualcun altro là fuori!

Il codice permette sostanzialmente ad un motore passo-passo di "copiare" la posizione angolare di un joystick analogico, cioè se si spinge il joystick in avanti, il motore punta verso "nord". spingere il joystick verso ovest, il motore ruota per puntare nella stessa direzione.

Per la mia implementazione ho richiesto che se il joystick viene rilasciato, cioè non ha posizione angolare, il motore ritorna nella direzione "home". La direzione home è rivolta a est e anche il motore (o almeno qualsiasi puntatore/dispositivo collegato all'albero di uscita!) deve essere rivolto in questa direzione quando è acceso.

Forniture

Arduino Uno o simili

breadboard e selezione di ponticelli (maschio a maschio, maschio a femmina)

Alimentazione 5V

Modulo joystick analogico (idealmente con una funzione di pulsante momentaneo, questo facilita il riposo della posizione "home"

Motore passo-passo 28BYJ-48 e driver passo-passo ULN2003

Penna, carta e blu-tac (o qualsiasi altro dispositivo puntatore da attaccare al motore!)

Passaggio 1: Passaggio 1: Configurazione

Collegare il motore passo-passo al driver passo-passo e collegare i pin come segue:

IN1 - Arduino pin 8

IN2 - Arduino pin 9

IN3 - Pin Arduino 10

IN4 - Arduino pin 11

Collega il tuo alimentatore 5v ai binari di alimentazione sulla breadboard e collega gli ingressi 5v ULN2003 ai binari di alimentazione. collega il binario di terra a terra sul tuo Arduino.

per il joystick, collegare come segue:

Interruttore pin - Arduino pin 2

Asse X - Arduino A0 (Analogico in 0)

Asse Y - Arduino A1

+5V - Uscita Arduino 5V

GND - Arduino GND

Infine collega la massa della tua breadboard all'altro pin GND di Arduino

Passaggio 2: Passaggio 2: Spiegazione del codice

Ho incluso il codice Arduino completo da scaricare e utilizzare. Ma farò del mio meglio per spiegare qui le parti pertinenti.

La teoria alla base di questo codice è che lo spazio occupato dal joystick è suddiviso in un grafico, con 0, 0 al centro. tuttavia gli ingressi del joystick si trovano a (circa) 512 al centro, quindi per ovviare a questo si utilizzano due funzioni per "azzerare" il valore letto dagli assi X e Y. a seconda dell'alimentatore utilizzato potrebbe essere necessario modificare i valori nelle funzioni ZeroX e ZeroY in modo che il joystick fornisca una lettura affidabile di 0 a riposo.

Quando i valori X, Y vengono letti, vengono prima convertiti in radianti utilizzando la funzione atan2() nella libreria math.h. Spiegare questa funzione è al di fuori dello scopo di questo istruibile, ma per favore vai a cercarlo - è un trucco di geometria piuttosto semplice!

Infine, per semplificare la vita a quelli di noi che erano soliti lavorare in gradi anziché in rad, il valore rad calcolato da atan2() viene convertito in gradi.

Nella parte superiore del ciclo c'è un piccolo frammento di codice che ti consente di fare clic sul pulsante momentaneo sul joystick per spostare la posizione "casa". Questo è stato incredibilmente utile durante il test del codice, ma l'ho lasciato perché posso vedere come potrebbe essere utile in alcuni casi.

Ora sulla maggior parte del codice! iniziamo leggendo le coordinate X, Y del joystick due volte separate da un ritardo di 10 ms e quindi controllando se sono le stesse - ho scoperto che il joystick emetteva occasionalmente letture sporadiche e questo leggero ritardo era sufficiente per fermare il motore in base a queste. È anche un ritardo abbastanza breve da non interferire con gli input intenzionali.

Il resto del codice è piuttosto autoesplicativo e ho fatto del mio meglio per documentarlo; Una serie di istruzioni IF confronta l'angolo corrente del joystick con l'angolo del motore e sposta il motore su quell'angolo. Il 28BYJ-48 ha 5.689 passi per grado, ecco perché moltiplichiamo il movimento richiesto per questo numero apparentemente dispari!

L'unica parte del codice che richiede più spiegazioni è quella che ho soprannominato il "caso avvolgente". Nel caso in cui il joystick e il motore fossero ad es. +175°, e il joystick successivamente si è spostato a -175° (un movimento di soli 10° sul joystick, da appena a nord di ovest a appena a sud di ovest), il motore si sposterebbe NELLA DIREZIONE SBAGLIATA di 350°! per tener conto di ciò è stato scritto il caso speciale.

Il caso avvolgente inizia verificando che motore e joystick abbiano segni opposti, ovvero il motore sia positivo e il joystick negativo, o viceversa. Verifica inoltre che la somma dei valori assoluti (cioè positivi) del joystick e del motore sia superiore a 180°.

Se entrambe queste affermazioni sono vere, la funzione verifica se il motore deve muoversi in senso orario (il valore del motore è negativo) o antiorario (se il valore del motore è positivo).

I valori assoluti dell'angolo del motore e dell'angolo del joystick vengono sommati e sottratti da 360° per determinare la distanza da percorrere. Infine, l'angolo del motore (che ora riflette l'angolo del joystick) viene aggiornato come tale.

Fase 3: FINITO

Quindi, tutto ciò che resta da fare è caricare il codice sul tuo Arduino ed eseguirlo! Guarda il video qui sopra per una buona idea di come funziona il progetto. Questo sarebbe utile per i gimbal della fotocamera, i bracci robotici e molte altre applicazioni!

Se usi il codice, per favore fammelo sapere, e se vedi dove il codice può essere migliorato, mi piacerebbe sentire il tuo feedback.

Consigliato: