Seguimiento del movimiento ocular mediante el sensor de infrarrojos
Componentes y suministros
| × | 1 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 1 |
Aplicaciones y servicios en línea
|
Acerca de este proyecto
Usé un sensor de infrarrojos para detectar los movimientos de los ojos y controlar el LED.
Bola de ojos LED NeoPixel
Se utiliza cinta LED NeoPixel. El LED es de 68 unidades.
El LED se fija al recipiente con cinta de doble cara y se conecta en el siguiente orden.
Seguimiento del movimiento ocular
Esquemas
Sensor
Usé dos sensores QTR - 1A para el seguimiento ocular. QTR - 1A se colocan en 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.
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.
Cuando parpadea, 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.
#include #include #define NUM_SENSORS 2 // número de sensores utilizados # define NUM_SAMPLES_PER_SENSOR 10 // promediando # define EMITTER_PIN QTR_NO_EMITTER_PIN int, sensorVSensoralLRL int, en sensorVSensoralLRL; #define PIN A3Adafruit_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; boolean lid =false; int cnt =0; // Animación L&R de ojo negro 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}}; // animación L&R del alumno en el LED [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 ((unsigned char []) {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 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 &&rasioR> 0.985) {// dejó 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 cercano para (int i =1; i <9; i ++) {blink (i, LR); retraso (40); lid =verdadero; }} else if (lid ==true &&rasioL> 0.96 &&rasioR> 0.96) {// Parpadeo abierto para (int i =8; i> 0; i -) {blink (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; }} Serial.println ("通常 時"); } // Actualización del valor inicial if (cnt> 10) {iniSensorValL =sensorValL; iniSensorValR =sensorValR; cnt =0; }}
Operación
Proceso de manufactura
- ¿Qué nos llevó de nuevo a utilizar materiales naturales en el diseño de productos?
- Sensor de luz pulsada
- Biblioteca Python del sensor de temperatura TMP006 con Raspberry pi,
- Sensor de temperatura Python y Raspberry Pi
- Sensor de seguimiento de línea con RPi
- Sensor de movimiento, alarma, grabación de video en HA en Raspberry Pi
- Sistema de sensor de movimiento por infrarrojos de bricolaje para Raspberry Pi
- Sensor de movimiento con Raspberry Pi
- ¡Tanques láser Leap Motion!
- DIY Sensor infrarrojo de latidos del corazón con Arduino
- Medición de temperatura del sensor infrarrojo