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
/*
* texte.
*/
#include <Wire.h>
#include <SparkFun_APDS9960.h>
int Pin1 = 10; // pin de contrôle moteur 1
int Pin2 = 11; // broche de contrôle du moteur 2
int Pin3 = 12; // broche de contrôle moteur 3
int Pin4 = 13; // broche de contrôle moteur 4
int _step = 0;
boolean dir = false; // faux=sens horaire, vrai=sens antihoraire
int count=0;
int action; // stop=1, CCW=2, CW=3
// Épingles
#define APDS9960_INT 2 // Doit être une broche d'interruption.
// Variables globales
SparkFun_APDS9960 apds = SparkFun_APDS9960();
int isr_flag = 0;
void setup()
{
// configuration du moteur pas à pas
pinMode(Pin1, OUTPUT);
pinMode(Pin1, OUTPUT);
pinMode(Pin2, OUTPUT);
pinMode(Pin4, OUTPUT);
// / ************* configuration du moteur pas à pas fin
// Configurer la broche d'interruption en entrée
pinMode(APDS9960_INT, INPUT);
// Initialiser le port série
Serial.begin(9600);
Serial.println();
Serial.println(F("--------------------------------"));
Serial.println(F("SparkFun APDS-9960 - GestureTest"));
Serial.println(F("--------------------------------"));
// Initialiser la routine de service d'interruption
attachInterrupt(0, interruptRoutine, FALLING);
// Initialiser APDS-9960 (configurer I2C et valeurs initiales)
if ( apds.init() ) {
Serial.println(F("APDS-9960 initialization complete"));
} else {
Serial.println(F("Something went wrong during APDS-9960 init!"));
}
// Démarrez le moteur du capteur de gestes 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, routineInterruption, TOMBE);
}
if(action ==1){
_step =9; // arrêter le moteur
}else if(action ==2){
// _step =0;
dir = true; // Direction de rotation dans le sens antihoraire
}else if(action ==3){
// _step =0;//Direction de rotation horaire
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);
} // boucle
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; // éteindre
Serial.println("NONE Stopped");
}
}
}
Ressources et références
Aucune ressource pour le moment.
Fichiers📁
Aucun fichier disponible.