Cuprins:

Control pozițional unghiular al motorului pas cu pas 28BYJ-48 cu Arduino și joystick analogic: 3 pași
Control pozițional unghiular al motorului pas cu pas 28BYJ-48 cu Arduino și joystick analogic: 3 pași

Video: Control pozițional unghiular al motorului pas cu pas 28BYJ-48 cu Arduino și joystick analogic: 3 pași

Video: Control pozițional unghiular al motorului pas cu pas 28BYJ-48 cu Arduino și joystick analogic: 3 pași
Video: What is Servo Motor 2024, Iulie
Anonim
Control pozițional unghiular al motorului pas cu pas 28BYJ-48 cu Arduino și joystick analogic
Control pozițional unghiular al motorului pas cu pas 28BYJ-48 cu Arduino și joystick analogic

Aceasta este o schemă de control pentru motorul pas cu pas 28BYJ-48 pe care am dezvoltat-o pentru a o folosi ca parte a proiectului meu final de disertație. Nu am văzut acest lucru până acum, așa că m-am gândit că voi încărca ceea ce am descoperit. Sperăm că acest lucru va ajuta pe altcineva acolo!

Codul permite practic unui motor pas cu pas să „copieze” poziția unghiulară a unui joystick analogic, adică dacă împingeți joystick-ul înainte, motorul îndreaptă spre „nord”. împingeți joystick-ul spre vest, motorul se rotește pentru a indica în aceeași direcție.

Pentru implementarea mea, am cerut ca, dacă joystick-ul este eliberat, adică nu are poziție unghiulară, motorul revine în direcția „acasă”. Direcția de acasă este orientată spre est, iar motorul (sau la închiriere orice indicator / dispozitiv pe care l-ați atașat la arborele de ieșire!) Trebuie să fie, de asemenea, orientat către această direcție atunci când este pornit.

Provizii

Arduino Uno sau similar

panou de testare și selecție de fire jumper (de la bărbat la bărbat, de la bărbat la feminin)

Alimentare 5V

Modulul joystick-ului analogic (ideal cu o funcție de buton momentan, acest lucru vă permite să vă odihniți mai ușor poziția „acasă”

Motor pas cu pas 28BYJ-48 și driver pas cu pas ULN2003

Stilou, hârtie și blu-tac (sau orice alt dispozitiv de pointer pentru a fi atașat la motor!)

Pasul 1: Pasul 1: Configurarea

Conectați motorul pas cu pas la driverul pas cu pas și conectați pinii după cum urmează:

IN1 - pinul 8 Arduino

IN2 - Pinul 9 Arduino

IN3 - Pinul 10 Arduino

IN4 - Pinul Arduino 11

Conectați sursa de alimentare de 5v la șinele de alimentare de pe placa dvs. și conectați intrările ULN2003 5v la șinele de alimentare. conectați șina de la sol la Arduino.

pentru joystick, conectați-vă după cum urmează:

Switch pin - Arduino pin 2

Axa X - Arduino A0 (analog în 0)

Axa Y - Arduino A1

+ 5V - ieșire Arduino 5V

GND - Arduino GND

În cele din urmă, conectați pământul panoului dvs. la celălalt pin Arduino GND

Pasul 2: Pasul 2: Explicarea codului

Am inclus codul Arduino complet pentru descărcare și utilizare. Dar voi face tot posibilul să explic părțile pertinente aici.

Teoria din spatele acestui cod este că spațiul ocupat de joystick este împărțit într-un grafic, cu 0, 0 în centru. cu toate acestea, intrările joystick-ului stau la (aproximativ) 512 în centru, astfel încât pentru a depăși aceste două funcții sunt utilizate pentru a „zero” valoarea citită de pe axa X și Y. în funcție de sursa de alimentare pe care o utilizați, poate fi necesar să modificați valorile din funcțiile ZeroX și ZeroY, astfel încât joystick-ul dvs. să dea o citire fiabilă de 0 atunci când vă odihniți.

Când se citesc valorile X, Y, acestea sunt mai întâi convertite în radiani folosind funcția atan2 () din biblioteca math.h. Explicarea acestei funcții nu intră în sfera acestei instrucțiuni, dar vă rugăm să căutați - este un truc destul de simplu de geometrie!

În cele din urmă, pentru a face viața mai ușoară pentru aceia dintre noi care obișnuiau să lucreze mai degrabă în grade decât în rads, valoarea rad calculată de atan2 () este convertită în grade.

În partea de sus a buclei este un mic fragment de cod care vă permite să faceți clic pe butonul momentan de pe joystick pentru a muta locația „acasă”. Acest lucru a fost incredibil de util în timpul testării codului, dar l-am lăsat așa cum pot vedea cum ar putea fi util în unele cazuri.

Acum intră în cea mai mare parte a codului! începem citind joystick-ul X, coordonatele Y separate de două ori printr-o întârziere de 10 ms și apoi verificând dacă acestea sunt aceleași - am constatat că joystick-ul ar produce, ocazional, citiri sporadice, iar această ușoară întârziere a fost suficientă pentru a opri rotirea motorului pe baza acestor. Este, de asemenea, o întârziere suficient de scurtă încât să nu pară să interfereze cu intrările intenționate.

Restul codului este destul de explicativ și am făcut tot posibilul să îl documentez; O serie de afirmații IF compară unghiul actual al joystick-ului cu unghiul motorului și mută motorul în acel unghi. 28BYJ-48 are 5.689 de pași pe grad, deci de aceea înmulțim mișcarea necesară cu acest număr aparent impar!

Singura parte a codului care necesită cele mai multe explicații este ceea ce am numit „cazul împachetării”. În același moment în care joystick-ul și motorul erau de ex. + 175 °, iar joystick-ul s-a mutat ulterior la -175 ° (o mișcare de doar 10 ° pe joystick, de la nord-vest la sud de vest), motorul s-ar deplasa ÎN DIRECȚIA GREȘITĂ cu 350 °! pentru a explica acest lucru, a fost scris cazul special.

Cazul înfășurat începe prin verificarea faptului că motorul și joystick-ul au semne opuse, adică motorul este pozitiv și joystick-ul negativ sau invers. De asemenea, verifică dacă suma absolută (adică a valorilor pozitive) a joystick-ului și a motorului sunt peste 180 °.

Dacă ambele afirmații sunt adevărate, funcția verifică atunci dacă motorul trebuie să se deplaseze în sensul acelor de ceasornic (valoarea motorului este negativă) sau în sens invers acelor de ceasornic (dacă valoarea motorului este pozitivă).

Valorile absolute ale unghiului motorului și ale unghiului joystick-ului sunt totalizate și scăzute de la 360 ° pentru a determina distanța de deplasare. În cele din urmă, unghiul motorului (care reflectă acum unghiul joystick-ului) este actualizat ca atare.

Pasul 3: FINALIZAT

Deci, nu mai rămâne decât să încărcați codul pe Arduino și să îl rulați! Vedeți videoclipul de mai sus pentru o idee bună despre modul în care funcționează proiectul. Acest lucru ar fi util pentru cardanele camerei, brațele robotizate și multe alte aplicații!

Dacă utilizați codul, vă rog să-mi spuneți și dacă vedeți unde codul poate fi îmbunătățit, mi-ar plăcea să vă aud feedbackul.

Recomandat: