Indholdsfortegnelse:
- Trin 1: Forfatning
- Trin 2: NeoPixel LED Eye Ball
- Trin 3: Sensorenhed
- Trin 4: Arduino -kode
- Trin 5: Betjening
Video: Eye Motion Tracking Brug af infrarød sensor: 5 trin
2024 Forfatter: John Day | [email protected]. Sidst ændret: 2024-01-30 08:28
Jeg brugte en infrarød sensor til at mærke øjenbevægelser og styre LED'en.
Jeg lavede øjenkugler med LED Tape NeoPixel.
Trin 1: Forfatning
Jeg brugte to sensorer QTR - 1A til øjensporing. Sensing med Arduino og styring af LED.
komponenter
- SparkFun Arduino Pro Mini 328 - 5V/16MHz
- Adafruit LiIon/LiPoly-rygsæk-tilføjelse til Pro Trinket/ItsyBitsy
- LiPo batteri
- NeoPixel -strimmel
- QTR-1A refleksionssensor
Trin 2: NeoPixel LED Eye Ball
NeoPixel LED tape bruges. LED er 68 enhed.
LED er fastgjort til skålen med dobbeltsidet tape og kabelforbundet.
Trin 3: Sensorenhed
Jeg brugte to sensorer QTR - 1A til øjensporing. QTR - 1A placeres på en plastfolie i en afstand på omkring øjenets bredde.
Sensordelen og mikrokontrollerdelen blev fastgjort til henholdsvis brillen med et klip.
Trin 4: Arduino -kode
Når iris nærmer sig en sensor, falder det reflekterede lys, og sensorværdien stiger. Omvendt, når iris bevæger sig væk, øges det reflekterede lys, og sensorværdien af fotoreflektoren falder.
Højre og venstre bevægelse af pupillen i LED -øjeæblet fornemmer stigningen og faldet af en sensorværdi og styrer den. Når de blinker, falder begge sensorværdier, så hvis de to sensorværdier falder samtidigt, falder øjenlågene på LED -øjeæblet ned.
Jeg brugte følgende bibliotek.
- QTRsensorer:
- Adafruit_NeoPixel:
#include #include
#define NUM_SENSORS 2 // antal anvendte sensorer#definere NUM_SAMPLES_PER_SENSOR 10 // i gennemsnit#definere 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 farve; int lysstyrke = 40; byte eyeColor; int LR = 7; boolsk låg = falsk; int cnt = 0;
// Black eye 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}, {4, 19, 20, 25, 42, 47, 48, 63, 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}, {21, 23, 44, 46, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68}};
// elev 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 øjenlåg = 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 ((usigneret tegn ) {0, 1}, NUM_SENSORS, NUM_SAMPLES_PER_SENSOR, EMITTER_PIN); usigneret int sensorValues [NUM_SENSORS];
tomrum blink (int øjenlåg, int LR) {hvis (øjenlåg! = 8) {// Tint til (uint16_t i = 0; i <led.numPixels (); i ++) {led.setPixelColor (i, led. Color (66, 66, 66)); }
// Sort øje for (uint16_t i = 0; i led.setPixelColor (blackLED [LR] , farve);}
// elev for (uint16_t i = 0; i
led.setPixelColor (pupilLED [LR] , led. Color (0, 0, 66)); }
// øjenlåg for (int i = 0; i <eyelidNum [eyelid]; i ++) {led.setPixelColor (eyelidLED , 0); }} ellers hvis (øjenlåg == 8) {led.clear (); } led.show ();}
ugyldig opsætning () {
Serial.begin (115200); led.begin (); led.setBrightness (lysstyrke); // Initial Brightness 40 led.show (); // Initialiser alle pixels til 'off' color = led. Color (0, 177, 55); // pupillens farveforsinkelse (100); qtra.read (sensorValues); iniSensorValL = sensorValues [0]; iniSensorValR = sensorValues [1]; blink (øjenlåg, LR); }
void loop () {// QTR - 1A sensorværdi qtra.read (sensorValues); sensorValL = sensorValues [0]; sensorValR = sensorValues [1];
dobbelt rasioL = (dobbelt) sensorValL / iniSensorValL;
dobbelt rasioR = (dobbelt) sensorValR / iniSensorValR;
Serial.print (rasioL);
Serial.print (""); Serial.println (rasioR);
hvis (rasioL> 0,985 && rasioR <0,985) {// højre for (int i = LR; i <12; i ++) {blink (0, i); forsinkelse (40); LR = i; }} ellers hvis (rasioL 0.985) {// venstre for (int i = LR; i> 2; i-) {blink (0, i); forsinkelse (40); LR = i; }} ellers hvis (lid == false && rasioL <0,96 && rasioR <0,96) {// Blinker tæt for (int i = 1; i 0,96 && rasioR> 0,96) {// Blinker åbent for (int i = 8; i > 0; i-) {blink (i, LR); forsinkelse (40); låg = falsk; }} ellers hvis (lid == false && rasioL> 0.96 && rasioR> 0.96) {// normal // cnt ++; // øjenlåg = 0; hvis (LR <= 7) {for (int i = LR; i <= 7; i ++) {blink (0, i); forsinkelse (40); LR = i; }} andet {for (int i = LR; i> = 7; i-) {blink (0, i); forsinkelse (40); LR = i; }}}
// Opdatering af første værdi hvis (cnt> 10) {iniSensorValL = sensorValL; iniSensorValR = sensorValR; cnt = 0; }}
Trin 5: Betjening
Registrer venstre og højre bevægelse og blink af eleven med sensoren, og kontroller øjeæblets LED.
Anbefalede:
Human Eye Motion Tracking: 6 trin
Human Eye Motion Tracking: Dette projekt har til formål at fange det menneskelige øjes bevægelse og viser dets bevægelse på et sæt LED -lys, der er placeret i form af et øje. Denne type projekter kan potentielt have mange anvendelser inden for robotik og specifikt huma
Brug af infrarød sensor med Arduino: 8 trin (med billeder)
Brug af infrarød sensor med Arduino: Hvad er en infrarød (aka IR) sensor? En IR -sensor er et elektronisk instrument, der scanner IR -signaler i specifikke frekvensområder defineret af standarder og konverterer dem til elektriske signaler på sin output pin (typisk kaldet signal pin) . IR -signalet
DIY Smart Robot Tracking Car Kits Tracking Car Fotosensitive: 7 trin
DIY Smart Robot Tracking Car Kits Tracking Car Fotofølsom: Design af SINONING ROBOT Du kan købe fra tracking robot carTheoryLM393 chip sammenligne de to fotoresistor, når der er en fotoresistor LED på den ene side på HVID, stopper motorens side med det samme, den anden side af motoren drej op, så
I2C / IIC LCD -skærm - Brug et SPI LCD til I2C LCD Display Brug SPI til IIC modul med Arduino: 5 trin
I2C / IIC LCD -skærm | Brug en SPI LCD til I2C LCD -skærmen Brug af SPI til IIC -modulet med Arduino: Hej fyre, da en normal SPI LCD 1602 har for mange ledninger at tilslutte, så det er meget svært at grænseflade det med arduino, men der er et modul på markedet, som kan konverter SPI -skærm til IIC -skærm, så du skal kun tilslutte 4 ledninger
Neopixel Ws2812 Rainbow LED Glød Med M5stick-C - Kører Rainbow på Neopixel Ws2812 Brug af M5stack M5stick C Brug af Arduino IDE: 5 trin
Neopixel Ws2812 Rainbow LED Glød Med M5stick-C | Kører Rainbow på Neopixel Ws2812 Brug af M5stack M5stick C Brug af Arduino IDE: Hej fyre i denne instruktion vil vi lære at bruge neopixel ws2812 LED'er eller led strip eller led matrix eller led ring med m5stack m5stick-C udviklingstavle med Arduino IDE, og vi vil lave et regnbuemønster med det