Овој туторијал е дел од: Лекција 107 28BYJ-48 Проекти за чекор 8
Ова видео има 8 проекти. Секој проект има посебен код. Линкови до други видеа се наоѓаат под оваа статија.
Лекција 107-8: Контролирање на брзината на 28BYJ-48 степен мотор со помош на потенциометар
Проект 8: Контролирање на степер мотор со помош на потенциометар – 28BYJ-48 степер мотор
Оваа статија го претставува последниот дел од серијата од 8 проекти за контролирање на 28BYJ-48 степер моторот со Arduino. Во Проект 8, степер моторот се контролира преку потенциометар, што му овозможува на корисникот динамички да ја менува брзината и насоката на моторот едноставно со вртење на копчето. Овој аналоген метод на внес е интуитивен и разновиден пристап за контрола, широко применлив во роботиката и системите за контрола на движење.
Целосните дијаграми за поврзување и кодот за овој проект се достапни за преземање под статијата.
📘 Вовед
Оваа поставка користи аналоген потенциометар поврзан со Arduino за читање на променливи вредности на напон помеѓу 0 и 1023. Врз основа на овој влез, брзината и насоката на моторот се динамички прилагодуваат:
-
Вртењето на потенциометарот во насока на часовникот ја зголемува брзината во една насока.
-
Вртењето спротивно од часовникот ја менува насоката.
⚙️ Поврзување
Овој проект ги поврзува потенциометарот и степер моторот со Arduino на следниов начин:
-
Средното копче на потенциометарот → Аналоген пин A0
-
Останатите две копчиња → 5V и GND
-
ULN2003 драјвер → Пинови 8, 10, 9, 11 за степер моторот
Натпис: Поврзување за Проект 8: Потенциометарот чита аналоген влез за контрола на брзината и насоката.
💻 Објаснување на кодот
Кодот ги чита аналогните вредности и ги претвора во брзина и насока:
-
Вклучување библиотека и дефинирање пинови:
#include <Stepper.h>
const int stepsPerRevolution = 2048;
Stepper myStepper(stepsPerRevolution, 8, 10, 9, 11);
-
Функција за поставување:
void setup() {
Serial.begin(9600);
myStepper.setSpeed(10);
}
-
Функција за јамка со контрола преку потенциометар:
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);
}
-
Функцијата
map()ги претвора вредностите 0–1023 во -15 до +15 RPM. -
Брзината и насоката се менуваат во реално време додека потенциометарот се врти.
-
abs(speed)обезбедува позитивна RPM вредност; насоката се обработува воstep().
🎬 Временски ознаки од целосното видео
Еве ги клучните временски ознаки од видеото за овој проект:
-
1:39:24 – Проект 8: Вовед
-
1:40:58 – Проект 8: Поврзување
-
1:44:04 – Проект 8: Код
-
1:53:19 – Проект 8: Демонстрација
Овој туторијал е дел од: Лекција 107 28BYJ-48 Проекти за чекор 8
- Лекција 107-1: Стартување и запирање на 28BYJ-48 степер моторот со насока поставена во кодот
- Лекција 107-2: Контролирање на 28BYJ-48 степен мотор преку сериски монитор
- Лекција 107-3: Контролирање на 28BYJ-48 степен мотор користејќи три притисни копчиња: CW, CCW и Стоп (STPB-1)
- Лекција 107-4: Контролирање на 28BYJ-48 степер мотор со користење на две копчиња, CW, CCW (држете притиснато), STPB-2
- Лекција 107-5: Испрати 28BYJ-48 мотор за една револуција во CW или CCW насока, STPB-3
- Лекција 107-6: Контролирање на 28BYJ-48 степен мотор со користење на три копчиња, со агол и брзина STPB-4
- Лекција 107-7: Испраќање на 28BYJ-48 чекорен мотор до било кој агол со дефинирани 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
Работи што можеби ќе ви требаат
-
Amazon
-
Amazon
-
AliExpressPurchase 5 pcs 28BYJ-48 stepper motors from AliExpresss.click.aliexpress.com
Ресурси и референци
-
Надворешно
-
Надворешно
-
Надворешно
Датотеки📁
Fritzing датотека
-
28BYJ-48 Stepper Motor
28BYJ-48 Stepper Motor.fzpz0.01 MB