FlickMote: Controle Remoto IR por Gestos para Casa Inteligente
Componentes e Materiais
- 1x Sensor Ultrassônico HC-SR04
- 1x Emissor IR (LED infravermelho)
- 1x LED RGB Difuso Cátodo Comum
- 1x Arduino 101 (ou Uno)
- Resistor apropriado para LED IR (220Ω)
- Protoboard e fios
Aplicativos e Serviços Online
- Arduino IDE
Sobre o Projeto
Introdução
Controlar eletrodomésticos e gadgets via controle remoto infravermelho é comum. Mas a mesma tarefa pode ser feita mais facilmente. O motivo principal de propor novo sistema de controle remoto por gestos é remover a necessidade de olhar para o controle portátil e procurar tecla específica — principalmente para idosos. Este projeto apresenta sistema inovador para controlar eletrodomésticos através de gestos da mão como dispositivo de controle remoto. Chamado FlickMote. Usa medidor de distância ultrassônico para determinar gesto do usuário e emite sinal IR. Microcontrolador: Arduino 101.
Componentes de Hardware
- Arduino 101 ou Uno
- Módulo ultrassônico HC-SR04
- LED Infravermelho
- Resistor apropriado para LED IR (220Ω)
- LED RGB
- Protoboard e fios
Como Funciona
Usa medidor ultrassônico para determinar gesto do usuário e emite sinal IR para TV conforme comando. Distância em polegadas pode ser ajustada no código.
- Deslize alto (> 10 pol) = Canal +
- Deslize baixo = Canal -
- Segure alto (> 10 pol) = Volume +
- Segure baixo = Volume -
- Cubra sensor (< 3 pol) = Liga / Desliga
Diagrama de Circuito (Fritzing)
Construção:
- Conecte LED IR ao pino 3 via resistor apropriado, catodo ao GND.
- Conecte sensor ultrassônico a 5V e GND. Pino trigger → pino 8, echo → pino 7 (configuráveis no programa).
- Conecte LED RGB ao GND e pinos 11 (vermelho), 10 (verde), 9 (azul). Também configuráveis.
Controles
Energia
Deslizar sobre sensor dentro de 3 polegadas faz LED piscar roxo — confirmação que sinal 'liga/desliga' está pronto. Para evitar desligar TV acidentalmente, o sketch espera segundo deslize dentro de 5 segundos do primeiro para confirmar. Neste ponto, sinal é enviado à TV.
Canal
Deslizar dentro de 10 polegadas (mas não dentro de 3) muda canal para baixo. Deslizar entre 10 e 20 polegadas muda canal para cima.
Volume
Segurar mão dentro de 10 polegadas (mas não dentro de 3) diminui volume. Segurar entre 10 e 20 polegadas aumenta volume. Volume continua mudando até remover a mão.
Vantagens e Melhorias
- Remove necessidade de olhar para controle e procurar tecla específica
- Solução para controlar gadgets (TV) por cegos e pessoas com deficiência física
- Projeto pode ser melhorado adicionando mais funcionalidades para controlar todos eletrodomésticos pelo mesmo método
Código
/* Swipe Remote Control
Usa medidor ultrassônico para determinar gesto e emite sinal IR para TV Sony.
- High swipe (> 10in) = Channel Up
- Low swipe = Channel Down
- High hold (> 10in) = Volume Up
- Low hold = Volume Down
- Cover sensor (< 3in) = Turn On / Off
Criado por Vignesh Jaishankar
Usa biblioteca IRremote (https://github.com/shirriff/Arduino-IRremote)
*/
#include <IRremote.h>
#define CONTROL_CH 1
#define CONTROL_VOL 2
#define CONTROL_POW 3
#define CONTROL_UP 1
#define CONTROL_DOWN -1
#define DIST_MAX 20
#define DIST_DOWN 10
#define DIST_POW 3
const int irPin = 3;
const int pingPin = 8;
const int echoPin = 7;
const 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(led, OUTPUT);
pinMode(ledR, OUTPUT);
pinMode(ledG, OUTPUT);
pinMode(ledB, OUTPUT);
pinMode(pingPin, OUTPUT);
pinMode(echoPin, INPUT);
timer = millis();
}
void loop() {
long duration, inches;
int value;
duration = doPing();
if (timer && timer < (millis() - 5000) && (millis() > 5000)) {
Serial.println("timer reset");
timer = false;
}
digitalWrite(led, LOW);
setColor(0, 0, 0);
inches = microsecondsToInches(duration);
if (inches < DIST_MAX) {
Serial.print(inches); Serial.println("in");
if (inches < DIST_POW) {
Serial.println(timer);
if (timer) {
doIR(CONTROL_POW, 0);
timer = false;
delay(2000);
} else {
Serial.println("power flag set");
timer = millis();
setColor(255, 50, 50);
delay(500);
}
} else {
value = handleDist(inches);
delay(300);
if (microsecondsToInches(doPing()) > DIST_MAX) {
doIR(CONTROL_CH, value);
} else {
int d = 500;
while (inches < DIST_MAX) {
value = handleDist(inches);
doIR(CONTROL_VOL, value);
delay(d);
inches = microsecondsToInches(doPing());
d = 100;
}
delay(500);
}
}
}
delay(50);
}
int handleDist(int inches) {
if (inches > DIST_DOWN) {
digitalWrite(led, HIGH);
return CONTROL_UP;
} else {
digitalWrite(led, LOW);
return CONTROL_DOWN;
}
}
void doIR(int control, int val) {
switch(control) {
case CONTROL_POW:
Serial.println("power on / off 0xa90");
for (int i = 0; i < 3; i++) {
setColor(255, 0, 0);
irsend.sendSony(0xa90, 12);
delay(40);
}
break;
case CONTROL_CH:
setColor(0, 255, 0);
if (val == CONTROL_UP) {
digitalWrite(led, HIGH);
for (int i = 0; i < 3; i++) {
irsend.sendSony(0x90, 12);
delay(40);
}
Serial.println("channel up 0xD00A");
} else {
for (int i = 0; i < 3; i++) {
irsend.sendSony(0x890, 12);
delay(40);
}
Serial.println("channel down 0x3002");
}
break;
case CONTROL_VOL:
setColor(0, 0, 255);
if (val == CONTROL_UP) {
digitalWrite(led, HIGH);
for (int i = 0; i < 3; i++) {
irsend.sendSony(0x490, 12);
delay(40);
}
Serial.println("volume up 0x490");
} else {
for (int i = 0; i < 3; i++) {
irsend.sendSony(0xC90, 12);
delay(40);
}
Serial.println("volume down 0xC90");
}
break;
}
}
void setColor(int red, int green, int blue) {
analogWrite(ledR, red);
analogWrite(ledG, green);
analogWrite(ledB, blue);
}
long doPing() {
digitalWrite(pingPin, LOW);
delayMicroseconds(2);
digitalWrite(pingPin, HIGH);
delayMicroseconds(5);
digitalWrite(pingPin, LOW);
return pulseIn(echoPin, HIGH);
}
long microsecondsToInches(long microseconds) {
return microseconds / 74 / 2;
}
long microsecondsToCentimeters(long microseconds) {
return microseconds / 29 / 2;
}
Esquemáticos
Diagrama de fiação Fritzing: flickmote_9Gx3XNFHEp.fzz
Processo de manufatura
- Construa um Dispositivo de Levitação Ultrassônica com Arduino – Guia Passo a Passo
- Construa um Spybot Controlado por Bluetooth com Arduino
- DIY Arduino TV B-Gone: Controle Remoto Universal para Todas as TVs
- Construa um Relógio Mestre LED Personalizado com Alarme – Visível a 12 Metros
- Find Me: Localizador Inteligente de Objetos com Arduino e Bluetooth
- Soluções de Energia Otimizadas para Projetos Arduino
- Jogo da Velha com Arduino, Matriz LED MAX7219 e Caixa de Papelão
- Construa um Robô Quadrúpede Inteligente com Arduino: Guia Passo a Passo
- Volante Joystick Arduino Personalizado para Jogos
- Sistema Radar Compacto com Arduino Nano, Sensor HC-SR04 e Display 1.8"