Sadržaj:

Praćenje kretanja očiju pomoću infracrvenog senzora: 5 koraka
Praćenje kretanja očiju pomoću infracrvenog senzora: 5 koraka

Video: Praćenje kretanja očiju pomoću infracrvenog senzora: 5 koraka

Video: Praćenje kretanja očiju pomoću infracrvenog senzora: 5 koraka
Video: REVAN - THE COMPLETE STORY 2024, Srpanj
Anonim
Praćenje kretanja očiju pomoću infracrvenog senzora
Praćenje kretanja očiju pomoću infracrvenog senzora

Koristio sam infracrveni senzor za osjet kretanja očiju i kontrolu LED diode.

Napravio sam očne jabučice s LED trakom NeoPixel.

Korak 1: Ustav

Ustav
Ustav

Za praćenje očiju koristio sam dva senzora QTR - 1A. Sensing with Arduino and control LED.

komponente

  • SparkFun Arduino Pro Mini 328 - 5V/16MHz
  • Dodatak Adafruit LiIon/LiPoly ruksak za Pro Trinket/ItsyBitsy
  • LiPo baterija
  • NeoPixel traka
  • QTR-1A Senzor refleksije

Korak 2: NeoPixel LED očna kugla

NeoPixel LED očna kugla
NeoPixel LED očna kugla
NeoPixel LED očna kugla
NeoPixel LED očna kugla

Koristi se LED traka NeoPixel. LED je 68 jedinica.

LED je pričvršćen na zdjelu dvostranom trakom i ožičen.

Korak 3: Senzorska jedinica

Senzorska jedinica
Senzorska jedinica
Senzorska jedinica
Senzorska jedinica
Senzorska jedinica
Senzorska jedinica

Za praćenje očiju koristio sam dva senzora QTR - 1A. QTR - 1A postavljaju se na plastični lim na udaljenosti otprilike širine oka.

Senzorski dio i dio mikrokontrolera pričvršćeni su kopčom na naočale.

Korak 4: Arduino kod

Kad se šarenica približi jednom senzoru, reflektirano svjetlo se smanjuje, a vrijednost senzora raste. Nasuprot tome, kad se šarenica odmakne, reflektirano svjetlo se povećava, a vrijednost senzora fotoreflektora smanjuje.

Desni i lijevi pokret zjenice LED očne jabučice osjeća povećanje i smanjenje vrijednosti jednog senzora i kontrolira ga. Kad treperi, obje vrijednosti senzora se smanjuju, pa ako se dvije vrijednosti senzora smanje istovremeno, kapci LED očne jabučice će se spustiti.

Koristio sam sljedeću biblioteku.

  • QTRsenzori:
  • Adafruit_NeoPixel:

#include #include

#define NUM_SENSORS 2 // broj upotrijebljenih senzora#define NUM_SAMPLES_PER_SENSOR 10 // prosjek#definirati 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 crnoBroj = 24; int pupilNum = 12; boja uint32_t; int svjetlina = 40; byte eyeColor; int LR = 7; boolean poklopac = false; int cnt = 0;

// L&R animacija za crne oči, crnaLED [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}};

// animacija učenika L&Rint učenikLED [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}};

// Animacija treptanja na kapku = 0; int eyevidNum [8] = {0, 4, 8, 16, 24, 34, 44, 56}; int kapakLED [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 ((nepotpisani znak ) {0, 1}, NUM_SENSORS, NUM_SAMPLES_PER_SENSOR, EMITTER_PIN); nepotpisani int sensorValues [NUM_SENSORS];

void treptanje (int kapak, int LR) {if (kapak! = 8) {// kositra za (uint16_t i = 0; i <led.numPixels (); i ++) {led.setPixelColor (i, led. Color (66, 66, 66)); }

// Crno oko za (uint16_t i = 0; i led.setPixelColor (crnoLED [LR] , boja);}

// učenik za (uint16_t i = 0; i

led.setPixelColor (učenikLED [LR] , led. Boja (0, 0, 66)); }

// kapak za (int i = 0; i <broj kapka [vjeđa]; i ++) {led.setPixelColor (kapakLED , 0); }} else if (kapak == 8) {led.clear (); } led.show ();}

void setup () {

Serial.begin (115200); led.begin (); led.setBrightness (svjetlina); // Početna svjetlina 40 led.show (); // Pokrećemo sve piksele na 'off' color = led. Color (0, 177, 55); // kašnjenje boje zjenice (100); qtra.read (sensorValues); iniSensorValL = vrijednosti senzora [0]; iniSensorValR = vrijednosti senzora [1]; treptaj (kapak, LR); }

void loop () {// QTR - 1A vrijednost senzora qtra.read (sensorValues); sensorValL = sensorValues [0]; sensorValR = osjetljive vrijednosti [1];

dvostruki rasioL = (dvostruki) sensorValL / iniSensorValL;

dvostruki rasioR = (dvostruki) sensorValR / iniSensorValR;

Serijski.ispis (rasioL);

Serial.print (""); Serijski.println (rasioR);

if (rasioL> 0.985 && rasioR <0.985) {// desno za (int i = LR; i <12; i ++) {blink (0, i); kašnjenje (40); LR = i; }} else if (rasioL 0.985) {// lijevo za (int i = LR; i> 2; i-) {blink (0, i); kašnjenje (40); LR = i; }} else if (lid == false && rasioL <0,96 && rasioR <0,96) {// Trepćući zatvarač za (int i = 1; i 0,96 && rasioR> 0,96) {// Trepćući otvoren za (int i = 8; i > 0; i-) {blink (i, LR); kašnjenje (40); poklopac = lažno; }} else if (lid == false && rasioL> 0.96 && rasioR> 0.96) {// normalno // cnt ++; // kapak = 0; if (LR <= 7) {for (int i = LR; i <= 7; i ++) {treptanje (0, i); kašnjenje (40); LR = i; }} else {for (int i = LR; i> = 7; i-) {blink (0, i); kašnjenje (40); LR = i; }}}

// Početna vrijednost osvježi if (cnt> 10) {iniSensorValL = sensorValL; iniSensorValR = sensorValR; cnt = 0; }}

Korak 5: Operacija

Otkrijte kretanje lijevo i desno i trepćite zjenicom senzorom te upravljajte LED -om očne jabučice.

Preporučeni: