Suchcode

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
Sprache: C++
/*
 * //Die ursprüngliche Quelle ist http://www.geeetech.com/wiki/index.php/Stepper_Motor_5V_4-Phase_5-Wire_%26_ULN2003_Driver_Board_for_Arduino
 * //APDS-9960 RGB- und Gestensensor
 * //Shawn Hymel @ SparkFun Electronics
 * //30. Mai 2014
 * //https://github.com/sparkfun/APDS-9960_RGB_and_Gesture_Sensor
 * // Dieser Code wird mit einem Video-Tutorial für RoboJax.com verwendet
 * // Veröffentlicht am 11. Mai 2017 aus Aajx, ON, Kanada.
 * /*
 * Muss sich diese zwei Videos ansehen
 * 1-Schrittmotor
 * https://www.youtube.com/watch?v=Sl2mzXfTwCs
 * 
 * 2-Gestensensor
 * https://www.youtube.com/watch?v=qzSgZV_fbxI
 * 
 * Laden Sie den Code von:
 * http://roboJax.com/learn/arduino
 */
#include <Wire.h>
#include <SparkFun_APDS9960.h>


int Pin1 = 10; // Motorsteuerungs-Pin 1
int Pin2 = 11; // Motorsteuerungspin 2
int Pin3 = 12; // Motorsteuerungs-Pin 3
int Pin4 = 13; // Motorsteuerung Pin 4
int _step = 0;
boolean dir = false; // falsch=im Uhrzeigersinn, wahr=gegen den Uhrzeigersinn
int count=0;
int action; // stop=1, gegen den Uhrzeigersinn=2, im Uhrzeigersinn=3

 // Pins
#define APDS9960_INT    2 // Muss ein Interrupt-Pin sein
 // Globale Variablen
SparkFun_APDS9960 apds = SparkFun_APDS9960();
int isr_flag = 0;

void setup()
{
 // *************** Schrittmotor-Einrichtung
 pinMode(Pin1, OUTPUT);
 pinMode(Pin1, OUTPUT);
 pinMode(Pin2, OUTPUT);
 pinMode(Pin4, OUTPUT);
 // / ************* Schrittmotor-Setup Ende
 // Setzen Sie den Interrupt-Pin als Eingang.
  pinMode(APDS9960_INT, INPUT);


 // Seriellen Port initialisieren
  Serial.begin(9600);
  Serial.println();
  Serial.println(F("--------------------------------"));
  Serial.println(F("SparkFun APDS-9960 - GestureTest"));
  Serial.println(F("--------------------------------"));

 // Initialisiere Interrupt-Service-Routine
  attachInterrupt(0, interruptRoutine, FALLING);

 // APDS-9960 initialisieren (I2C und Anfangswerte konfigurieren)
  if ( apds.init() ) {
    Serial.println(F("APDS-9960 initialization complete"));
  } else {
    Serial.println(F("Something went wrong during APDS-9960 init!"));
  }

 // Starten Sie den Gestensensor-Engine 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; // Motor stoppen
  }else if(action ==2){
 // _step =0;
    dir = true; // Gegenuhrzeigersinn Drehrichtung
  }else if(action ==3){
 // _step =0;//CW Drehrichtung
    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);

} // Schleife

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

Ressourcen & Referenzen

Noch keine Ressourcen vorhanden.

Dateien📁

Keine Dateien verfügbar.