FlickMote
Компоненты и расходные материалы
| × | 1 | ||||
| × | 1 | ||||
![]() |
| × | 1 | |||
![]() |
| × | 1 |
Приложения и онлайн-сервисы
![]() |
|
Об этом проекте

ВВЕДЕНИЕ
Теперь повсеместно стало управлять бытовой техникой и электронными устройствами с помощью инфракрасного пульта дистанционного управления. Но та же самая задача управления может быть выполнена легче. Первичным мотивом создания новой системы дистанционного управления жестами руки является устранение необходимости заглядывать в ручной пульт и искать конкретную клавишу для определенной функции, в основном для более старых. В этом проекте представлена новая система управления бытовой техникой с помощью жестов руки в качестве устройства дистанционного управления. В этом отчете проект будет называться flickremote. Он использует ультразвуковой дальномер для определения жестов пользователя и выводит ИК-сигнал, плата разработчика микроконтроллера Arduino 101
АППАРАТНЫЕ КОМПОНЕНТЫ
1. Arduino 101 или uno
2. Ультразвуковой модуль HC-SR04
3. Инфракрасный светодиод
4. Подходящий резистор для инфракрасного светодиода (220R)
5. Светодиод RGB
6. Макет и провода
КАК ЭТО РАБОТАЕТ:
В этом проекте используется ультразвуковой дальномер для определения жестов пользователя и вывод ИК-сигнала на телевизор по заданной команде. Расстояние или дюймы можно редактировать в коде, который соответствует вашему усмотрению
- Смахивание вверх (> 10 дюймов) =канал вверх
- Смахивание вниз =канал вниз
- Высокая задержка (> 10 дюймов) =увеличение громкости
- Низкое удержание =уменьшение громкости
- Датчик крышки (<3 дюйма) =Вкл. / Выкл.
Принципиальная схема с использованием фритзинга:
СТРОИТЕЛЬСТВО:
1. Подключите ИК-светодиод к контакту 3 через соответствующий резистор, а затем подключите катод к GND.
2. Подключите ультразвуковой датчик к 5 В и GND, где указаны контакты. Подключите контакт триггера к контакту 8, а контакт эхо - к 7. Вы можете настроить эти контакты в программе
3. Подключите светодиод RGB к GND и контактам 11 (красный), 10 (зеленый), 9 (синий). Эти контакты также можно настраивать.

КОНТРОЛЬ
Мощность
Если провести по датчику на расстояние не более 3 дюймов, светодиодный индикатор начнет мигать фиолетовым цветом. Это подтверждение того, что сигнал «включить / выключить» готов к отправке. Чтобы предотвратить случайное выключение телевизора, я заставил эскиз ждать второго смахивания в течение 5 секунд после первого для подтверждения. В этот момент на телевизор отправляется сигнал для включения или выключения.
Канал
Проведение в пределах 10 дюймов от датчика (но не в пределах 3) приведет к переключению канала вниз. Перемещение между 10 и 20 дюймами приведет к переключению канала вверх.
Объем
Если держать руку на расстоянии 10 дюймов от датчика (но не ближе 3), громкость снизится. Удерживание от 10 до 20 дюймов приведет к увеличению громкости. Громкость будет продолжать изменяться (увеличиваться или уменьшаться), пока ваша рука не будет убрана
ПРЕИМУЩЕСТВА И УЛУЧШЕНИЯ:
Устранит необходимость заглядывать в портативный пульт и искать определенную клавишу для определенной функции
Решение для управления гаджетом (телевизором) для слепых и инвалидов
Проект можно улучшить, добавив больше функций для управления всей бытовой техникой одним и тем же методом
СПАСИБО

