Manufactura industrial
Internet industrial de las cosas | Materiales industriales | Mantenimiento y reparación de equipos | Programación industrial |
home  MfgRobots >> Manufactura industrial >  >> Manufacturing Technology >> Proceso de manufactura

Seguimiento de Movimiento Ocular Infrarrojo con Arduino Pro Mini – Demo de Control LED

Componentes y suministros

SparkFun Arduino Pro Mini 328 - 5V/16MHz × 1
Adafruit LiIon/LiPoly Backpack Add-On para Pro Trinket/ItsyBitsy × 1
Tira NeoPixel × 1
Sensor de Reflectancia QTR-1A × 1
Batería LiPo 3.7V × 1

Aplicaciones y servicios online

Sobre este proyecto

Usé un sensor infrarrojo para detectar movimientos oculares y controlar el LED.

Ojo LED NeoPixel

Se usa tira LED NeoPixel. El LED tiene 68 unidades.

Seguimiento de Movimiento Ocular Infrarrojo con Arduino Pro Mini – Demo de Control LED

El LED se fija al cuenco con cinta de doble cara y se cablea en el siguiente orden.

Seguimiento de Movimiento Ocular Infrarrojo con Arduino Pro Mini – Demo de Control LED

Seguimiento de Movimiento Ocular

Esquemáticos

Seguimiento de Movimiento Ocular Infrarrojo con Arduino Pro Mini – Demo de Control LED

Sensor

Usé dos sensores QTR-1A para seguimiento ocular. Los QTR-1A se colocan en una lámina plástica a una distancia aproximada al ancho del ojo.

Seguimiento de Movimiento Ocular Infrarrojo con Arduino Pro Mini – Demo de Control LED

La parte del sensor y la del microcontrolador se fijaron a las gafas con una pinza respectivamente.

Seguimiento de Movimiento Ocular Infrarrojo con Arduino Pro Mini – Demo de Control LED

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 derecha-izquierda de la pupila del ojo LED detecta el aumento y disminución de un valor de sensor y lo controla.

Al parpadear, ambos valores de sensor disminuyen, así que si los dos valores disminuyen simultáneamente, los párpados del ojo LED bajarán.

#include <QTRSensors.h>
#include <Adafruit_NeoPixel.h>
#define NUM_SENSORS 2 // número de sensores usados
#define NUM_SAMPLES_PER_SENSOR 10 // promedio
#define 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 brightness = 40;
byte eyeColor;
int LR = 7;
boolean lid = false;
int cnt = 0;
// Animación ojo negro L&R
int 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 pupila L&R
int 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 parpadeo
int 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){
    // Plateado
    for(uint16_t i=0; i<led.numPixels(); i++) {
      led.setPixelColor(i, led.Color(66, 66, 66));
    }
    // Ojo negro
    for(uint16_t i=0; i<blackNum; i++) {
      led.setPixelColor(blackLED[LR][i], color);
    }
    // Pupila
    for(uint16_t i=0; i<pupilNum; i++) {
      led.setPixelColor(pupilLED[LR][i], led.Color(0, 0, 66));
    }
    // Párpado
    for(int i=0; i < eyelidNum[eyelid]; i++) {
      led.setPixelColor(eyelidLED[i], 0);
    }
  } else if (eyelid == 8){
    led.clear();
  }
  led.show();
}
void setup() {
  Serial.begin(115200);
  led.begin();
  led.setBrightness(brightness); // Brillo inicial 40
  led.show(); // Inicializar todos los píxeles a 'off'
  color = led.Color(0, 177, 55); // color pupila
  delay(100);
  qtra.read(sensorValues);
  iniSensorValL = sensorValues[0];
  iniSensorValR = sensorValues[1];
  blink(eyelid, LR);
}
void loop() {
  // Valor sensor QTR - 1A
  qtra.read(sensorValues);
  sensorValL = sensorValues[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){
    // derecha
    for(int i = LR; i < 12; i++){
      blink(0, i);
      delay(40);
      LR = i;
    }
  }else if(rasioL < 0.985 && rasioR > 0.985){
    // izquierda
    for(int i=LR; i>2; i--){
      blink(0, i);
      delay(40);
      LR = i;
    }
  }else if(lid == false && rasioL < 0.96 && rasioR < 0.96){
    // Parpadeo cerrar
    for(int i = 1; i < 9; i++){
      blink(i, LR);
      delay(40);
      lid = true;
    }
  }else if(lid == true && rasioL > 0.96 && rasioR > 0.96){
    // Parpadeo abrir
    for(int i = 8; i > 0; i--){
      blink(i, LR);
      delay(40);
      lid = false;
    }
  }else if(lid == false && rasioL > 0.96 && rasioR > 0.96) {
    // normal
    //cnt++;
    //eyelid = 0;
    if(LR <= 7){
      for(int i=LR; i<=7; i++){
        blink(0, i);
        delay(40);
        LR = i;
      }
    }else {
      for(int i=LR; i>=7; i--){
        blink(0, i);
        delay(40);
        LR = i;
      }
    }
    Serial.println("Normal");
  }
  // Actualizar valor inicial
  if (cnt > 10){
    iniSensorValL = sensorValL;
    iniSensorValR = sensorValR;
    cnt = 0;
  }
}

Operación

El sistema detecta movimientos oculares mediante sensores infrarrojos QTR-1A montados en gafas y replica los movimientos en un ojo LED NeoPixel, incluyendo mirada izquierda/derecha y parpadeo.

Proceso de manufactura

  1. Por qué los diseñadores vuelven a los materiales naturales en el diseño de productos
  2. Sensor infrarrojo TMP006 con Raspberry Pi: librería Python y guía de configuración
  3. Construya un sensor de temperatura remoto con Raspberry Pi y Python – Guía paso a paso
  4. Sensor de seguimiento de línea con Raspberry Pi – Detector simple KY‑033 para puerta/línea
  5. Monitorización segura del hogar con Home Assistant en Raspberry Pi: Movimiento, alarma y captura de vídeo
  6. Construya un Sensor de Movimiento Infrarrojo DIY para Raspberry Pi – Guía Paso a Paso
  7. Controle un LED con Sensor PIR de Movimiento en Raspberry Pi
  8. Construye un Tanque Láser Controlado por Leap Motion – Arduino, Raspberry Pi, LEDs RGB
  9. Construye un Sensor de Ritmo Cardíaco por Infrarrojos Fiable con Arduino: Guía Paso a Paso
  10. Detección precisa de temperatura por infrarrojos para procesos sensibles al color
  11. Sensor de Luz Pulsada: Amplifica Pulsos de Luz LED en Sonido Audible