Código de búsqueda

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
Idioma: C++
/*
 * //la fuente original es http://www.geeetech.com/wiki/index.php/Stepper_Motor_5V_4-Phase_5-Wire_%26_ULN2003_Driver_Board_for_Arduino
 * //Sensor RGB y de gestos APDS-9960
 * //Shawn Hymel @ SparkFun Electronics
 * //30 de mayo de 2014
 * //https://github.com/sparkfun/APDS-9960_RGB_and_Gesture_Sensor
 * // Este código se utiliza con un tutorial en video para RoboJax.com
 * // Publicado el 11 de mayo de 2017 desde Aajx, ON, Canadá.
 * /*
 * Debes ver estos dos videos
 * 1-Motor paso a paso
 * https://www.youtube.com/watch?v=Sl2mzXfTwCs
 * 
 * 2-Sensor de gestos
 * https://www.youtube.com/watch?v=qzSgZV_fbxI
 * 
 * Descarga el código desde:
 * http://roboJax.com/learn/arduino
 */
#include <Wire.h>
#include <SparkFun_APDS9960.h>


int Pin1 = 10; // pin de control del motor 1
int Pin2 = 11; // pin de control del motor 2
int Pin3 = 12; // pin de control del motor 3
int Pin4 = 13; // pin de control del motor 4
int _step = 0;
boolean dir = false; // falso=horario, verdadero=antihorario
int count=0;
int action; // detener=1, CCW=2, CW=3

 // Chapas
#define APDS9960_INT    2 // Necesita ser un pin de interrupción.
 // Variables Globales
SparkFun_APDS9960 apds = SparkFun_APDS9960();
int isr_flag = 0;

void setup()
{
 // Configuración del motor paso a paso
 pinMode(Pin1, OUTPUT);
 pinMode(Pin1, OUTPUT);
 pinMode(Pin2, OUTPUT);
 pinMode(Pin4, OUTPUT);
 // / ************* configuración del motor paso a paso fin
 // Configurar el pin de interrupción como entrada
  pinMode(APDS9960_INT, INPUT);


 // Inicializar puerto serie
  Serial.begin(9600);
  Serial.println();
  Serial.println(F("--------------------------------"));
  Serial.println(F("SparkFun APDS-9960 - GestureTest"));
  Serial.println(F("--------------------------------"));

 // Inicializar la rutina de servicio de interrupción
  attachInterrupt(0, interruptRoutine, FALLING);

 // Inicializar APDS-9960 (configurar I2C y valores iniciales)
  if ( apds.init() ) {
    Serial.println(F("APDS-9960 initialization complete"));
  } else {
    Serial.println(F("Something went wrong during APDS-9960 init!"));
  }

 // Inicie el motor del sensor de gestos 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, BAJANDO);
  }

  if(action ==1){
    _step =9; // detén el motor
  }else if(action ==2){
 // _step =0;
    dir = true; // Dirección de rotación en sentido antihorario
  }else if(action ==3){
 // _step = 0; // dirección de rotación en sentido horario
    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);

} // bucle

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; // apagar
        Serial.println("NONE Stopped");
    }
  }
}

Recursos y referencias

Aún no hay recursos.

Archivos📁

No hay archivos disponibles.