Sadržaj:

Praćenje kretanja oka pomoću infracrvenog senzora: 5 koraka
Praćenje kretanja oka pomoću infracrvenog senzora: 5 koraka

Video: Praćenje kretanja oka pomoću infracrvenog senzora: 5 koraka

Video: Praćenje kretanja oka pomoću infracrvenog senzora: 5 koraka
Video: ЗАПРЕЩЁННЫЕ ТОВАРЫ с ALIEXPRESS 2023 ШТРАФ и ТЮРЬМА ЛЕГКО! 2024, Decembar
Anonim
Praćenje kretanja oka pomoću infracrvenog senzora
Praćenje kretanja oka pomoću infracrvenog senzora

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

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

Korak 1: Ustav

Ustav
Ustav

Koristio sam dva senzora QTR - 1A za praćenje oka. Osećanje pomoću Arduina i kontrola LED diode.

komponente

  • SparkFun Arduino Pro Mini 328 - 5V/16MHz
  • Dodatak Adafruit LiLon/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 lopta
NeoPixel LED očna lopta
NeoPixel LED očna lopta
NeoPixel LED očna lopta

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

Koristio sam dva senzora QTR - 1A za praćenje oka. QTR - 1A postavljaju se na plastični lim na udaljenosti otprilike širine oka.

Senzorski dio i dio mikrokontrolera pričvršćeni su kopčom za naočare.

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. Kada trepere, 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 // usrednjavanje#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 broj učenika = 12; uint32_t boja; 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}};

// Treptanje animacijeint kapak = 0; int eyelidNum [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) {// kositar 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. Color (0, 0, 66)); }

// kapak za (int i = 0; i <broj očnog kapka [kapak]; i ++) {led.setPixelColor (kapakLED , 0); }} else if (eyelid == 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 = sensorValues [1];

dvostruki rasioL = (dvostruki) sensorValL / iniSensorValL;

dvostruki rasioR = (dvostruki) sensorValR / iniSensorValR;

Serial.print (rasioL);

Serial.print (""); Serial.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će blizu za (int i = 1; i 0,96 && rasioR> 0,96) {// Trepće otvoreno 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ženja if (cnt> 10) {iniSensorValL = sensorValL; iniSensorValR = sensorValR; cnt = 0; }}

Korak 5: Operacija

Otkrijte kretanje lijevo i desno i trepćite zjenicu senzorom i kontrolirajte LED očnu jabučicu.

Preporučuje se: