Cuprins:
2025 Autor: John Day | [email protected]. Modificat ultima dată: 2025-01-23 15:04
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:
Ridicarea motorului pas cu pas controlat de IR: 15 trepte
Ridicarea motorului pas cu pas controlat de IR: trebuia să automatizez ridicarea unei imagini mari care ascunde un televizor montat deasupra unui șemineu. Imaginea este montată pe un cadru glisant personalizat din oțel care folosește frânghii, scripeți și contragreutăți, astfel încât să poată fi ridicat manual. Sună bine în teorie, dar inc
Locomotivă model controlată cu motor pas cu pas - Motor pas cu pas ca codificator rotativ: 11 pași (cu imagini)
Locomotivă controlată cu motor pas cu pas | Motorul pas cu pas ca codificator rotativ: Într-unul din manualele anterioare, am învățat cum să folosim un motor pas cu pas ca codificator rotativ. În acest proiect, vom folosi acum acel motor pas cu pas rotit pentru a controla un model de locomotivă folosind un microcontroler Arduino. Deci, fără fu
Motor pas cu pas Motor controlat pas cu pas Motor pas cu pas ca codificator rotativ: 11 pași (cu imagini)
Motor pas cu pas Motor controlat pas cu pas Motor pas cu pas ca codificator rotativ: Aveți câteva motoare pas cu pas în jur și doriți să faceți ceva? În acest manual, să folosim un motor pas cu pas ca un codificator rotativ pentru a controla poziția unui alt motor pas cu pas folosind un microcontroler Arduino. Deci, fără alte întrebări, hai să
Controlul motorului pas cu pas cu Arduino: 8 pași
Controlul motorului pas cu pas cu Arduino: Salut les Makers :) c'est Maker3.0Notre premier " instructable " este un mic proiect care vă permite să controleze un pasiv la pas " Stepper Motor " sa vitesse son sens de rotation și cela de façon manuelle ou automatique
Dispozitiv de testare a motorului pas cu pas: 3 pași
Dispozitiv de testare a motorului pas cu pas: am avut puțină sau deloc experiență în conducerea motoarelor pas cu pas, așa că înainte de a proiecta, tipări, asambla și programa programul ceasului analogic de corecție automată „Antique” (https://www.instructables.com/id/Antique-Auto-Correcting -Analog-Clock /) folosind un motor pas cu pas