Rastreamento de movimento ocular usando sensor infravermelho
Componentes e suprimentos
| × | 1 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 1 |
Aplicativos e serviços online
|
Sobre este projeto
Usei um sensor infravermelho para detectar os movimentos dos olhos e controlar o LED.
NeoPixel LED Eye Ball
É usada fita NeoPixel LED. O LED tem 68 unidades.
O LED é fixado na tigela com fita dupla-face e ligado na seguinte ordem.
Rastreamento de movimento ocular
Esquemas
Sensor
Usei dois sensores QTR-1A para rastreamento ocular. QTR-1A são colocados em uma folha de plástico a uma distância de aproximadamente a largura do olho.
A parte do sensor e a parte do microcontrolador foram fixadas aos óculos com um clipe respectivamente.
Código Arduino
Quando a íris se aproxima de um sensor, a luz refletida diminui e o valor do sensor aumenta. Por outro lado, quando a íris se afasta, a luz refletida aumenta e o valor do sensor do foto refletor diminui.
O movimento para a direita e para a esquerda da pupila do globo ocular de LED detecta o aumento e a diminuição de um valor do sensor e o controla.
Ao piscar, os valores de ambos os sensores diminuem, portanto, se os valores dos dois sensores diminuem simultaneamente, as pálpebras do globo ocular de LED irão para baixo.
#include #include #define NUM_SENSORS 2 // número de sensores usados # define NUM_SAMPLES_PER_SENSOR 10 // calculando a média # define EMITTER_PIN QTR_NO_EMITTER_PIN int iniSensorVorValL, em sensor int; #define PIN A3Adafruit_NeoPixel led =Adafruit_NeoPixel (68, PIN, NEO_GRB + NEO_KHZ800); int blackNum =24; int pupilNum =12; uint32_t cor; int brilho =40; byte eyeColor; int LR =7; int blackNum =24; int pupilNum =12; uint32_t cor; int brilho =40; byte eyeColor; int LR =7; cnt =0; // Eye preto L&R animaçãoint 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,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 ((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) {// certo para (int i =LR; i <12; i ++) {pisca (0, i); atraso (40); LR =i; }} else if (rasioL <0,985 &&rasioR> 0,985) {// esquerda para (int i =LR; i> 2; i -) {pisca (0, i); atraso (40); LR =i; }} else if (lid ==false &&rasioL <0,96 &&rasioR <0,96) {// Fechando piscando para (int i =1; i <9; i ++) {pisca (i, LR); atraso (40); tampa =verdadeiro; }} else if (lid ==true &&rasioL> 0,96 &&rasioR> 0,96) {// Piscando aberto para (int i =8; i> 0; i -) {blink (i, LR); atraso (40); tampa =falso; }} else if (lid ==false &&rasioL> 0,96 &&rasioR> 0,96) {// normal // cnt ++; // pálpebra =0; if (LR <=7) {para (int i =LR; i <=7; i ++) {pisca (0, i); atraso (40); LR =i; }} else {for (int i =LR; i> =7; i -) {piscar (0, i); atraso (40); LR =i; }} Serial.println ("通常 時"); } // Atualização do valor inicial if (cnt> 10) {iniSensorValL =sensorValL; iniSensorValR =sensorValR; cnt =0; }}
Operação
Processo de manufatura
- O que nos levou de volta ao uso de materiais naturais no design de produtos?
- Sensor de luz pulsada
- Biblioteca Python do sensor de temperatura TMP006 usando Raspberry pi,
- Sensor de temperatura Python e Raspberry Pi
- Sensor de rastreamento de linha com RPi
- Sensor de movimento, alarme, gravação de vídeo em HA no Raspberry Pi
- Sistema de sensor de movimento infravermelho faça você mesmo para Raspberry Pi
- Sensor de movimento usando Raspberry Pi
- Tanques a laser Leap Motion!
- Medições de temperatura por sensor infravermelho