Ten poradnik jest częścią: Lekcja 107 28BYJ-48 Stepper 8 Projektów
Ten film przedstawia 8 projektów. Każdy projekt ma osobny kod. Linki do innych filmów znajdują się poniżej tego artykułu.
Lekcja 107-5: Wyślij silnik 28BYJ-48 na jeden obrót w kierunku CW lub CCW, STPB-3
Projekt 5: Jedno obroty wyzwalane przyciskiem STPB-3 – silnik krokowy 28BYJ-48
Ten artykuł jest częścią 8-projektowej serii edukacyjnej o silniku krokowym 28BYJ-48 z użyciem Arduino. W Projekcie 5 używamy nowego przycisku, oznaczonego jako STPB-3, aby wyzwolić jeden pełny obrót silnika na każde naciśnięcie. Ta metoda jest powszechnie stosowana w systemach ruchu indeksowanego, gdzie wymagana jest precyzyjna kontrola jednego cyklu.
Pełny kod źródłowy i schemat połączeń dla tego projektu znajdują się poniżej tego artykułu.
📘 Wprowadzenie
Ten projekt rozwija wcześniejszą kontrolę opartą na przyciskach, wprowadzając zachowanie zatrzaskowe: naciśnięcie przycisku raz rozpoczyna i kończy dokładnie jeden pełny obrót silnika. System ignoruje stan przycisku podczas pracy silnika, aby zapewnić precyzyjny i powtarzalny ruch.
⚙️ Schemat połączeń
Oprócz połączeń silnika krokowego i sterownika ULN2003, ten projekt podłącza przycisk STPB-3 w następujący sposób:
-
Jedna końcówka przycisku STPB-3 → pin Arduino 2
-
Druga końcówka → GND
-
Używa wewnętrznej konfiguracji podciągającej
Podpis: Schemat projektu 5: naciśnij STPB-3 raz, aby wyzwolić jeden pełny obrót silnika.
💻 Wyjaśnienie kodu
Ten kod używa detekcji zbocza, aby zidentyfikować pojedyncze naciśnięcie i wykonać jeden pełny obrót silnika krokowego.
-
Inicjalizacja stałych i obiektów:
#include <Stepper.h>
const int stepsPerRevolution = 2048;
Stepper myStepper(stepsPerRevolution, 8, 10, 9, 11);
const int buttonPin = 2;
int lastButtonState = HIGH;
-
Funkcja Setup:
void setup() {
pinMode(buttonPin, INPUT_PULLUP);
myStepper.setSpeed(10);
Serial.begin(9600);
}
-
Funkcja Loop z detekcją zbocza:
void loop() {
int currentState = digitalRead(buttonPin);
if (lastButtonState == HIGH && currentState == LOW) {
myStepper.step(stepsPerRevolution);
}
lastButtonState = currentState;
}
-
To zapewnia, że silnik obraca się raz tylko w momencie rozpoczęcia naciśnięcia przycisku (zbocze opadające).
-
Zapobiega to ponownej aktywacji podczas przytrzymania przycisku.
🎬 Znaczniki czasu z pełnego wideo
Dla odniesienia wizualnego, odnieś się do tych punktów w pełnym samouczku:
-
51:20 – Projekt 5: Wprowadzenie
-
52:15 – Projekt 5: Schemat połączeń
-
55:40 – Projekt 5: Kod
-
1:03:30 – Projekt 5: Demonstracja
📁 Sekcja pobierania
Możesz pobrać pełny kod i schemat połączeń dla tego projektu poniżej. To podejście jest idealne, gdy system mechaniczny wymaga dokładnego pozycjonowania przy każdym naciśnięciu przycisku.
Następny jest [Projekt 6: Zmienny kąt i prędkość z STPB-4].
Ten poradnik jest częścią: Lekcja 107 28BYJ-48 Stepper 8 Projektów
- Lekcja 107-1: Uruchamianie i zatrzymywanie silnika krokowego 28BYJ-48 z kierunkiem ustawionym w kodzie
- Lekcja 107-2: Sterowanie silnikiem krokowym 28BYJ-48 przez monitor szeregowy
- Lekcja 107-3: Sterowanie silnikiem krokowym 28BYJ-48 za pomocą trzech przycisków: CW, CCW i Stop (STPB-1)
- Lekcja 107-4: Sterowanie silnikiem krokowym 28BYJ-48 za pomocą dwóch przycisków, CW, CCW (przytrzymanie), STPB-2
- Lekcja 107-6: Sterowanie silnikiem krokowym 28BYJ-48 za pomocą trzech przycisków, z kątem i prędkością STPB-4
- Lekcja 107-7: Wysyłanie silnika krokowego 28BYJ-48 pod dowolny kąt za pomocą zdefiniowanych przycisków STPB-5
- Lekcja 107-8: Sterowanie prędkością silnika krokowego 28BYJ-48 za pomocą potencjometru
/*
* Lesson 107-5: Controlling stepper motor using 2 push buttons STPB-2.
STPB-2: We control the stepper motor using two push buttons. One push button rotates the motor clockwise (CW), and the other rotates it counter-clockwise (CCW). Keys must be kept pressed.
In this lesson, we learn how to use a mini stepper motor 28BYJ-48 for our project. I am presenting 8 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 2: We will push different keys on the keyboard and control the motor
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 (this code)
Project 6: Push button: 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
* Watch 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 Feb 20, 2019, at 19:34 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/>.
*/
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 switchCW =2;//define input pin for CW push button
int switchCCW =3;//define input pin for CCW push button
int speedFactor =1;//1=fastest, 2=slower or 3 more slower
int correction_CW = 150;
int correction_CCW = 150;
const int CW =1;
const int CCW =2;
const int STOP =3;
int poleStep = 0;
const int SPR=64*64;
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 count=0;
int dirStatus = STOP;// stores direction status 3= stop (do not change)
void setup()
{
//Robojax.com Stepper Push button One Revolution STPB-3
Serial.begin(9600);
Serial.print("Robojax Video for Stepper Motor STPB-2");
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(switchCW,INPUT_PULLUP);
pinMode(switchCCW,INPUT_PULLUP);
}
void loop()
{
//Robojax.com Stepper Push button One Revolution STPB-3
if(digitalRead(switchCCW) == LOW)
{
dirStatus =CCW;
count =0;
}else if(digitalRead(switchCW) == LOW)
{
dirStatus = CW;
count =0;
}
if(digitalRead(switchCW) == LOW && digitalRead(switchCCW) == LOW)
{
dirStatus = STOP;
delay(200);
}
if(dirStatus ==CW){
poleStep++;
count++;
if(count+correction_CCW <= SPR)
{
driveStepper(poleStep);
}else{
driveStepper(8);
}
}else if(dirStatus ==CCW){
poleStep--;
count++;
if(count+correction_CW <=SPR)
{
driveStepper(poleStep);
}else{
driveStepper(8);
}
}else{
driveStepper(8);
}
if(poleStep>7){
poleStep=0;
}
if(poleStep<0){
poleStep=7;
}
delay(speedFactor);
//Robojax.com Stepper Push button One Revolution STPB-3
}// loop
/*
* @brief moves motor to specific angle
* @param "angle" is an integer representing the angle
* @return does not return anything
*
* www.Robojax.com code April 19, 2020, at 01:22 in Ajax, Ontario, Canada
*/
void driveStepper(int c)
{
digitalWrite(Pin1, pole1[c]);
digitalWrite(Pin2, pole2[c]);
digitalWrite(Pin3, pole3[c]);
digitalWrite(Pin4, pole4[c]);
if(c ==8)
{
digitalWrite(switchCW, HIGH);
digitalWrite(switchCCW, HIGH);
}
}//driveStepper ends here
Rzeczy, których możesz potrzebować
-
Amazon
-
Amazon
-
AliExpressPurchase 5 pcs 28BYJ-48 stepper motors from AliExpresss.click.aliexpress.com
Zasoby i odniesienia
-
Zewnętrzny
-
Zewnętrzny
-
Zewnętrzny
Pliki📁
Plik Fritzing
-
28BYJ-48 Stepper Motor
28BYJ-48 Stepper Motor.fzpz0.01 MB