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
* استشعار RGB وملمس APDS-9960
* شون هايميل @ SparkFun Electronics
* 30 مايو 2014
* https://github.com/sparkfun/APDS-9960_RGB_and_Gesture_Sensor
* تم استخدام هذا الرمز مع برنامج تعليمي فيديو لموقع RoboJax.com
* تم النشر في 11 مايو 2017 من أاجكس، أونتاريو، كندا.
* /*
* يجب مشاهدة هذين الفيديوهين
* 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; // خاطئ=مع اتجاه عقارب الساعة، صحيح=عكس اتجاه عقارب الساعة
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;//جهة دوران عقارب الساعة
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");
}
}
}
الموارد والمراجع
لا توجد موارد حتى الآن.
ملفات📁
لا توجد ملفات متاحة.