- Vaaditut komponentit
- Johdanto digitaaliseen APDS-9960 RGB- ja eleanturiin
- Piirikaavio
- Arduinon ohjelmointi eleelle ja väritunnistukselle
Nykyään useimmissa puhelimissa on eleohjausominaisuus minkä tahansa sovelluksen avaamiseen tai sulkemiseen, musiikin aloittamiseen, puheluihin jne. Tämä on erittäin kätevä ominaisuus säästää aikaa ja näyttää hyvältä hallita mitä tahansa laitetta eleillä. Aikaisemmin käytimme kiihtyvyysanturia rakentaen eleohjatun robotin ja eleohjatun ilmahiiren. Mutta tänään opimme liittämään eletunnistimen APDS9960 Arduinoon. Tässä anturissa on myös RGB-anturi värien havaitsemiseksi, jota käytetään myös tässä opetusohjelmassa. Joten sinun ei tarvitse käyttää erillisiä antureita eleiden ja värien havaitsemiseen, vaikka käytettävissä on erillinen anturi värien havaitsemiseen - TCS3200-värianturi, jota olemme jo käyttäneet Arduinon kanssa värien lajittelukoneen rakentamiseen.
Vaaditut komponentit
- Arduino UNO
- APDS9960 RGB- ja eletunnistin
- 16x2 LCD
- DPDT-kytkin
- 100K potti ja 10K vastus
- Käynnistyskaapelit
Johdanto digitaaliseen APDS-9960 RGB- ja eleanturiin
APDS9960 on monitoimianturi. Se tunnistaa eleet, ympäröivän valon ja RGB-arvot valossa. Tätä anturia voidaan käyttää myös läheisyysanturina, ja sitä käytetään enimmäkseen älypuhelimissa kosketusnäytön poistamiseksi käytöstä puhelun aikana.
Tämä anturi koostuu neljästä valodiodista. Nämä valodiodit havaitsevat heijastuneen IR-energian, jonka välittää sisäinen LED. Joten aina kun jokin ele suoritetaan, tämä IR-energia tukkeutuu ja heijastuu takaisin anturiin, nyt anturi havaitsee eleen tiedot (suunta, nopeus) ja muuntaa sen digitaaliseksi tiedoksi. Tätä anturia voidaan käyttää esteen etäisyyden mittaamiseen havaitsemalla heijastunut IR-valo. Siinä on UV- ja IR-estosuodattimet RGB-värien havaitsemiseksi ja se tuottaa 16-bittistä tietoa jokaiselle värille.
APDS-9960-anturin kiinnitys on esitetty alla. Tämä anturi toimii I 2 C -yhteyskäytännöllä. Se kuluttaa 1µA virtaa ja saa virtansa 3,3 V: stä, joten ole varovainen äläkä liitä sitä 5 V: n napaan. INT-nasta on tässä keskeytystappi, jota käytetään I 2 C -yhteyden ohjaamiseen. Ja VL-tappi on lisävarusteena saatava LED-virtatappi, jos PS-hyppääjää ei ole kytketty. Jos PS-hyppyjohdin on suljettu, sinun tarvitsee syöttää vain VCC-nasta, se antaa virtaa molemmille - moduulille ja IR-LEDille.
Piirikaavio
APDS960: n ja Arduinon yhteydet ovat hyvin yksinkertaisia. Käytämme DPDT-painiketta siirtyäksesi kahden tilan välillä: RGB Sensing ja Gesture Sensing. Ensinnäkin APDS9960: n I2C-tiedonsiirtotapit SDA ja SCL on kytketty Arduino-nastoihin A4 ja A5. Kuten aiemmin todettiin, anturin käyttöjännite on 3,3 V, joten APDS9960: n VCC ja GND on kytketty Arduinon 3,3 V: iin ja GND: hen. APDS9960: n keskeytystappi (INT) on kytketty Arduinon D2-nastaan.
Ja LCD-, tiedot nastat (D4-D7) on kytketty digitaaliseen nastat D6-D3 Arduino ja RS ja FI nastat on kytketty D6 ja D7 Arduino. LCD-näytön V0 on kytketty pottiin ja 100K-pottia käytetään LCD-näytön kirkkauden säätämiseen. DPDT-painikkeisiin olemme käyttäneet vain 3 nastaa. Toinen nasta on kytketty Arduinon D7-nastaan sisääntuloa varten ja kaksi muuta on kytketty GND: hen ja VCC: hen, jota seuraa 10K-vastus.
Arduinon ohjelmointi eleelle ja väritunnistukselle
Ohjelmointiosa on yksinkertainen ja helppo, ja koko ohjelma, jossa on esittelyvideo, on tämän opetusohjelman lopussa.
Ensin meidän on asennettava Sparkfunin tekemä kirjasto. Asenna tämä kirjasto siirtymällä kohtaan Luonnos-> Sisällytä kirjasto-> Hallinnoi kirjastoja.
Kirjoita nyt hakupalkkiin ”Sparkfun APDS9960” ja napsauta asennuspainiketta, kun näet kirjaston.
Ja olemme valmiita lähtemään. Aloitetaan.
Joten ensinnäkin meidän on sisällytettävä kaikki vaaditut otsikkotiedostot. Ensimmäistä otsikkotiedostoa LiquidCrystal.h käytetään LCD-toimintoihin. Toista otsikkotiedostoa Wire.h käytetään I 2 C -viestintään ja viimeistä SparkFun_APDS996.h käytetään APDS9960-anturiin.
#sisältää
Seuraavilla riveillä olemme määrittäneet napit ja LCD-nastat.
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);
Seuraavassa osassa olemme määrittäneet makron keskeytystapille, joka on kytketty digitaaliseen tapiin 2, ja yhden muuttujan buttonState painikkeen ja isr_flag- tilan nykyiselle tilalle keskeytyspalvelurutiinille.
#define APDS9960_INT 2 int buttonState; int isr_lippu = 0;
Seuraavaksi luodaan objekti SparkFun_APDS9960: lle, jotta voimme käyttää eleitä ja noutaa RGB-arvot.
SparkFun_APDS9960 apds = SparkFun_APDS9960 (); uint16_t ympäristön valo = 0; uint16_t punainen_valo = 0; uint16_t vihreä_valo = 0; uint16_t sininen_valo = 0;
In setup toiminto, ensimmäinen rivi on hakemaan arvo painiketta (matala / korkea) ja toinen ja kolmas rivi määrittelee keskeyttää ja painiketta pin syötteenä. apds.init () alustaa APDS9960-anturin ja lcd.begin (16,2) alustaa nestekidenäytön.
void setup () { buttonState = digitalRead (buttonPin); pinMode (APDS9960_INT, INPUT); pinMode (buttonPin, INPUT); apds.init (); lcd.begin (16, 2); }
In silmukan toiminta ensimmäisellä rivillä saa arvot painiketta ja tallentaa sen buttonState muuttuja määritelty aikaisemmin. Seuraavilla riveillä tarkistamme arvot painikkeesta, jos se on korkea, otamme valosensorin käyttöön ja jos se on matala, alusta sitten eletunnistin.
AttachInterrupt () on funktio, jota käytetään ulkoinen keskeytys, joka tässä tapauksessa on anturin keskeyttää. Tämän funktion ensimmäinen argumentti on keskeytysnumero. Arduino UNO: ssa on kaksi keskeytysnastan digitaalista nastaa - 2 ja 3, joita merkitään INT.0: lla ja INT.1: llä. Ja olemme liittäneet sen nastaan 2, joten olemme kirjoittaneet 0 sinne. Toinen argumentti kutsuu funktiota keskeyttääRutine (), joka määritetään myöhemmin. Viimeinen argumentti on FALLING niin, että se laukaisee keskeytyksen, kun tappi menee korkealta matalalle. Lue lisää Arduino-keskeytyksistä täältä.
void loop () { buttonState = digitalRead (buttonPin); if (buttonState == KORKEA) { apds.enableLightSensor (true); }
Seuraavassa osassa tarkistetaan napin tappi. Jos se on korkea, aloita RGB-anturin prosessi. Tarkista sitten, lukeeko valoanturi arvoja vai ei. Jos se ei pysty lukemaan arvoja, tulosta siinä tapauksessa " Virhe luettaessa valoarvoja". Ja jos se pystyy lukemaan arvoja, vertaa kolmen värin arvoja, ja kumpi on korkein, tulosta kyseinen väri nestekidenäytölle.
if (buttonState == HIGH) { if (! apds.readAmbientLight (ympäröivä_valo) - ! apds.readRedLight (punainen_valo) - ! apds.readGreenLight (vihreä_valo) - ! apds.readBlueLight (sininen_valo)) { lcd.print ("Virhe lukemalla valoarvoja"); } else { if (punainen_valo> vihreä_valo) { if (punainen_valo> sininen_valo) { lcd.print ("punainen"); viive (1000); lcd.clear (); } ……. ………..
Tarkista seuraavilla riveillä napin tappi uudelleen ja prosessoi eleanturi, jos se on alhaalla. Tarkista sitten isr_flag ja jos se on 1, kutsutaan funktio detachInterrupt () . Tätä toimintoa käytetään keskeytyksen poistamiseen käytöstä. Seuraava rivi kutsuu handGesture () -funktiota, joka määritetään myöhemmin. Määritä seuraavilla riveillä isr_flag nollaan ja liitä keskeytys.
else if (buttonState == LOW) { if (isr_flag == 1) { detachInterrupt (0); kahvaEle (); isr_lippu = 0; attachInterrupt (0, keskeytä rutiini, FALLING); } }
Seuraava on keskeytäRutine () -toiminto. Tätä toimintoa käytetään muuttamaan isr_flag- muuttujaa 1, jotta keskeytyspalvelu voidaan alustaa.
void keskeytäRutiini (). { isr_flag = 1; }
HandleGesture () funktio on määritelty seuraavassa osassa. Tämä toiminto tarkistaa ensin eletunnistimen saatavuuden. Jos se on käytettävissä, se lukee elearvot ja tarkistaa, mikä ele se on (YLÖS, ALAS, OIKEA, VASEN, KAUKA, LÄHELLÄ) ja tulostaa vastaavat arvot LCD-näytölle.
void handleGesture () { if (apds.isGestureAvailable ()) { switch (apds.readGesture ()) { tapaus DIR_UP: lcd.print ("UP"); viive (1000); lcd.clear (); tauko; tapaus DIR_DOWN: lcd.print ("DOWN"); viive (1000); lcd.clear (); tauko; tapaus DIR_LEFT: lcd.print ("VASEN"); viive (1000); lcd.clear (); tauko; tapaus DIR_RIGHT: lcd.print ("OIKEA"); viive (1000); lcd.clear (); tauko; tapaus DIR_NEAR: lcd.print ("NEAR"); viive (1000); lcd.clear (); tauko; tapaus DIR_FAR: lcd.print ("FAR"); viive (1000); lcd.clear (); tauko; oletus: lcd.print ("NONE"); viive (1000); lcd.clear (); } } }
Lataa lopuksi koodi Arduinoon ja odota anturin alustamista. Nyt kun painike on pois päältä, se tarkoittaa, että se on eletilassa. Joten yritä liikuttaa käsiäsi vasemmalle, oikealle, ylös, alas. Saat paljon ele, pidä kätesi etäisyydellä 2-4 tuumaa sensorista 2-3 sekuntia ja poista se. Ja lähellä eleen pitää kätesi kaukana anturi sitten ottaa sen läheltä ja poista se.
Kytke nyt painike ON-asentoon, jotta se siirtyy väritunnistustilaan ja vie punaiset, siniset ja vihreät esineet yksitellen lähelle anturia. Se tulostaa kohteen värin.