Code de recherche

Control 28BYJ-48 Stepper motor with hand gesture using Arduino

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

774-Controlling 28BYJ-48 Stepper Motor using hand gesture
Langue: C++
/*
 *  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.