Oogbeweging volgen met infraroodsensor
Componenten en benodigdheden
| × | 1 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 1 |
Apps en online services
|
Over dit project
Ik heb een infraroodsensor gebruikt om oogbewegingen te detecteren en de LED te bedienen.
NeoPixel LED-oogbal
NeoPixel LED-tape wordt gebruikt. LED is 68 eenheden.
LED wordt met dubbelzijdig plakband op de schaal bevestigd en in de volgende volgorde bedraad.
Oogbewegingen volgen
Schema's
Sensor
Ik heb twee sensoren QTR - 1A gebruikt voor eye-tracking. QTR - 1A worden op een plastic vel geplaatst op een afstand van ongeveer de breedte van het oog.
Het sensorgedeelte en het microcontrollergedeelte werden respectievelijk met een clip aan de bril bevestigd.
Arduino-code
Wanneer de iris één sensor nadert, neemt het gereflecteerde licht af en neemt de sensorwaarde toe. Omgekeerd, wanneer de iris weg beweegt, neemt het gereflecteerde licht toe en neemt de sensorwaarde van de fotoreflector af.
De rechter- en linkerbeweging van de pupil van de LED-oogbol detecteert de toename en afname van één sensorwaarde en regelt deze.
Bij het knipperen nemen beide sensorwaarden af, dus als de twee sensorwaardes gelijktijdig afnemen, gaan de oogleden van de LED-oogbol naar beneden.
#include #include #define NUM_SENSORS 2 // aantal gebruikte sensoren#define NUM_SAMPLES_PER_SENSOR 10 // gemiddelden#define EMITTER_PIN QTR_NO_EMITTER_PIN intL,iSensorLal;;#define PIN A3Adafruit_NeoPixel led =Adafruit_NeoPixel(68, PIN, NEO_GRB + NEO_KHZ800);int blackNum =24;int pupilNum =12;uint32_t color;int helderheid =40;byte eyeColor;int LR =7;boolean lid =false;int cnt =0;//Black eye L&R animatieint 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}};//pupil L&R animatieint pupilLED[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}};//Blink animatieint ooglid =0;int ooglidNum[8] ={0, 4,8,16,24,34,44,56};int ooglidLED[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};QTRSensorsAnaloge qtra((unsigned char[]) {0, 1}, NUM_SENSORS, NUM_SAMPLES_PER_SENSOR, EMITTER_PIN); niet-ondertekende int sensorValues [NUM_SENSORS]; ongeldig knipperen (int ooglid, int LR) {if (ooglid! =8) { // Pewter voor (uint16_t i=0; i 0.985 &&rasioR <0.985){ //right for(int i =LR; i <12; i++){ blink(0, i); vertraging (40); LR =ik; } }else if(rasioL <0.985 &&rasioR> 0.985){ // left for (int i=LR; i>2; i--){ blink(0, i); vertraging (40); LR =ik; } }else if(lid ==false &&rasioL <0.96 &&rasioR <0.96) { // Knipperend dichtbij voor (int i =1; i <9; i++) { blink(i, LR); vertraging (40); deksel =waar; } }else if(lid ==true &&rasioL> 0.96 &&rasioR> 0.96){ // Knippert open voor (int i =8; i> 0; i--){ blink(i, LR); vertraging (40); deksel =vals; } }else if(lid ==false &&rasioL> 0.96 &&rasioR> 0.96) { //normal //cnt++; // ooglid =0; if(LR <=7){ for(int i=LR; i<=7; i++){ blink(0, i); vertraging (40); LR =ik; } }else { for(int i=LR; i>=7; i--){ blink(0, i); vertraging (40); LR =ik; } } Serial.println("通常時"); } //Initiële waarde vernieuwen als (cnt> 10) { iniSensorValL =sensorValL; iniSensorValR =sensorValR; cnt =0; }}
Bediening
Productieproces
- Wat heeft ons ertoe gebracht om natuurlijke materialen te gebruiken in productontwerp?
- Pulslichtsensor
- TMP006 Temperature Sensor Python Library met Raspberry pi,
- Python- en Raspberry Pi-temperatuursensor
- Lijnvolgsensor met RPi
- Bewegingssensor, alarm, video-opname in HA op Raspberry Pi
- DIY infrarood bewegingssensorsysteem voor Raspberry Pi
- Bewegingssensor met Raspberry Pi
- Leap Motion lasertanks!
- DIY infrarood hartslagsensor met Arduino
- Temperatuurmetingen met infraroodsensor