Acest tutorial face parte din: Lecția 107 28BYJ-48 Stepper 8 Proiecte
Acest videoclip are 8 proiecte. Fiecare proiect are cod separat. Linkuri către alte videoclipuri se găsesc sub acest articol.
Lecția 107-8: Controlul vitezei unui motor pas cu pas 28BYJ-48 folosind un potențiometru
Proiectul 8: Controlul motorului pas cu pas folosind un potențiometru – motorul pas cu pas 28BYJ-48
Acest articol prezintă partea finală a seriei de 8 proiecte privind controlul motorului pas cu pas 28BYJ-48 cu Arduino. În Proiectul 8, motorul pas cu pas este controlat printr-un potențiometru, care permite utilizatorului să schimbe dinamic viteza și direcția motorului prin simpla rotire a butonului. Această metodă de intrare analogică este o abordare intuitivă și versatilă de control, aplicabilă pe scară largă în robotică și sisteme de control al mișcării.
Schemele complete de conexiuni și codul pentru acest proiect sunt disponibile pentru descărcare mai jos, în articol.
📘 Introducere
Această configurație folosește un potențiometru analogic conectat la un Arduino pentru a citi valori variabile de tensiune între 0 și 1023. Pe baza acestei intrări, viteza și direcția motorului sunt ajustate dinamic:
-
Rotirea potențiometrului în sensul acelor de ceasornic crește viteza într-o direcție.
-
Rotirea în sens invers acelor de ceasornic inversează direcția.
⚙️ Conexiuni
Acest proiect conectează potențiometrul și motorul pas cu pas la Arduino după cum urmează:
-
Pinul din mijloc al potențiometrului → Pinul analogic A0
-
Celelalte două fire → 5V și GND
-
Driverul ULN2003 → Pinii 8, 10, 9, 11 pentru motorul pas cu pas
Legendă: Conexiunile Proiectului 8: Potențiometrul citește intrarea analogică pentru a controla viteza și direcția.
💻 Explicația codului
Codul citește valorile analogice și le convertește în viteză și direcție:
-
Includeți biblioteca și definiți pinii:
#include <Stepper.h>
const int stepsPerRevolution = 2048;
Stepper myStepper(stepsPerRevolution, 8, 10, 9, 11);
-
Funcția Setup:
void setup() {
Serial.begin(9600);
myStepper.setSpeed(10);
}
-
Funcția Loop cu control prin potențiometru:
void loop() {
int sensorValue = analogRead(A0);
int speed = map(sensorValue, 0, 1023, -15, 15);
if (speed != 0) {
myStepper.setSpeed(abs(speed));
myStepper.step((speed > 0) ? 1 : -1);
}
delay(2);
}
-
Funcția
map()convertește valorile 0–1023 în -15 până la +15 RPM. -
Viteza și direcția se schimbă în timp real pe măsură ce potențiometrul este rotit.
-
abs(speed)asigură o valoare pozitivă a RPM; direcția este gestionată înstep().
🎬 Momente din videoclipul complet
Iată momentele cheie din videoclip pentru acest proiect:
-
1:39:24 – Proiectul 8: Introducere
-
1:40:58 – Proiectul 8: Conexiuni
-
1:44:04 – Proiectul 8: Cod
-
1:53:19 – Proiectul 8: Demonstrație
Acest tutorial face parte din: Lecția 107 28BYJ-48 Stepper 8 Proiecte
- Lecția 107-1: Pornirea și oprirea motorului pas cu pas 28BYJ-48 cu direcția setată în cod
- Lecția 107-2: Controlul unui motor pas cu pas 28BYJ-48 prin monitorul serial
- Lecția 107-3: Controlul unui motor pas cu pas 28BYJ-48 folosind trei butoane: CW, CCW și Stop (STPB-1)
- Lecția 107-4: Controlul unui motor pas cu pas 28BYJ-48 folosind două butoane, CW, CCW (apăsat continuu), STPB-2
- Lecția 107-5: Trimiteți motorul 28BYJ-48 pentru o revoluție în sensul acelor de ceasornic sau în sens invers, STPB-3
- Lecția 107-6: Controlul unui motor pas cu pas 28BYJ-48 folosind trei butoane, cu unghi și viteză STPB-4
- Lecția 107-7: Trimiterea unui motor pas cu pas 28BYJ-48 la orice unghi cu butoanele apăsătoare definite STPB-5
++
/*
* Lesson 107-8: * This is Arduino code to control the speed of a 28BYJ-48
* stepper motor with a potentiometer.
See the video for details and a demonstration.
In this lesson, we learn how to use a mini stepper motor, the 28BYJ-48, for our projects. I am presenting eight projects
so you can use it in almost any application. In the video, I have explained the code, shown the full wiring diagram, and
how to connect the wires, push buttons, and breadboard.
Project 1: Running motor
Project 2: Controlling stepper motor from Serial Monitor
Project 3: Controlling stepper motor using push button STPB-1
Project 4: Controlling using push button STPB-2 keep pressing
Project 5: One Revolution using push button STPB-3
Project 6: Push button for any angle and speed STPB-4
Project 7: Using multiple buttons for any angle STPB-5 (angle, speed and direction)
Project 8: Controlling stepper motor using potentiometer (this code)
* Watch the video instruction for this code: https://youtu.be/TQ7R2bY-MWU
*
* This code is part of the Arduino Step by Step Course, which starts here: https://youtu.be/-6qSrDUA5a8
*
* For the library for this code, visit http://robojax.com/
*
If you found this tutorial helpful, please support me so I can continue creating
content like this. Make a donation using PayPal or a credit card: https://bit.ly/donate-robojax
* Written by Ahmad Shamshiri for Robojax Robojax.com
* on June 30, 2019 at 19:04 in Ajax, Ontario, Canada
*
*
* * This code is "AS IS" without warranty or liability. Free to be used as long as you keep this note intact.*
* This code has been downloaded from Robojax.com
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
const int desiredValue = 20;//time in sec for a Revolution
const int dir = 2; // 1 for CW and 2 for CCW
int Pin1 = 10;//IN1 is connected to 10
int Pin2 = 11;//IN2 is connected to 11
int Pin3 = 12;//IN3 is connected to 12
int Pin4 = 13;//IN4 is connected to 13
int potPin = A0;// center pin of pot is connected to this pin
int vcc2 = 2;// additional 5V for potentiometer
int pole1[] ={0,0,0,0, 0,1,1,1, 0};//pole1, 8 step values
int pole2[] ={0,0,0,1, 1,1,0,0, 0};//pole2, 8 step values
int pole3[] ={0,1,1,1, 0,0,0,0, 0};//pole3, 8 step values
int pole4[] ={1,1,0,0, 0,0,0,1, 0};//pole4, 8 step values
int poleStep = 0;
int calcDelayfromTime(int t);
void driveStepper(int c);
int N = calcDelayfromTime(desiredValue);
void setup()
{
pinMode(Pin1, OUTPUT);//define pin for ULN2003 in1
pinMode(Pin2, OUTPUT);//define pin for ULN2003 in2
pinMode(Pin3, OUTPUT);//define pin for ULN2003 in3
pinMode(Pin4, OUTPUT);//define pin for ULN2003 in4
pinMode(vcc2, OUTPUT);//define pin as output for 5V for pot
digitalWrite(vcc2, HIGH);//set vcc2 pin HIGH to have 5V for pot
Serial.begin(9600);
Serial.println("Robojax Stepper Control");
Serial.print("Max time per rev set: ");
Serial.print(desiredValue);
Serial.print(" loop delay: ");
Serial.println(N);
delay(4000);//give use time to read
}// setup
void loop()
{
// Robojax Stepper code S8BYJ-48
if(dir ==1){
poleStep++;
driveStepper(poleStep);
}else if(dir ==2){
poleStep--;
driveStepper(poleStep);
}else{
driveStepper(8);
}
if(poleStep>7){
poleStep=0;
}
if(poleStep<0){
poleStep=7;
}
int potValue =analogRead(potPin);// read potentiometer value
int speed = map(potValue,0, 1023, 1,N);
delay(speed);
}// loop
int calcDelayfromTime(int t){
return ((t-5)/4)+1;
}//
/*
* @brief sends signal to the motor
* @param c is an integer representing the pole of the motor
* @return does not return anything
*
* www.Robojax.com code June 2019
*/
void driveStepper(int c)
{
digitalWrite(Pin1, pole1[c]);
digitalWrite(Pin2, pole2[c]);
digitalWrite(Pin3, pole3[c]);
digitalWrite(Pin4, pole4[c]);
}//driveStepper end here
Lucruri de care ai putea avea nevoie
-
Amazon
-
Amazon
-
AliExpressPurchase 5 pcs 28BYJ-48 stepper motors from AliExpresss.click.aliexpress.com
Resurse și referințe
-
Extern
-
Extern
-
Extern
Fișiere📁
Fișier Fritzing
-
28BYJ-48 Stepper Motor
28BYJ-48 Stepper Motor.fzpz0.01 MB