Search Code

Xakameynta Meesha Servo iyadoo la adeegsanayo Gacmaha ee Arduino

Xakameynta Meesha Servo iyadoo la adeegsanayo Gacmaha ee Arduino

Casharkan, waxaan ku baran doonaa sida loo xakameeyo mishiinka servo adigoo isticmaalaya dhaqdhaqaaqa gacanta. Adigoo gacantaada bidix ama midig u dhaqaaqaya, waxaad ka dhigi kartaa mishiinka servo inuu ka jawaabo si waafaqsan. Mashruucan wuxuu isticmaalaa dareenka dhaqdhaqaaqa APDS-9960 si uu u ogaado dhaqdhaqaaqa gacanta oo u turjumo boosaska servo. Si aad u hesho sharaxaad muuqaal ah oo faahfaahsan, hubi inaad eegto fiidiyowga (fiidiyowga ku yaal 00:30).

APDS-9960 gesture sensor module -1

Qaybaha aasaasiga ah ee aan isticmaali doono waxaa ka mid ah mishiinka servo iyo dareemaha APDS-9960 ee dhaqanka. Mishiinka servo wuxuu u rogi doonaa xaglo gaar ah oo ku saleysan dhaqannada la ogaaday, halka dareemaha APDS-9960 uu fasiro doono dhaqdhaqaaqyada gacanta. Qalabkan wuxuu u oggolaanayaa hab fudud oo lagu xakameeyo servo iyada oo aan la taaban.

Qalabka la Sharxay

Mashiinka servo waa qalab yar oo awood u leh inuu rogo xaglo gaar ah, taasoo ka dhigaysa mid ku habboon codsiyada u baahan meelayn sax ah. Caadi ahaan wuxuu leeyahay seddex xadhig: awood (cas), dhulka (madow), iyo calaamad (jaalle). Xadhigga calaamadda wuxuu helaa amarro si loo raro servo-ga xagal la cayimay.

APDS-9960 waa dareemayaal kala duwan oo awood u leh in uu ogaado dhaqdhaqaaqyada, iftiinka deegaanka, iyo midabka. Waxay la xiriirtaa Arduino iyada oo loo marayo I2C waxayna u baahan tahay dhowr pins oo koronto iyo xog gudbinta ah. Dareemaha wuxuu ogaan karaa dhaqdhaqaaqyo sida kor, hoos, bidix, iyo midig, kuwaas oo aan u isticmaali doono in aan xakameyno servo.

Faahfaahinta Warqadda Data

SoosaarBroadcom
Lambarka qaybtaAPDS-9960
Xisaab/IO danab2.4 - 3.6 V
Koronto sahayada2.4 - 3.6 V
Hawada hadda (kanaal kasta)20 mA ugu badnaan
Hagaha soo noqnoqoshada PWMMa jiraan wax ku habboon
Xadka loogaga baahan yahay in la geliyo0.3 V (hoose), 0.7 V (sare)
Hoos u dhaca koronto / RDS(on)/ buuxintaMa jiraan wax ku habboon
Xadidaheeda kulaylka-40 ilaa 85 °C
Baakidhka6.0 x 3.0 mm
Xusuusin / noocyoGacanta dareen, dareen iftiin RGB
  • Hubi in servo-gu uu helo koronto ku filan (caadi ahaan 5V).
  • Ku xidh APDS-9960 Arduino adigoo isticmaalaya isgaarsiinta I2C.
  • Fiiro gaar ah u yeelo pin-ka hakinta ee dareemaha dhaqanka.
  • Isticmaal resistors-ka kor u qaadista haddii loo baahdo si loo helo ogaansho calaamad deggan.
  • Hubi inaad hagaajiso dareemaha xaaladaha iftiinka kala duwan si aad u hesho saxsanaanta wanaagsan.
Arduino wiring of APDS9960 to control Servo motor using hand gesture

Si aad u xidhid qaybaha, ku bilow mishiinka servo. Ku xidh xadhigga cas ee pin-ka 5V ee Arduino, xadhigga madow dhulka (GND), iyo xadhigga calaamadda oranji ah pin-ka.9Tani waxay u oggolaan doontaa Arduino inuu xakameeyo booska servo.

Xiga, ku xidh dareenka dhaqdhaqaaqa APDS-9960. Ku xidhV_Nku xir 3.3V ee Arduino, iyoGNDdhig dhulka. TheINTpin waa in lagu xiro pin2Arduino-ka, halkaSDAiyoSCLpins waxay u socdaan pinsA4iyoA5, siday. Qaabkan wuxuu u oggolaanayaa dareemaha inuu si hufan ula xiriirto Arduino.

Tusaalooyinka Koodhka & Socodka

Funkshanka dejinta, waxaanu dejinaynaa servo iyo dareenka dhaqdhaqaaqa. Khadkamyservo.attach(9);ku xidhay servo-ga pin 9, oo aan hore u xidhnay. Tani waxay u oggolaaneysaa servo-ga inuu helo amaro ka socda Arduino.

APDS-9960 gesture sensor -3
void setup() {
 myservo.attach(9);  // attaches the servo on pin 9 to the servo object
 // Set interrupt pin as input
 pinMode(APDS9960_INT, INPUT);
 // Initialize Serial port
 Serial.begin(9600);
}

