Sommario:
- Fase 1: Costituzione
- Passaggio 2: bulbo oculare LED NeoPixel
- Passaggio 3: unità sensore
- Passaggio 4: codice Arduino
- Passaggio 5: operazione
Video: Rilevamento del movimento oculare tramite sensore a infrarossi: 5 passaggi
2024 Autore: John Day | [email protected]. Ultima modifica: 2024-01-30 10:03
Ho usato un sensore a infrarossi per rilevare i movimenti degli occhi e controllare il LED.
Ho realizzato bulbi oculari con LED Tape NeoPixel.
Fase 1: Costituzione
Ho usato due sensori QTR - 1A per il tracciamento oculare. Rilevamento con Arduino e controllo del LED.
componenti
- SparkFun Arduino Pro Mini 328 - 5V/16MHz
- Zaino Adafruit LiIon/LiPoly aggiuntivo per Pro Trinket/ItsyBitsy
- Batteria LiPo
- Striscia NeoPixel
- Sensore di riflettanza QTR-1A
Passaggio 2: bulbo oculare LED NeoPixel
Viene utilizzato il nastro LED NeoPixel. Il LED è di 68 unità.
Il LED è fissato alla ciotola con nastro biadesivo e cablato.
Passaggio 3: unità sensore
Ho usato due sensori QTR - 1A per il tracciamento oculare. QTR - 1A sono posti su un foglio di plastica ad una distanza di circa la larghezza dell'occhio.
La parte del sensore e la parte del microcontrollore sono state fissate agli occhiali rispettivamente con una clip.
Passaggio 4: codice Arduino
Quando l'iride si avvicina a un sensore, la luce riflessa diminuisce e il valore del sensore aumenta. Al contrario, quando l'iride si allontana, la luce riflessa aumenta e il valore del sensore del fotoriflettore diminuisce.
Il movimento destro e sinistro della pupilla del bulbo oculare LED rileva l'aumento e la diminuzione di un valore del sensore e lo controlla. Quando lampeggia, entrambi i valori del sensore diminuiscono, quindi se i due valori del sensore diminuiscono contemporaneamente, le palpebre del bulbo oculare LED si abbassano.
Ho usato la seguente libreria.
- QTRsensors:
- Adafruit_NeoPixel:
#include #include
#define NUM_SENSORS 2 // numero di sensori utilizzati#define NUM_SAMPLES_PER_SENSOR 10 // media#define EMITTER_PIN QTR_NO_EMITTER_PIN
int iniSensorValL, sensoreValL;int iniSensorValR, sensoreValR; #define PIN A3 led Adafruit_NeoPixel = Adafruit_NeoPixel(68, PIN, NEO_GRB + NEO_KHZ800); int blackNum = 24; int numero pupilla = 12; uint32_t colore; int luminosità = 40; byte eyeColor; int LR =7; coperchio booleano = falso; int cnt = 0;
//Animazione occhio nero L&R in 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}};
//pupil 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 palpebra = 0; int eyelidNum[8] = {0, 4, 8, 16, 24, 34, 44, 56}; int palpebra LED[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 palpebra, int LR) { if (palpebra != 8){ //Peltro for(uint16_t i=0; i<led.numPixels(); i++) { led.setPixelColor(i, led. Color(66, 66, 66)); }
//Occhio nero per(uint16_t i=0; i led.setPixelColor(blackLED[LR], colore); }
//allievo per(uint16_t i=0; i
led.setPixelColor(pupilLED[LR], led. Color(0, 0, 66)); }
//eyelid for(int i=0; i < eyelidNum[eyelid]; i++) { led.setPixelColor(eyelidLED, 0); } } else if (palpebra == 8){ led.clear(); } led.mostra();}
void setup() {
Serial.begin(115200); led.begin(); led.setBrightness(luminosità); // Luminosità iniziale 40 led.show(); // Inizializza tutti i pixel su 'off' color = led. Color(0, 177, 55); //ritardo colore pupilla(100); qtra.read(sensorValues); iniSensorValL = sensorValues[0]; iniSensorValR = sensorValues[1]; battito di ciglia(palpebra, LR); }
void loop() { //QTR - Valore del sensore 1A qtra.read(sensorValues); SensorValL = SensorValues[0]; SensorValR = SensorValues[1];
double rasioL = (doppio)sensorValL / iniSensorValL;
double rasioR = (doppio)sensorValR / iniSensorValR;
Serial.print(rasioL);
Serial.print(" "); Serial.println(rasioR);
if(rasioL > 0.985 && rasioR < 0.985){ //right for(int i = LR; i < 12; i++){ blink(0, i); ritardo(40); LR = io; } }else if(rasioL 0.985){ //left for(int i=LR; i>2; i--){ blink(0, i); ritardo(40); LR = io; } }else if(lid == false && rasioL < 0.96 && rasioR < 0.96){ //Chiusura lampeggiante per(int i = 1; i 0.96 && rasioR > 0.96){ //Aperta for(int i = 8; i > 0; i--){ lampeggio(i, LR); ritardo(40); coperchio = falso; } }else if(lid == false && rasioL > 0,96 && rasioR > 0,96) { //normal //cnt++; //palpebra = 0; if(LR <= 7){ for(int i=LR; i<=7; i++){ lampeggio(0, i); ritardo(40); LR = io; } }else { for(int i=LR; i>=7; i--){ lampeggio(0, i); ritardo(40); LR = io; } } }
//Aggiornamento valore iniziale if (cnt > 10){ iniSensorValL = sensorValL; iniSensorValR = sensorValR; cnt = 0; } }
Passaggio 5: operazione
Rileva il movimento sinistro e destro e il lampeggio della pupilla con il sensore e controlla il LED del bulbo oculare.
Consigliato:
Interfaccia uomo-computer: funzione di una pinza (prodotta da Kirigami) tramite movimento del polso tramite EMG.: 7 passaggi
Interfaccia uomo-computer: funzione di una pinza (prodotta da Kirigami) tramite il movimento del polso utilizzando l'EMG.: Quindi questo è stato il mio primo tentativo con un'interfaccia uomo-computer. Ho catturato i segnali di attivazione muscolare del mio movimento del polso utilizzando un sensore EMG, l'ho elaborato attraverso python e arduino e azionato una pinza a base di origami
Robot di Halloween con rilevamento del volto e rilevamento del sorriso: 8 passaggi (con immagini)
Monitoraggio del viso e rilevamento del sorriso Robot di Halloween: Halloween sta arrivando! Abbiamo deciso di costruire qualcosa di interessante. Incontra i robot Ghosty e Skully. Possono seguire il tuo viso e sanno quando sorridi per ridere con te! Questo progetto è un altro esempio dell'utilizzo dell'app iRobbie che converte l'iPhone in
La webcam più semplice come videocamera di sicurezza: rilevamento del movimento e immagini inviate tramite e-mail: 4 passaggi
La webcam più semplice come videocamera di sicurezza: rilevamento del movimento e immagini inviate tramite e-mail: non è più necessario scaricare o configurare software per trasferire le immagini rilevate dal movimento dalla webcam alla tua e-mail: è sufficiente utilizzare il browser. Usa un browser Firefox, Chrome, Edge o Opera aggiornato su Windows, Mac o Android per catturare l'immagine
Metodi di rilevamento del livello dell'acqua Arduino utilizzando il sensore a ultrasuoni e il sensore dell'acqua Funduino: 4 passaggi
Metodi per rilevare il livello dell'acqua Arduino utilizzando il sensore ad ultrasuoni e il sensore dell'acqua Funduino: in questo progetto, ti mostrerò come creare un rilevatore d'acqua economico utilizzando due metodi: 1. Sensore a ultrasuoni (HC-SR04).2. Sensore acqua Funduino
Presa controllata dal movimento - Da una luce di rilevamento del movimento: 6 passaggi
Presa controllata dal movimento - Da una luce di rilevamento del movimento: Immagina di essere un dolcetto o scherzetto che va nella casa più spaventosa del quartiere. Dopo aver superato tutti i ghoul, i fantasmi e i cimiteri, arrivi finalmente all'ultimo percorso. Puoi vedere le caramelle in una ciotola davanti a te! Ma poi improvvisamente un gho