Hierdie tutorialie is deel van: Les 107 28BYJ-48 Stepper 8 Projekte
Hierdie video het 8 projekte. Elke projek het aparte kode. Skakels na ander video's is onder hierdie artikel.
Les 107-8: Beheer van die Spoed van 'n 28BYJ-48-trapmotor deur 'n Potensiometer te gebruik
Projek 8: Beheer van Stapmotor met 'n Potensiometer – 28BYJ-48 Stapmotor
Hierdie artikel bied die laaste deel van die 8-projekreeks oor die beheer van die 28BYJ-48 stapmotor met Arduino. In Projek 8 word die stapmotor beheer deur 'n potensiometer, wat die gebruiker in staat stel om die motorspoed en -rigting dinamies te verander deur eenvoudig die knop te draai. Hierdie analoog invoermetode is 'n intuïtiewe en veelsydige beheerbenadering, wyd toepasbaar in robotika en bewegingsbeheerstelsels.
Volledige bedradingsdiagramme en kode vir hierdie projek is beskikbaar vir aflaai onder die artikel.
📘 Inleiding
Hierdie opstelling gebruik 'n analoog potensiometer wat aan 'n Arduino gekoppel is om veranderlike spanningswaardes tussen 0 en 1023 te lees. Gebaseer op hierdie invoer, word die motor se spoed en rigting dinamies aangepas:
-
Draai die potensiometer kloksgewys om spoed in een rigting te verhoog.
-
Draai dit teenkloksgewys om die rigting om te keer.
⚙️ Bedrading
Hierdie projek verbind die potensiometer en stapmotor aan die Arduino soos volg:
-
Middelpen van potensiometer → Analoog pen A0
-
Ander twee penne → 5V en GND
-
ULN2003-drywer → Penne 8, 10, 9, 11 vir die stapmotor
Byskrif: Projek 8-bedrading: Potensiometer lees analoog invoer om spoed en rigting te beheer.
💻 Kodeverduideliking
Die kode lees analoog waardes en omskep dit in spoed en rigting:
-
Sluit Biblioteek in en Definieer Penne:
#include <Stepper.h>
const int stepsPerRevolution = 2048;
Stepper myStepper(stepsPerRevolution, 8, 10, 9, 11);
-
Opstellingsfunksie:
void setup() {
Serial.begin(9600);
myStepper.setSpeed(10);
}
-
Lusfunksie met Potensiometerbeheer:
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);
}
-
Die
map()-funksie omskep 0–1023 na -15 tot +15 RPM. -
Spoed en rigting verander in reële tyd soos die potensiometer draai.
-
abs(speed)verseker 'n positiewe RPM-waarde; rigting word instep()hanteer.
🎬 Tydstempels uit Volledige Video
Hier is die sleutel video-tydstempels vir hierdie projek:
-
1:39:24 – Projek 8: Inleiding
-
1:40:58 – Projek 8: Bedrading
-
1:44:04 – Projek 8: Kode
-
1:53:19 – Projek 8: Demonstrasie
Hierdie handleiding is deel van: Les 107 28BYJ-48 Stepper 8 Projekte
- Les 107-1: Begin en Stop die 28BYJ-48-trapmotor met Rigting wat in Kode gestel is
- Les 107-2: Beheer van 'n 28BYJ-48-trapmotor via die reeksmonitor
- Les 107-3: Beheer van 'n 28BYJ-48-trapmotor met drie drukknoppies: CW, CCW, en Stop (STPB-1)
- Les 107-4: Beheer van 'n 28BYJ-48-trapmotor met twee drukknoppies, CW, CCW (hou ingedruk), STPB-2
- Les 107-5: Stuur 28BYJ-48-motor vir een omwenteling in CW- of CCW-rigting, STPB-3
- Les 107-6: Beheer van 'n 28BYJ-48-trapmotor met drie drukknoppies, met hoek en spoed STPB-4
- Les 107-7: Stuur 'n 28BYJ-48-trapmotor na enige hoek met gedefinieerde STPB-5-drukknoppies
++
/*
* 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
Goedere wat jy dalk nodig het
-
Amazon
-
Amazon
-
AliExpressPurchase 5 pcs 28BYJ-48 stepper motors from AliExpresss.click.aliexpress.com
Hulpbronne en verwysings
-
Buitenburg
-
Buitenburg
-
Buitenburg
Lêers📁
Fritzing-lêer
-
28BYJ-48 Stepper Motor
28BYJ-48 Stepper Motor.fzpz0.01 MB