Producătorii de electronice ajung treptat la concluzia că cea mai bună telecomandă este palma utilizatorului. Deci, în noua coloană „Yandex.Station Mini” se oferă un astfel de management. Nu stați la o parte de tendințe și prieteni. Astfel, de exemplu, autorul Instructables sub porecla dan_nicholson a venit cu un dispozitiv simplu care vă permite să vă controlați televizorul folosind gesturi. În mod implicit, este programat să funcționeze cu televizoare Sony, dar poate fi configurat și pentru a controla orice alte televizoare, centre muzicale etc. După cum se poate observa din KDPV, constă
produs home-made de la căutătorul de gamă
Arduino și mai multe componente suplimentare. Poate fi făcut și mai compact:
Și chiar mai compact dacă abandonați placa de pâine și conectați totul prin lipire folosind fire. Maestrul face o diagramă a dispozitivului în programul Fritzing, care nu le place tuturor, dar nu se grăbesc să arunce papuci, această metodă de a întocmi diagrame poate fi de asemenea convenabilă. Master conectează un LED infraroșu printr-un rezistor și toate cristalele LED-ului RGB sunt conectate direct. El scrie că aici sunt de dorit și rezistențele, dar de fapt sunt necesare.
După ce a asamblat circuitul, maestrul ia biblioteca
aici, iar codurile de comandă sunt
aiciscrie și completează schița:
/ * Telecomanda cu glisare
Această schiță folosește un telemetru cu ultrasunete pentru a determina gestul utilizatorului și emite un semnal IR către un televizor sony pe baza comenzii date.
- Swipe ridicat (> 10in) = Canal Up
- Swipe scăzut = Channel Down
- Apăsare ridicată (> 10in) = volum ridicat
- Reținere scăzută = Volumul în jos
- Senzor de acoperire (<3in) = Pornit / Oprit
Creat de Dan Nicholson.
Acest cod de exemplu se află în domeniul public.
Acest cod utilizează biblioteca IRremote (https://github.com/shirriff/Arduino-IRremote)
* /
#include
// Definește funcțiile de control
#define CONTROL_CH 1 // Schimbare canal
#define CONTROL_VOL 2 // Volumul
#define CONTROL_POW 3 // Putere
#define CONTROL_UP 1
#define CONTROL_DOWN -1
#define DIST_MAX 20 // Distanța maximă în centimetri, orice lucru de mai sus este ignorat.
#define DIST_DOWN 10 // Prag pentru comenzile sus / jos. Dacă este mai mare, comanda este „sus”. Dacă este mai jos, „în jos”.
#define DIST_POW 3 // Pragul pentru comanda de alimentare, mai mic decât = power on / off
// PIN-ul IR
const int irPin = 3; // acest lucru este definit în bibliotecă, acest var este doar un memento. Modificarea acestui lucru nu va schimba PIN-ul în bibliotecă
// Senzor de ping cu 2 pini
const int pingPin = 8;
const int echoPin = 7;
// Pini LED de confirmare
const int led = 13; // LED intern pentru depanare în sus / în jos
const int ledR = 11;
const int ledG = 10;
const int ledB = 9;
// LED pe cronometru
cronometru lung nesemnat;
// Obiect transmițător IR
IRsend irsend;
// Indicatorul de confirmare a puterii (are nevoie de două swip-uri pentru a trimite semnal)
putere booleanăConfirmată = falsă;
void setup () {
// inițializează comunicarea în serie și setează pinii
Serial.begin (9600);
pinMode (led, OUTPUT);
pinMode (ledR, OUTPUT);
pinMode (ledG, OUTPUT);
pinMode (ledB, OUTPUT);
pinMode (pingPin, OUTPUT);
pinMode (echoPin, INPUT);
cronometru = millis ();
}
nul buclă ()
{
// Serial.println (millis ());
durată lungă, inci;
valoarea int;
// Verificați pentru o lectură
durata = doPing ();
// Cronometru pentru a confirma acțiunile (momentan numai la putere)
if (timer && timer <(millis () - 5000) && (millis ()> 5000))
{
Serial.println ("resetare cronometră");
cronometru = fals;
}
digitalWrite (led, LOW);
setColor (0, 0, 0); // oprit
// converti timpul într-o distanță
inch = microsecundeToInches (durata);
// Dacă se află la o distanță mai mică de max
if (inci DIST_MAX)
{
doIR (CONTROL_CH, valoare); // aluneca
}
altfel
{
// volum
int d = 500; // prima întârziere este mai mare pentru schimbarea unui singur volum
// repetați până când mâna este îndepărtată
în timp ce (inci DIST_DOWN)
{
digitalWrite (led, HIGH);
returnați CONTROL_UP;
}
altfel
{
digitalWrite (led, LOW);
returnați CONTROL_DOWN;
}
}
/ *
* Oprire cod IR corect
* /
void doIR (int control, int val)
{
comutator (control)
{
cazul CONTROL_POW:
// putere
Serial.println ("pornire / oprire 0xa90");
pentru (int i = 0; i <3; i ++)
{
setColor (255, 0, 0);
irsend.sendSony (0xa90, 12); // Cod de alimentare Sony TV
întârziere (40);
}
pauză;
cazul CONTROL_CH:
setColor (0, 255, 0);
// ieșire „canal sus / jos” în funcție de val
if (val == CONTROL_UP)
{
digitalWrite (led, HIGH);
pentru (int i = 0; i <3; i ++)
{
irsend.sendSony (0x90, 12);
întârziere (40);
}
Serial.println ("canal up 0xD00A");
}
altfel // jos
{
pentru (int i = 0; i <3; i ++)
{
irsend.sendSony (0x890, 12);
întârziere (40);
}
Serial.println ("canal down 0x3002");
}
pauză;
cazul CONTROL_VOL:
setColor (0, 0, 255);
// ieșire „volum în sus / jos” în funcție de val
if (val == CONTROL_UP)
{
digitalWrite (led, HIGH);
pentru (int i = 0; i <3; i ++)
{
irsend.sendSony (0x490, 12);
întârziere (40);
}
Serial.println ("volum până la 0x490");
}
altfel // jos
{
pentru (int i = 0; i <3; i ++)
{
irsend.sendSony (0xC90, 12);
întârziere (40);
}
Serial.println ("volumul 0xC90");
}
pauză;
}
}
void setColor (int roșu, verde intens, albastru intens)
{
analogWrite (ledR, roșu);
analogWrite (ledG, verde);
analogWrite (ledB, albastru);
}
doPing lung ()
{
digitalWrite (pingPin, LOW);
delayMicroseconds (2);
digitalWrite (pingPin, HIGH);
delayMicroseconds (5);
digitalWrite (pingPin, LOW);
revenire puls In (echoPin, HIGH);
}
long microsecondsToInches (microsecunde lungi)
{
// Conform fișei Parallax pentru PING))), există
// 73.746 microsecunde pe inch (adică sunetul se deplasează la 1130 picioare pe
// al doilea). Acest lucru oferă distanța parcursă de ping, spre ieșire
// și revenim, deci împărțim cu 2 pentru a obține distanța obstacolului.
// A se vedea: http://www.parallax.com/dl/docs/prod/acc/28015-PING-v1.3.pdf
microsecunde retur / 74/2;
}
microsecunde lungiToCentimetre (microsecunde lungi)
{
// Viteza sunetului este de 340 m / s sau 29 microsecunde pe centimetru.
// Ping-ul călătorește înapoi și înapoi, astfel încât să găsească distanța
// obiect luăm jumătate din distanța parcursă.
microsecunde retur / 29/2;
}
O caracteristică a programului este trimiterea de mesaje de depanare despre ceea ce se întâmplă în acest moment către monitorul portului serial Arduino IDE. După ce vă asigurați că totul funcționează corect, în viitor puteți alimenta dispozitivul nu de la computer, ci de la sursa de alimentare.
Ordinea de trimitere a comenzilor:1. Porniți sau opriți televizorul: învârtiți-vă palma în fața căutătorului de distanță la 0 până la 75 mm, LED-ul RGB se va aprinde de culoare violet timp de 5 secunde, în timp ce este aprins, undiți din nou la aceeași distanță.
2. Scăderea numărului canalului - balansare la o distanță de la 75 (nu inclusiv) la 250 mm. Zoom - la fel, dar la o distanță de 250 (nu inclusiv) la 500 mm.
3. Scade sau mărește volumul - la fel ca în cazul canalelor, dar nu ondulați, ci țineți-vă palma nemișcată. În timp ce utilizatorul își ține palma, volumul, în funcție de distanță, scade sau crește în funcție de aceeași logică ca și numărul canalului.
Pentru a utiliza restul funcțiilor (EPG, teletext, introducere de bas, etc.), ar trebui să țineți o telecomandă obișnuită lângă dvs.. În condiții moderne, este recomandat să programați dispozitivul pentru a controla o cutie set-top standard DVB-T2. În cazul centrului de muzică, totul este diferit: difuzarea analogică rămâne deocamdată, deși în viitor va exista o tranziție la start-up-ul DAB + sau DRM +.
După ce a deconectat structura, aceasta trebuie plasată în corpul oricărei structuri - de la fabricat
fă-o singur de la plexiglas, placaj, la orice cutie finită potrivită, de exemplu, lipire. Găurile trebuie să fie prevăzute în carcasă pentru telemetru, cablu și ambele leduri. Este recomandabil să direcționați căutătorul și LED-ul RGB într-o singură direcție, iar dioda IR în sens invers.