Πίνακας περιεχομένων:

Παρακολούθηση κίνησης ματιών με χρήση αισθητήρα υπερύθρων: 5 βήματα
Παρακολούθηση κίνησης ματιών με χρήση αισθητήρα υπερύθρων: 5 βήματα

Βίντεο: Παρακολούθηση κίνησης ματιών με χρήση αισθητήρα υπερύθρων: 5 βήματα

Βίντεο: Παρακολούθηση κίνησης ματιών με χρήση αισθητήρα υπερύθρων: 5 βήματα
Βίντεο: 30 SCARIEST GHOST Videos of the YEAR 2024, Ιούλιος
Anonim
Παρακολούθηση κίνησης των ματιών με χρήση αισθητήρα υπερύθρων
Παρακολούθηση κίνησης των ματιών με χρήση αισθητήρα υπερύθρων

Χρησιμοποίησα έναν υπέρυθρο αισθητήρα για να αντιληφθώ τις κινήσεις των ματιών και να ελέγξω το LED.

Έφτιαξα βολβούς ματιών με LED Tape NeoPixel.

Βήμα 1: Σύνταγμα

Σύνταγμα
Σύνταγμα

Χρησιμοποίησα δύο αισθητήρες QTR - 1A για παρακολούθηση ματιών. Ανίχνευση με Arduino και έλεγχος της λυχνίας LED.

συστατικά

  • SparkFun Arduino Pro Mini 328 - 5V/16MHz
  • Πρόσθετο Adafruit LiIon/LiPoly Backpack για Pro Trinket/ItsyBitsy
  • Μπαταρία LiPo
  • Λωρίδα NeoPixel
  • Αισθητήρας ανάκλασης QTR-1A

Βήμα 2: NeoPixel LED Eye Ball

NeoPixel LED Eye Ball
NeoPixel LED Eye Ball
NeoPixel LED Eye Ball
NeoPixel LED Eye Ball

Χρησιμοποιείται ταινία LED NeoPixel. Το LED είναι 68 μονάδες.

Το LED είναι στερεωμένο στο μπολ με ταινία διπλής όψης και ενσύρματο.

Βήμα 3: Μονάδα αισθητήρα

Μονάδα αισθητήρα
Μονάδα αισθητήρα
Μονάδα αισθητήρα
Μονάδα αισθητήρα
Μονάδα αισθητήρα
Μονάδα αισθητήρα

Χρησιμοποίησα δύο αισθητήρες QTR - 1A για παρακολούθηση ματιών. Το QTR - 1A τοποθετείται σε πλαστικό φύλλο σε απόσταση περίπου του πλάτους του ματιού.

Το τμήμα του αισθητήρα και το τμήμα του μικροελεγκτή στερεώθηκαν στα γυαλιά με ένα κλιπ αντίστοιχα.

Βήμα 4: Κωδικός Arduino

Όταν η ίριδα πλησιάζει έναν αισθητήρα, το ανακλώμενο φως μειώνεται και η τιμή του αισθητήρα αυξάνεται. Αντίθετα, όταν η ίριδα απομακρύνεται, το ανακλώμενο φως αυξάνεται και η τιμή του αισθητήρα του ανακλαστήρα φωτογραφιών μειώνεται.

Η δεξιά και η αριστερή κίνηση της κόρης του βολβού των ματιών LED αισθάνεται την αύξηση και τη μείωση μιας τιμής αισθητήρα και την ελέγχει. Όταν αναβοσβήνει, και οι δύο τιμές αισθητήρα μειώνονται, οπότε εάν οι δύο τιμές αισθητήρα μειωθούν ταυτόχρονα, τα βλέφαρα του βολβού των ματιών LED θα πέσουν.

Χρησιμοποίησα την παρακάτω βιβλιοθήκη.

  • QTRsensors:
  • 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; int pupilNum = 12; uint32_t χρώμα; int φωτεινότητα = 40; byte eyeColor; int LR = 7; boolean lid = false? 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}, {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, 68}};

// μαθητής L&R animationint 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 animationint eyelid = 0; int eyelidNum [8] = {0, 4, 8, 16, 24, 34, 44, 56}; int βλέφαρο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 ((χωρίς υπογραφή char ) {0, 1}, NUM_SENSORS, NUM_SAMPLES_PER_SENSOR, EMITTER_PIN); ανυπόγραφο int sensorValues [NUM_SENSORS];

void blink (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 [βλέφαρο]; i ++) {led.setPixelColor (βλέφαροLED , 0); }} else if (βλέφαρο == 8) {led.clear (); } led.show ();}

void setup () {

Serial.begin (115200); led.begin (); led.setBrightness (φωτεινότητα); // Αρχική Φωτεινότητα 40 led.show (); // Αρχικοποίηση όλων των εικονοστοιχείων σε "off" χρώμα = 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; }} else if (rasioL 0.985) {// αριστερά για (int i = LR; i> 2; i-) {blink (0, i); καθυστέρηση (40)? LR = i; }} else 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)? καπάκι = ψευδές? }} else if (lid == false && rasioL> 0.96 && rasioR> 0.96) {// normal // cnt ++; // βλέφαρο = 0; εάν (LR <= 7) {για (int i = LR; i <= 7; i ++) {αναβοσβήνει (0, i); καθυστέρηση (40)? LR = i; }} else {for (int i = LR; i> = 7; i-) {blink (0, i); καθυστέρηση (40)? LR = i; }}}

// Ανανέωση αρχικής αξίας εάν (cnt> 10) {iniSensorValL = sensorValL; iniSensorValR = sensorValR; cnt = 0; }}

Βήμα 5: Λειτουργία

Ανιχνεύστε την αριστερή και τη δεξιά κίνηση και αναβοσβήνετε της κόρης με τον αισθητήρα και ελέγξτε τη λυχνία LED του βολβού του ματιού.

Συνιστάται: