Elektronikos gamintojai pamažu daro išvadą, kad geriausias nuotolinio valdymo pultas yra vartotojo delnas. Taigi naujame stulpelyje „Yandex.Station Mini“ pateikia tokį valdymą. Nesitraukite nuo tendencijų ir draugų. Taigi, pavyzdžiui, „Instructable“, pravarde dan_nicholson, autorius sugalvojo paprastą įrenginį, leidžiantį valdyti televizorių gestais. Pagal numatytuosius nustatymus jis yra užprogramuotas dirbti su „Sony“ televizoriais, tačiau taip pat gali būti sukonfigūruotas valdyti bet kokius kitus televizorius, muzikos centrus ir pan. Kaip matyti iš KDPV, susideda
naminis iš diapazono ieškiklio
Arduino ir keli papildomi komponentai. Gali būti dar kompaktiškesnis:
Ir dar kompaktiškesnis, jei atsisakysite duonos lentos ir viską sujungsite litaudami, naudodami laidus. Meistras „Fritzing“ programoje sudaro įrenginio schemą, kuri ne visiems patinka, tačiau neskubėkite mesti šlepečių, šis diagramų sudarymo būdas taip pat gali būti patogus. Meistras per rezistorių jungia infraraudonųjų spindulių šviesos diodą, o visi RGB šviesos diodo kristalai yra tiesiogiai prijungti. Jis rašo, kad rezistoriai taip pat yra pageidautini čia, bet iš tikrųjų jie yra reikalingi.
Surinkęs grandinę, meistras paima biblioteką
čia, o komandų kodai yra
čiarašo ir užpildo eskizą:
/ * Perbraukite nuotolinio valdymo pultu
Šis eskizas naudoja ultragarso ieškiklį vartotojo gestui nustatyti ir išduoda IR signalą į sony televizorių pagal duotą komandą.
- didelis perbraukimas (> 10 colių) = kanalas aukštyn
- Žemas perbraukimas = kanalas žemyn
- Aukštas sulaikymas (> 10 colių) = garsumas didinamas
- Mažas sulaikymas = Garsumo sumažinimas
- dangtelio jutiklis (<3in) = įjungti / išjungti
Sukūrė Danas Nicholsonas.
Šis kodo pavyzdys yra viešas.
Šis kodas naudoja „IRremote“ biblioteką (https://github.com/shirriff/Arduino-IRremote)
* /
# įtraukti
// Apibrėžia valdymo funkcijas
#define CONTROL_CH 1 // Kanalo pakeitimas
#define CONTROL_VOL 2 // Apimtis
#define CONTROL_POW 3 // Galia
#define CONTROL_UP 1
#define CONTROL_DOWN -1
#define DIST_MAX 20 // Didžiausias atstumas coliais, nieko aukščiau nepaisoma.
#define DIST_DOWN 10 // Aukštyn / žemyn komandų slenkstis. Jei aukščiau, komanda yra „aukštyn“. Jei žemiau, „žemyn“.
#define DIST_POW 3 // Maitinimo komandos slenkstis, mažesnis nei = maitinimo įjungimas / išjungimas
// IR PIN kodas
const int irPin = 3; // tai apibrėžta bibliotekoje, šis var yra tik priminimas. PAKEISKAMI NETEISITE PINIGO KEITTI BIBLIOTEKOJE
// 2 kaiščių „ping“ jutiklis
const int pingPin = 8;
const int echoPin = 7;
// Patvirtinimo LED kaiščiai
const int led = 13; // vidinis šviesos diodas, skirtas derinti aukštyn / žemyn
const int ledR = 11;
const int ledG = 10;
const int ledB = 9;
// LED laikmatis
nepasirašytas ilgas laikmatis;
// IR siųstuvo objektas
IRsend irsend;
// Maitinimo patvirtinimo vėliava (signalui siųsti reikia dviejų perbraukimų)
boolean powerConfirmed = false;
negaliojanti sąranka () {
// inicijuokite nuoseklųjį ryšį ir nustatykite kaiščius
„Serial.begin“ (9600);
pinMode (led, OUTPUT);
pinMode (ledR, OUTPUT);
pinMode (ledG, OUTPUT);
pinMode (ledB, OUTPUT);
pinMode (pingPin, OUTPUT);
pinMode (echoPin, INPUT);
laikmatis = milis ();
}
tuščia kilpa ()
{
// Serial.println (millis ());
ilga trukmė, coliais;
vidinė vertė;
// Patikrinkite, ar nėra skaitymo
trukmė = doPing ();
// Laikmatis veiksmams patvirtinti (šiuo metu tik maitinimas)
if (laikmatis ir & laikmatis <(milis () - 5000) && (milis ()> 5000))
{
Serial.println („timer reset“);
laikmatis = klaidingas;
}
„digitalWrite“ (led, LOW);
„setColor“ (0, 0, 0); // išjungtas
// konvertuokite laiką į atstumą
coliais = mikrosekundėsToInches (trukmė);
// Jei ne arčiau kaip colių, elkitės
if (coliais DIST_MAX)
{
doIR (CONTROL_CH, vertė); // perbraukite
}
dar
{
// tomas
int d = 500; // Pirmasis delsos ilgesnis vieno tūrio pakeitimui
// pakartokite, kol ranka bus pašalinta
o (coliais DIST_DOWN)
{
„digitalWrite“ (led, HIGH);
grąžinti CONTROL_UP;
}
dar
{
„digitalWrite“ (led, LOW);
grįžti CONTROL_DOWN;
}
}
/ *
* Išjunkite teisingą IR kodą
* /
negaliojantis doIR (int valdymas, int val)
{
jungiklis (valdymas)
{
atvejis CONTROL_POW:
// valdžia
„Serial.println“ („įjungimas / išjungimas 0xa90“);
už (int i = 0; i <3; i ++)
{
„setColor“ (255, 0, 0);
„irsend.sendSony“ (0xa90, 12); // „Sony TV“ maitinimo kodas
vėlavimas (40);
}
pertrauka;
atvejis CONTROL_CH:
„setColor“ (0, 255, 0);
// išvestis 'kanalas aukštyn / žemyn', priklausomai nuo val
if (val == CONTROL_UP)
{
„digitalWrite“ (led, HIGH);
už (int i = 0; i <3; i ++)
{
„irsend.sendSony“ (0x90, 12);
vėlavimas (40);
}
„Serial.println“ („kanalas aukštyn 0xD00A“);
}
dar // žemyn
{
už (int i = 0; i <3; i ++)
{
„irsend.sendSony“ (0x890, 12);
vėlavimas (40);
}
„Serial.println“ („kanalas žemyn 0x3002“);
}
pertrauka;
atvejis CONTROL_VOL:
„setColor“ (0, 0, 255);
// išvestis 'garsumas aukštyn / žemyn', priklausomai nuo val
if (val == CONTROL_UP)
{
„digitalWrite“ (led, HIGH);
už (int i = 0; i <3; i ++)
{
„irsend.sendSony“ (0x490, 12);
vėlavimas (40);
}
„Serial.println“ („garsumas padidėja iki 0x490“);
}
dar // žemyn
{
už (int i = 0; i <3; i ++)
{
„irsend.sendSony“ (0xC90, 12);
vėlavimas (40);
}
„Serial.println“ („garsumas sumažėja 0xC90“);
}
pertrauka;
}
}
void setColor (raudona raudona, žalia žalia, mėlyna spalva)
{
analoWrite (ledR, raudona);
analoWrite (ledG, žalia);
analoWrite (ledB, mėlyna);
}
ilgas „doPing“ ()
{
„digitalWrite“ („pingPin“, LOW);
atidėtiMikrosekundės (2);
„digitalWrite“ („pingPin“, „HIGH“);
atidėtiMikrosekundės (5);
„digitalWrite“ („pingPin“, LOW);
grįžimo pulseIn (echoPin, HIGH);
}
ilgos mikrosekundėsToInches (ilgos mikrosekundės)
{
// Pagal „Parallax“ PING duomenų lapą))) yra
73,746 mikrosekundės colyje (t. Y. Garsas sklinda 1130 pėdų per colį)
// antra). Tai parodo ping'o nuvažiuotą atstumą
// ir grįžkite, todėl padalijame iš 2, kad gautume kliūties atstumą.
// Žiūrėti: http://www.parallax.com/dl/docs/prod/acc/28015-PING-v1.3.pdf
grąžinimo mikrosekundės / 74/2;
}
ilgos mikrosekundėsToCentimetrai (ilgos mikrosekundės)
{
// Garso greitis yra 340 m / s arba 29 mikrosekundės per centimetrą.
// Pingvas važiuoja pirmyn ir atgal, taigi, norint rasti atstumą
// objektas, kuriuo mes nuvažiuojame pusę nuvažiuoto atstumo.
grąžinimo mikrosekundės / 29/2;
}
Programos ypatybė yra siųsti derinimo pranešimus apie tai, kas vyksta šiuo metu, į „Arduino IDE“ nuosekliojo prievado monitorių. Įsitikinę, kad viskas veikia tinkamai, ateityje įrenginį galėsite maitinti ne iš kompiuterio, o iš maitinimo šaltinio.
Komandų siuntimo tvarka:1. Įjunkite arba išjunkite televizorių: vilkite delną priešais diapazono ieškiklį nuo 0 iki 75 mm atstumu, RGB šviesos diodas 5 sekundes užsidegs purpurine spalva, kol jis užsidegs, vėl banguokite tuo pačiu atstumu.
2. Sumažinkite kanalo skaičių - pasukite nuo 75 (ne imtinai) iki 250 mm atstumu. Mastelis - tas pats, bet nuo 250 (neįskaičiuotas) iki 500 mm atstumu.
3. Sumažinkite arba padidinkite garsumą - tą patį, ką ir kanalai, tačiau nelenkite, o laikykite delną nejudėdami. Kol vartotojas laiko delną, garsas, atsižvelgiant į atstumą, mažėja arba didėja pagal tą pačią logiką kaip ir kanalo numeris.
Norėdami naudoti likusias funkcijas (EPG, teletekstą, žemųjų dažnių įvestį ir kt.), Turėtumėte laikyti įprastą nuotolinio valdymo pultą šalia savęs. Šiuolaikinėmis sąlygomis patariama programuoti įrenginį taip, kad jis valdytų standartinį DVB-T2 priedėlį. Muzikos centro atveju viskas yra kitaip: analoginis transliavimas vis dar yra, nors ateityje bus perėjimas prie pradinio „DAB +“ ar „DRM +“.
Derinę konstrukciją, ji turėtų būti dedama į bet kurios struktūros korpusą - iš pagaminto
daryk pats nuo plexiglass, faneros iki bet kurios tinkamos baigtos dėžutės, pavyzdžiui, litavimo. Nuotolinio ieškiklio, kabelio ir abiejų šviesos diodų korpuse turi būti angos. Patartina nukreipti diapazono ieškiklį ir RGB LED viena kryptimi, o IR diodą - priešinga kryptimi.