Os fabricantes de eletrônicos estão gradualmente chegando à conclusão de que o melhor controle remoto é a palma da mão do usuário. Portanto, na nova coluna "Yandex.Station Mini" fornece esse gerenciamento. Não se afaste de tendências e amigos. Por exemplo, o autor de Instructables sob o apelido dan_nicholson criou um dispositivo simples que permite controlar sua TV usando gestos. Por padrão, ele está programado para funcionar com TVs da Sony, mas também pode ser configurado para controlar outras TVs, centros de música etc. Como pode ser visto no KDPV, consiste
caseiro do telêmetro
Arduino e vários componentes adicionais. Pode ser ainda mais compacto:
E ainda mais compacto se você abandonar a tábua de pão e conectar tudo soldando usando fios. O mestre faz um diagrama de dispositivos no programa Fritzing, que nem todo mundo gosta, mas não se apressa em jogar chinelos, esse método de elaboração de diagramas também pode ser conveniente. O mestre conecta um LED infravermelho através de um resistor e todos os cristais do LED RGB são conectados diretamente. Ele escreve que os resistores também são desejáveis aqui, mas na verdade são necessários.
Depois de montar o circuito, o mestre leva a biblioteca
aquie os códigos de comando são
aquiescreve e preenche o esboço:
/ * Deslize o controle remoto
Este esboço usa um telêmetro ultrassônico para determinar o gesto do usuário e emite um sinal de infravermelho para uma TV Sony com base no comando fornecido.
- Deslize alto (> 10 pol) = Canal acima
- Deslize baixo = Canal desativado
- Alta retenção (> 10in) = Aumentar o volume
- Baixa retenção = Diminuir volume
- Sensor de cobertura (<3in) = Ligar / Desligar
Criado por Dan Nicholson.
Este código de exemplo está no domínio público.
Este código usa a biblioteca IRremote (https://github.com/shirriff/Arduino-IRremote)
* /
#include
// Define para funções de controle
#define CONTROL_CH 1 // Alteração de canal
#define CONTROL_VOL 2 // Volume
#define CONTROL_POW 3 // Potência
#define CONTROL_UP 1
#define CONTROL_DOWN -1
#define DIST_MAX 20 // Distância máxima em polegadas, qualquer coisa acima é ignorada.
#define DIST_DOWN 10 // Limite para comandos para cima / para baixo. Se superior, o comando é "up". Se menor, "para baixo".
#define DIST_POW 3 // Limite para o comando de energia, menor que = ligar / desligar a energia
// PIN IR
const int irPin = 3; // isso é definido na biblioteca, esse var é apenas um lembrete. ALTERAR ISTO NÃO MUDARÁ O PIN NA BIBLIOTECA
// Sensor de ping de 2 pinos
const int pingPin = 8;
const int echoPin = 7;
// Pinos do LED de confirmação
const int led = 13; // LED interno para depuração up / down
const int ledR = 11;
const int ledG = 10;
const int ledB = 9;
// LED no temporizador
temporizador longo não assinado;
// objeto transmissor IR
IRsend irsend;
// Sinalizador de confirmação de energia (precisa de dois toques para enviar sinal)
powerConfirmed booleano = false;
configuração nula () {
// inicializa a comunicação serial e define os pinos
Serial.begin (9600);
pinMode (led, OUTPUT);
pinMode (ledR, OUTPUT);
pinMode (ledG, OUTPUT);
pinMode (ledB, OUTPUT);
pinMode (pingPin, OUTPUT);
pinMode (echoPin, INPUT);
timer = millis ();
}
loop vazio ()
{
// Serial.println (millis ());
longa duração, polegadas;
valor int;
// Verifique se há uma leitura
duration = doPing ();
// Temporizador para confirmar ações (atualmente apenas energia)
if (timer && timer <(milis () - 5000) && (millis ()> 5000))
{
Serial.println ("redefinição do timer");
timer = false;
}
digitalWrite (led, LOW);
setColor (0, 0, 0); // off
// converte o tempo à distância
polegadas = microssegundosParaInches (duração);
// Se estiver a menos de um centímetro de distância,
if (polegadas DIST_MAX)
{
doIR (CONTROL_CH, valor); // deslize
}
mais
{
// volume
int d = 500; // o primeiro atraso é maior para alteração de volume único
// repita até a mão ser removida
while (polegadas DIST_DOWN)
{
digitalWrite (led, ALTO);
retornar CONTROL_UP;
}
mais
{
digitalWrite (led, LOW);
retornar CONTROL_DOWN;
}
}
/ *
* Dispare o código IR correto
* /
void doIR (controle int, int val)
{
interruptor (controle)
{
caso CONTROL_POW:
// poder
Serial.println ("liga / desliga 0xa90");
for (int i = 0; i <3; i ++)
{
setColor (255, 0, 0);
irsend.sendSony (0xa90, 12); // Código de potência da TV Sony
atraso (40);
}
quebrar;
caso CONTROL_CH:
setColor (0, 255, 0);
// saída 'canal acima / abaixo' dependendo de val
if (val == CONTROL_UP)
{
digitalWrite (led, ALTO);
for (int i = 0; i <3; i ++)
{
irsend.sendSony (0x90, 12);
atraso (40);
}
Serial.println ("canal acima 0xD00A");
}
else // down
{
for (int i = 0; i <3; i ++)
{
irsend.sendSony (0x890, 12);
atraso (40);
}
Serial.println ("canal inativo 0x3002");
}
quebrar;
caso CONTROL_VOL:
setColor (0, 0, 255);
// gera 'volume acima / abaixo' dependendo do valor
if (val == CONTROL_UP)
{
digitalWrite (led, ALTO);
for (int i = 0; i <3; i ++)
{
irsend.sendSony (0x490, 12);
atraso (40);
}
Serial.println ("volume 0x490");
}
else // down
{
for (int i = 0; i <3; i ++)
{
irsend.sendSony (0xC90, 12);
atraso (40);
}
Serial.println ("volume 0xC90");
}
quebrar;
}
}
void setColor (int vermelho, int verde, int azul)
{
analogWrite (ledR, vermelho);
analogWrite (ledG, verde);
analogWrite (ledB, azul);
}
long doPing ()
{
digitalWrite (pingPin, LOW);
delayMicrosegundos (2);
digitalWrite (pingPin, ALTO);
delayMicrosegundos (5);
digitalWrite (pingPin, LOW);
retorno pulseIn (ecoPin, HIGH);
}
microssegundos longos Para Polegadas (microssegundos longos)
{
// De acordo com a folha de dados da Parallax para o PING))), existem
// 73,746 microssegundos por polegada (ou seja, o som viaja a 1130 pés por
// segundo). Isso fornece a distância percorrida pelo ping, de saída
// e retornamos, então dividimos por 2 para obter a distância do obstáculo.
// Veja: http://www.parallax.com/dl/docs/prod/acc/28015-PING-v1.3.pdf
microssegundos de retorno / 74/2;
}
microssegundos longos Para Centímetros (microssegundos longos)
{
// A velocidade do som é de 340 m / s ou 29 microssegundos por centímetro.
// O ping viaja para trás e para trás, para encontrar a distância do
// objeto tomamos metade da distância percorrida.
microssegundos de retorno / 29/2;
}
Um recurso do programa é o envio de mensagens de depuração sobre o que está acontecendo no momento para o monitor de porta serial do Arduino IDE. Depois de garantir que tudo funcione corretamente, no futuro você poderá ligar o dispositivo não pelo computador, mas pela fonte de alimentação.
A ordem dos comandos de envio:1. Ligue ou desligue a TV: acene a palma da mão na frente do telêmetro a uma distância de 0 a 75 mm, o LED RGB acenderá em roxo por 5 segundos, enquanto estiver aceso, acene novamente na mesma distância.
2. Diminua o número do canal - gire a uma distância de 75 (não incluso) para 250 mm. Zoom - o mesmo, mas a uma distância de 250 (não incluso) a 500 mm.
3. Diminua ou aumente o volume - igual ao dos canais, mas não acene, mas mantenha a palma da mão imóvel. Enquanto o usuário está segurando a palma da mão, o volume, dependendo da distância, diminui ou aumenta de acordo com a mesma lógica que o número do canal.
Para usar as demais funções (EPG, teletexto, entrada de graves etc.), mantenha um controle remoto regular ao seu lado. Em condições modernas, é aconselhável programar o dispositivo para controlar um decodificador padrão DVB-T2. No caso do music center, tudo é diferente: a transmissão analógica permanece por enquanto, embora no futuro haja uma transição para o DAB + ou DRM + inicial.
Após depurar a estrutura, ela deve ser colocada no corpo de qualquer estrutura - a partir da
faça você mesmo de plexiglás, madeira compensada, a qualquer caixa acabada adequada, por exemplo, solda. Devem ser fornecidos furos na carcaça do telêmetro, cabo e ambos os LEDs. É aconselhável direcionar o telêmetro e o LED RGB em uma direção, e o diodo IR na direção oposta.