Tabla de contenido:
- Paso 1: Constitución
- Paso 2: Bola de ojos LED NeoPixel
- Paso 3: Unidad de sensor
- Paso 4: Código Arduino
- Paso 5: Operación
Video: Seguimiento del movimiento ocular con sensor de infrarrojos: 5 pasos
2024 Autor: John Day | [email protected]. Última modificación: 2024-01-30 08:43
Usé un sensor de infrarrojos para detectar los movimientos de los ojos y controlar el LED.
Hice globos oculares con LED Tape NeoPixel.
Paso 1: Constitución
Usé dos sensores QTR - 1A para el seguimiento ocular. Detectando con Arduino y controlando el LED.
componentes
- SparkFun Arduino Pro Mini 328 - 5 V / 16 MHz
- Complemento de mochila Adafruit LiIon / LiPoly para Pro Trinket / ItsyBitsy
- Batería LiPo
- Tira de NeoPixel
- Sensor de reflectancia QTR-1A
Paso 2: Bola de ojos LED NeoPixel
Se utiliza cinta LED NeoPixel. El LED es de 68 unidades.
El LED se fija al recipiente con cinta adhesiva de doble cara y se cablea.
Paso 3: Unidad de sensor
Usé dos sensores QTR - 1A para el seguimiento ocular. Los QTR - 1A se colocan sobre una hoja de plástico a una distancia aproximada del ancho del ojo.
La parte del sensor y la parte del microcontrolador se fijaron a las gafas con un clip respectivamente.
Paso 4: Código Arduino
Cuando el iris se acerca a un sensor, la luz reflejada disminuye y el valor del sensor aumenta. Por el contrario, cuando el iris se aleja, la luz reflejada aumenta y el valor del sensor del foto reflector disminuye.
El movimiento derecho e izquierdo de la pupila del globo ocular LED detecta el aumento y la disminución de un valor de sensor y lo controla. Al parpadear, ambos valores del sensor disminuyen, por lo que si los dos valores del sensor disminuyen simultáneamente, los párpados del globo ocular LED bajarán.
Usé la siguiente biblioteca.
- QTRsensors:
- Adafruit_NeoPixel:
#incluir #incluir
# definir NUM_SENSORS 2 // número de sensores utilizados # definir NUM_SAMPLES_PER_SENSOR 10 // promediar # definir 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 color; int brillo = 40; byte eyeColor; int LR = 7; tapa booleana = falso; int cnt = 0;
// Animación de ojo negro L&R en 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}};
// pupil 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}};
// Animación de parpadeo en el párpado = 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 ((carácter sin firmar ) {0, 1}, NUM_SENSORS, NUM_SAMPLES_PER_SENSOR, EMITTER_PIN); unsigned int sensorValues [NUM_SENSORS];
void blink (int eyelid, int LR) {if (eyelid! = 8) {// Peltre para (uint16_t i = 0; i <led.numPixels (); i ++) {led.setPixelColor (i, led. Color (66 66, 66)); }
// Ojo negro para (uint16_t i = 0; i led.setPixelColor (blackLED [LR] , color);}
// alumno para (uint16_t i = 0; i
led.setPixelColor (pupilLED [LR] , led. Color (0, 0, 66)); }
// párpado para (int i = 0; i <eyelidNum [párpado]; i ++) {led.setPixelColor (eyelidLED , 0); }} más si (párpado == 8) {led.clear (); } led.show ();}
configuración vacía () {
Serial.begin (115200); led.begin (); led.setBrightness (brillo); // Brillo inicial 40 led.show (); // Inicializar todos los píxeles a 'off' color = led. Color (0, 177, 55); // retraso del color de la pupila (100); qtra.read (sensorValues); iniSensorValL = sensorValues [0]; iniSensorValR = sensorValues [1]; parpadeo (párpado, LR); }
bucle vacío () {// QTR - valor del sensor 1A qtra.read (sensorValues); sensorValL = sensorValues [0]; sensorValR = sensorValues [1];
doble rasioL = (doble) sensorValL / iniSensorValL;
doble rasioR = (doble) sensorValR / iniSensorValR;
Serial.print (rasioL);
Serial.print (""); Serial.println (rasioR);
if (rasioL> 0.985 && rasioR <0.985) {// correcto para (int i = LR; i <12; i ++) {blink (0, i); retraso (40); LR = i; }} else if (rasioL 0.985) {// a la izquierda para (int i = LR; i> 2; i -) {blink (0, i); retraso (40); LR = i; }} else if (lid == false && rasioL <0.96 && rasioR <0.96) {// Parpadeo cerrado para (int i = 1; i 0.96 && rasioR> 0.96) {// Parpadeo abierto para (int i = 8; i > 0; i -) {parpadeo (i, LR); retraso (40); lid = falso; }} else if (lid == false && rasioL> 0.96 && rasioR> 0.96) {// normal // cnt ++; // párpado = 0; if (LR <= 7) {for (int i = LR; i <= 7; i ++) {blink (0, i); retraso (40); LR = i; }} else {for (int i = LR; i> = 7; i -) {blink (0, i); retraso (40); LR = i; }}}
// Actualización del valor inicial if (cnt> 10) {iniSensorValL = sensorValL; iniSensorValR = sensorValR; cnt = 0; }}
Paso 5: Operación
Detecta el movimiento hacia la izquierda y la derecha y el parpadeo de la pupila con el sensor y controla el LED del globo ocular.
Recomendado:
Seguimiento del movimiento del ojo humano: 6 pasos
Seguimiento del movimiento del ojo humano: este proyecto tiene como objetivo capturar el movimiento del ojo humano y muestra su movimiento en un conjunto de luces LED que se colocan en forma de ojo. Este tipo de proyectos potencialmente podrían tener muchos usos en el campo de la robótica y específicamente en huma
Motor en movimiento con seguimiento ocular: 8 pasos
Motor en movimiento con seguimiento ocular: actualmente, los sensores de seguimiento ocular son más comunes en varias áreas, pero comercialmente son más conocidos por los juegos interactivos. Este tutorial no pretende elaborar los sensores ya que es muy complejo y debido a su uso cada vez más común el
Iluminador de infrarrojos (infrarrojos) Parte 2: 3 pasos
Iluminador IR (Infrarrojos) Parte 2: Hola chicos, estoy de vuelta con la Parte 2 del Iluminador IR (Infrarrojos) Instructable. Si no ha visto la Parte 1, HAGA CLIC AQUÍ. Empecemos … Un simple circuito iluminador de infrarrojos para ayudar a la visión nocturna de las cámaras CCTV. Visión nocturna con iluminador IR, como el nombre
Control de 8 relés con NodeMCU y receptor de infrarrojos mediante WiFi, control remoto de infrarrojos y aplicación de Android: 5 pasos (con imágenes)
Control de 8 relés con NodeMCU y receptor de infrarrojos mediante WiFi, control remoto por infrarrojos y aplicación de Android: Control de 8 interruptores de relé con nodemcu y receptor de infrarrojos a través de wifi y control remoto por infrarrojos y aplicación de Android. El control remoto por infrarrojos funciona independientemente de la conexión wifi. AQUÍ
Receptor de infrarrojos y control remoto por infrarrojos (TSOP1738) con Arduino: 10 pasos
Control remoto por infrarrojos y receptor de infrarrojos (TSOP1738) con Arduino: este instructivo es para principiantes de Arduino. Este es uno de mis proyectos anteriores con Arduino. Disfruté mucho cuando lo hice y espero que a ti también te guste. La característica más atractiva de este proyecto es el “ Control inalámbrico ”. Y eso es