Cerca codice

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
Lingua: C++
/*
 * //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; // pin di controllo motore 1
int Pin2 = 11; // pin di controllo del motore 2
int Pin3 = 12; // pin di controllo motore 3
int Pin4 = 13; // pin di controllo motore 4
int _step = 0;
boolean dir = false; // falso=orario, vero=antiorario
int count=0;
int action; // stop=1, CCW=2, CW=3

 // Perni
#define APDS9960_INT    2 // Deve esserci un pin di interruzione.
 // Variabili Globali
SparkFun_APDS9960 apds = SparkFun_APDS9960();
int isr_flag = 0;

void setup()
{
 // impostazione del motore passo-passo
 pinMode(Pin1, OUTPUT);
 pinMode(Pin1, OUTPUT);
 pinMode(Pin2, OUTPUT);
 pinMode(Pin4, OUTPUT);
 // / ************* impostazione del motore passo-passo fine
 // Imposta il pin di interruzione come ingresso
  pinMode(APDS9960_INT, INPUT);


 // Inizializza la porta seriale
  Serial.begin(9600);
  Serial.println();
  Serial.println(F("--------------------------------"));
  Serial.println(F("SparkFun APDS-9960 - GestureTest"));
  Serial.println(F("--------------------------------"));

 // Inizializza la routine di servizio per le interruzioni
  attachInterrupt(0, interruptRoutine, FALLING);

 // Inizializza APDS-9960 (configura I2C e valori iniziali)
  if ( apds.init() ) {
    Serial.println(F("APDS-9960 initialization complete"));
  } else {
    Serial.println(F("Something went wrong during APDS-9960 init!"));
  }

 // Inizia a eseguire il motore del sensore di gesti 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, DISCESO);
  }

  if(action ==1){
    _step =9; // ferma il motore
  }else if(action ==2){
 // _step =0;
    dir = true; // Direzione di rotazione antioraria
  }else if(action ==3){
 // _step =0;//Direzione di rotazione oraria
    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);

} // ciclo

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

Risorse e riferimenti

Nessuna risorsa ancora.

File📁

Nessun file disponibile.