検索コード

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
言語: C++
/*
 * //元のソースはhttp://www.geeetech.com/wiki/index.php/Stepper_Motor_5V_4-Phase_5-Wire_%26_ULN2003_Driver_Board_for_Arduino
 * //APDS-9960 RGBおよびジェスチャーセンサー
 * //Shawn Hymel @ SparkFun Electronics
 * //2014年5月30日
 * //https://github.com/sparkfun/APDS-9960_RGB_and_Gesture_Sensor
 * //このコードはRoboJax.comのビデオチュートリアルで使用されます
 * //2017年5月11日、カナダのオンタリオ州アージクスから公開。
 * /*
 * この2本のビデオを必ず見ること
 * 1-ステッパーモーター
 * https://www.youtube.com/watch?v=Sl2mzXfTwCs
 * 
 * 2-ジェスチャーセンサー
 * https://www.youtube.com/watch?v=qzSgZV_fbxI
 * 
 * コードは以下からダウンロード:
 * http://roboJax.com/learn/arduino
 */
#include <Wire.h>
#include <SparkFun_APDS9960.h>


int Pin1 = 10; // モーター制御ピン1
int Pin2 = 11; // モーター制御ピン2
int Pin3 = 12; // モーター制御ピン3
int Pin4 = 13; // モーター制御ピン4
int _step = 0;
boolean dir = false; // 反時計回りがtrue、時計回りがfalse
int count=0;
int action; // 停止=1、反時計回り=2、時計回り=3

 // ピン
#define APDS9960_INT    2 // 割り込みピンである必要があります
 // グローバル変数
SparkFun_APDS9960 apds = SparkFun_APDS9960();
int isr_flag = 0;

void setup()
{
 // ステッピングモーターの設定
 pinMode(Pin1, OUTPUT);
 pinMode(Pin1, OUTPUT);
 pinMode(Pin2, OUTPUT);
 pinMode(Pin4, OUTPUT);
 // / ************* ステッパーモーター設定終了
 // 割り込みピンを入力として設定する
  pinMode(APDS9960_INT, INPUT);


 // シリアルポートを初期化する
  Serial.begin(9600);
  Serial.println();
  Serial.println(F("--------------------------------"));
  Serial.println(F("SparkFun APDS-9960 - GestureTest"));
  Serial.println(F("--------------------------------"));

 // 割り込みサービスルーチンを初期化する
  attachInterrupt(0, interruptRoutine, FALLING);

 // APDS-9960を初期化する(I2Cと初期値を設定する)
  if ( apds.init() ) {
    Serial.println(F("APDS-9960 initialization complete"));
  } else {
    Serial.println(F("Something went wrong during APDS-9960 init!"));
  }

 // 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; // モーターを止めてください。
  }else if(action ==2){
 // _step =0;
    dir = true; // 反時計回りの回転方向
  }else if(action ==3){
 // _step =0;//CW回転方向
    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);

} // ループ

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

リソースと参考文献

まだリソースはありません。

ファイル📁

ファイルは利用できません。