Пребарување код

Лекција 107-8: Контролирање на брзината на 28BYJ-48 степен мотор со помош на потенциометар

Лекција 107-8: Контролирање на брзината на 28BYJ-48 степен мотор со помош на потенциометар

Проект 8: Контролирање на степер мотор со помош на потенциометар – 28BYJ-48 степер мотор

Оваа статија го претставува последниот дел од серијата од 8 проекти за контролирање на 28BYJ-48 степер моторот со Arduino. Во Проект 8, степер моторот се контролира преку потенциометар, што му овозможува на корисникот динамички да ја менува брзината и насоката на моторот едноставно со вртење на копчето. Овој аналоген метод на внес е интуитивен и разновиден пристап за контрола, широко применлив во роботиката и системите за контрола на движење.

stepper_28BYJ-48-0

Целосните дијаграми за поврзување и кодот за овој проект се достапни за преземање под статијата.

📘 Вовед

Оваа поставка користи аналоген потенциометар поврзан со Arduino за читање на променливи вредности на напон помеѓу 0 и 1023. Врз основа на овој влез, брзината и насоката на моторот се динамички прилагодуваат:

  • Вртењето на потенциометарот во насока на часовникот ја зголемува брзината во една насока.

  • Вртењето спротивно од часовникот ја менува насоката.

⚙️ Поврзување

stepper_28BYJ-48_wiring_PB-_keep_pressed

Овој проект ги поврзува потенциометарот и степер моторот со Arduino на следниов начин:

  • Средното копче на потенциометаротАналоген пин A0

  • Останатите две копчиња5V и GND

  • ULN2003 драјвер → Пинови 8, 10, 9, 11 за степер моторот

Натпис: Поврзување за Проект 8: Потенциометарот чита аналоген влез за контрола на брзината и насоката.

 

💻 Објаснување на кодот

Кодот ги чита аналогните вредности и ги претвора во брзина и насока:

  1. Вклучување библиотека и дефинирање пинови:

#include <Stepper.h>
const int stepsPerRevolution = 2048;
Stepper myStepper(stepsPerRevolution, 8, 10, 9, 11);
  1. Функција за поставување:

void setup() {
  Serial.begin(9600);
  myStepper.setSpeed(10);
}
  1. Функција за јамка со контрола преку потенциометар:

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: Демонстрација


 

Слики

stepper_28BYJ-48-3
stepper_28BYJ-48-3
stepper_28BYJ-48-2
stepper_28BYJ-48-2
ULN2003_board-1
ULN2003_board-1
stepper_28BYJ-48-0
stepper_28BYJ-48-0
stepper_28BYJ-48-1
stepper_28BYJ-48-1
stepper_28BYJ-48_wiring_PB-_keep_pressed
stepper_28BYJ-48_wiring_PB-_keep_pressed
395-Lesson 107-8: Controlling a 28BYJ-48 stepper motor using a potentiometer
Јазик: C++
++
/*
* 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

Работи што можеби ќе ви требаат

Ресурси и референци

Датотеки📁

Fritzing датотека