Turinys:
2025 Autorius: John Day | [email protected]. Paskutinį kartą keistas: 2025-01-13 06:57
Naudojau infraraudonųjų spindulių jutiklį, kad pajustų akių judesius ir valdytų šviesos diodą.
Akių obuolius dariau su LED Tape NeoPixel.
1 žingsnis: Konstitucija
Akių sekimui naudojau du jutiklius QTR - 1A. Jutimas naudojant „Arduino“ir šviesos diodo valdymas.
komponentai
- „SparkFun Arduino Pro Mini 328“- 5 V/16 MHz
- „Adafruit LiIon“/„LiPoly“kuprinės priedas „Pro Trinket“/„ItsyBitsy“
- LiPo baterija
- NeoPixel juostelė
- QTR-1A atspindžio jutiklis
2 žingsnis: „NeoPixel“LED akių kamuoliukas
Naudojama „NeoPixel“LED juosta. LED yra 68 vienetai.
Šviesos diodas yra pritvirtintas prie dubenėlio dvipuse juosta ir prijungtas.
3 žingsnis: jutiklio blokas
Akių stebėjimui naudojau du jutiklius QTR - 1A. QTR - 1A dedami ant plastikinio lakšto maždaug akies pločio atstumu.
Jutiklio dalis ir mikrovaldiklio dalis atitinkamai buvo pritvirtinti prie akinių su spaustuku.
4 žingsnis: „Arduino“kodas
Kai rainelė artėja prie vieno jutiklio, atspindėta šviesa mažėja, o jutiklio vertė didėja. Priešingai, kai rainelė nutolsta, atspindėta šviesa didėja, o foto atšvaito jutiklio vertė mažėja.
Dešinysis ir kairysis LED akies obuolio vyzdžio judesiai pajunta vieno jutiklio vertės padidėjimą ir sumažėjimą ir jį valdo. Mirksint, abi jutiklio vertės sumažėja, taigi, jei abi jutiklio vertės sumažės vienu metu, LED akies obuolio vokai nusileis.
Aš naudoju šią biblioteką.
- QTRsensors:
- „Adafruit_NeoPixel“:
#įtraukti #įtraukti
#define NUM_SENSORS 2 // naudojamų jutiklių skaičius#apibrėžti NUM_SAMPLES_PER_SENSOR 10 // vidurkis#apibrėžti 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 juodasNum = 24; int mokinysNum = 12; uint32_t spalva; int ryškumas = 40; baitų akių spalva; int LR = 7; loginis dangtis = klaidingas; int cnt = 0;
// Juodų akių L&R animacija 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, 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, 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}};
// mokinio L&R animacija, 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}};
// Mirksinti animacijavoko vokas = 0; int eyelidNum [8] = {0, 4, 8, 16, 24, 34, 44, 56}; int eyedidLED [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“((nepasirašytas simbolis ) {0, 1}, NUM_SENSORS, NUM_SAMPLES_PER_SENSOR, EMITTER_PIN); unsigned int sensorValues [NUM_SENSORS];
void mirksėti (int vokas, int LR) {if (voko! = 8) {// Alavas (uint16_t i = 0; i <led.numPixels (); i ++) {led.setPixelColor (i, led. Color (66, 66, 66)); }
// Juoda akis (uint16_t i = 0; i led.setPixelColor (juodaLED [LR] , spalva);}
// mokinys (uint16_t i = 0; i
led.setPixelColor (mokinysLED [LR] , led. Color (0, 0, 66)); }
// eyelid for (int i = 0; i <eyelidNum [eyelid]; i ++) {led.setPixelColor (eyelidLED , 0); }} else if (vokas == 8) {led.clear (); } led.show ();}
void setup () {
Serial.begin (115200); led.begin (); led.setBrightness (ryškumas); // Pradinis ryškumas 40 led.show (); // Inicijuokite visus taškus į „off“color = led. Color (0, 177, 55); // mokinio spalvos uždelsimas (100); qtra.read (sensorValues); iniSensorValL = sensorValues [0]; iniSensorValR = sensorValues [1]; mirksėjimas (vokas, LR); }
void loop () {// QTR - 1A jutiklio reikšmė qtra.read (sensorValues); sensorValL = sensorValues [0]; sensorValR = sensorValues [1];
dvigubas rasioL = (dvigubas) sensorValL / iniSensorValL;
dvigubas rasioR = (dvigubas) sensorValR / iniSensorValR;
Serial.print (rasioL);
Serial.print (""); Serial.println (rasioR);
if (rasioL> 0,985 && rasioR <0,985) {// tinka (int i = LR; i <12; i ++) {mirksėti (0, i); vėlavimas (40); LR = i; }} else if (rasioL 0.985) {// kairė (int i = LR; i> 2; i-) {mirksėti (0, i); vėlavimas (40); LR = i; }} else if (dangtis == klaidingas && rasioL <0,96 && rasioR <0,96) {// Mirksi arti (int i = 1; i 0,96 && rasioR> 0,96) {// Mirksi atvirai (int i = 8; i > 0; i-) {mirksi (i, LR); vėlavimas (40); dangtis = klaidingas; }} else if (lid == false && rasioL> 0.96 && rasioR> 0.96) {// normal // cnt ++; // akies vokas = 0; if (LR <= 7) {for (int i = LR; i <= 7; i ++) {mirksėti (0, i); vėlavimas (40); LR = i; }} else {for (int i = LR; i> = 7; i-) {mirksėti (0, i); vėlavimas (40); LR = i; }}}
// Pradinės vertės atnaujinimas, jei (cnt> 10) {iniSensorValL = sensorValL; iniSensorValR = sensorValR; cnt = 0; }}
5 žingsnis: veikimas
Su jutikliu nustatykite vyzdžio kairės ir dešinės pusės judesius ir mirksėjimą, taip pat valdykite akies obuolio šviesos diodą.