Sadržaj:
- Korak 1: Ustav
- Korak 2: NeoPixel LED očna kugla
- Korak 3: Senzorska jedinica
- Korak 4: Arduino kod
- Korak 5: Operacija
Video: Praćenje kretanja oka pomoću infracrvenog senzora: 5 koraka
2024 Autor: John Day | [email protected]. Zadnja izmjena: 2024-01-30 08:07
Koristio sam infracrveni senzor za osjet kretanja očiju i kontrolu LED diode.
Napravio sam očne jabučice sa LED trakom NeoPixel.
Korak 1: Ustav
Koristio sam dva senzora QTR - 1A za praćenje oka. Osećanje pomoću Arduina i kontrola LED diode.
komponente
- SparkFun Arduino Pro Mini 328 - 5V/16MHz
- Dodatak Adafruit LiLon/LiPoly ruksak za Pro Trinket/ItsyBitsy
- LiPo baterija
- NeoPixel traka
- QTR-1A Senzor refleksije
Korak 2: NeoPixel LED očna kugla
Koristi se LED traka NeoPixel. LED je 68 jedinica.
LED je pričvršćen na zdjelu dvostranom trakom i ožičen.
Korak 3: Senzorska jedinica
Koristio sam dva senzora QTR - 1A za praćenje oka. QTR - 1A postavljaju se na plastični lim na udaljenosti otprilike širine oka.
Senzorski dio i dio mikrokontrolera pričvršćeni su kopčom za naočare.
Korak 4: Arduino kod
Kad se šarenica približi jednom senzoru, reflektirano svjetlo se smanjuje, a vrijednost senzora raste. Nasuprot tome, kad se šarenica odmakne, reflektirano svjetlo se povećava, a vrijednost senzora fotoreflektora smanjuje.
Desni i lijevi pokret zjenice LED očne jabučice osjeća povećanje i smanjenje vrijednosti jednog senzora i kontrolira ga. Kada trepere, obje vrijednosti senzora se smanjuju, pa ako se dvije vrijednosti senzora smanje istovremeno, kapci LED očne jabučice će se spustiti.
Koristio sam sljedeću biblioteku.
- QTRsenzori:
- Adafruit_NeoPixel:
#include #include
#define NUM_SENSORS 2 // broj upotrijebljenih senzora#define NUM_SAMPLES_PER_SENSOR 10 // usrednjavanje#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 broj učenika = 12; uint32_t boja; int svjetlina = 40; byte eyeColor; int LR = 7; boolean poklopac = false; int cnt = 0;
// L&R animacija za crne oči, crnaLED [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čenika L&Rint učenikLED [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}};
// Treptanje animacijeint kapak = 0; int eyelidNum [8] = {0, 4, 8, 16, 24, 34, 44, 56}; int kapakLED [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 ((nepotpisani znak ) {0, 1}, NUM_SENSORS, NUM_SAMPLES_PER_SENSOR, EMITTER_PIN); nepotpisani int sensorValues [NUM_SENSORS];
void treptanje (int kapak, int LR) {if (kapak! = 8) {// kositar za (uint16_t i = 0; i <led.numPixels (); i ++) {led.setPixelColor (i, led. Color (66, 66, 66)); }
// Crno oko za (uint16_t i = 0; i led.setPixelColor (crnoLED [LR] , boja);}
// učenik za (uint16_t i = 0; i
led.setPixelColor (učenikLED [LR] , led. Color (0, 0, 66)); }
// kapak za (int i = 0; i <broj očnog kapka [kapak]; i ++) {led.setPixelColor (kapakLED , 0); }} else if (eyelid == 8) {led.clear (); } led.show ();}
void setup () {
Serial.begin (115200); led.begin (); led.setBrightness (svjetlina); // Početna svjetlina 40 led.show (); // Pokrećemo sve piksele na 'off' color = led. Color (0, 177, 55); // kašnjenje boje zjenice (100); qtra.read (sensorValues); iniSensorValL = vrijednosti senzora [0]; iniSensorValR = vrijednosti senzora [1]; treptaj (kapak, LR); }
void loop () {// QTR - 1A vrijednost senzora qtra.read (sensorValues); sensorValL = sensorValues [0]; sensorValR = sensorValues [1];
dvostruki rasioL = (dvostruki) sensorValL / iniSensorValL;
dvostruki rasioR = (dvostruki) sensorValR / iniSensorValR;
Serial.print (rasioL);
Serial.print (""); Serial.println (rasioR);
if (rasioL> 0.985 && rasioR <0.985) {// desno za (int i = LR; i <12; i ++) {blink (0, i); kašnjenje (40); LR = i; }} else if (rasioL 0.985) {// lijevo za (int i = LR; i> 2; i-) {blink (0, i); kašnjenje (40); LR = i; }} else if (lid == false && rasioL <0,96 && rasioR <0,96) {// Trepće blizu za (int i = 1; i 0,96 && rasioR> 0,96) {// Trepće otvoreno za (int i = 8; i > 0; i-) {blink (i, LR); kašnjenje (40); poklopac = lažno; }} else if (lid == false && rasioL> 0.96 && rasioR> 0.96) {// normalno // cnt ++; // kapak = 0; if (LR <= 7) {for (int i = LR; i <= 7; i ++) {treptanje (0, i); kašnjenje (40); LR = i; }} else {for (int i = LR; i> = 7; i-) {blink (0, i); kašnjenje (40); LR = i; }}}
// Početna vrijednost osvježenja if (cnt> 10) {iniSensorValL = sensorValL; iniSensorValR = sensorValR; cnt = 0; }}
Korak 5: Operacija
Otkrijte kretanje lijevo i desno i trepćite zjenicu senzorom i kontrolirajte LED očnu jabučicu.
Preporučuje se:
Praćenje kretanja pomoću MPU-6000 i fotona čestica: 4 koraka
Praćenje kretanja pomoću MPU-6000 i fotona čestica: MPU-6000 je 6-osni senzor za praćenje pokreta koji ima ugrađen troosni akcelerometar i troosni žiroskop. Ovaj senzor je sposoban za efikasno praćenje tačne pozicije i lokacije objekta u trodimenzionalnoj ravni. Može se zaposliti u
Praćenje kretanja pomoću MPU-6000 i Arduino Nano: 4 koraka
Praćenje kretanja pomoću MPU-6000 i Arduino Nano: MPU-6000 je 6-osni senzor za praćenje pokreta koji ima ugrađen troosni akcelerometar i troosni žiroskop. Ovaj senzor je sposoban za efikasno praćenje tačne pozicije i lokacije objekta u trodimenzionalnoj ravni. Može se zaposliti u
Praćenje kretanja pomoću MPU-6000 i Raspberry Pi: 4 koraka
Praćenje kretanja pomoću MPU-6000 i Raspberry Pi: MPU-6000 je 6-osni senzor za praćenje pokreta koji ima ugrađen troosni akcelerometar i troosni žiroskop. Ovaj senzor je sposoban za efikasno praćenje tačne pozicije i lokacije objekta u trodimenzionalnoj ravni. Može se zaposliti u
Korištenje infracrvenog senzora s Arduinom: 8 koraka (sa slikama)
Korištenje infracrvenog senzora s Arduinom: Što je infracrveni (poznatiji kao IR) senzor? IR senzor je elektronički instrument koji skenira IC signale u određenim frekvencijskim rasponima definiranim standardima i pretvara ih u električne signale na svom izlaznom pinu (obično se naziva signalni pin) . IC signal
M5Stack IC termalna kamera pomoću senzora za snimanje infracrvenog niza AMG8833: 3 koraka
M5Stack IC termalna kamera koja koristi senzor za snimanje infracrvenog niza AMG8833: Kao i mnogi, fascinirali su me termalni fotoaparati, ali oni su uvijek bili izvan mog raspona cijena - do sada !! Dok sam pregledavao web stranicu Hackaday naišao sam na ovu kameru napravljenu pomoću M5Stack ESP32 modul i relativno jeftin