Table des matières:
- Étape 1: Constitution
- Étape 2: Boule oculaire NeoPixel LED
- Étape 3: Unité de capteur
- Étape 4: Code Arduino
- Étape 5: Opération
Vidéo: Suivi du mouvement des yeux à l'aide d'un capteur infrarouge : 5 étapes
2024 Auteur: John Day | [email protected]. Dernière modifié: 2024-01-30 09:08
J'ai utilisé un capteur infrarouge pour détecter les mouvements oculaires et contrôler la LED.
J'ai fait des globes oculaires avec du ruban LED NeoPixel.
Étape 1: Constitution
J'ai utilisé deux capteurs QTR - 1A pour le suivi oculaire. Détection avec Arduino et contrôle de la LED.
Composants
- SparkFun Arduino Pro Mini 328 - 5V/16MHz
- Adafruit LiIon/LiPoly Backpack Add-On pour Pro Trinket/ItsyBitsy
- Batterie LiPo
- Bande NeoPixel
- Capteur de réflectance QTR-1A
Étape 2: Boule oculaire NeoPixel LED
Du ruban LED NeoPixel est utilisé. La LED est de 68 unités.
La LED est fixée au bol avec du ruban adhésif double face et câblée.
Étape 3: Unité de capteur
J'ai utilisé deux capteurs QTR - 1A pour le suivi oculaire. QTR - 1A sont placés sur une feuille de plastique à une distance d'environ la largeur de l'œil.
La partie capteur et la partie microcontrôleur étaient respectivement fixées aux lunettes à l'aide d'un clip.
Étape 4: Code Arduino
Lorsque l'iris s'approche d'un capteur, la lumière réfléchie diminue et la valeur du capteur augmente. A l'inverse, lorsque l'iris s'éloigne, la lumière réfléchie augmente et la valeur du capteur du photoréflecteur diminue.
Le mouvement droit et gauche de la pupille du globe oculaire LED détecte l'augmentation et la diminution d'une valeur de capteur et la contrôle. Lors du clignotement, les deux valeurs du capteur diminuent, donc si les deux valeurs du capteur diminuent simultanément, les paupières du globe oculaire LED vont baisser.
J'ai utilisé la bibliothèque suivante.
- Capteurs QTR:
- Adafruit_NeoPixel:
#include #include
#define NUM_SENSORS 2 // nombre de capteurs utilisés#define NUM_SAMPLES_PER_SENSOR 10 // calcul de la moyenne#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 élèveNum = 12; uint32_t couleur; luminosité int = 40; octet eyeColor; entier LR =7; couvercle booléen = faux; int cnt = 0;
// eyeil noir L&R animationint 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}};
//élève 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}, {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); int sensorValues non signé [NUM_SENSORS];
void blink(int eyelid, int LR) { if (eyelid != 8){ //Pewter for(uint16_t i=0; i<led.numPixels(); i++) { led.setPixelColor(i, led. Color(66), 66, 66)); }
// eyeil noir pour(uint16_t i=0; i led.setPixelColor(blackLED[LR], color); }
//élève pour(uint16_t i=0; je
led.setPixelColor(pupilLED[LR], led. Color(0, 0, 66)); }
//eyelid for(int i=0; i < eyelidNum[eyelid]; i++) { led.setPixelColor(eyelidLED, 0); } } else if (eyelid == 8){ led.clear(); } led.show();}
void setup() {
Serial.begin(115200); led.begin(); led.setBrightness(luminosité); // Luminosité initiale 40 led.show(); // Initialise tous les pixels sur 'off' color = led. Color(0, 177, 55); // retard de couleur de la pupille (100); qtra.read(sensorValues); iniSensorValL = sensorValues[0]; iniSensorValR = sensorValues[1]; cligner (paupière, LR); }
void loop() { //QTR - 1A valeur du capteur 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){ //correct for(int i = LR; i < 12; i++){ blink(0, i); retard (40); LR = je; } } else if(rasioL 0.985){ //left for(int i=LR; i>2; i--){ blink(0, i); retard (40); LR = je; } } else if(lid == false && rasioL < 0.96 && rasioR < 0.96){ // Clignotement fermé for(int i = 1; i 0.96 && rasioR > 0.96){ // Clignotement ouvert for(int i = 8; i > 0; i--){ clignoter(i, LR); retard (40); couvercle = faux; } } else if(lid == false && rasioL > 0.96 && rasioR > 0.96) { //normal //cnt++; //paupière = 0; if(LR <= 7){ for(int i=LR; i<=7; i++){ blink(0, i); retard (40); LR = je; } } else { for(int i=LR; i>=7; i--){ blink(0, i); retard (40); LR = je; } } }
// Rafraîchissement de la valeur initiale if (cnt > 10){ iniSensorValL = sensorValL; iniSensorValR = sensorValR; cnt = 0; } }
Étape 5: Opération
Détectez les mouvements gauche et droit et le clignotement de la pupille avec le capteur et contrôlez la LED du globe oculaire.
Conseillé:
Citrouille d'Halloween avec un œil animatronique en mouvement - Cette citrouille peut rouler des yeux ! : 10 étapes (avec photos)
Citrouille d'Halloween avec un œil animatronique en mouvement | Cette citrouille peut rouler ses yeux ! : dans ce Instructable, vous apprendrez à faire une citrouille d'Halloween qui terrifie tout le monde lorsque son œil bouge. Ajustez la distance de déclenchement du capteur à ultrasons à la bonne valeur (étape 9) et votre citrouille pétrifiera tous ceux qui oseront prendre cand
Suivi de mouvement à l'aide de MPU-6000 et de photons de particules : 4 étapes
Suivi de mouvement à l'aide de MPU-6000 et de photons de particules : MPU-6000 est un capteur de suivi de mouvement à 6 axes qui intègre un accéléromètre à 3 axes et un gyroscope à 3 axes. Ce capteur est capable de suivre efficacement la position et l'emplacement exacts d'un objet dans le plan tridimensionnel. Il peut être employé i
Interrupteur de lumière contrôlé par le clignement des yeux à l'aide des lunettes de protection de la tête d'effacement de Shota Aizawa (My Hero Academia): 8 étapes (avec photos)
Interrupteur d'éclairage contrôlé par le clignotement des yeux à l'aide des lunettes de protection de Shota Aizawa (My Hero Academia): Si vous lisez mon manga Hero Academia ou regardez mon anime Hero Aizawa, vous devez connaître un personnage nommé shota aizawa. Shota Aizawa, également connu sous le nom de Eraser Head, est un héros professionnel et le professeur principal de la classe 1-A de U.A. L'alter de Shota lui donne l'ab
DIY : Mini boîtier de capteur monté au plafond avec capteur de mouvement focalisable : 4 étapes
DIY : Mini boîtier de capteur monté au plafond avec capteur de mouvement focalisable : Bonjour. Il y a quelque temps, j'ai aidé mon ami avec le concept de maison intelligente et j'ai créé un mini boîtier de capteur avec un design personnalisé qui pourrait être monté au plafond dans le trou de 40x65 mm. Ce coffret permet de :• mesurer l'intensité lumineuse• mesurer l'humidité
Qui est à ma porte ? Projet de capteur de mouvement PIR/capteur de portée : 5 étapes
Qui est à ma porte ? Projet de capteur de mouvement/capteur de distance PIR : Notre projet vise à détecter le mouvement via des capteurs PIR et de distance. Le code Arduino produira un signal visuel et audio pour indiquer à l'utilisateur que quelqu'un se trouve à proximité. Le code MATLAB enverra un signal par e-mail pour alerter l'utilisateur que quelqu'un est proche. Cet appareil