Obsah:
- Krok 1: Ústava
- Krok 2: NeoPixel LED Eye Ball
- Krok 3: Senzorová jednotka
- Krok 4: Arduino kód
- Krok 5: Prevádzka
Video: Sledovanie pohybu očí pomocou infračerveného senzora: 5 krokov
2024 Autor: John Day | [email protected]. Naposledy zmenené: 2024-01-30 11:59
Na snímanie pohybov očí a ovládanie LED som použil infračervený senzor.
Očné bulvy som vyrobil pomocou LED pásky NeoPixel.
Krok 1: Ústava
Na sledovanie očí som použil dva senzory QTR - 1A. Snímanie pomocou Arduina a ovládanie LED diódy.
komponentov
- SparkFun Arduino Pro Mini 328 - 5V/16MHz
- Doplnok batohu Adafruit LiIon/LiPoly pre Pro Trinket/ItsyBitsy
- LiPo batéria
- NeoPixel pásik
- Senzor odrazivosti QTR-1A
Krok 2: NeoPixel LED Eye Ball
Použitá je LED páska NeoPixel. LED dióda má 68 jednotiek.
LED je k miske pripevnená obojstrannou páskou a zapojená.
Krok 3: Senzorová jednotka
Na sledovanie očí som použil dva senzory QTR - 1A. QTR - 1A sú umiestnené na plastovú fóliu vo vzdialenosti približne šírky oka.
Senzorová časť a časť mikrokontroléra boli pripevnené k okuliarom klipom.
Krok 4: Arduino kód
Keď sa clona priblíži k jednému senzoru, odrazené svetlo sa zníži a hodnota senzora sa zvýši. Naopak, keď sa clona pohne, odrazené svetlo sa zvýši a hodnota senzora fotoreflektora sa zníži.
Pohyb zrenice LED diódy vpravo a vľavo sníma zvýšenie a zníženie jednej hodnoty senzora a riadi ho. Keď bliká, obidve hodnoty snímača sa znížia, takže ak sa súčasne znížia obidve hodnoty snímačov, očné viečka očnej gule LED klesnú.
Použil som nasledujúcu knižnicu.
- Senzory QTR:
- Adafruit_NeoPixel:
#include #include
#define NUM_SENSORS 2 // počet použitých senzorov#definovať NUM_SAMPLES_PER_SENSOR 10 // priemerovanie#definovať EMITTER_PIN QTR_NO_EMITTER_PIN
int iniSensorValL, sensorValL; int iniSensorValR, sensorValR; #define PIN A3 Adafruit_NeoPixel led = Adafruit_NeoPixel (68, PIN, NEO_GRB + NEO_KHZ800); int blackNum = 24; int pupilNum = 12; farba uint32_t; vnútorný jas = 40; byte eyeColor; int LR = 7; booleovské viečko = nepravda; int cnt = 0;
// Animácia Black Eye L&R blackLED [15] [24] = {{12, 32, 35, 55, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68}, {12, 13, 31, 36, 54, 55, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68}, {11, 13, 14, 30, 37, 53, 54, 56, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68}, {10, 11, 14, 15, 29, 38, 52, 53, 56, 57, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68}, {9, 10, 11, 12, 15, 16, 28, 33, 34, 39, 51, 52, 55, 56, 57, 58, 68, 68, 68, 68, 68, 68, 68, 68}, {0, 8, 9, 10, 11, 12, 13, 16, 17, 27, 32, 35, 40, 50, 51, 54, 55, 56, 57, 58, 59, 67, 68, 68}, {0, 1, 7, 8, 9, 10, 13, 14, 17, 18, 26, 31, 36, 41, 49, 50, 53, 54, 57, 58, 59, 60, 66, 67}, {1, 2, 6, 7, 8, 9, 14, 15, 18, 19, 25, 30, 37, 42, 48, 49, 52, 53, 58, 59, 60, 61, 65, 66}, {2, 3, 5, 6, 7, 8, 15, 16, 19, 20, 24, 29, 38, 43, 47, 48, 51, 52, 59, 60, 61, 62, 64, 65}, {3, 4, 5, 6, 7, 16, 17, 20, 21, 23, 28, 39, 44, 46, 47, 50, 51, 60, 61, 62, 63, 64, 68, 68}, {4, 5, 6, 17, 18, 21, 22, 27, 40, 45, 46, 49, 50, 61, 62, 63, 68, 68, 68, 68, 68, 68, 68, 68}, {4, 5, 18, 19, 26, 41, 48, 49, 62, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68}, {4, 19, 20, 25, 42, 47, 48, 63, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68}, {20, 21, 24, 43, 46, 47, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68}, {21, 23, 44, 46, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68}};
// žiak L&R animationint pupilLED [15] [12] = {{33, 34, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68}, {32, 33, 34, 35, 68, 68, 68, 68, 68, 68, 68, 68}, {12, 31, 32, 33, 34, 35, 36, 55, 68, 68, 68, 68}, {12, 13, 30, 31, 32, 33, 34, 35, 36, 37, 54, 55}, {13, 14, 29, 30, 31, 32, 35, 36, 37, 38, 53, 54}, {14, 15, 28, 29, 30, 31, 36, 37, 38, 39, 52, 53}, {15, 16, 27, 28, 29, 30, 37, 38, 39, 40, 51, 52}, {16, 17, 26, 27, 28, 29, 38, 39, 40, 41, 50, 51}, {17, 18, 25, 26, 27, 28, 39, 40, 41, 42, 49, 50}, {18, 19, 24, 25, 26, 27, 40, 41, 42, 43, 48, 49}, {19, 20, 23, 24, 25, 26, 41, 42, 43, 44, 47, 48}, {20, 21, 22, 23, 24, 25, 42, 43, 44, 45, 46, 47}, {21, 22, 23, 24, 43, 44, 45, 46, 68, 68, 68, 68 }, {22, 23, 44, 45, 68, 68, 68, 68, 68, 68, 68, 68}, {22, 45, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68}};
// Blink animationint eyelid = 0; int eyelidNum [8] = {0, 4, 8, 16, 24, 34, 44, 56}; int eyelidLED [56] = {64, 65, 66, 67, 58, 59, 60, 61, 56, 57, 62, 63, 49, 50, 51, 52, 47, 48, 53, 54, 38, 39, 40, 41, 46, 55, 36, 37, 42, 43, 26, 27, 28, 29, 35, 44, 24, 25, 30, 31, 15, 16, 17, 18, 34, 45, 23, 32, 13, 14, 19, 20, 6, 7, 8, 9}; QTRSensorsAnalog qtra ((znak bez znamienka ) {0, 1}, NUM_SENSORS, NUM_SAMPLES_PER_SENSOR, EMITTER_PIN); nepodpísaný int senzorValues [NUM_SENSORS];
void blink (int očné viečko, int LR) {if (viečko! = 8) {// Pewter pre (uint16_t i = 0; i <led.numPixels (); i ++) {led.setPixelColor (i, led. Color (66, 66, 66)); }
// Čierne oko pre (uint16_t i = 0; i led.setPixelColor (blackLED [LR] , farba);}
// žiak pre (uint16_t i = 0; i
led.setPixelColor (pupilLED [LR] , led. Color (0, 0, 66)); }
// očné viečko pre (int i = 0; i <eyelidNum [eyelid]; i ++) {led.setPixelColor (eyelidLED , 0); }} else if (očné viečko == 8) {led.clear (); } led.show ();}
neplatné nastavenie () {
Serial.begin (115200); led.begin (); led.setBrightness (jas); // Počiatočný jas 40 led.show (); // Inicializácia všetkých pixelov na 'vypnuté' farba = led. Color (0, 177, 55); // oneskorenie farby zrenice (100); qtra.read (hodnotyValues); iniSensorValL = hodnoty senzora [0]; iniSensorValR = hodnoty senzora [1]; žmurknutie (očné viečko, LR); }
void loop () {// QTR - 1A hodnota senzora qtra.read (sensorValues); sensorValL = hodnoty senzora [0]; sensorValR = sensorValues [1];
double rasioL = (double) sensorValL / iniSensorValL;
double rasioR = (double) sensorValR / iniSensorValR;
Serial.print (rasioL);
Serial.print (""); Serial.println (rasioR);
if (rasioL> 0,985 && rasioR <0,985) {// vpravo pre (int i = LR; i <12; i ++) {blink (0, i); oneskorenie (40); LR = i; }} else if (rasioL 0,985) {// left for (int i = LR; i> 2; i-) {blink (0, i); oneskorenie (40); LR = i; }} else if (lid == false && rasioL <0,96 && rasioR <0,96) {// Blikajúce zatvorenie pre (int i = 1; i 0,96 && rasioR> 0,96) {// Blikanie otvorené pre (int i = 8; i > 0; i-) {žmurknutie (i, LR); oneskorenie (40); viečko = nepravda; }} else if (lid == false && rasioL> 0,96 && rasioR> 0,96) {// normal // cnt ++; // očné viečko = 0; if (LR <= 7) {for (int i = LR; i <= 7; i ++) {blink (0, i); oneskorenie (40); LR = i; }} else {for (int i = LR; i> = 7; i-) {blink (0, i); oneskorenie (40); LR = i; }}}
// Obnovenie počiatočnej hodnoty, ak (cnt> 10) {iniSensorValL = sensorValL; iniSensorValR = sensorValR; cnt = 0; }}
Krok 5: Prevádzka
Snímajte senzorom pohyb vľavo a vpravo a žmurkanie zrenice a ovládajte LED diódy očnej gule.
Odporúča:
Počítadlo návštevníkov pomocou 8051 a infračerveného senzora s LCD: 3 kroky
Počítadlo návštevníkov pomocou senzora 8051 a infračerveného senzora s LCD: Vážení priatelia, vysvetlil som, ako vytvoriť čítač návštevníkov pomocou senzora 8051 a infračerveného senzora, a zobrazil ho na displeji LCD. 8051 je jedným z najpopulárnejších mikrokontrolérov používaných na výrobu hobby, komerčných aplikácií na celom svete. Urobil som viz
Sledovanie pohybu pomocou MPU-6000 a fotónu častíc: 4 kroky
Sledovanie pohybu pomocou MPU-6000 a časticového fotónu: MPU-6000 je 6-osý snímač sledovania pohybu, ktorý má v sebe zabudovaný 3-osý akcelerometer a 3-osový gyroskop. Tento senzor je schopný efektívne sledovať presnú polohu a umiestnenie objektu v trojrozmernej rovine. Môže byť použitý v
Sledovanie pohybu pomocou MPU-6000 a Arduino Nano: 4 kroky
Sledovanie pohybu pomocou MPU-6000 a Arduino Nano: MPU-6000 je 6-osý snímač sledovania pohybu, ktorý má v sebe zabudovaný 3-osý akcelerometer a 3-osý gyroskop. Tento senzor je schopný efektívne sledovať presnú polohu a umiestnenie objektu v trojrozmernej rovine. Môže byť použitý v
Prečítajte si diaľkové ovládanie pomocou infračerveného senzora: 4 kroky
Prečítajte si ovládanie na diaľku pomocou infračerveného senzora: Dobrý deň, v predchádzajúcom článku som písal o tom, ako používať „snímač vyhýbania sa prekážkam infračerveného žiarenia“. A v tomto článku napíšem ďalšiu funkciu tohto infračerveného senzora. IR snímač vyhýbajúci sa prekážkam má 2 hlavné diely, menovite IR vysielač a IR prijímač
Vylepšite svojpomocný zavlažovací hrniec pomocou WiFi na kutilský detektor pohybu s detekciou pohybu a sadbovačom: 17 krokov
Vylepšite svojpomocný zavlažovací kvetináč pomocou WiFi na kutilský detektor pohybu detektora pohybu : V tomto článku vám ukážeme, ako upgradovať svoj vlastný zavlažovací kvetináč s WiFi na samonavlažovací kvetináč s WiFi a alarmom detekcie pohybu. nečítali ste článok o tom, ako si postaviť svojpomocný zavlažovací hrniec pomocou WiFi, môžete