Control 28BYJ-48 Stepper motor with hand gesture using Arduino
This video shows you how to control stepper motor with the gesture of your hand. Rotate it clockwise, counterclockwise, or stop it.
This video shows you how to control stepper motor with the gesture of your hand. Rotate it clockwise, counterclockwise, or stop it. Must watch this two videos 1-Stepper motor Watch Stepper motor 2-Gesture sensor Watch Gesture Control You will need to download the Gesture sensor library from GetHub
/*
* //original source is http://www.geeetech.com/wiki/index.php/Stepper_Motor_5V_4-Phase_5-Wire_%26_ULN2003_Driver_Board_for_Arduino
* //APDS-9960 RGB and Gesture Sensor
* //Shawn Hymel @ SparkFun Electronics
* //May 30, 2014
* //https://github.com/sparkfun/APDS-9960_RGB_and_Gesture_Sensor
* // This code is used with a video tutorial for RoboJax.com
* // Published on May 11, 2017 from Aajx, ON, Canada.
* /*
* Must watch this two videos
* 1-Stepper motor
* https://www.youtube.com/watch?v=Sl2mzXfTwCs
*
* 2-Gesture sensor
* https://www.youtube.com/watch?v=qzSgZV_fbxI
*
* Download the code from:
* http://roboJax.com/learn/arduino
*/
#include <Wire.h>
#include <SparkFun_APDS9960.h>
int Pin1 = 10; // контрольный вывод мотора 1
int Pin2 = 11; // пин управления мотором 2
int Pin3 = 12; // пин управления мотором 3
int Pin4 = 13; // контрольный вывод мотора 4
int _step = 0;
boolean dir = false; // ложный=по часовой стрелке, истинный=против часовой стрелки
int count=0;
int action; // стоп=1, против часовой стрелки=2, по часовой стрелке=3
// Значки
#define APDS9960_INT 2 // Должен быть контакт прерывания.
// Глобальные переменные
SparkFun_APDS9960 apds = SparkFun_APDS9960();
int isr_flag = 0;
void setup()
{
// *************** настройка шагового двигателя
pinMode(Pin1, OUTPUT);
pinMode(Pin1, OUTPUT);
pinMode(Pin2, OUTPUT);
pinMode(Pin4, OUTPUT);
// / ************* настройка шагового двигателя окончена
// Установите вывод прерывания в качестве входа
pinMode(APDS9960_INT, INPUT);
// Инициализировать последовательный порт
Serial.begin(9600);
Serial.println();
Serial.println(F("--------------------------------"));
Serial.println(F("SparkFun APDS-9960 - GestureTest"));
Serial.println(F("--------------------------------"));
// Инициализировать обработчик прерываний
attachInterrupt(0, interruptRoutine, FALLING);
// Инициализировать APDS-9960 (настроить I2C и начальные значения)
if ( apds.init() ) {
Serial.println(F("APDS-9960 initialization complete"));
} else {
Serial.println(F("Something went wrong during APDS-9960 init!"));
}
// Начните работу с двигателя сенсора жестов APDS-9960
if ( apds.enableGestureSensor(true) ) {
Serial.println(F("Gesture sensor is now running"));
} else {
Serial.println(F("Something went wrong during gesture sensor init!"));
}
}
void loop()
{
if( isr_flag == 1 ) {
// detachInterrupt(0);
action = handleGesture();
isr_flag = 0;
// attachInterrupt(0, interruptRoutine, FALLING);
}
if(action ==1){
_step =9; // остановите двигатель
}else if(action ==2){
// _step =0;
dir = true; // Против часовой стрелки направление вращения
}else if(action ==3){
// _step =0;//Направление вращения CW
dir = false;
}
switch(_step){
case 0:
digitalWrite(Pin1, LOW);
digitalWrite(Pin2, LOW);
digitalWrite(Pin3, LOW);
digitalWrite(Pin4, HIGH);
break;
case 1:
digitalWrite(Pin1, LOW);
digitalWrite(Pin2, LOW);
digitalWrite(Pin3, HIGH);
digitalWrite(Pin4, HIGH);
break;
case 2:
digitalWrite(Pin1, LOW);
digitalWrite(Pin2, LOW);
digitalWrite(Pin3, HIGH);
digitalWrite(Pin4, LOW);
break;
case 3:
digitalWrite(Pin1, LOW);
digitalWrite(Pin2, HIGH);
digitalWrite(Pin3, HIGH);
digitalWrite(Pin4, LOW);
break;
case 4:
digitalWrite(Pin1, LOW);
digitalWrite(Pin2, HIGH);
digitalWrite(Pin3, LOW);
digitalWrite(Pin4, LOW);
break;
case 5:
digitalWrite(Pin1, HIGH);
digitalWrite(Pin2, HIGH);
digitalWrite(Pin3, LOW);
digitalWrite(Pin4, LOW);
break;
case 6:
digitalWrite(Pin1, HIGH);
digitalWrite(Pin2, LOW);
digitalWrite(Pin3, LOW);
digitalWrite(Pin4, LOW);
break;
case 7:
digitalWrite(Pin1, HIGH);
digitalWrite(Pin2, LOW);
digitalWrite(Pin3, LOW);
digitalWrite(Pin4, HIGH);
break;
default:
digitalWrite(Pin1, LOW);
digitalWrite(Pin2, LOW);
digitalWrite(Pin3, LOW);
digitalWrite(Pin4, LOW);
break;
}
if(dir){
_step++;
}else{
_step--;
}
if(_step>7){
_step=0;
}
if(_step<0){
_step=7;
}
delay(1);
} // петля
void interruptRoutine() {
isr_flag = 1;
}
int handleGesture() {
if ( apds.isGestureAvailable() ) {
switch ( apds.readGesture() ) {
case DIR_DOWN:
Serial.println("DOWN--Stop");
return 1;
break;
case DIR_LEFT:
Serial.println("LEFT-- Counterclockwise");
return 2;
break;
case DIR_RIGHT:
Serial.println("RIGHT--Clockwise");
return 3;
break;
default:
return 1; // выключить
Serial.println("NONE Stopped");
}
}
}
Ресурсы и ссылки
Ресурсов пока нет.
Файлы📁
Нет доступных файлов.