Turinys:
- 1 žingsnis: Konstitucija
- 2 žingsnis: „NeoPixel“LED akių kamuoliukas
- 3 žingsnis: jutiklio blokas
- 4 žingsnis: „Arduino“kodas
- 5 žingsnis: veikimas
Video: Akių judesio sekimas naudojant infraraudonųjų spindulių jutiklį: 5 žingsniai
2024 Autorius: John Day | [email protected]. Paskutinį kartą keistas: 2024-01-30 10:47
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ą.
Rekomenduojamas:
Mažų parduotuvių sekimas ir sekimas: 9 žingsniai (su paveikslėliais)
Stebėti ir sekti mažose parduotuvėse: tai sistema, skirta mažoms parduotuvėms, kuri turėtų būti montuojama ant el. Ką reiškia „Track and Trace“? Stebėjimas ir sekimas yra sistema, kurią naudoja ca
Infraraudonųjų spindulių namų automatizavimas naudojant „Arduino“: 5 žingsniai
Infraraudonųjų spindulių namų automatizavimas naudojant „Arduino“: ARDUINO HOME AUTOMATION Namų automatizavimas paprasčiausiai reiškia, kad tai, ką įprastai darote rankiniu būdu, reikia atlikti automatiškai. Paprastai atsistosite, kad apsuktumėte jungiklį, o kas būtų, jei galėtumėte tiesiog paspausti nuotolinio valdymo pultą ir jūsų lemputė automatiškai užsidegtų
Arduino pagrindu veikiantis bekontaktis infraraudonųjų spindulių termometras - IR termometras naudojant „Arduino“: 4 žingsniai
„Arduino“nekontaktinis infraraudonųjų spindulių termometras | Infraraudonųjų spindulių termometras naudojant „Arduino“: Sveiki vaikinai, šioje instrukcijoje mes pagaminsime bekontaktį termometrą naudodami arduino. Kadangi kartais skysčio/kietos medžiagos temperatūra yra per aukšta arba per žema, tada sunku su juo susisiekti ir perskaityti Temperatūra tada tokioje aplinkoje
Infraraudonųjų spindulių nuotolinio valdymo pulto testeris naudojant TSOP4838: 5 žingsniai
Infraraudonųjų spindulių nuotolinio valdymo pulto testeris naudojant TSOP4838: Štai kaip sukurti paprastą nuotolinio valdymo pulto testavimo grandinę. Tiesiog atlikite toliau nurodytus veiksmus ir užtruksite mažiau nei 5 minutes. Jei tai veikia, palikite like ant mūsų vaizdo įrašo ir praneškite mums komentaruose
M5Stack IR terminė kamera naudojant AMG8833 infraraudonųjų spindulių matavimo jutiklį: 3 žingsniai
„M5Stack“infraraudonųjų spindulių fotoaparatas naudojant AMG8833 infraraudonųjų spindulių vaizdo jutiklį: kaip ir daugelis, aš žavėjausi šiluminėmis kameromis, tačiau jos visada buvo ne mano kainų diapazone - iki šiol! Naršydamas „Hackaday“svetainėje, aptikau šią fotoaparato konstrukciją naudojant „M5Stack“ESP32 modulis ir palyginti nebrangus