Kazalo:
- 1. korak: Ustava
- Korak: NeoPixel LED očesna kroglica
- 3. korak: Senzorska enota
- 4. korak: Arduino koda
- 5. korak: Delovanje
Video: Sledenje gibanju oči z infrardečim senzorjem: 5 korakov
2024 Avtor: John Day | [email protected]. Nazadnje spremenjeno: 2024-01-30 12:05
Za zaznavanje gibov oči in nadzor LED sem uporabil infrardeči senzor.
Naredila sem zrkla z LED trakom NeoPixel.
1. korak: Ustava
Za sledenje očesu sem uporabil dva senzorja QTR - 1A. Zaznavanje z Arduinom in nadzor LED.
komponente
- SparkFun Arduino Pro Mini 328 - 5V/16MHz
- Dodatek za nahrbtnik Adafruit LiIon/LiPoly za Pro Trinket/ItsyBitsy
- LiPo baterija
- NeoPixel trak
- Senzor odseva QTR-1A
Korak: NeoPixel LED očesna kroglica
Uporablja se LED trak NeoPixel. LED je 68 enot.
LED je pritrjen na posodo z dvostranskim trakom in ožičen.
3. korak: Senzorska enota
Za sledenje očesu sem uporabil dva senzorja QTR - 1A. QTR - 1A so postavljeni na plastično folijo na razdalji približno širine očesa.
Senzorski del in del mikrokrmilnika sta bila pritrjena na očala s sponko.
4. korak: Arduino koda
Ko se šarenica približa enemu senzorju, se odbita svetloba zmanjša in vrednost senzorja se poveča. Nasprotno, ko se šarenica odmakne, se odbita svetloba poveča in vrednost senzorja fotoreflektorja se zmanjša.
Desni in levi premik zenice LED -očesnega zrkla zaznava povečanje in zmanjšanje vrednosti enega senzorja ter ga nadzira. Ko utripata, se vrednosti obeh senzorjev znižata, zato se veki LED -očesnega jabolka znižata, če se obe vrednosti hkrati zmanjšata.
Uporabil sem naslednjo knjižnico.
- QTRsenzorji:
- Adafruit_NeoPixel:
#include #include
#define NUM_SENSORS 2 // število uporabljenih senzorjev#define NUM_SAMPLES_PER_SENSOR 10 // povprečenje#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 črnoNum = 24; int pupilNum = 12; barva uint32_t; int svetlost = 40; bajt eyeColor; int LR = 7; logični pokrov = napačno; int cnt = 0;
// L&R animacija črnih oči, črna LED [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čenca L&Rint učenecLED [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}};
// animacija utripanja v veki = 0; int eyelidNum [8] = {0, 4, 8, 16, 24, 34, 44, 56}; int vekaLED [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 ((brez podpisanega znaka ) {0, 1}, NUM_SENSORS, NUM_SAMPLES_PER_SENSOR, EMITTER_PIN); nepodpisani int sensorValues [NUM_SENSORS];
void utripanje (int vek, int LR) {if (vek! = 8) {// kositr za (uint16_t i = 0; i <led.numPixels (); i ++) {led.setPixelColor (i, led. Color (66, 66, 66)); }
// Črne oči za (uint16_t i = 0; i led.setPixelColor (črnaLED [LR] , barva);}
// učenec za (uint16_t i = 0; i
led.setPixelColor (učenecLED [LR] , led. Color (0, 0, 66)); }
// veka za (int i = 0; i <očesna številka [vek]; i ++) {led.setPixelColor (vekLED , 0); }} else if (veka == 8) {led.clear (); } led.show ();}
void setup () {
Serial.begin (115200); led.begin (); led.setBrightness (svetlost); // Začetna svetlost 40 led.show (); // Inicializiramo vse slikovne pike na 'off' color = led. Color (0, 177, 55); // zamuda barve zenice (100); qtra.read (sensorValues); iniSensorValL = vrednosti senzorjev [0]; iniSensorValR = vrednosti senzorjev [1]; utripanje (vek, LR); }
void loop () {// QTR - vrednost senzorja 1A qtra.read (sensorValues); sensorValL = sensorValues [0]; sensorValR = sensorValues [1];
dvojni rasioL = (dvojni) sensorValL / iniSensorValL;
dvojni rasioR = (dvojni) sensorValR / iniSensorValR;
Serijski.tisk (rasioL);
Serial.print (""); Serial.println (rasioR);
if (rasioL> 0,985 && rasioR <0,985) {// desno za (int i = LR; i <12; i ++) {utripa (0, i); zamuda (40); LR = i; }} else if (rasioL 0.985) {// levo za (int i = LR; i> 2; i-) {utripa (0, i); zamuda (40); LR = i; }} else if (lid == false && rasioL <0,96 && rasioR <0,96) {// Utripa blizu za (int i = 1; i 0,96 && rasioR> 0,96) {// Utripa odprto za (int i = 8; i > 0; i-) {utripa (i, LR); zamuda (40); pokrov = napačno; }} else if (lid == false && rasioL> 0,96 && rasioR> 0,96) {// normalno // cnt ++; // vek = 0; če (LR <= 7) {za (int i = LR; i <= 7; i ++) {utripa (0, i); zamuda (40); LR = i; }} else {for (int i = LR; i> = 7; i-) {utripa (0, i); zamuda (40); LR = i; }}}
// osvežitev začetne vrednosti if (cnt> 10) {iniSensorValL = sensorValL; iniSensorValR = sensorValR; cnt = 0; }}
5. korak: Delovanje
Zaznajte levo in desno gibanje in utripajte zenico s senzorjem ter nadzirajte LED zrkla.
Priporočena:
Sistem za sledenje gibanju glave za VR: 8 korakov
Head Motion Tracking System za VR: Moje ime je Sam KODO, v tem priročniku vas bom korak za korakom naučil, kako uporabljati senzorje Arduino IMU za izdelavo sistema za sledenje glavi za VR. V tem projektu boste potrebovali: - LCD zaslon HDMI : https: //www.amazon.com/Elecrow-Capacitive-interfac…- An
Sledenje gibanju človeškega očesa: 6 korakov
Sledenje gibanju človeškega očesa: Cilj tega projekta je zajeti gibanje človeškega očesa in prikazati njegovo gibanje na niz LED luči, ki so postavljene v obliki očesa. Ta vrsta projekta bi lahko imela veliko uporab na področju robotike in zlasti huma
Zračni klavir z infrardečim senzorjem bližine, zvočnikom in Arduino Uno (nadgrajeno/del 2): 6 korakov
Zračni klavir z infrardečim senzorjem bližine, zvočnikom in Arduino Uno (nadgrajen/del 2): To je nadgrajena različica prejšnjega projekta zračnega klavirja?. Tukaj uporabljam zvočnik JBL kot izhod. Vključil sem tudi gumb, občutljiv na dotik, za spreminjanje načinov glede na zahteve. Na primer- način trdega nizkega tona, običajni način, visok fr
QeMotion - sledenje gibanju za vse slušalke!: 5 korakov (s slikami)
QeMotion - Sledenje gibanju za vsako slušalko !: Pregled: Ta naprava vam omogoča, da z gibanjem glave sprožite dogodke v skoraj vseh video igrah. Deluje tako, da spremlja gibanje glave (ali slušalke glede na to) in sproži pritiske na tipkovnico za določene gibe. Torej vaš komp
Nokia 5110 LCD z infrardečim senzorjem: 4 koraki
LCD zaslon Nokia 5110 z infrardečim senzorjem: LCD zaslon Nokia 5110 je odličen LCD zaslon, ki je združljiv z razvojno ploščo Arduino. Upravljajmo zdaj enega od teh LCD -jev in ga povežimo z Arduinom in IR senzorjem