Mục lục:
- Bước 1: Hiến pháp
- Bước 2: Bóng mắt LED NeoPixel
- Bước 3: Bộ cảm biến
- Bước 4: Mã Arduino
- Bước 5: Hoạt động
Video: Theo dõi chuyển động của mắt bằng cảm biến hồng ngoại: 5 bước
2024 Tác giả: John Day | [email protected]. Sửa đổi lần cuối: 2024-01-30 13:34
Tôi đã sử dụng một cảm biến hồng ngoại để cảm nhận chuyển động của mắt và điều khiển đèn LED.
Tôi đã tạo nhãn cầu bằng LED Tape NeoPixel.
Bước 1: Hiến pháp
Tôi đã sử dụng hai cảm biến QTR-1A để theo dõi mắt. Cảm biến với Arduino và điều khiển đèn LED.
các thành phần
- SparkFun Arduino Pro Mini 328 - 5V / 16MHz
- Adafruit LiIon / LiPoly Backpack Add-On cho Pro Trinket / ItsyBitsy
- Pin LiPo
- Dải NeoPixel
- Cảm biến phản xạ QTR-1A
Bước 2: Bóng mắt LED NeoPixel
Băng LED NeoPixel được sử dụng. LED là 68 đơn vị.
Đèn LED được cố định vào bát bằng băng keo hai mặt và có dây.
Bước 3: Bộ cảm biến
Tôi đã sử dụng hai cảm biến QTR-1A để theo dõi mắt. QTR-1A được đặt trên một tấm nhựa ở khoảng cách bằng chiều rộng của mắt.
Phần cảm biến và phần vi điều khiển được cố định vào kính mắt bằng một chiếc kẹp.
Bước 4: Mã Arduino
Khi mống mắt tiếp cận một cảm biến, ánh sáng phản xạ giảm và giá trị cảm biến tăng lên. Ngược lại, khi mống mắt di chuyển ra xa, ánh sáng phản xạ tăng lên và giá trị cảm biến của phản xạ ảnh giảm.
Chuyển động phải và trái của đồng tử nhãn cầu LED cảm nhận sự tăng và giảm của một giá trị cảm biến và điều khiển nó. Khi nhấp nháy, cả hai giá trị cảm biến đều giảm, vì vậy nếu hai giá trị cảm biến giảm đồng thời, mí mắt của nhãn cầu LED sẽ đi xuống.
Tôi đã sử dụng thư viện sau đây.
- QTRsensors:
- Adafruit_NeoPixel:
#include #include
# xác định NUM_SENSORS 2 // số lượng cảm biến được sử dụng # xác định NUM_SAMPLES_PER_SENSOR 10 // tính trung bình # xác định 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 studentNum = 12; uint32_t màu; int độ sáng = 40; byte eyeColor; int LR = 7; boolean lid = false; int cnt = 0;
// Mắt đen 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, 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}};
// học sinh L&R hoạt hình học sinhLED [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}};
// Nháy mí mắt animationint = 0; int EyelineNum [8] = {0, 4, 8, 16, 24, 34, 44, 56}; int EyelineLED [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 chớp (int mi mắt, int LR) {if (mi mắt! = 8) {// Pewter for (uint16_t i = 0; i <led.numPixels (); i ++) {led.setPixelColor (i, led. Color (66 (66, 66)); }
// Mắt đen for (uint16_t i = 0; i led.setPixelColor (blackLED [LR] , color);}
// đồng tử for (uint16_t i = 0; i
led.setPixelColor (studentLED [LR] , led. Color (0, 0, 66)); }
// mí mắt for (int i = 0; i <míNum [mí mắt]; i ++) {led.setPixelColor (mí mắt LED , 0); }} else if (míc == 8) {led.clear (); } led.show ();}
void setup () {
Serial.begin (115200); led.begin (); led.setBrightness (độ sáng); // Độ sáng ban đầu 40 led.show (); // Khởi tạo tất cả các pixel thành 'off' color = led. Color (0, 177, 55); // độ trễ màu đồng tử (100); qtra.read (sensorValues); iniSensorValL = sensorValues [0]; iniSensorValR = sensorValues [1]; chớp mắt (mí mắt, LR); }
void loop () {// QTR - Giá trị cảm biến 1A qtra.read (sensorValues); sensorValL = sensorValues [0]; sensorValR = sensorValues [1];
double rasioL = (double) sensorValL / iniSensorValL;
double rasioR = (double) sensorValR / iniSensorValR;
Serial.print (rasioL);
Serial.print (""); Serial.println (rasioR);
if (rasioL> 0.985 && rasioR <0.985) {// right for (int i = LR; i <12; i ++) {flash (0, i); chậm trễ (40); LR = i; }} else if (rasioL 0.985) {// left for (int i = LR; i> 2; i -) {flash (0, i); chậm trễ (40); LR = i; }} else if (lid == false && rasioL <0.96 && rasioR <0.96) {// Nhấp nháy đóng cho (int i = 1; i 0.96 && rasioR> 0.96) {// Nhấp nháy mở cho (int i = 8; i > 0; i -) {nháy (i, LR); chậm trễ (40); nắp = sai; }} else if (lid == false && rasioL> 0.96 && rasioR> 0.96) {// normal // cnt ++; // mí mắt = 0; if (LR <= 7) {for (int i = LR; i <= 7; i ++) {nháy (0, i); chậm trễ (40); LR = i; }} else {for (int i = LR; i> = 7; i -) {nháy (0, i); chậm trễ (40); LR = i; }}}
// Làm mới giá trị ban đầu if (cnt> 10) {iniSensorValL = sensorValL; iniSensorValR = sensorValR; cnt = 0; }}
Bước 5: Hoạt động
Phát hiện chuyển động trái phải và nhấp nháy của đồng tử bằng cảm biến, đồng thời điều khiển đèn LED nhãn cầu.
Đề xuất:
Văn phòng chạy bằng pin. Hệ thống năng lượng mặt trời với tự động chuyển đổi bảng năng lượng mặt trời Đông / Tây và tuabin gió: 11 bước (có hình ảnh)
Văn phòng chạy bằng pin. Hệ thống năng lượng mặt trời với tự động chuyển đổi bảng năng lượng mặt trời Đông / Tây và tuabin gió: Dự án: Một văn phòng rộng 200 ft vuông cần được cung cấp năng lượng từ pin. Văn phòng cũng phải chứa tất cả các bộ điều khiển, pin và các thành phần cần thiết cho hệ thống này. Năng lượng mặt trời và năng lượng gió sẽ sạc pin. Chỉ có một vấn đề nhỏ là
Bộ dụng cụ theo dõi xe ô tô tự làm bằng rô bốt thông minh Theo dõi ô tô cảm quang: 7 bước
Tự làm bộ dụng cụ theo dõi rô bốt thông minh theo dõi ô tô Theo dõi ô tô cảm quang: Thiết kế bởi SINONING ROBOT Bạn có thể mua từ rô bốt theo dõi ô tô ChipLM393 so sánh hai điện trở quang, khi có một đèn LED cảm quang một bên TRẮNG thì bên của động cơ sẽ dừng ngay lập tức, bên kia của động cơ quay lên, để
Máy ảnh nhiệt hồng ngoại M5Stack sử dụng cảm biến hình ảnh mảng hồng ngoại AMG8833: 3 bước
Máy ảnh nhiệt M5Stack IR sử dụng cảm biến hình ảnh mảng hồng ngoại AMG8833: Giống như nhiều người, tôi đã bị mê hoặc với máy ảnh nhiệt nhưng chúng luôn nằm ngoài tầm giá của tôi - cho đến nay !! Mô-đun ESP32 và một
Theo dõi chuyển động 3D Tfcd thông qua cảm biến điện dung và đầu ra LED: 6 bước (có hình ảnh)
Theo dõi chuyển động 3D Tfcd thông qua cảm biến điện dung và đầu ra đèn LED: Trong hướng dẫn này sẽ giải thích cách chuyển động của bàn tay có thể được theo dõi trong không gian 3D bằng cách sử dụng nguyên tắc cảm biến điện dung. Bằng cách thay đổi khoảng cách giữa lá nhôm tích điện và bàn tay của bạn, dung lượng của tụ điện sẽ thay đổi
Cửa ra điều khiển chuyển động - Từ đèn cảm biến chuyển động: 6 bước
Cửa ra điều khiển chuyển động - Từ ánh sáng cảm biến chuyển động: Hãy tưởng tượng rằng bạn là một kẻ lừa đảo hoặc lừa dối đến ngôi nhà đáng sợ nhất trong khu nhà. Sau khi vượt qua tất cả những con ma cà rồng, bóng ma và nghĩa địa, cuối cùng bạn cũng đến được con đường cuối cùng. Bạn có thể nhìn thấy kẹo trong một cái bát trước mặt bạn! Nhưng rồi đột nhiên xuất hiện một con ma