- Mga Kinakailangan na Bahagi
- Panimula sa APDS-9960 Digital Proximity RGB & Gesture Sensor
- Diagram ng Circuit
- Programming Arduino para sa Gesture at Color Sensing
Ngayon ang karamihan sa mga telepono ay may tampok na pagkontrol sa kilos upang buksan o isara ang anumang app, magsimula ng musika, dumalo sa mga tawag atbp. Ito ay isang madaling gamiting tampok upang makatipid ng oras at mukhang cool din upang makontrol ang anumang aparato na may kilos. Ginamit namin dati ang accelerometer upang bumuo ng kilos na kinokontrol na robot at kilos na kinokontrol na Air mouse. Ngunit ngayon natututo kaming mag-interface ng isang kilos sensor APDS9960 sa Arduino. Ang sensor na ito ay mayroon ding RGB sensor upang makakita ng mga kulay, na magagamit din sa tutorial na ito. Kaya't hindi mo kailangang gumamit ng magkakahiwalay na mga sensor para sa kilos at pagtuklas ng kulay, bagaman magagamit ang isang nakatuong sensor para sa pagtuklas ng kulay- TCS3200 color sensor na nagamit na namin sa Arduino upang makabuo ng isang color sorter machine.
Mga Kinakailangan na Bahagi
- Arduino UNO
- APDS9960 RGB at Sensor ng Kilos
- 16x2 LCD
- Lumipat ang DPDT
- 100K palayok at 10K risistor
- Mga Jumper Cables
Panimula sa APDS-9960 Digital Proximity RGB & Gesture Sensor
Ang APDS9960 ay isang multifunction sensor. Maaari itong makakita ng mga galaw, ilaw sa paligid at mga halaga ng RGB sa ilaw. Maaari ding magamit ang sensor na ito bilang isang proximity sensor at kadalasang ginagamit sa mga smartphone, upang hindi paganahin ang touchscreen habang dumadalo sa isang tawag.
Ang sensor na ito ay binubuo ng apat na mga photodiode. Ang mga photodiode na ito ay nakakakita ng nakalantad na enerhiya ng IR na ipinadala ng isang on-board LED. Kaya't tuwing ang anumang kilos ay ginanap pagkatapos ang enerhiya ng IR na ito ay napipigilan at sumasalamin pabalik sa sensor, ngayon nakita ng sensor ang impormasyon (direksyon, bilis) tungkol sa kilos at ginawang digital na impormasyon. Maaaring gamitin ang sensor na ito upang sukatin ang distansya ng balakid sa pamamagitan ng pagtuklas ng sinasalamin na ilaw ng IR. Mayroon itong mga filter sa pag-block ng UV at IR para sa pakiramdam ng mga kulay ng RGB at gumagawa ito ng 16-bit na data para sa bawat kulay.
Ang pin-out ng APDS-9960 sensor ay ipinapakita sa ibaba. Gumagana ang sensor na ito sa I 2 C na komunikasyon sa komunikasyon. Naubos nito ang 1µA kasalukuyang at pinalakas ng 3.3V kaya mag-ingat at huwag itong ikonekta sa 5V pin. Ang INT pin dito ay nakakagambala na pin, na ginagamit upang himukin ang komunikasyon ng I 2 C. At ang VL pin ay opsyonal na power pin para sa on-board LED kung ang PS jumper ay hindi nakakonekta. Kung ang PS jumper ay sarado pagkatapos ay kailangan mo lamang i-power ang VCC pin, magbibigay ito ng lakas sa pareho - ang module at ang IR LED.
Diagram ng Circuit
Ang mga koneksyon para sa APDS960 sa Arduino ay napaka-simple. Gagamitin namin ang isang pindutan ng DPDT upang lumipat sa pagitan ng dalawang mga mode na RGB Sensing at Gesture Sensing. Una ang I2C komunikasyon pin SDA at SCL ng APDS9960 ay konektado sa Arduino pin A4 at A5 ayon sa pagkakabanggit. Tulad ng nakasaad nang mas maaga ang operating boltahe para sa sensor ay 3.3v sa gayon, ang VCC at GND ng APDS9960 ay konektado sa 3.3V at GND ng Arduino. Ang makagambala na pin (INT) ng APDS9960 ay konektado sa D2 pin ng Arduino.
Para sa LCD, ang mga data pin (D4-D7) ay konektado sa mga digital na pin na D6-D3 ng Arduino at RS at EN pin na konektado sa D6 at D7 ng Arduino. Ang V0 ng LCD ay konektado sa palayok at isang 100K palayok ay ginagamit upang makontrol ang ningning ng LCD. Para sa mga pindutan ng DPDT na ginamit lamang namin ang 3 mga pin. Ang pangalawang pin ay konektado sa D7 pin ng Arduino para sa pag-input at ang dalawa pa ay konektado sa GND at VCC na sinusundan ng isang resistor na 10K.
Programming Arduino para sa Gesture at Color Sensing
Ang bahagi ng programa ay simple at madali at ang kumpletong programa na may isang demo na video ay ibinibigay sa pagtatapos ng tutorial na ito.
Una kailangan naming mag- install ng isang silid- aklatan na ginawa ng Sparkfun. Upang mai-install ang library na ito mag-navigate sa Sketch-> Isama ang Library-> Pamahalaan ang Mga Aklatan.
Ngayon sa search bar i-type ang "Sparkfun APDS9960" at mag-click sa pindutan ng pag-install kapag nakita mo ang library.
At handa na kaming umalis. Magsimula na tayo.
Kaya una ay isasama namin ang lahat ng kinakailangang mga file ng header. Ang unang header file na LiquidCrystal.h ay ginagamit para sa mga pagpapaandar ng LCD. Ang pangalawang header file na Wire.h ay ginagamit para sa komunikasyon ng I 2 C at huling isang SparkFun_APDS996.h ay ginagamit para sa sensor ng APDS9960.
# isama
Ngayon sa mga susunod na linya natukoy namin ang mga pin para sa pindutan at LCD.
Const int buttonPin = 7; Const int rs = 12, en = 11, d4 = 6, d5 = 5, d6 = 4, d7 = 3; LiquidCrystal lcd (rs, en, d4, d5, d6, d7);
Sa susunod na bahagi, tinukoy namin ang isang macro para sa makagambala na pin na konektado sa digital pin 2 at isang variable buttonState para sa kasalukuyang estado ng pindutan at isr_flag para sa nakagambala na gawain sa serbisyo.
#define APDS9960_INT 2 int buttonState; int isr_flag = 0;
Susunod na isang bagay ay nilikha para sa SparkFun_APDS9960, upang ma-access natin ang mga paggalaw ng kilos at kunin ang mga halagang RGB.
SparkFun_APDS9960 apds = SparkFun_APDS9960 (); uint16_t ambient_light = 0; uint16_t red_light = 0; uint16_t green_light = 0; uint16_t blue_light = 0;
Sa pag- andar ng pag- setup , ang unang linya ay upang makuha ang halaga mula sa pindutan (mababa / mataas) at ang pangalawa at pangatlong linya ay tumutukoy sa abala at pindutan ng pin bilang input. ipinasimula ng apds.init () ang sensor ng APDS9960 at ang lcd.begin (16,2) ay nagpapasimula sa LCD.
void setup () { buttonState = digitalRead (buttonPin); pinMode (APDS9960_INT, INPUT); pinMode (buttonPin, INPUT); apds.init (); lcd.begin (16, 2); }
Sa pagpapaandar ng loop ang unang linya ay nakakakuha ng mga halaga mula sa pindutan at iniimbak ito sa buttonState variable na tinukoy nang mas maaga. Ngayon sa mga susunod na linya sinusuri namin ang mga halaga mula sa pindutan, kung ito ay mataas pagkatapos ay pinapagana namin ang light sensor at kung ito ay mababa pagkatapos ay simulan ang sensor ng kilos.
Ang attachInterrupt () ay isang pagpapaandar na ginamit para sa panlabas na pagkagambala na sa kasong ito ay nakakagambala ng sensor. Ang unang argumento sa pagpapaandar na ito ay makagambala bilang. Sa Arduino UNO, mayroong dalawang makagambala na mga pin na digital na pin - 2 at 3 na tinukoy ng INT.0 at INT.1. At ikinonekta namin ito sa pin 2 kaya nagsulat kami ng 0 doon. Tinawag ng pangalawang argument ang pagpapaandar na interruptRoutine () na tinukoy sa paglaon. Ang huling argumento ay FALLING kaya't ito ay magpapalitaw ng makagambala kapag ang pin ay napunta mula sa mataas hanggang sa mababa. Dagdagan ang nalalaman tungkol sa Arduino Interrupts dito.
void loop () { buttonState = digitalRead (buttonPin); kung (buttonState == MATAAS) { apds.enableLightSensor (totoo); }
Sa susunod na bahagi, suriin namin ang pindutan ng pindutan. Kung ito ay mataas pagkatapos simulan ang proseso para sa RGB sensor. Pagkatapos suriin kung ang light sensor ay nagbabasa ng mga halaga o hindi. Kung hindi ito maaaring basahin ang mga halaga kung gayon sa kasong iyon, i-print ang " Error sa pagbabasa ng mga magaan na halaga". At kung mababasa nito ang mga halaga noon, ihambing ang mga halaga ng tatlong kulay at alinman ang pinakamataas, i-print ang kulay na iyon sa LCD.
kung (buttonState == MATAAS) { kung (! apds.readAmbientLight (ambient_light) - ! apds.readRedLight (red_light) - ! apds.readGreenLight (green_light) - ! apds.readBlueLight (blue_light)) { lcd.print ("Error sa pagbabasa ng mga magaan na halaga"); } iba pa { kung (red_light> green_light) { kung (red_light> blue_light) { lcd.print ("Red"); pagkaantala (1000); lcd.clear (); } ……. ………..
Sa mga susunod na linya muli suriin ang pindutan ng pindutan, at kung mababa ang proseso ng sensor ng Gesture. Pagkatapos suriin ang isr_flag at kung ito ay 1 pagkatapos ang isang function detachInterrupt () ay tinawag. Ginagamit ang pagpapaandar na ito upang patayin ang abala. Ang susunod na linya ay tumatawag sa handleGesture () na tinukoy sa pag-andar sa paglaon. Sa karagdagang mga susunod na linya tukuyin ang isr_flag sa zero at ikabit ang makagambala .
kung hindi man kung (buttonState == LOW) { kung (isr_flag == 1) { detachInterrupt (0); hawakanGesture (); isr_flag = 0; attachInterrupt (0, interruptRoutine, FALLING); } }
Ang susunod ay pagpapaandar ng interruptRoutine () . Ang pagpapaandar na ito ay ginagamit upang buksan ang variable ng isr_flag 1, upang ang serbisyong makagambala ay maaaring mapasimulan.
walang bisa interruptRoutine (). { isr_flag = 1; }
Ang pag- andar ng handleGesture () ay tinukoy sa susunod na bahagi. Ang pagpapaandar na ito ay unang sumusuri para sa pagkakaroon ng sensor ng kilos. Kung ito ay magagamit pagkatapos ay binabasa nito ang mga halaga ng kilos at suriin kung aling kilos ito (Pataas, PABABA, KANANAS, KALIWA, FAR, MALAPIT) at na-print ang mga kaukulang halaga sa LCD.
void handleGesture () { if (apds.isGestureAvailable ()) { switch (apds.readGesture ()) { case DIR_UP: lcd.print ("UP"); pagkaantala (1000); lcd.clear (); pahinga; kaso DIR_DOWN: lcd.print ("Pababa"); pagkaantala (1000); lcd.clear (); pahinga; case DIR_LEFT: lcd.print ("LEFT"); pagkaantala (1000); lcd.clear (); pahinga; kaso DIR_RIGHT: lcd.print ("TAMA"); pagkaantala (1000); lcd.clear (); pahinga; kaso DIR_NEAR: lcd.print ("MALAPIT"); pagkaantala (1000); lcd.clear (); pahinga; kaso DIR_FAR: lcd.print ("FAR"); pagkaantala (1000); lcd.clear (); pahinga; default: lcd.print ("WALA"); pagkaantala (1000); lcd.clear (); } } }
Panghuli, i-upload ang code sa Arduino at hintayin na magsimula ang sensor. Ngayon habang ang pindutan ay naka-OFF ay nangangahulugan na ito ay nasa mode na kilos. Kaya subukang ilipat ang iyong mga kamay sa kaliwa, kanan, pataas, pababa ng mga direksyon. Para sa malayong kilos, panatilihin ang iyong kamay sa layo na 2-4 pulgada mula sa sensor sa loob ng 2-3 segundo at alisin ito. At para sa malapit na kilos panatilihin ang iyong kamay malayo sa sensor pagkatapos dalhin ito malapit at alisin ito.
Ngayon buksan ang pindutan upang ilagay ito sa color sensing mode at kumuha ng pula, asul at berde na mga bagay isa-isang malapit sa sensor. Ipi-print nito ang kulay ng bagay.