สารบัญ:
- ขั้นตอนที่ 1: รัฐธรรมนูญ
- ขั้นตอนที่ 2: NeoPixel LED Eye Ball
- ขั้นตอนที่ 3: หน่วยเซนเซอร์
- ขั้นตอนที่ 4: รหัส Arduino
- ขั้นตอนที่ 5: การทำงาน
วีดีโอ: การติดตามการเคลื่อนไหวของดวงตาโดยใช้เซ็นเซอร์อินฟราเรด: 5 ขั้นตอน
2024 ผู้เขียน: John Day | [email protected]. แก้ไขล่าสุด: 2024-01-30 13:06
ฉันใช้เซ็นเซอร์อินฟราเรดเพื่อตรวจจับการเคลื่อนไหวของดวงตาและควบคุม LED
ฉันสร้างลูกตาด้วยเทป LED NeoPixel
ขั้นตอนที่ 1: รัฐธรรมนูญ
ฉันใช้เซ็นเซอร์ QTR - 1A สองตัวสำหรับการติดตามดวงตา ตรวจจับด้วย Arduino และควบคุม LED
ส่วนประกอบ
- SparkFun Arduino Pro Mini 328 - 5V/16MHz
- Adafruit LiIon/LiPoly Backpack Add-On สำหรับ Pro Trinket/ItsyBitsy
- แบตเตอรี่ LiPo
- แถบ NeoPixel
- เซ็นเซอร์สะท้อนแสง QTR-1A
ขั้นตอนที่ 2: NeoPixel LED Eye Ball
ใช้เทป NeoPixel LED LED คือ 68 หน่วย
LED ยึดติดกับชามด้วยเทปสองด้านและต่อสาย
ขั้นตอนที่ 3: หน่วยเซนเซอร์
ฉันใช้เซ็นเซอร์ QTR - 1A สองตัวสำหรับการติดตามดวงตา QTR - 1A วางบนแผ่นพลาสติกที่ระยะห่างประมาณความกว้างของดวงตา
ส่วนเซ็นเซอร์และส่วนไมโครคอนโทรลเลอร์ถูกจับจ้องไปที่แว่นสายตาโดยใช้คลิปหนีบตามลำดับ
ขั้นตอนที่ 4: รหัส Arduino
เมื่อม่านตาเข้าใกล้เซ็นเซอร์ตัวหนึ่ง แสงสะท้อนจะลดลงและค่าเซ็นเซอร์จะเพิ่มขึ้น ในทางกลับกัน เมื่อม่านตาเคลื่อนออกไป แสงสะท้อนจะเพิ่มขึ้น และค่าเซ็นเซอร์ของตัวสะท้อนแสงจะลดลง
การเคลื่อนไหวทางขวาและซ้ายของรูม่านตาของลูกตา LED จะตรวจจับการเพิ่มขึ้นและลดลงของค่าเซ็นเซอร์หนึ่งค่าและควบคุมค่านั้น เมื่อกะพริบ ค่าเซ็นเซอร์ทั้งสองจะลดลง ดังนั้นหากค่าเซ็นเซอร์ทั้งสองลดลงพร้อมกัน เปลือกตาของลูกตา LED จะลดลง
ฉันใช้ห้องสมุดต่อไปนี้
- เซ็นเซอร์ QTR:
- Adafruit_NeoPixel:
#รวม #รวม
#define NUM_SENSORS 2 // จำนวนเซ็นเซอร์ที่ใช้#define NUM_SAMPLES_PER_SENSOR 10 // ค่าเฉลี่ย#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; นักเรียน intNum = 12; uint32_t สี; ความสว่างภายใน = 40; ไบต์ eyeColor; int LR =7; ฝาบูลีน = เท็จ; int cnt = 0;
// ตาดำ L&R อนิเมชั่น 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}};
// ภาพเคลื่อนไหวของนักเรียน L&R ภาพเคลื่อนไหว LED[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}};
// กะพริบตาภาพเคลื่อนไหว = 0; เปลือกตาจำนวนเต็ม[8] = {0, 4, 8, 16, 24, 34, 44, 56}; เปลือกตา 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((ถ่านที่ไม่ได้ลงนาม) {0, 1}, NUM_SENSORS, NUM_SAMPLES_PER_SENSOR, EMITTER_PIN); ค่าเซ็นเซอร์ int ที่ไม่ได้ลงนาม[NUM_SENSORS];
โมฆะกะพริบตา (เปลือกตา int, int LR) { ถ้า (เปลือกตา != 8) { //Pewter for (uint16_t i=0; i<led.numPixels (); i++) { led.setPixelColor (i, led. Color (66), 66, 66)); }
//ตาดำสำหรับ(uint16_t i=0; i led.setPixelColor(blackLED[LR], color); }
// นักเรียนสำหรับ (uint16_t i=0; i
led.setPixelColor(pupilLED[LR], led. Color(0, 0, 66)); }
// เปลือกตาสำหรับ (int i = 0; i <เปลือกตา [เปลือกตา]; i++) { led.setPixelColor (eyelidLED , 0); } } else if (เปลือกตา == 8){ led.clear(); } led.show();}
การตั้งค่าเป็นโมฆะ () {
Serial.begin(115200); led.begin(); led.setBrightness(ความสว่าง); // ความสว่างเริ่มต้น 40 led.show(); // เริ่มต้นพิกเซลทั้งหมดเป็น 'ปิด' สี = led. Color(0, 177, 55); // สีของรูม่านตาล่าช้า (100); qtra.read(ค่าเซ็นเซอร์); iniSensorValL = ค่าเซ็นเซอร์[0]; iniSensorValR = ค่าเซ็นเซอร์[1]; กะพริบตา (เปลือกตา, LR); }
วงเป็นโมฆะ () {// QTR - 1A ค่าเซ็นเซอร์ qtra.read (sensorValues); sensorValL = ค่าเซ็นเซอร์[0]; sensorValR = ค่าเซ็นเซอร์ [1];
สองเท่า rasioL = (สองเท่า)sensorValL / iniSensorValL;
สองเท่า rasioR = (สองเท่า)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++){ กะพริบ (0, i); ล่าช้า(40); LR = ผม; } } else if (rasioL 0.985){ //left for (int i=LR; i>2; i--){ กะพริบ (0, i); ล่าช้า(40); LR = ผม; } } อื่น if (lid == false && rasioL < 0.96 && rasioR < 0.96) { // กะพริบปิดสำหรับ (int i = 1; i 0.96 && rasioR > 0.96){ // เปิดกะพริบสำหรับ (int i = 8; i > 0; i--){ กะพริบ (i, LR); ล่าช้า(40); ฝา = เท็จ; } } อื่น if (lid == false && rasioL > 0.96 && rasioR > 0.96) {// ปกติ //cnt++; //เปลือกตา = 0; if(LR <= 7){ for(int i=LR; i<=7; i++){ กะพริบ(0, i); ล่าช้า(40); LR = ผม; } }else { สำหรับ(int i=LR; i>=7; i--){ กะพริบ(0, i); ล่าช้า(40); LR = ผม; } } }
// ค่าเริ่มต้นรีเฟรชถ้า (cnt > 10) { iniSensorValL = sensorValL; iniSensorValR = เซ็นเซอร์ValR; cnt = 0; } }
ขั้นตอนที่ 5: การทำงาน
ตรวจจับการเคลื่อนไหวทางซ้ายและขวาและการกะพริบของรูม่านตาด้วยเซ็นเซอร์ และควบคุม LED ของลูกตา
แนะนำ:
การออกแบบเกมในการสะบัดใน 5 ขั้นตอน: 5 ขั้นตอน
การออกแบบเกมในการสะบัดใน 5 ขั้นตอน: การตวัดเป็นวิธีง่ายๆ ในการสร้างเกม โดยเฉพาะอย่างยิ่งเกมปริศนา นิยายภาพ หรือเกมผจญภัย
การตรวจจับใบหน้าบน Raspberry Pi 4B ใน 3 ขั้นตอน: 3 ขั้นตอน
การตรวจจับใบหน้าบน Raspberry Pi 4B ใน 3 ขั้นตอน: ในคำแนะนำนี้ เราจะทำการตรวจจับใบหน้าบน Raspberry Pi 4 ด้วย Shunya O/S โดยใช้ Shunyaface Library Shunyaface เป็นห้องสมุดจดจำใบหน้า/ตรวจจับใบหน้า โปรเจ็กต์นี้มีจุดมุ่งหมายเพื่อให้เกิดความเร็วในการตรวจจับและจดจำได้เร็วที่สุดด้วย
วิธีการติดตั้งปลั๊กอินใน WordPress ใน 3 ขั้นตอน: 3 ขั้นตอน
วิธีการติดตั้งปลั๊กอินใน WordPress ใน 3 ขั้นตอน: ในบทช่วยสอนนี้ ฉันจะแสดงขั้นตอนสำคัญในการติดตั้งปลั๊กอิน WordPress ให้กับเว็บไซต์ของคุณ โดยทั่วไป คุณสามารถติดตั้งปลั๊กอินได้สองวิธี วิธีแรกคือผ่าน ftp หรือผ่าน cpanel แต่ฉันจะไม่แสดงมันเพราะมันสอดคล้องกับ
การลอยแบบอะคูสติกด้วย Arduino Uno ทีละขั้นตอน (8 ขั้นตอน): 8 ขั้นตอน
การลอยแบบอะคูสติกด้วย Arduino Uno ทีละขั้นตอน (8 ขั้นตอน): ตัวแปลงสัญญาณเสียงล้ำเสียง L298N Dc ตัวเมียอะแดปเตอร์จ่ายไฟพร้อมขา DC ตัวผู้ Arduino UNOBreadboardวิธีการทำงาน: ก่อนอื่น คุณอัปโหลดรหัสไปยัง Arduino Uno (เป็นไมโครคอนโทรลเลอร์ที่ติดตั้งดิจิตอล และพอร์ตแอนะล็อกเพื่อแปลงรหัส (C++)
เครื่อง Rube Goldberg 11 ขั้นตอน: 8 ขั้นตอน
เครื่อง 11 Step Rube Goldberg: โครงการนี้เป็นเครื่อง 11 Step Rube Goldberg ซึ่งออกแบบมาเพื่อสร้างงานง่ายๆ ในรูปแบบที่ซับซ้อน งานของโครงการนี้คือการจับสบู่ก้อนหนึ่ง