Оглавление:
- Шаг 1: Конституция
- Шаг 2: шар для глаз со светодиодной подсветкой NeoPixel
- Шаг 3: сенсорный блок
- Шаг 4: Код Arduino
- Шаг 5: Эксплуатация
Видео: Отслеживание движения глаз с помощью инфракрасного датчика: 5 шагов
2024 Автор: John Day | [email protected]. Последнее изменение: 2024-01-30 11:52
Я использовал инфракрасный датчик, чтобы определять движения глаз и управлять светодиодом.
Я сделал завязку на LED Tape NeoPixel.
Шаг 1: Конституция
Я использовал два датчика QTR - 1A для отслеживания взгляда. Обнаружение с помощью Arduino и управление светодиодом.
компоненты
- SparkFun Arduino Pro Mini 328 - 5 В / 16 МГц
- Надстройка Adafruit LiIon / LiPoly Backpack для Pro Trinket / ItsyBitsy
- LiPo аккумулятор
- Полоса NeoPixel
- Датчик отражения QTR-1A
Шаг 2: шар для глаз со светодиодной подсветкой NeoPixel
Используется светодиодная лента NeoPixel. Светодиод 68 шт.
Светодиод крепится к чаше с помощью двустороннего скотча и зашивается проводом.
Шаг 3: сенсорный блок
Я использовал два датчика QTR - 1A для отслеживания взгляда. QTR-1A размещаются на пластиковом листе на расстоянии примерно ширины глаза.
Сенсорная часть и микроконтроллерная часть крепились к очкам с помощью зажима соответственно.
Шаг 4: Код Arduino
Когда диафрагма приближается к одному датчику, отраженный свет уменьшается, а значение датчика увеличивается. И наоборот, когда диафрагма удаляется, отраженный свет увеличивается, а значение датчика фотоотражателя уменьшается.
Движение зрачка светодиодного глазного яблока вправо и влево определяет увеличение и уменьшение одного значения датчика и контролирует его. При мигании значения обоих датчиков уменьшаются, поэтому, если значения двух датчиков уменьшаются одновременно, веки светодиодного глазного яблока опускаются.
Я использовал следующую библиотеку.
- QTRsensors:
- Adafruit_NeoPixel:
#include #include
#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 color; int яркость = 40; byte eyeColor; int LR = 7; логическая крышка = ложь; int cnt = 0;
// Анимация черного глаза слева и справаint 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}};
// анимация ученика L&Rint 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}};
// Анимация морганияint eyelid = 0; int eyelidNum [8] = {0, 4, 8, 16, 24, 34, 44, 56}; int eyelidLED [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 ((символ без знака ) {0, 1}, NUM_SENSORS, NUM_SAMPLES_PER_SENSOR, EMITTER_PIN); unsigned 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 (blackLED [LR] , color);}
// ученик для (uint16_t i = 0; i
led.setPixelColor (ученикLED [LR] , led. Color (0, 0, 66)); }
// веко для (int i = 0; i <eyelidNum [eyelid]; i ++) {led.setPixelColor (eyelidLED , 0); }} иначе, если (веко == 8) {led.clear (); } led.show ();}
void setup () {
Serial.begin (115200); led.begin (); led.setBrightness (яркость); // Начальная яркость 40 led.show (); // Инициализируем все пиксели на «выключено» color = led. Color (0, 177, 55); // задержка цвета зрачка (100); qtra.read (sensorValues); iniSensorValL = sensorValues [0]; iniSensorValR = sensorValues [1]; мигание (веко, ЛП); }
void loop () {// QTR - значение датчика 1A qtra.read (sensorValues); sensorValL = sensorValues [0]; sensorValR = sensorValues [1];
double rasioL = (двойной) sensorValL / iniSensorValL;
double rasioR = (двойной) sensorValR / iniSensorValR;
Serial.print (rasioL);
Serial.print (""); Serial.println (rasioR);
if (rasioL> 0.985 && rasioR <0.985) {// правильно для (int i = LR; i <12; i ++) {blink (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; я -) {мигание (я, LR); задержка (40); крышка = ложь; }} else if (lid == false && rasioL> 0.96 && rasioR> 0.96) {// нормально // cnt ++; // веко = 0; если (LR <= 7) {для (int я = LR; я <= 7; я ++) {blink (0, я); задержка (40); LR = i; }} else {для (int я = LR; я> = 7; я -) {blink (0, я); задержка (40); LR = i; }}}
// Обновление начального значения if (cnt> 10) {iniSensorValL = sensorValL; iniSensorValR = sensorValR; cnt = 0; }}
Шаг 5: Эксплуатация
Обнаруживайте движение влево и вправо и мигание зрачка с помощью датчика и управляйте светодиодным индикатором глазного яблока.
Рекомендуемые:
Отслеживание движения человеческого глаза: 6 шагов
Отслеживание движения человеческого глаза: этот проект нацелен на захват движения человеческого глаза и отображает его движение с помощью набора светодиодных ламп, которые расположены в форме глаза. Этот тип проекта потенциально может иметь множество применений в области робототехники и, в частности, хума
Использование инфракрасного датчика с Arduino: 8 шагов (с изображениями)
Использование инфракрасного датчика с Arduino: что такое инфракрасный (он же ИК) датчик? ИК-датчик - это электронный прибор, который сканирует ИК-сигналы в определенных диапазонах частот, определенных стандартами, и преобразует их в электрические сигналы на своем выходном контакте (обычно называемом сигнальным контактом) . ИК-сигнал
QeMotion - отслеживание движения для любой гарнитуры !: 5 шагов (с изображениями)
QeMotion - отслеживание движения для каждой гарнитуры !: Обзор: это устройство позволяет использовать движение головы для запуска событий практически в любой видеоигре. Он работает, отслеживая движение вашей головы (или гарнитуры в этом отношении) и нажимая на клавиатуру для определенных движений. Итак, ваш комп
Автоматизация освещения с помощью датчика движения MESH: 3 шага (с изображениями)
Автоматизируйте свет с помощью датчика движения MESH: вы часто забываете выключить свет? Всегда можно забыть выключить свет, выходя из дома или комнаты, но с датчиком движения MESH мы решили эту проблему, используя функции обнаружения и необнаружения, которые помогут вам легко
Выходное отверстие с контролем движения - от датчика движения: 6 шагов
Выходное отверстие с контролем движения - от источника света с датчиком движения: Представьте, что вы обманщик, идущий в самый страшный дом в квартале. Пройдя мимо всех гулей, привидений и кладбищ, вы наконец доберетесь до последнего пути. Вы видите перед собой конфету в миске! Но тут вдруг гхо