Բովանդակություն:
- Քայլ 1: Սահմանադրություն
- Քայլ 2. NeoPixel LED աչքի գնդակ
- Քայլ 3: Սենսորային միավոր
- Քայլ 4: Arduino կոդ
- Քայլ 5: Գործողություն
Video: Աչքի շարժման հետևում ինֆրակարմիր տվիչի միջոցով `5 քայլ
2024 Հեղինակ: John Day | [email protected]. Վերջին փոփոխված: 2024-01-30 09:49
Ինֆրակարմիր սենսոր օգտագործեցի աչքերի շարժումները զգալու և LED- ն վերահսկելու համար:
Ես պատրաստել եմ ակնագնդեր LED Tape NeoPixel- ով:
Քայլ 1: Սահմանադրություն
Ես օգտագործել եմ երկու սենսոր QTR - 1A ՝ աչքերին հետևելու համար: Duգացում Arduino- ի միջոցով և LED- ի վերահսկում:
բաղադրամասեր
- SparkFun Arduino Pro Mini 328 - 5 Վ/16 ՄՀց
- Adafruit LiIon/LiPoly մեջքի պայուսակի հավելում Pro Trinket/ItsyBitsy- ի համար
- LiPo մարտկոց
- NeoPixel ժապավեն
- QTR-1A անդրադարձման ցուցիչ
Քայլ 2. NeoPixel LED աչքի գնդակ
Օգտագործվում է NeoPixel LED ժապավենը: LED- ն 68 միավոր է:
LED- ն ամրացված է ամանի վրա երկկողմանի ժապավենով և լարով:
Քայլ 3: Սենսորային միավոր
Ես օգտագործել եմ երկու սենսոր QTR - 1A ՝ աչքերին հետևելու համար: QTR - 1A- ն տեղադրված են պլաստմասե թերթիկի վրա `աչքի լայնության մոտակայքում:
Սենսորային մասը և միկրոկառավարիչի մասը համապատասխանաբար ամրացվել են ակնոցների վրա սեղմակով:
Քայլ 4: Arduino կոդ
Երբ ծիածանաթաղանթը մոտենում է մեկ սենսորին, անդրադարձվող լույսը նվազում է, և սենսորի արժեքը մեծանում է: Եվ հակառակը, երբ ծիածանաթաղանթը հեռանում է, անդրադարձվող լույսը մեծանում է, իսկ լուսանկարի անդրադարձիչի ցուցիչի արժեքը նվազում է:
LED ակնախնձորի աշակերտի աջ և ձախ շարժումները զգում են մեկ սենսորի արժեքի աճն ու նվազումը և վերահսկում այն: Թարթելիս սենսորի երկու արժեքներն էլ նվազում են, այնպես որ, եթե երկու սենսորային արժեքները միաժամանակ նվազեն, LED ակնագնդի կոպերը կիջնեն:
Ես օգտագործել եմ հետևյալ գրադարանը:
- QTR սենսորներ ՝
- Adafruit_NeoPixel:
#ներառել #ներառել
#սահմանել NUM_SENSORS 2 // օգտագործված սենսորների թիվը#սահմանել NUM_SAMPLES_PER_SENSOR 10 // միջին հաշվով#սահմանել EMITTER_PIN QTR_NO_EMITTER_PIN
int iniSensorValL, sensorValL; int iniSensorValR, sensorValR; #սահմանեք PIN A3 Adafruit_NeoPixel led = Adafruit_NeoPixel (68, PIN, NEO_GRB + NEO_KHZ800); int blackNum = 24; int pupilNum = 12; uint32_t գույն; int պայծառություն = 40; բայթ eyeColor; int LR = 7; բուլյան կափարիչ = կեղծ; 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, 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}, {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, 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, 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, 68}};
// աշակերտի L&R անիմացիա </i> աշակերտ [15] [12] = {{33, 34, 68, 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, 68}, {22, 45, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68}};
// Թարթել անիմացիա </b> կոպ = 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 ((անստորագիր նշան ) {0, 1}, NUM_SENSORS, NUM_SAMPLES_PER_SENSOR, EMITTER_PIN); անստորագիր int sensorValues [NUM_SENSORS];
դատարկ թարթում (int eyelid, int LR) {if (eyelid! = 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) (սևLED [LR] , գույն);}
// աշակերտի համար (uint16_t i = 0; i
led.setPixelColor (աշակերտ LED (LR) , led. Color (0, 0, 66)); }
// կոպ (int i = 0; i <eyelidNum [eyelid]; i ++) {led.setPixelColor (eyelidLED , 0); }} else if (կոպ == 8) {led.clear (); } led.show ();}
void setup () {
Serial.begin (115200); led.begin (); led.setBrightness (պայծառություն); // Սկզբնական պայծառություն 40 led.show (); // Նախաձեռնել բոլոր պիքսելները «անջատ» գույնի = led. Color (0, 177, 55); // աշակերտի գույնի ուշացում (100); qtra.read (sensorValues); iniSensorValL = sensorValues [0]; iniSensorValR = sensorValues [1]; թարթել (կոպ, LR); }
void loop () {// QTR - 1A տվիչի արժեքը qtra.read (sensorValues); sensorValL = sensorValues [0]; sensorValR = sensorValues [1];
կրկնակի rasioL = (կրկնակի) sensorValL / iniSensorValL;
կրկնակի rasioR = (կրկնակի) sensorValR / iniSensorValR;
Serial.print (rasioL);
Serial.print (""); Serial.println (rasioR);
if (rasioL> 0.985 && rasioR <0.985) {// ճիշտ է (int i = LR; i <12; i ++) {թարթել (0, i); ուշացում (40); LR = i; }} այլ դեպքում, եթե (rasioL 0.985) {// մնացել է (int i = LR; i> 2; i-) {թարթել (0, i); ուշացում (40); LR = i; }} else if (lid == false && rasioL <0.96 && rasioR <0.96) {// Blinking close for (int i = 1; i 0.96 && rasioR> 0.96) {// Blinking open for (int i = 8; i > 0; i-) {թարթել (i, LR); ուշացում (40); կափարիչ = կեղծ; }} այլ դեպքում (lid == false && rasioL> 0.96 && rasioR> 0.96) {// նորմալ // cnt ++; // կոպ = 0; եթե (LR <= 7) {համար (int i = LR; i <= 7; i ++) {թարթել (0, i); ուշացում (40); LR = i; }} else {for (int i = LR; i> = 7; i-) {թարթել (0, i); ուշացում (40); LR = i; }}}
// Սկզբնական արժեքի թարմացում, եթե (cnt> 10) {iniSensorValL = sensorValL; iniSensorValR = sensorValR; cnt = 0; }}
Քայլ 5: Գործողություն
Հայտնաբերեք ձախ և աջ շարժումները և թարթեք աշակերտը սենսորով և վերահսկեք ակնախնձորի LED- ը:
Խորհուրդ ենք տալիս:
Շարժման հետևում MPU-6000- ի և մասնիկի ֆոտոնի միջոցով `4 քայլ
Շարժման հետևում MPU-6000- ի և մասնիկի ֆոտոնի միջոցով. MPU-6000- ը 6 առանցքի շարժման հետևման ցուցիչ է, որն ունի 3 առանցքի արագացուցիչ և 3 առանցքի գիրոսկոպ: Այս սենսորն ունակ է արդյունավետ կերպով հետևել օբյեկտի ճշգրիտ դիրքին և գտնվելու վայրը եռաչափ հարթությունում: Այն կարող է օգտագործվել
Մարդու աչքի շարժման հետևում. 6 քայլ
Մարդու աչքի շարժման հետևում. Այս նախագիծը նպատակ ունի գրավել մարդու աչքի շարժումը և ցուցադրում է նրա շարժումը մի շարք LED լույսերի վրա, որոնք տեղադրված են աչքի տեսքով: Այս տիպի նախագիծը կարող է պոտենցիալ շատ կիրառություններ ունենալ ռոբոտաշինության և հատկապես հումայի ոլորտում
Շարժման հետևում MPU-6000- ի և Arduino Nano- ի միջոցով. 4 քայլ
Շարժման հետևում MPU-6000- ի և Arduino Nano- ի միջոցով. MPU-6000- ը 6 առանցքի շարժման հետևման ցուցիչ է, որն ունի 3 առանցքի արագացուցիչ և 3 առանցքի գիրոսկոպ: Այս սենսորն ունակ է արդյունավետ կերպով հետևել օբյեկտի ճշգրիտ դիրքին և գտնվելու վայրը եռաչափ հարթությունում: Այն կարող է օգտագործվել
Շարժման հետևում MPU-6000- ի և Raspberry Pi- ի միջոցով. 4 քայլ
MPU-6000 և Raspberry Pi- ի միջոցով շարժման հետևում. MPU-6000- ը 6 առանցքի շարժման հետևման սենսոր է, որն ունի 3 առանցքի արագացուցիչ և 3 առանցքի գիրոսկոպ: Այս սենսորն ունակ է արդյունավետ կերպով հետևել օբյեկտի ճշգրիտ դիրքին և գտնվելու վայրը եռաչափ հարթությունում: Այն կարող է օգտագործվել
Raspberry Pi- ի և MMA7455- ի միջոցով արագացման տատանումների հետևում Python- ի միջոցով. 6 քայլ
Raspberry Pi- ի և MMA7455- ի միջոցով արագացման տատանումներին հետևելը ՝ օգտագործելով Python- ը. Այն դեռ աշխատում է… Արագացնող տիեզերանավի ներկայացուցչությունը պարզաբանեց, որ մաքոքային ամենաբարձր կետում գտնվող ժամացույցը ավելի արագ կընտրի, քան բազայում `գրավիտացիոն ժամանակի ընդլայնման պատճառով: Մի քանի