- Nepieciešamās sastāvdaļas
- Ievads APDS-9960 digitālā tuvuma RGB un žestu sensorā
- Ķēdes shēma
- Arduino programmēšana žestu un krāsu noteikšanai
Šodien lielākajai daļai tālruņu ir pievienota žestu vadības funkcija, lai atvērtu vai aizvērtu jebkuru lietotni, sāktu mūziku, apmeklētu zvanus utt. Šī ir ļoti ērta funkcija, lai ietaupītu laiku, un izskatās arī forši kontrolēt jebkuru ierīci ar žestiem. Iepriekš mēs izmantojām akselerometru, lai izveidotu ar žestu vadītu robotu un ar žestu vadītu gaisa peli. Bet šodien mēs iemācāmies sazināties ar žestu sensoru APDS9960 ar Arduino. Šim sensoram ir arī RGB sensors krāsu noteikšanai, kas tiks izmantots arī šajā apmācībā. Tāpēc žestu un krāsu noteikšanai jums nav jāizmanto atsevišķi sensori, lai gan krāsu noteikšanai ir pieejams īpašs sensors - krāsu sensors TCS3200, ko mēs jau esam izmantojuši kopā ar Arduino krāsu šķirošanas mašīnas izveidošanai.
Nepieciešamās sastāvdaļas
- Arduino UNO
- APDS9960 RGB un žestu sensors
- 16x2 LCD
- DPDT slēdzis
- 100K katls un 10K rezistors
- Džemperu kabeļi
Ievads APDS-9960 digitālā tuvuma RGB un žestu sensorā
APDS9960 ir daudzfunkcionāls sensors. Tas var atklāt žestus, apkārtējo gaismu un RGB vērtības gaismā. Šo sensoru var izmantot arī kā tuvuma sensoru, un to galvenokārt izmanto viedtālruņos, lai atspējotu skārienekrānu, apmeklējot zvanu.
Šis sensors sastāv no četrām fotodiodēm. Šīs fotodiodes uztver atstaroto IR enerģiju, ko pārraida borta LED. Tātad, kad tiek veikts kāds žests, šī IR enerģija tiek aizsprostota un atspoguļojas atpakaļ uz sensoru, tagad sensors nosaka informāciju (virzienu, ātrumu) par žestu un pārvērš to ciparu informācijā. Šo sensoru var izmantot, lai izmērītu šķēršļa attālumu, atklājot atstaroto IR gaismu. Tam ir UV un IR bloķējošie filtri RGB krāsu uztveršanai, un tas rada 16 bitu datus par katru krāsu.
APDS-9960 sensora tapa ir parādīta zemāk. Šis sensors darbojas ar I 2 C sakaru protokolu. Tas patērē 1µA strāvu un darbina ar 3,3 V, tāpēc esiet piesardzīgs un nepievienojiet to ar 5 V tapu. INT tapa šeit ir pārtraukuma tapa, ko izmanto I 2 C sakaru vadīšanai. Ja VL tapa ir papildu barošanas tapa iebūvētajam LED, ja PS džemperis nav pievienots. Ja PS džemperis ir aizvērts, jums jāpievieno tikai VCC tapa, tā nodrošinās enerģiju abiem - modulim un IR LED.
Ķēdes shēma
Savienojumi APDS960 ar Arduino ir ļoti vienkārši. Mēs izmantosim pogu DPDT, lai pārslēgtos starp diviem režīmiem RGB Sensing un Gesture Sensing. Pirmkārt, APDS9960 I2C sakaru tapas SDA un SCL ir savienotas attiecīgi ar Arduino tapām A4 un A5. Kā minēts iepriekš, sensora darba spriegums ir 3,3 V, tāpēc APDS9960 VCC un GND ir savienoti ar Arduino 3,3 V un GND. APDS9960 pārtraukuma tapa (INT) ir savienota ar Arduino D2 tapu.
For LCD, datu pins (D4-D7) tiek savienots ar digitālo pins D6-D3 no Arduino un RS un EN pins ir savienotas ar D6 un D7 no Arduino. LCD V0 ir pievienots katlam, un 100K katls tiek izmantots, lai kontrolētu LCD spilgtumu. DPDT pogām mēs izmantojām tikai 3 tapas. Otrais tapa ir pievienots Arduino D7 tapai ievadei un pārējie divi ir savienoti ar GND un VCC, kam seko 10K rezistors.
Arduino programmēšana žestu un krāsu noteikšanai
Programmēšanas daļa ir vienkārša un vienkārša, un visa programma ar demonstrācijas video ir sniegta šīs apmācības beigās.
Vispirms mums jāinstalē Sparkfun izveidota bibliotēka. Lai instalētu šo bibliotēku, dodieties uz Sketch-> Include Library-> Manage Libraries.
Tagad meklēšanas joslā ierakstiet “Sparkfun APDS9960” un, redzot bibliotēku, noklikšķiniet uz instalēšanas pogas.
Un mēs esam gatavi iet. Sāksim.
Tāpēc vispirms mums jāiekļauj visi nepieciešamie galvenes faili. Pirmais galvenes fails LiquidCrystal.h tiek izmantots LCD funkcijām. Otrais galvenes fails Wire.h tiek izmantots komunikācijām I 2 C, bet pēdējais SparkFun_APDS996.h tiek izmantots sensoram APDS9960.
# iekļaut
Tagad nākamajās rindās mēs esam definējuši pogas un LCD tapas.
const int pogaPin = 7; const int rs = 12, en = 11, d4 = 6, d5 = 5, d6 = 4, d7 = 3; LiquidCrystal lcd (rs, en, d4, d5, d6, d7);
Nākamajā daļā mēs esam definējuši pārtraukuma tapas makro, kas ir savienots ar 2. digitālo tapu, un vienu mainīgo buttonState pašreizējam pogas stāvoklim un isr_flag pārtraukuma pakalpojumu rutīnai.
#define APDS9960_INT 2 int buttonState; int isr_flag = 0;
Pēc tam tiek izveidots objekts SparkFun_APDS9960, lai mēs varētu piekļūt žestu kustībām un iegūt RGB vērtības.
SparkFun_APDS9960 apds = SparkFun_APDS9960 (); uint16_t apkārtējā gaisma = 0; uint16_t sarkanā gaisma = 0; uint16_t zaļā gaisma = 0; uint16_t blue_light = 0;
Pēc iestatīšanas funkciju, pirmā līnija ir atnest vērtību no pogas (zems / augsts), un otro un trešo līnija nosaka pārtraukt un pogu pin kā priekšnodokli. apds.init () inicializē sensoru APDS9960, bet lcd.begin (16,2) - LCD.
void setup () { buttonState = digitalRead (buttonPin); pinMode (APDS9960_INT, INPUT); pinMode (buttonPin, INPUT); apds.init (); lcd.begin (16, 2); }
Jo cilpas funkciju pirmā rinda kļūst vērtības no pogas, un to noglabā buttonState mainīgais iepriekš definēti. Tagad nākamajās rindās mēs pārbaudām vērtības no pogas, ja tā ir augsta, mēs iespējojam gaismas sensoru un, ja tas ir zems, tad inicializējiet žestu sensoru.
AttachInterrupt () ir funkcija, ko izmanto ārējo pārtraukt kas šajā gadījumā ir sensora pārtraukt. Pirmais šīs funkcijas arguments ir pārtraukuma numurs. Arduino UNO ir divas pārtraukuma tapas digitālās tapas - 2 un 3, kuras apzīmē ar INT.0 un INT.1. Un mēs to esam savienojuši ar 2. tapu, tāpēc esam ierakstījuši 0. Otrais arguments izsauc funkciju breakRoutine (), kas tiek definēta vēlāk. Pēdējais arguments ir KRITUMS, lai tas aktivizētu pārtraukumu, kad tapa iet no augšas uz zemu. Uzziniet vairāk par Arduino pārtraukumiem šeit.
void loop () { buttonState = digitalRead (buttonPin); if (buttonState == HIGH) { apds.enableLightSensor (true); }
Nākamajā daļā mēs pārbaudām pogas tapu. Ja tas ir augsts, sāciet RGB sensora procesu. Pēc tam pārbaudiet, vai gaismas sensors nolasa vērtības vai nē. Ja tas nespēj nolasīt vērtības, tādā gadījumā izdrukājiet to " Kļūda, lasot gaismas vērtības". Un, ja tas spēj nolasīt vērtības, salīdziniet trīs krāsu vērtības, un atkarībā no tā, kas ir augstākais, izdrukājiet šo krāsu LCD.
if (buttonState == HIGH) { if (! apds.readAmbientLight (ambient_light) - ! apds.readRedLight (red_light) - ! apds.readGreenLight (green_light) - ! apds.readBlueLight (blue_light)) { lcd.print ("Kļūda, nolasot gaismas vērtības"); } else { if (red_light> green_light) { if (red_light> blue_light) { lcd.print ("Sarkans"); kavēšanās (1000); lcd.clear (); } ……. ………..
Nākamajās rindās vēlreiz pārbaudiet pogas tapu un, ja tā ir zema, apstrādājiet žesta sensoru. Pēc tam pārbaudiet, vai ir isr_flag, un, ja tas ir 1, tiek izsaukta funkcija detachInterrupt () . Šo funkciju izmanto, lai izslēgtu pārtraukumu. Nākamā rinda izsauc handGesture (), kas ir funkcija, kas definēta vēlāk. Nākamajās nākamajās rindās definējiet isr_flag līdz nullei un pievienojiet pārtraukumu.
else if (buttonState == LOW) { if (isr_flag == 1) { detachInterrupt (0); rokturisŽests (); isr_flag = 0; piestiprinātTraucēt (0, pārtraukt rutīnu, kritienu); } }
Nākamā ir pārtrauktRutine () funkcija. Šo funkciju izmanto, lai pagrieztu mainīgo isr_flag 1, lai pārtraukšanas pakalpojumu varētu inicializēt.
void breakRutīna (). { isr_flag = 1; }
Funkcija handGesture () ir definēta nākamajā daļā. Šī funkcija vispirms pārbauda, vai ir pieejams žestu sensors. Ja tas ir pieejams, tas nolasa žestu vērtības un pārbauda, kurš žests tas ir (UP, DOWN, RIGHT, LEFT, FAR, NEAR) un izdrukā atbilstošās vērtības LCD.
void handleGesture () { if (apds.isGestureAvailable ()) { switch (apds.readGesture ()) { gadījums DIR_UP: lcd.print ("UP"); kavēšanās (1000); lcd.clear (); pārtraukums; gadījums DIR_DOWN: lcd.print ("DOWN"); kavēšanās (1000); lcd.clear (); pārtraukums; gadījums DIR_LEFT: lcd.print ("LEFT"); kavēšanās (1000); lcd.clear (); pārtraukums; gadījums DIR_RIGHT: lcd.print ("RIGHT"); kavēšanās (1000); lcd.clear (); pārtraukums; gadījums DIR_NEAR: lcd.print ("NEAR"); kavēšanās (1000); lcd.clear (); pārtraukums; gadījums DIR_FAR: lcd.print ("FAR"); kavēšanās (1000); lcd.clear (); pārtraukums; noklusējums: lcd.print ("NONE"); kavēšanās (1000); lcd.clear (); } } }
Visbeidzot, augšupielādējiet kodu vietnē Arduino un gaidiet sensora inicializāciju. Kamēr poga ir izslēgta, tas nozīmē, ka tā ir žestu režīmā. Tāpēc mēģiniet kustināt rokas pa kreisi, pa labi, uz augšu, uz leju. Lai veiktu tālu žestu, 2-3 sekundes turiet roku 2–4 collu attālumā no sensora un noņemiet to. Un tuvākajā žests saglabāt savu roku tālu no sensora tad to tuvumā, un izņemiet to.
Tagad pagrieziet pogu IESLĒGTS, lai to ieslēgtu krāsu uztveršanas režīmā, un sensora tuvumā pa vienam paņemiet sarkanos, zilos un zaļos objektus. Tas izdrukās objekta krāsu.