Taula de continguts:
- Pas 1: Constitució
- Pas 2: NeoPixel LED Eye Ball
- Pas 3: Unitat del sensor
- Pas 4: Codi Arduino
- Pas 5: operació
Vídeo: Seguiment del moviment dels ulls mitjançant sensor d'infrarojos: 5 passos
2024 Autora: John Day | [email protected]. Última modificació: 2024-01-30 08:14
He utilitzat un sensor d’infrarojos per detectar els moviments dels ulls i controlar el LED.
Vaig fer globus oculars amb cinta LED NeoPixel.
Pas 1: Constitució
He utilitzat dos sensors QTR - 1A per al seguiment ocular. Detectar amb Arduino i controlar el LED.
components
- SparkFun Arduino Pro Mini 328 - 5V / 16MHz
- Complement de motxilla Adafruit LiIon / LiPoly per a Pro Trinket / ItsyBitsy
- Bateria LiPo
- Tira NeoPixel
- Sensor de reflectància QTR-1A
Pas 2: NeoPixel LED Eye Ball
S’utilitza cinta LED NeoPixel. El LED és de 68 unitats.
El LED es fixa al bol amb cinta adhesiva de doble cara i cablejat.
Pas 3: Unitat del sensor
He utilitzat dos sensors QTR - 1A per al seguiment ocular. QTR - 1A es col·loquen sobre una làmina de plàstic a una distància aproximada de l’amplada de l’ull.
La part del sensor i la part del microcontrolador es van fixar a les ulleres amb un clip respectivament.
Pas 4: Codi Arduino
Quan l’iris s’acosta a un sensor, la llum reflectida disminueix i el valor del sensor augmenta. Per contra, quan l’iris s’allunya, augmenta la llum reflectida i disminueix el valor del sensor del reflector.
El moviment dret i esquerre de la pupil·la del globus ocular LED detecta l’augment i la disminució d’un valor del sensor i el controla. En parpellejar, els dos valors del sensor disminueixen, de manera que si els dos valors del sensor disminueixen simultàniament, les parpelles del globus ocular del LED baixaran.
He utilitzat la biblioteca següent.
- QTRsensors:
- Adafruit_NeoPixel:
#include #include
#define NUM_SENSORS 2 // nombre de sensors utilitzats # 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; brillantor int = 40; byte eyeColor; int LR = 7; tapa booleana = fals; int cnt = 0;
// Animació L&R d'ull negreint 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, 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, 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, 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, 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, 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, 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, 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, 68}};
// pupil L&R animationint pupilLED [15] [12] = {{33, 34, 68, 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}};
// Parpelleig d’animació parpellejant = 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 ((caràcter sense signar ) {0, 1}, NUM_SENSORS, NUM_SAMPLES_PER_SENSOR, EMITTER_PIN); unsigned int sensorValues [NUM_SENSORS];
parpelleig buit (parpella int, int LR) {if (parpella! = 8) {// Estany per a (uint16_t i = 0; i <led.numPixels (); i ++) {led.setPixelColor (i, led. Color (66, 66, 66)); }
// Ull negre per a (uint16_t i = 0; i led.setPixelColor (blackLED [LR] , color);}
// alumne de (uint16_t i = 0; i
led.setPixelColor (pupilLED [LR] , led. Color (0, 0, 66)); }
// parpella per a (int i = 0; i <eyelidNum [parpella]; i ++) {led.setPixelColor (eyelidLED , 0); }} else if (parpella == 8) {led.clear (); } led.show ();}
configuració nul·la () {
Serial.begin (115200); led.begin (); led.setBrillness (brillantor); // Lluminositat inicial 40 led.show (); // Inicialitzeu tots els píxels a "off" color = led. Color (0, 177, 55); // retard de color de la pupil·la (100); qtra.read (sensorValues); iniSensorValL = sensorValues [0]; iniSensorValR = sensorValues [1]; parpellejar (parpella, LR); }
bucle buit () {// QTR - 1A valor del sensor qtra.read (sensorValues); sensorValL = sensorValues [0]; sensorValR = sensorValues [1];
doble rasioL = (doble) sensorValL / iniSensorValL;
doble rasioR = (doble) sensorValR / iniSensorValR;
Serial.print (rasioL);
Serial.print (""); Serial.println (rasioR);
if (rasioL> 0.985 && rasioR <0.985) {// correcte per a (int i = LR; i <12; i ++) {parpellejar (0, i); retard (40); LR = i; }} else if (rasioL 0.985) {// left for (int i = LR; i> 2; i -) {parpellejar (0, i); retard (40); LR = i; }} else if (tapa == false && rasioL <0,96 && rasioR <0,96) {// Tancament de parpelleig per a (int i = 1; i 0,96 && rasioR> 0,96) {// Parpelleig obert per a (int i = 8; i > 0; i -) {parpelleja (i, LR); retard (40); tapa = falsa; }} else if (tapa == falsa && rasioL> 0,96 && rasioR> 0,96) {// normal // cnt ++; // parpella = 0; if (LR <= 7) {for (int i = LR; i <= 7; i ++) {parpelleja (0, i); retard (40); LR = i; }} else {for (int i = LR; i> = 7; i -) {parpelleja (0, i); retard (40); LR = i; }}}
// Actualització del valor inicial si (cnt> 10) {iniSensorValL = sensorValL; iniSensorValR = sensorValR; cnt = 0; }}
Pas 5: operació
Detecta el moviment esquerre i dret i parpelleja de la pupil·la amb el sensor i controla el LED del globus ocular.
Recomanat:
Sistema de seguiment del moviment del cap per a la realitat virtual: 8 passos
Sistema de seguiment del moviment del cap per a VR: el meu nom és Sam KODO. En aquest tutorial, us ensenyaré pas a pas com utilitzar els sensors Arduino IMU per construir un sistema de seguiment del cap per a VR. En aquest projecte necessitareu: - Una pantalla LCD HDMI : https: //www.amazon.com/Elecrow-Capacitive-interfac…- Un
Seguiment de moviment mitjançant MPU-6000 i fotó de partícules: 4 passos
Seguiment de moviment mitjançant MPU-6000 i fotó de partícules: MPU-6000 és un sensor de seguiment de moviment de 6 eixos que té incrustat un acceleròmetre de 3 eixos i un giroscopi de 3 eixos. Aquest sensor és capaç de fer un seguiment eficient de la posició i ubicació exactes d’un objecte en el pla tridimensional. Es pot emprar en
Seguiment de moviment mitjançant MPU-6000 i Arduino Nano: 4 passos
Seguiment de moviment mitjançant MPU-6000 i Arduino Nano: MPU-6000 és un sensor de seguiment de moviment de 6 eixos que té incrustat un acceleròmetre de 3 eixos i un giroscopi de 3 eixos. Aquest sensor és capaç de fer un seguiment eficient de la posició i ubicació exactes d’un objecte en el pla tridimensional. Es pot emprar en
Seguiment de moviment mitjançant MPU-6000 i Raspberry Pi: 4 passos
Seguiment de moviment mitjançant MPU-6000 i Raspberry Pi: MPU-6000 és un sensor de seguiment de moviment de 6 eixos que té incrustat un acceleròmetre de 3 eixos i un giroscopi de 3 eixos. Aquest sensor és capaç de fer un seguiment eficient de la posició i ubicació exactes d’un objecte en el pla tridimensional. Es pot emprar en
Seguiment de moviment 3D Tfcd mitjançant detecció capacitiva i sortida LED: 6 passos (amb imatges)
Seguiment de moviment 3D Tfcd mitjançant detecció capacitiva i sortida LED: en aquesta instrucció s’explica com es pot rastrejar el moviment d’una mà en un espai 3D mitjançant el principi de la detecció capacitiva. En canviar la distància entre un paper d'alumini carregat i la mà, la capacitat del condensador variarà