Код
- Код
Код C / C ++
/ * Дистанционное управление смахиванием В этом скетче используется ультразвуковой дальномер для определения жестов пользователя и вывод ИК-сигнала на телевизор sony в соответствии с заданной командой. Высокая задержка (> 10 дюймов) =Увеличение громкости - Низкая задержка =Уменьшение громкости - Датчик прикрытия (<3 дюйма) =Включение / выключение Создано Vignesh Jaishankar Этот код использует библиотеку IRremote (https://github.com/shirriff/Arduino-IRremote) * / # include// Определяет для функций управления #define CONTROL_CH 1 // Изменение канала #define CONTROL_VOL 2 // Volume #define CONTROL_POW 3 // Power #define CONTROL_UP 1 #define CONTROL_DOWN -1 # define DIST_MAX 20 // Максимальное расстояние в дюймах, все выше игнорируется. # Define DIST_DOWN 10 // Порог для команд вверх / вниз. Если выше, команда «вверх». Если ниже, то «вниз». # Define DIST_POW 3 // Порог для команды питания, ниже чем =включение / выключение питания // IR PINconst int irPin =3; // это определено в библиотеке, эта переменная просто напоминание. ИЗМЕНЕНИЕ ЭТОГО ПИН-кода в БИБЛИОТЕКЕ НЕ ИЗМЕНЯЕТСЯ // 2 Pin Ping Sensorconst int pingPin =8; const int echoPin =7; // Светодиод подтверждения Pinsconst int led =13; // внутренний светодиод для отладки вверх / вниз const int ledR =11; const int ledG =10; const int ledB =9; // светодиод включен таймер unsigned long timer; // объект ИК-передатчика IRsend irsend; // флаг подтверждения питания (требуется два пролистывания для отправки сигнала) boolean powerConfirmed =false; void setup () {// инициализируем последовательную связь и устанавливаем контакты Serial.begin (9600); pinMode (светодиод, ВЫХОД); pinMode (ledR, ВЫХОД); pinMode (ledG, ВЫХОД); pinMode (ledB, ВЫХОД); pinMode (pingPin, ВЫХОД); pinMode (echoPin, ВХОД); timer =millis ();} void loop () {// Serial.println (millis ()); большая продолжительность, дюймы; значение int; // Проверяем продолжительность чтения =doPing (); // Таймер для подтверждения действий (в настоящее время только питание) if (timer &&timer <(millis () - 5000) &&(millis ()> 5000)) {Serial.println ("timer reset"); таймер =ложь; } digitalWrite (светодиод, НИЗКИЙ); setColor (0, 0, 0); // выкл // конвертируем время в расстояние inch =microsecondsToInches (duration); // Если расстояние меньше максимального дюйма, действовать if (дюймы DIST_MAX) {doIR (CONTROL_CH, значение); // проведите пальцем по экрану} else {// объем int d =500; // первая задержка больше для однократного изменения громкости // повторяем, пока рука не будет убрана while (дюймы DIST_DOWN) {digitalWrite (led, ВЫСОКИЙ); return CONTROL_UP; } else {digitalWrite (светодиод, НИЗКИЙ); вернуть CONTROL_DOWN; }} / ** Выключить правильный ИК-код * / void doIR (int control, int val) {switch (control) {case CONTROL_POW:// power Serial.println ("power on / off 0xa90"); для (int я =0; я <3; я ++) {setColor (255, 0, 0); irsend.sendSony (0xa90, 12); // Задержка кода питания телевизора Sony (40); } ломать; case CONTROL_CH:setColor (0, 255, 0); // выводим 'канал вверх / вниз' в зависимости от val if (val ==CONTROL_UP) {digitalWrite (led, HIGH); для (int я =0; я <3; я ++) {irsend.sendSony (0x90, 12); задержка (40); } Serial.println ("канал вверх 0xD00A"); } else // вниз {for (int i =0; i <3; i ++) {irsend.sendSony (0x890, 12); задержка (40); } Serial.println ("канал вниз 0x3002"); } ломать; case CONTROL_VOL:setColor (0, 0, 255); // вывод 'громкость вверх / вниз' в зависимости от val if (val ==CONTROL_UP) {digitalWrite (led, HIGH); для (int я =0; я <3; я ++) {irsend.sendSony (0x490, 12); задержка (40); } Serial.println ("увеличить громкость 0x490"); } else // вниз {for (int i =0; i <3; i ++) {irsend.sendSony (0xC90, 12); задержка (40); } Serial.println ("уменьшение громкости на 0xC90"); } ломать; }} void setColor (int красный, int зеленый, int синий) {analogWrite (ledR, красный); analogWrite (ledG, зеленый); analogWrite (ledB, синий);} long doPing () {digitalWrite (pingPin, LOW); delayMicroseconds (2); digitalWrite (pingPin, HIGH); delayMicroseconds (5); digitalWrite (pingPin, LOW); return pulseIn (echoPin, HIGH);} long microsecondsToInches (длинные микросекунды) {return microseconds / 74/2;} long microsecondsToCentimeters (длинные микросекунды) {return microseconds / 29/2;}
Схема

Производственный процесс