Código de Pesquisa

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++
/*
 * // A fonte original é http://www.geeetech.com/wiki/index.php/Stepper_Motor_5V_4-Phase_5-Wire_%26_ULN2003_Driver_Board_for_Arduino
 * // Sensor RGB e de Gestos APDS-9960
 * // Shawn Hymel @ SparkFun Electronics
 * // 30 de maio de 2014
 * // https://github.com/sparkfun/APDS-9960_RGB_and_Gesture_Sensor
 * // Este código é usado com um tutorial em vídeo para RoboJax.com
 * // Publicado em 11 de maio de 2017, de Aajx, ON, Canadá.
 * /*
 * Deve assistir a estes dois vídeos
 * 1-Motor de passo
 * https://www.youtube.com/watch?v=Sl2mzXfTwCs
 * 
 * 2-Sensor de gestos
 * https://www.youtube.com/watch?v=qzSgZV_fbxI
 * 
 * Baixe o código de:
 * http://roboJax.com/learn/arduino
 */
#include <Wire.h>
#include <SparkFun_APDS9960.h>


int Pin1 = 10; // pino de controle do motor 1
int Pin2 = 11; // pino de controle do motor 2
int Pin3 = 12; // pino de controle do motor 3
int Pin4 = 13; // pino de controle do motor 4
int _step = 0;
boolean dir = false; // false=horário, true=antihorário
int count=0;
int action; // parar=1, sentido anti-horário=2, sentido horário=3

 // Alfinetes
#define APDS9960_INT    2 // Precisa ser um pino de interrupção
 // Variáveis Globais
SparkFun_APDS9960 apds = SparkFun_APDS9960();
int isr_flag = 0;

void setup()
{
 // configuração do motor de passo
 pinMode(Pin1, OUTPUT);
 pinMode(Pin1, OUTPUT);
 pinMode(Pin2, OUTPUT);
 pinMode(Pin4, OUTPUT);
 // / ************* configuração do motor de passo fim
 // Configure o pino de interrupção como entrada
  pinMode(APDS9960_INT, INPUT);


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

 // Inicializar a rotina de serviço de interrupção
  attachInterrupt(0, interruptRoutine, FALLING);

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

 // Iniciar o motor do 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, FALLING);
  }

  if(action ==1){
    _step =9; // desligue o motor
  }else if(action ==2){
 // _step =0;
    dir = true; // Direção de rotação anti-horária
  }else if(action ==3){
 // _step =0;//Direção de rotação no sentido horário
    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);

} // laço

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

Recursos e referências

Ainda não há recursos.

Arquivos📁

Nenhum arquivo disponível.