Innehållsförteckning:
- Steg 1: Konstitution
- Steg 2: NeoPixel LED Eye Ball
- Steg 3: Sensorenhet
- Steg 4: Arduino -kod
- Steg 5: Drift
Video: Ögonrörelsesspårning med infraröd sensor: 5 steg
2024 Författare: John Day | [email protected]. Senast ändrad: 2024-01-30 12:45
Jag använde en infraröd sensor för att känna av ögonrörelser och styra lysdioden.
Jag gjorde ögonbollar med LED Tape NeoPixel.
Steg 1: Konstitution
Jag använde två sensorer QTR - 1A för ögonspårning. Avkänning med Arduino och styrning av lysdioden.
komponenter
- SparkFun Arduino Pro Mini 328 - 5V/16MHz
- Adafruit LiIon/LiPoly ryggsäckstillägg för Pro Trinket/ItsyBitsy
- LiPo batteri
- NeoPixel -remsa
- QTR-1A reflektanssensor
Steg 2: NeoPixel LED Eye Ball
NeoPixel LED -tejp används. LED är 68 enheter.
LED är fixerad på skålen med dubbelsidig tejp och trådbunden.
Steg 3: Sensorenhet
Jag använde två sensorer QTR - 1A för ögonspårning. QTR - 1A placeras på ett plastark på ett avstånd av ungefär bredden på ögat.
Sensordelen och mikrokontrollerdelen fixerades på glasögonen med ett klipp respektive.
Steg 4: Arduino -kod
När iris närmar sig en sensor minskar det reflekterade ljuset och sensorvärdet ökar. Omvänt, när irisen rör sig bort, ökar det reflekterade ljuset och sensorvärdet för fotoreflektorn minskar.
Höger och vänster rörelse för pupillen i LED -ögongloben känner av ökningen och minskningen av ett sensorvärde och styr det. När de blinkar minskar båda sensorvärdena, så om de två sensorvärdena minskar samtidigt, kommer ögonlocken på LED -ögongloben att sjunka.
Jag använde följande bibliotek.
- QTRsensorer:
- Adafruit_NeoPixel:
#inkludera #inkludera
#define NUM_SENSORS 2 // antal sensorer som används#definiera NUM_SAMPLES_PER_SENSOR 10 // medelvärde#definiera 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; uint32_t färg; int ljusstyrka = 40; byte eyeColor; int LR = 7; booleskt lock = falskt; int cnt = 0;
// Black eye L&R animationint 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}, {4, 19, 20, 25, 42, 47, 48, 63, 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}, {21, 23, 44, 46, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68}};
// elev 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 ögonlock = 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 ((osignerad tecken ) {0, 1}, NUM_SENSORS, NUM_SAMPLES_PER_SENSOR, EMITTER_PIN); osignerad int sensorValues [NUM_SENSORS];
void blink (int ögonlock, int LR) {if (ögonlock! = 8) {// Tenn för (uint16_t i = 0; i <led.numPixels (); i ++) {led.setPixelColor (i, led. Color (66, 66, 66)); }
// Svart öga för (uint16_t i = 0; i led.setPixelColor (blackLED [LR] , färg);}
// elev för (uint16_t i = 0; i
led.setPixelColor (pupilLED [LR] , led. Color (0, 0, 66)); }
// ögonlock för (int i = 0; i <eyelidNum [ögonlock]; i ++) {led.setPixelColor (ögonlockLED , 0); }} annat ifall (ögonlock == 8) {led.clear (); } led.show ();}
void setup () {
Serial.begin (115200); led.begin (); led.setBrightness (ljusstyrka); // Initial Brightness 40 led.show (); // Initiera alla pixlar till 'off' color = led. Color (0, 177, 55); // pupillfärgfördröjning (100); qtra.read (sensorValues); iniSensorValL = sensorValues [0]; iniSensorValR = sensorValues [1]; blinka (ögonlock, LR); }
void loop () {// QTR - 1A sensorvärde qtra.read (sensorValues); sensorValL = sensorValues [0]; sensorValR = sensorValues [1];
dubbel rasioL = (dubbel) sensorValL / iniSensorValL;
dubbel rasioR = (dubbel) sensorValR / iniSensorValR;
Serial.print (rasioL);
Serial.print (""); Serial.println (rasioR);
if (rasioL> 0,985 && rasioR <0,985) {// höger för (int i = LR; i <12; i ++) {blink (0, i); fördröjning (40); LR = i; }} annat om (rasioL 0.985) {// vänster för (int i = LR; i> 2; i-) {blink (0, i); fördröjning (40); LR = i; }} annat om (lid == false && rasioL <0,96 && rasioR <0,96) {// Blinkar nära för (int i = 1; i 0,96 && rasioR> 0,96) {// Blinkar öppet för (int i = 8; i > 0; i-) {blink (i, LR); fördröjning (40); lock = false; }} annars if (lid == false && rasioL> 0.96 && rasioR> 0.96) {// normal // cnt ++; // ögonlock = 0; om (LR <= 7) {för (int i = LR; i <= 7; i ++) {blink (0, i); fördröjning (40); LR = i; }} annat {för (int i = LR; i> = 7; i-) {blink (0, i); fördröjning (40); LR = i; }}}
// Uppdatera initialvärdet om (cnt> 10) {iniSensorValL = sensorValL; iniSensorValR = sensorValR; cnt = 0; }}
Steg 5: Drift
Upptäck vänster och höger rörelse och blinka eleven med sensorn och styr ögonglobens LED.
Rekommenderad:
Använda infraröd sensor med Arduino: 8 steg (med bilder)
Använda infraröd sensor med Arduino: Vad är en infraröd (aka IR) sensor? En IR -sensor är ett elektroniskt instrument som skannar IR -signaler i specifika frekvensområden definierade av standarder och omvandlar dem till elektriska signaler på dess utgångsstift (kallas vanligtvis signalstift) . IR -signalen
M5Stack IR -värmekamera med AMG8833 infraröd matrisens sensor: 3 steg
M5Stack IR -värmekamera med AMG8833 Infraröd matrisens sensor: Som många har jag haft en fascination av värmekameror men de har alltid varit utanför mitt prisklass - tills nu !! När jag surfar på Hackadays webbplats stötte jag på denna kamerabyggning med M5Stack ESP32 -modul och en relativt billig
TCRT5000 Infraröd reflekterande sensor - hur det fungerar och exempelkrets med kod: 6 steg
TCRT5000 Infraröd reflekterande sensor - hur det fungerar och exempelkrets med kod: Hej, jag använde nyligen ett gäng TCRT5000 när jag designade och tillverkade min myntsorteringsmaskin. Du kan se det här: För att göra detta var jag tvungen att lära mig om TCRT5000 och efter att jag förstod det tänkte jag att jag skulle skapa guide för alla andra som tittade
Nokia 5110 LCD med infraröd sensor: 4 steg
Nokia 5110 LCD med infraröd sensor: Nokia 5110 LCD -skärmen är en fantastisk LCD -skärm som är kompatibel med Arduino -utvecklingsbordet. Låt oss nu styra en av dessa LCD -skärmar och koppla in den med Arduino och en IR -sensor
Infraröd sensor med ESP8266: 6 steg
Infraröd sensor med ESP8266: Vårt mål denna gång är att skapa ett program som kommer att läsa omgivningstemperaturen för alla objekt som pekar mot vår sensor. För att göra detta kommer vi i detta projekt att använda en ESP8266 nodMCU, en MLX90614 infraröd sensor och en OLED 96 " display,