Përmbajtje:

Ndjekja e lëvizjes së syve duke përdorur sensorin infra të kuqe: 5 hapa
Ndjekja e lëvizjes së syve duke përdorur sensorin infra të kuqe: 5 hapa

Video: Ndjekja e lëvizjes së syve duke përdorur sensorin infra të kuqe: 5 hapa

Video: Ndjekja e lëvizjes së syve duke përdorur sensorin infra të kuqe: 5 hapa
Video: Да я ж нажимал! Дважды. Генетиро Асина ► 5 Прохождение Sekiro: Shadows Die Twice 2024, Nëntor
Anonim
Ndjekja e lëvizjes së syve duke përdorur sensorin infra të kuqe
Ndjekja e lëvizjes së syve duke përdorur sensorin infra të kuqe

Kam përdorur një sensor infra të kuqe për të ndjerë lëvizjet e syve dhe për të kontrolluar LED.

Bëra sytë me LED Tape NeoPixel.

Hapi 1: Kushtetuta

Kushtetuta
Kushtetuta

Kam përdorur dy sensorë QTR - 1A për gjurmimin e syve. Ndjenja me Arduino dhe kontrolli i LED.

përbërësit

  • SparkFun Arduino Pro Mini 328 - 5V/16MHz
  • Shtesë Adafruit LiIon/LiPoly Backpack për Pro Trinket/ItsyBitsy
  • Bateria LiPo
  • Rrip NeoPixel
  • Sensori i reflektimit QTR-1A

Hapi 2: Topi i syve NeoPixel LED

Top i syrit NeoPixel LED
Top i syrit NeoPixel LED
Topi i syve NeoPixel LED
Topi i syve NeoPixel LED

Përdoret kaseta LED NeoPixel. LED është 68 njësi.

LED është e fiksuar në tas me kasetë të dyanshme dhe me tela.

Hapi 3: Njësia e sensorit

Njësia e sensorit
Njësia e sensorit
Njësia e sensorit
Njësia e sensorit
Njësia e sensorit
Njësia e sensorit

Kam përdorur dy sensorë QTR - 1A për gjurmimin e syve. QTR - 1A vendosen në një fletë plastike në një distancë prej rreth gjerësisë së syrit.

Pjesa e sensorit dhe pjesa e mikrokontrolluesit u fiksuan në syzet përkatësisht me një kapëse.

Hapi 4: Kodi Arduino

Kur irisi i afrohet një sensori, drita e reflektuar zvogëlohet dhe vlera e sensorit rritet. Anasjelltas, kur irisi largohet, drita e reflektuar rritet dhe vlera e sensorit të reflektorit të fotografisë zvogëlohet.

Lëvizja e djathtë dhe e majtë e bebës së syrit LED ndien rritjen dhe uljen e një vlere të sensorit dhe e kontrollon atë. Kur vezullon, të dy vlerat e sensorit zvogëlohen, kështu që nëse të dy vlerat e sensorit zvogëlohen njëkohësisht, qepallat e syrit LED do të ulen.

Kam përdorur bibliotekën e mëposhtme.

  • QTRsensors:
  • Adafruit_NeoPixel:

#përfshi #përfshi

#përcakto NUM_SENSORS 2 // numri i sensorëve të përdorur#përcakto NUM_SAMPLES_PER_SENSOR 10 // mesatarisht#përcakto EMITTER_PIN QTR_NO_EMITTER_PIN

int iniSensorValL, sensorValL; int iniSensorValR, sensorValR; #përcaktoni PIN A3 Adafruit_NeoPixel led = Adafruit_NeoPixel (68, PIN, NEO_GRB + NEO_KHZ800); int blackNum = 24; int pupilNum = 12; ngjyra uint32_t; int shkëlqim = 40; byte eyeColor; int LR = 7; kapak boolean = i rremë; int cnt = 0;

// Animacioni L & R i syrit të zi është i ziLED [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}, {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}};

// animacioni i nxënësit L&R për nxënësLED [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},} {22, 45, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68}};

// Blink animacionin qepallë = 0; int qepallëNum [8] = {0, 4, 8, 16, 24, 34, 44, 56}; qepallë int [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}; QTRSensorë Qtra analoge ((shenja pa shenjë ) {0, 1}, NUM_SENSORS, NUM_SAMPLES_PER_SENSOR, EMITTER_PIN); sensori int i pa firmosur Vlerat [NUM_SENSORS];

mbyllje e pavlefshme (qepallë int, int LR) {nëse (qepallë! = 8) {// Kallamar për (uint16_t i = 0; i <led.numPixels (); i ++) {led.setPixelColor (i, led. Color (66, 66, 66)); }

// Syri i zi për (uint16_t i = 0; i led.setPixelColor (e zezëLED [LR] , ngjyra);}

// nxënës për (uint16_t i = 0; i

led.setPixelColor (pupilLED [LR] , led. Color (0, 0, 66)); }

// qepallë për (int i = 0; i <qepallëNum [qepallë]; i ++) {led.setPixelColor (qepallëLED , 0); }} tjetër nëse (qepallë == 8) {led.clear (); } led.show ();}

void setup () {

Serial.fillo (115200); led.filloj (); led.setBrightness (shkëlqim); // Ndriçimi fillestar 40 led.show (); // Filloni të gjitha pikselët në "off" color = led. Color (0, 177, 55); // vonesa e ngjyrës së nxënësit (100); qtra.read (sensorVlerat); iniSensorValL = vlerat e sensorit [0]; iniSensorValR = vlerat e sensorit [1]; mbyll sytë (qepallë, LR); }

lak void () {// QTR - 1A vlera e sensorit qtra.read (sensorValues); sensorValL = sensorVlerat [0]; sensorValR = sensorVlerat [1];

rasioL dyfishtë = (dyfish) sensorValL / iniSensorValL;

rasioR dyfishtë = (dyfish) sensorValR / iniSensorValR;

Serial.print (rasioL);

Serial.print (""); Serial.println (rasioR);

if (rasioL> 0.985 && rasioR <0.985) {// e drejtë për (int i = LR; i <12; i ++) {blink (0, i); vonesa (40); LR = i; }} tjetër nëse (rasioL 0.985) {// majtas për (int i = LR; i> 2; i-) {blink (0, i); vonesa (40); LR = i; }} tjetër nëse (lid == false && rasioL <0.96 && rasioR <0.96) {// Mbyllje mbyllëse për (int i = 1; i 0.96 && rasioR> 0.96) {// Pulsim i hapur për (int i = 8; i > 0; i-) {vezullim (i, LR); vonesa (40); kapak = i rremë; }} tjetër nëse (lid == false && rasioL> 0.96 && rasioR> 0.96) {// normale // cnt ++; // qepallë = 0; nëse (LR <= 7) {për (int i = LR; i <= 7; i ++) {blink (0, i); vonesa (40); LR = i; }} tjetër {për (int i = LR; i> = 7; i-) {blink (0, i); vonesa (40); LR = i; }}}

// Rifresko vlerën fillestare nëse (cnt> 10) {iniSensorValL = sensorValL; iniSensorValR = sensorValR; cnt = 0; }}

Hapi 5: Funksionimi

Zbuloni lëvizjen majtas dhe djathtas dhe mbyllni syrin me sensorin dhe kontrolloni LED -in e syrit.

Recommended: