I produttori di elettronica stanno gradualmente giungendo alla conclusione che il miglior telecomando è il palmo dell'utente. Quindi nella nuova colonna "Yandex.Station Mini" fornisce tale gestione. Non stare lontano da tendenze e amici. Quindi, ad esempio, l'autore di Instructables con il soprannome dan_nicholson ha ideato un semplice dispositivo che ti consente di controllare la tua TV usando i gesti. Per impostazione predefinita, è programmato per funzionare con i televisori Sony, ma può anche essere configurato per controllare qualsiasi altro televisore, centro musicale, ecc. Come si può vedere da KDPV, consiste
prodotto fatto in casa dal telemetro
Arduino e diversi componenti aggiuntivi. Può essere reso ancora più compatto:
E ancora più compatto se abbandoni la breadboard e colleghi tutto saldando con i fili. Il master crea uno schema del dispositivo nel programma Fritzing, che non piace a tutti, ma non correre a lanciare pantofole, questo metodo di elaborazione di diagrammi può anche essere conveniente. Il master collega un LED a infrarossi attraverso un resistore e tutti i cristalli del LED RGB sono collegati direttamente. Scrive che i resistori sono anche desiderabili qui, ma in realtà sono richiesti.
Dopo aver assemblato il circuito, il master prende la libreria
quie i codici di comando sono
quiscrive e riempie lo schizzo:
/ * Scorri il telecomando
Questo schizzo utilizza un telemetro ad ultrasuoni per determinare il gesto dell'utente e trasmette un segnale IR a un televisore Sony basato sul comando impartito.
- Scorrimento alto (> 10 pollici) = Canale su
- Scorrimento basso = Canale giù
- Alta tenuta (> 10 pollici) = Aumenta volume
- Bassa tenuta = Volume giù
- Sensore copertura (<3 pollici) = Attiva / Disattiva
Creato da Dan Nicholson.
Questo codice di esempio è di dominio pubblico.
Questo codice utilizza la libreria IRremote (https://github.com/shirriff/Arduino-IRremote)
* /
#include
// Definisce le funzioni di controllo
#define CONTROL_CH 1 // Cambio canale
#define CONTROL_VOL 2 // Volume
#define CONTROL_POW 3 // Potenza
#define CONTROL_UP 1
#define CONTROL_DOWN -1
#define DIST_MAX 20 // Distanza massima in pollici, tutto quanto sopra viene ignorato.
#define DIST_DOWN 10 // Soglia per i comandi su / giù. Se superiore, il comando è "attivo". Se inferiore, "giù".
#define DIST_POW 3 // Soglia per comando alimentazione, inferiore a = accensione / spegnimento
// PIN IR
const int irPin = 3; // questo è definito nella libreria, questo var è solo un promemoria. MODIFICANDO QUESTO NON CAMBIERÀ IL PIN IN BIBLIOTECA
// Sensore ping a 2 pin
const int pingPin = 8;
const int echoPin = 7;
// Pin LED di conferma
const int led = 13; // LED interno per il debug su / giù
const int ledR = 11;
const int ledG = 10;
const int ledB = 9;
// LED sul timer
timer lungo non firmato;
// Oggetto trasmettitore IR
IRsend irsend;
// Flag di conferma dell'alimentazione (per inviare il segnale sono necessari due passaggi)
booleano powerConfirmed = false;
void setup () {
// inizializza la comunicazione seriale e imposta i pin
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 ()
{
// Serial.println (millis ());
lunga durata, pollici;
valore int;
// Verifica una lettura
durata = doPing ();
// Timer per confermare le azioni (attualmente solo alimentazione)
if (timer && timer <(millis () - 5000) && (millis ()> 5000))
{
Serial.println ("reset timer");
timer = false;
}
digitalWrite (led, LOW);
setColor (0, 0, 0); // off
// converte il tempo in una distanza
pollici = microsecondiToInches (durata);
// Se a meno di max pollici di distanza, agire
if (pollici DIST_MAX)
{
doIR (CONTROL_CH, valore); // scorri
}
altro
{
// volume
int d = 500; // il primo ritardo è più lungo per la modifica del volume singolo
// ripeti finché la mano non viene rimossa
while (pollici DIST_DOWN)
{
digitalWrite (led, ALTA);
return CONTROL_UP;
}
altro
{
digitalWrite (led, LOW);
ritorno CONTROL_DOWN;
}
}
/ *
* Spegni il codice IR corretto
* /
void doIR (int control, int val)
{
interruttore (controllo)
{
case CONTROL_POW:
// potere
Serial.println ("accensione / spegnimento 0xa90");
per (int i = 0; i <3; i ++)
{
setColor (255, 0, 0);
irsend.sendSony (0xa90, 12); // Codice di accensione TV Sony
ritardo (40);
}
break;
case CONTROL_CH:
setColor (0, 255, 0);
// emette "canale su / giù" a seconda di val
if (val == CONTROL_UP)
{
digitalWrite (led, ALTA);
per (int i = 0; i <3; i ++)
{
irsend.sendSony (0x90, 12);
ritardo (40);
}
Serial.println ("channel up 0xD00A");
}
altro // giù
{
per (int i = 0; i <3; i ++)
{
irsend.sendSony (0x890, 12);
ritardo (40);
}
Serial.println ("channel down 0x3002");
}
break;
case CONTROL_VOL:
setColor (0, 0, 255);
// output 'volume su / giù' a seconda di val
if (val == CONTROL_UP)
{
digitalWrite (led, ALTA);
per (int i = 0; i <3; i ++)
{
irsend.sendSony (0x490, 12);
ritardo (40);
}
Serial.println ("volume su 0x490");
}
altro // giù
{
per (int i = 0; i <3; i ++)
{
irsend.sendSony (0xC90, 12);
ritardo (40);
}
Serial.println ("volume down 0xC90");
}
break;
}
}
void setColor (int rosso, int verde, int blu)
{
analogWrite (ledR, rosso);
analogWrite (ledG, verde);
analogWrite (ledB, blu);
}
long doPing ()
{
digitalWrite (pingPin, LOW);
delayMicroseconds (2);
digitalWrite (pingPin, HIGH);
delayMicroseconds (5);
digitalWrite (pingPin, LOW);
return pulseIn (echoPin, HIGH);
}
microsecondi lunghi ToInches (microsecondi lunghi)
{
// Secondo la scheda tecnica di Parallax per il PING))), ci sono
// 73,746 microsecondi per pollice (ovvero il suono viaggia a 1130 piedi per
// secondo). Ciò fornisce la distanza percorsa dal ping, in uscita
// e ritorno, quindi dividiamo per 2 per ottenere la distanza dell'ostacolo.
// Vedi: http://www.parallax.com/dl/docs/prod/acc/28015-PING-v1.3.pdf
ritorno microsecondi / 74/2;
}
microsecondi lunghi ToCentimetri (microsecondi lunghi)
{
// La velocità del suono è di 340 m / so 29 microsecondi per centimetro.
// Il ping viaggia avanti e indietro, quindi per trovare la distanza di
// oggetto prendiamo metà della distanza percorsa.
ritorno microsecondi / 29/2;
}
Una funzione del programma è l'invio ai messaggi di debug di monitoraggio della porta seriale IDE di Arduino su ciò che sta accadendo in questo momento. Dopo aver verificato che tutto funzioni correttamente, in futuro è possibile alimentare il dispositivo non dal computer, ma dall'alimentazione.
L'ordine di invio dei comandi:1. Accendi o spegni la TV: agita il palmo della mano davanti al telemetro ad una distanza da 0 a 75 mm, il LED RGB si illuminerà di viola per 5 secondi, mentre è acceso, saluta di nuovo alla stessa distanza.
2. Ridurre il numero del canale - oscillare a una distanza da 75 (non incluso) a 250 mm. Zoom: lo stesso, ma a una distanza compresa tra 250 (non incluso) e 500 mm.
3. Diminuisci o aumenta il volume - lo stesso dei canali, ma non agitare, ma tieni il palmo della mano immobile. Mentre l'utente tiene il palmo della mano, il volume, a seconda della distanza, diminuisce o aumenta secondo la stessa logica del numero del canale.
Per utilizzare altre funzioni (EPG, televideo, input a bassa frequenza, ecc.) È necessario tenere un telecomando regolare accanto a sé. In condizioni moderne, è consigliabile programmare il dispositivo in modo che controlli un set-top box DVB-T2 standard. Nel caso del centro musicale, tutto è diverso: le trasmissioni analogiche rimangono per il momento, anche se in futuro ci sarà una transizione al DAB + di avvio o al DRM +.
Dopo aver eseguito il debug della struttura, dovrebbe essere posizionata nel corpo di qualsiasi struttura - dal prodotto
fallo da solo dal plexiglass, compensato, a qualsiasi scatola finita adatta, ad esempio la saldatura. I fori dovrebbero essere previsti nella custodia per telemetro, cavo ed entrambi i LED. Si consiglia di dirigere il telemetro e il LED RGB in una direzione e il diodo IR nella direzione opposta.