Mündəricat:
- Addım 1: Konstitusiya
- Addım 2: NeoPixel LED Göz Topu
- Addım 3: Sensor vahidi
- Addım 4: Arduino Kodu
- Addım 5: Əməliyyat
Video: İnfraqırmızı sensordan istifadə edərək göz hərəkətlərinin izlənməsi: 5 addım
2024 Müəllif: John Day | [email protected]. Son dəyişdirildi: 2024-01-30 07:46
Göz hərəkətlərini hiss etmək və LED -i idarə etmək üçün infraqırmızı sensordan istifadə etdim.
LED Tape NeoPixel ilə göz qapaqları düzəltdim.
Addım 1: Konstitusiya
Gözləri izləmək üçün iki sensör QTR - 1A istifadə etdim. Arduino ilə algılama və LED -in idarə edilməsi.
komponentlər
- SparkFun Arduino Pro Mini 328 - 5V/16MHz
- Pro Trinket/ItsyBitsy üçün Adafruit LiIon/LiPoly Sırt Çantası Əlavəsi
- LiPo Batareyası
- NeoPixel zolağı
- QTR-1A Yansıtma Sensoru
Addım 2: NeoPixel LED Göz Topu
NeoPixel LED şeridi istifadə olunur. LED 68 ədəddir.
LED qaba iki tərəfli lentlə bərkidilir və tellə bağlanır.
Addım 3: Sensor vahidi
Gözləri izləmək üçün iki sensör QTR - 1A istifadə etdim. QTR - 1A, gözün eni yaxınlığında bir plastik təbəqəyə yerləşdirilir.
Sensor hissəsi və mikrokontrolör hissəsi sırasıyla bir kliplə gözlüklərə bərkidilmişdir.
Addım 4: Arduino Kodu
İris bir sensora yaxınlaşanda əks olunan işıq azalır və sensorun dəyəri artır. Əksinə, iris uzaqlaşdıqda əks olunan işıq artır və foto reflektorun sensor dəyəri azalır.
LED göz kürəsinin şagirdinin sağ və sol hərəkəti bir sensor dəyərinin artdığını və azaldığını hiss edir və onu idarə edir. Yanıp sönəndə hər iki sensor dəyəri azalır, buna görə də iki sensorun eyni vaxtda azalması halında, LED göz kürəsinin göz qapaqları aşağı enəcək.
Aşağıdakı kitabxanadan istifadə etdim.
- QTRsensorları:
- Adafruit_NeoPixel:
#daxil edin #daxil edin
#NUM_SENSORS 2 müəyyən edin // istifadə olunan sensorlar sayı#NUM_SAMPLES_PER_SENSOR 10 təyin edin // orta#EMITTER_PIN QTR_NO_EMITTER_PIN təyin edin
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 rəng; int parlaqlıq = 40; bayt göz rəngi; int LR = 7; boolean qapaq = yalan; int cnt = 0;
// Qara göz L&R animasiyası qara 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, 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, 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, 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, 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, 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}};
// şagird L&R animasiyasında şagird [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}};
// Göz qapağının animasiyası göz qırpır = 0; int göz qapağıNum [8] = {0, 4, 8, 16, 24, 34, 44, 56}; int göz qapağı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 ((işarəsiz simvol ) {0, 1}, NUM_SENSORS, NUM_SAMPLES_PER_SENSOR, EMITTER_PIN); imzasız int sensorValues [NUM_SENSORS];
boş göz qırpması (int göz qapağı, int LR) {if (göz qapağı! = 8) {// Pewter for (uint16_t i = 0; i <led.numPixels (); i ++) {led.setPixelColor (i, led. Color (66), 66, 66)); }
// Qara göz (uint16_t i = 0; i led.setPixelColor (blackLED [LR] , rəng);}
// şagird (uint16_t i = 0; i
led.setPixelColor (şagirdLED [LR] , led. Color (0, 0, 66)); }
// göz qapağı (int i = 0; i <eyelidNum [göz qapağı]; i ++) {led.setPixelColor (göz qapağıLED , 0); }} başqa if (göz qapağı == 8) {led.clear (); } led.show ();}
boş quraşdırma () {
Serial.begin (115200); led.begin (); led.setBrightness (parlaqlıq); // İlk Parlaqlıq 40 led.show (); // Bütün pikselləri 'off' color = led. Color (0, 177, 55) olaraq başladın; // şagird rəng gecikməsi (100); qtra.read (sensorValues); iniSensorValL = sensorValues [0]; iniSensorValR = sensorValues [1]; göz qırpması (göz qapağı, LR); }
void loop () {// QTR - 1A sensor dəyəri qtra.read (sensorValues); sensorValL = sensorValues [0]; sensorValR = sensorValues [1];
ikiqat rasioL = (ikiqat) sensorValL / iniSensorValL;
ikiqat rasioR = (ikiqat) sensorValR / iniSensorValR;
Serial.çap (rasioL);
Serial.print (""); Serial.println (rasioR);
if (rasioL> 0.985 && rasioR <0.985) {// sağ üçün (int i = LR; i <12; i ++) {yanıp sönmə (0, i); gecikmə (40); LR = i; }} else if (rasioL 0.985) {// for (int i = LR; i> 2; i-) {blink (0, i); gecikmə (40); LR = i; }} başqa if (qapaq == yalan && rasioL <0.96 && rasioR <0.96) {// Yanıp sönən (int i = 1; i 0.96 && rasioR> 0.96) {// üçün yanıp sönən (int i = 8; i > 0; i-) {yanıp sön (i, LR); gecikmə (40); qapaq = yalan; }} başqa if (qapaq == yanlış && rasioL> 0.96 && rasioR> 0.96) {// normal // cnt ++; // göz qapağı = 0; if (LR <= 7) {for (int i = LR; i <= 7; i ++) {yanıp sönmə (0, i); gecikmə (40); LR = i; }} başqa {üçün (int i = LR; i> = 7; i-) {yanıp sönmə (0, i); gecikmə (40); LR = i; }}}
// Başlanğıc dəyəri yeniləyin, əgər (cnt> 10) {iniSensorValL = sensorValL; iniSensorValR = sensorValR; cnt = 0; }}
Addım 5: Əməliyyat
Sensorla şagirdin sol və sağ hərəkətini və göz qırpımını aşkar edin və göz kürəsinin LEDini idarə edin.
Tövsiyə:
MPU-6000 və hissəcik fotonundan istifadə edərək hərəkət izlənməsi: 4 addım
MPU-6000 və Partikül Fotonundan istifadə edərək Hərəkət İzləmə: MPU-6000, 3 Eksenli akselerometr və 3 Eksenli giroskopu olan 6 Eksenli Hərəkət İzləmə Sensorudur. Bu sensor, obyektin 3ölçülü müstəvidə dəqiq mövqeyini və yerini səmərəli izləməyə qadirdir. İstifadə oluna bilər
ESP8266 və AskSensors IoT Platformasından istifadə edərək DHT Temperatur və Rütubətin İzlənməsi: 8 Addım
ESP8266 və AskSensors IoT Platformasından istifadə edərək DHT Temperatur və Nəmlik Monitorinqi: Əvvəlki təlimatda, ESP8266 nodeMCU və AskSensors IoT platformasına başlamaq üçün addım -addım təlimat təqdim etdim. MCU düyünə. DHT11, tez -tez istifadə olunan bir temperatur və nəmdir
Adosia IoT WiFi Controller + Motion Detect istifadə edərək Kərtənkələ Terrariumunun İzlənməsi: 17 Addım (Şəkillərlə)
Adosia IoT WiFi Controller + Motion Detect istifadə edərək kərtənkələ teraryumunun monitorinqi: Bu dərslikdə, kənarda bağçılıq edərkən təsadüfən tapdığımız və narahat etdiyimiz bir ovuc dəri dərisi üçün sadə bir kərtənkələ terrariumunun necə qurulacağını sizə göstərəcəyik. Buna görə də bir plastik istifadə edərək təhlükəsiz bir yer yaratmaq
SHT25 və Particle Photon istifadə edərək Temperatur və Rütubətin İzlənməsi: 5 Addım
SHT25 və Particle Photon istifadə edərək Temperatur və Nəmlik Monitorinqi: Bu yaxınlarda temperatur və rütubət monitorinqi tələb edən müxtəlif layihələr üzərində çalışdıq və sonra bu iki parametrin bir sistemin iş səmərəliliyinin qiymətləndirilməsində əsas rol oynadığını anladıq. Hər ikisi induksiyada
Python istifadə edərək Raspberry Pi və MMA7455 ilə Sürətləndirmə Variasiyalarının İzlənməsi: 6 Addım
Python istifadə edərək Raspberry Pi və MMA7455 ilə Sürətləndirmə Variasiyalarının İzlənməsi: Açılmamışam, cazibə qüvvəsini sınamışam. Hələ də işləyir … Sürətlənən kosmik gəminin nümayişi, mekikatın ən yüksək nöqtəsindəki bir saatın qravitasiya müddətinin genişlənməsi səbəbindən bazada bir saatdan daha sürətli olduğunu aydınlaşdırdı. Bəzi