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
/*
* //منبع اصلی 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 از Aajx، ON، کانادا.
* /*
* باید این دو ویدیو را تماشا کنید
* 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; // پایه کنترل موتور ۱
int Pin2 = 11; // پایه کنترل موتور ۲
int Pin3 = 12; // پایه کنترل موتور ۳
int Pin4 = 13; // پایه کنترل موتور ۴
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 ) {
// تجزیهقطع(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");
}
}
}
منابع و مراجع
هنوز هیچ منبعی موجود نیست.
فایلها📁
هیچ فایلی موجود نیست.