Marka xigta, waxaan qeexeynaa sida nidaamku u maareeyo dhaqdhaqaaqyada hawsha loop. HabkahandleGesture();hubinta dhaqdhaqaaqyada la heli karo iyo fulinta ficilada ku habboon. Tusaale ahaan, haddii dhaqdhaqaaqa la ogaado uu yahay bidix, servo-gu wuxuu u dhaqaaqi doonaa 180 darajo.

void handleGesture() {
    if ( apds.isGestureAvailable() ) {
    switch ( apds.readGesture() ) {
      case DIR_LEFT:
        myservo.write(180);  // added by RoboJax
        break;
      case DIR_RIGHT:
        myservo.write(0);   // added by RoboJax
        break;
    }
  }
}

Ugu dambeyntii, wareeggu si joogto ah ayuu u hubiyaa dhaqdhaqaaqyada wuxuuna cusbooneysiiyaa booska servo-ga iyadoo lagu saleynayo dhaqdhaqaaqa la ogaaday. Hubi inaad tijaabiso dejinta xaaladaha iftiinka kala duwan si aad u hesho aqoonsiga dhaqdhaqaaqa saxda ah.

Muuqaal / Waxa La Filan Karo

Markii wax walba la isku xiro oo koodhka la soo geliyo, waa in aad awood u yeelatid in aad xakameyso servo-ga adigoo gacantaada bidix ama midig u dhaqaaqaya. Servo-gu wuxuu u rogi doonaa 180 darajo dhaqdhaqaaq bidix ah wuxuuna ku noqon doonaa 0 darajo dhaqdhaqaaq midig ah. Haddii dhaqdhaqaaqyada aan la ogaan, hubi booska dareenka iyo xaaladaha iftiinka ee ku xeeran (fiidiyowga 05:30).

Cutubka

  • Hordhac - 00:00
  • Dulucda Qalabka - 01:30
  • Tilmaamaha Xadhigga - 03:00
  • Sharaxa Koodhka - 04:30
  • Muuqaal - 06:00

Sawirro

APDS-9960 gesture sensor module -2
APDS-9960 gesture sensor module -2
APDS-9960 gesture sensor module -1
APDS-9960 gesture sensor module -1
Arduino wiring of APDS9960 to control Servo motor using hand gesture
Arduino wiring of APDS9960 to control Servo motor using hand gesture
APDS-9960 gesture sensor -3
APDS-9960 gesture sensor -3
12-Source code for controlling a servo with your hand
Luqadda: C++
++
/****************************************************************
Modified for RoboJax by A.B.S. on May 09, 2017
in Ajax, Ontario, Canada. www.RoboJax.com


Original Source:
APDS-9960 RGB and Gesture Sensor
Shawn Hymel @ SparkFun Electronics
May 30, 2014
https://github.com/sparkfun/APDS-9960_RGB_and_Gesture_Sensor


Distributed as-is; no warranty is given.
****************************************************************/

#include <Wire.h>

// added by RoboJax
#include <Servo.h>

#include <SparkFun_APDS9960.h>


Servo myservo;  // create servo object to control a servo // added by RoboJax

// Pins
#define APDS9960_INT    2 // Needs to be an interrupt pin

// Constants

// Global Variables
SparkFun_APDS9960 apds = SparkFun_APDS9960();
int isr_flag = 0;

void setup() {
 myservo.attach(9);  // attaches the servo on pin 9 to the servo object
  // Set interrupt pin as input
  pinMode(APDS9960_INT, INPUT);

  // Initialize Serial port
  Serial.begin(9600);
  Serial.println();
  Serial.println(F("--------------------------------"));
  Serial.println(F("SparkFun APDS-9960 - GestureTest"));
  Serial.println(F("--------------------------------"));
  
  // Initialize interrupt service routine
  attachInterrupt(0, interruptRoutine, FALLING);

  // Initialize APDS-9960 (configure I2C and initial values)
  if ( apds.init() ) {
    Serial.println(F("APDS-9960 initialization complete"));
  } else {
    Serial.println(F("Something went wrong during APDS-9960 init!"));
  }
  
  // Start running the APDS-9960 gesture sensor engine
  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);
    handleGesture();
    isr_flag = 0;
    attachInterrupt(0, interruptRoutine, FALLING);
  }
}

void interruptRoutine() {
  isr_flag = 1;
}

void handleGesture() {
    if ( apds.isGestureAvailable() ) {
    switch ( apds.readGesture() ) {
      case DIR_UP:
        Serial.println("UP");
        break;
      case DIR_DOWN:
        Serial.println("DOWN");
        break;
      case DIR_LEFT:
        Serial.println("LEFT");
        myservo.write(180);  // added by RoboJax
        break;
      case DIR_RIGHT:
        Serial.println("RIGHT");
        myservo.write(0);   // added by RoboJax
        break;
      case DIR_NEAR:
        Serial.println("NEAR");
        break;
      case DIR_FAR:
        Serial.println("FAR");
        break;
      default:
        Serial.println("NONE");
    }
  }
}

Kheyraadka & Tixraacyada

Wali wax kaydsan ah oo weli ma jiro.

Faylasha📁

Fayl la'aan.