Spisu treści:
- Krok 1: Konstytucja
- Krok 2: Kula oczna NeoPixel LED
- Krok 3: Jednostka czujnika
- Krok 4: Kod Arduino
- Krok 5: Operacja
Wideo: Śledzenie ruchu oka za pomocą czujnika podczerwieni: 5 kroków
2024 Autor: John Day | [email protected]. Ostatnio zmodyfikowany: 2024-01-30 11:31
Użyłem czujnika podczerwieni do wykrywania ruchów oczu i sterowania diodą LED.
Gałki oczne wykonałem taśmą LED NeoPixel.
Krok 1: Konstytucja
Do śledzenia wzroku użyłem dwóch czujników QTR - 1A. Wykrywanie za pomocą Arduino i sterowanie diodą LED.
składniki
- SparkFun Arduino Pro Mini 328 - 5V/16MHz
- Dodatek do plecaka Adafruit LiIon/LiPoly dla Pro Trinket/ItsyBitsy
- Akumulator LiPo
- Pasek NeoPixel
- Czujnik odbicia QTR-1A
Krok 2: Kula oczna NeoPixel LED
Zastosowano taśmę LED NeoPixel. LED to 68 jednostek.
Dioda mocowana jest do miski taśmą dwustronną i przewodem.
Krok 3: Jednostka czujnika
Do śledzenia wzroku użyłem dwóch czujników QTR - 1A. QTR - 1A umieszcza się na plastikowym arkuszu w odległości około szerokości oka.
Część czujnika i część mikrokontrolera zostały przymocowane odpowiednio do okularów za pomocą klipsa.
Krok 4: Kod Arduino
Gdy tęczówka zbliży się do jednego czujnika, odbite światło maleje, a wartość czujnika wzrasta. I odwrotnie, gdy tęczówka się oddala, odbite światło wzrasta, a wartość czujnika fotoreflektora maleje.
Prawy i lewy ruch źrenicy gałki ocznej LED wykrywa wzrost i spadek wartości jednego czujnika i steruje nim. Gdy mrugają, obie wartości czujników zmniejszają się, więc jeśli obie wartości czujników spadną jednocześnie, powieki gałki ocznej LED opadają.
Skorzystałem z poniższej biblioteki.
- Czujniki QTR:
- Adafruit_NeoPixel:
#włącz #włącz
#define NUM_SENSORS 2 // liczba używanych czujników#define NUM_SAMPLES_PER_SENSOR 10 // uśrednianie#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 czarnyNum = 24; int liczba źrenic = 12; kolor uint32_t; jasność wewnętrzna = 40; bajt kolor oczu; int LR = 7; pokrywka logiczna = fałsz; int cnt = 0;
//Animacja L&R czarnego okaint 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}, {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, 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}};
// animacja L&R ucznia z diodą LED[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, 68}, {22, 45, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68}};
//Mrugnięcie animacji na powiekę = 0; int liczba powiek[8] = {0, 4, 8, 16, 24, 34, 44, 56}; wew powieki[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 eyelid, int LR) { if (eyelid != 8){ //Pewter for(uint16_t i=0; i<led.numPixels(); i++) { led.setPixelColor(i, led. Color(66), 66, 66)); }
//Podbite oko for(uint16_t i=0; i led.setPixelColor(blackLED[LR], color); }
//uczeń dla(uint16_t i=0; i
led.setPixelColor(źrenicaLED[LR], led. Color(0, 0, 66)); }
//powieki for(int i=0; i < powiekaNum[powieki]; i++) { led.setPixelColor(eyelidLED, 0); } } else if (powieki == 8){ led.clear(); } led.pokaż();}
pusta konfiguracja () {
Serial.początek(115200); led.rozpocznij(); led.setJasność(jasność); // Jasność początkowa 40 led.show(); // Zainicjuj wszystkie piksele na 'off' color = led. Color(0, 177, 55); //opóźnienie koloru źrenicy(100); qtra.read(sensorValues); iniSensorValL = sensorValues[0]; iniSensorValR = sensorValues[1]; mrugnięcie (powieka, LR); }
void loop() { //QTR - 1A wartość czujnika qtra.read(sensorValues); sensorValL = sensorValues[0]; sensorValR = sensorValues[1];
podwójny rasioL = (podwójny)sensorValL / iniSensorValL;
podwójny rasioR = (podwójny)sensorValR / iniSensorValR;
Serial.print(rasioL);
Serial.print(" "); Serial.println(rasioR);
if(rasioL > 0,985 && rasioR < 0,985){ //prawo do (int i = LR; i < 12; i++){ miga (0, i); opóźnienie(40); LR = i; } }else if(rasioL 0.985){ //po lewej for(int i=LR; i>2; i--){ blink(0, i); opóźnienie(40); LR = i; } }else if(lid == false && rasioL < 0,96 && rasioR < 0,96){ //Miganie zamknięte for(int i = 1; i 0,96 && rasioR > 0,96){ //Miganie otwarte for(int i = 8; i > 0; i--){ miga (i, LR); opóźnienie(40); pokrywka = fałsz; } }else if(lid == false && rasioL > 0,96 && rasioR > 0,96) { //normalne //cnt++; //powieka = 0; if(LR <= 7){ for(int i=LR; i<=7; i++){ miga(0, i); opóźnienie(40); LR = i; } }else { for(int i=LR; i>=7; i--){ miga(0, i); opóźnienie(40); LR = i; } } }
//Odświeżenie wartości początkowej if (cnt > 10){ iniSensorValL = sensorValL; iniSensorValR = sensorValR; liczba = 0; } }
Krok 5: Operacja
Wykrywaj ruchy w lewo i w prawo oraz mruganie źrenicy za pomocą czujnika i steruj diodą LED gałki ocznej.
Zalecana:
Śledzenie ruchu za pomocą MPU-6000 i Particle Photon: 4 kroki
Śledzenie ruchu za pomocą MPU-6000 i Particle Photon: MPU-6000 to 6-osiowy czujnik śledzenia ruchu, który ma wbudowany 3-osiowy akcelerometr i 3-osiowy żyroskop. Ten czujnik jest w stanie skutecznie śledzić dokładne położenie i położenie obiektu w płaszczyźnie trójwymiarowej. Może być stosowany w
Śledzenie ruchu ludzkiego oka: 6 kroków
Śledzenie ruchu ludzkiego oka: Ten projekt ma na celu uchwycenie ruchu ludzkiego oka i wyświetlenie jego ruchu na zestawie świateł LED umieszczonych w kształcie oka. Ten rodzaj projektu może potencjalnie mieć wiele zastosowań w dziedzinie robotyki, a konkretnie huma
Śledzenie ruchu za pomocą MPU-6000 i Arduino Nano: 4 kroki
Śledzenie ruchu przy użyciu MPU-6000 i Arduino Nano: MPU-6000 to 6-osiowy czujnik śledzenia ruchu, który ma wbudowany 3-osiowy akcelerometr i 3-osiowy żyroskop. Ten czujnik jest w stanie skutecznie śledzić dokładne położenie i położenie obiektu w płaszczyźnie trójwymiarowej. Może być stosowany w
Śledzenie ruchu za pomocą MPU-6000 i Raspberry Pi: 4 kroki
Śledzenie ruchu przy użyciu MPU-6000 i Raspberry Pi: MPU-6000 to 6-osiowy czujnik śledzenia ruchu, który ma wbudowany 3-osiowy akcelerometr i 3-osiowy żyroskop. Ten czujnik jest w stanie skutecznie śledzić dokładne położenie i położenie obiektu w płaszczyźnie trójwymiarowej. Może być stosowany w
Kto jest w Moich Drzwiach? Projekt czujnika ruchu PIR/czujnika zasięgu: 5 kroków
Kto jest w Moich Drzwiach? Projekt czujnika ruchu PIR/czujnika zasięgu: Nasz projekt ma na celu wykrywanie ruchu za pomocą czujników PIR i czujników odległości. Kod Arduino wyśle sygnał wizualny i dźwiękowy, aby poinformować użytkownika, że ktoś jest w pobliżu. Kod MATLAB wyśle sygnał e-mail, aby powiadomić użytkownika, że ktoś jest w pobliżu.To urządzenie