Ang mga tagagawa ng elektroniko ay unti-unting darating sa konklusyon na ang pinakamahusay na remote control ay ang palad ng gumagamit. Kaya sa bagong haligi na "Yandex.Station Mini" ay nagbibigay ng naturang pamamahala. Huwag tumabi mula sa mga uso at kaibigan. Kaya, halimbawa, ang may-akda ng Mga Tagagamit sa ilalim ng palayaw at_nicholson ay may isang simpleng aparato na nagbibigay-daan sa iyo upang makontrol ang iyong TV gamit ang mga kilos. Bilang default, na-program ito upang gumana sa mga Sony TV, ngunit maaari ding mai-configure upang makontrol ang anumang iba pang mga TV, mga sentro ng musika, atbp. Tulad ng makikita mula sa KDPV, ay binubuo
gawang bahay mula sa tagahanap
Arduino at maraming mga karagdagang sangkap. Maaaring gawing mas compact:
At kahit na mas compact kung pinabayaan mo ang breadboard at ikinonekta ang lahat sa pamamagitan ng paghihinang gamit ang mga wire. Gumagawa ang master ng isang diagram ng aparato sa programang Fritzing, na hindi lahat ay gusto, ngunit huwag magmadali upang ihagis ang mga tsinelas, ang pamamaraang ito ng pagguhit ng mga diagram ay maaari ding maginhawa. Kinokonekta ng master ang isang infrared LED sa pamamagitan ng isang risistor, at lahat ng mga kristal ng RGB LED ay direktang konektado. Sinusulat niya na ang mga resistors ay kanais-nais din dito, ngunit sa katunayan sila ay kinakailangan.
Ang pagkakaroon ng tipunin ang circuit, kinukuha ng master ang library
dito, at ang mga command code ay
ditonagsusulat at pinupunan ang sketsa:
/ * Mag-swipe Remote Control
Ang sketch na ito ay gumagamit ng isang ultrasonic rangefinder upang matukoy ang kilos ng gumagamit at nag-output ng isang IR signal sa isang sony TV batay sa ibinigay na utos.
- Mataas na mag-swipe (> 10in) = Channel Up
- Mababang pag-swipe = Channel Down
- Mataas na hawakan (> 10in) = Dami ng Up
- Mababang hawak = Dami ng Down
- Cover sensor (<3in) = I-on / I-off
Nilikha ni Dan Nicholson.
Ang halimbawang code na ito ay nasa pampublikong domain.
Ginagamit ng code na ito ang library ng IRremote (https://github.com/shirriff/Arduino-IRremote)
* /
#include
// Tinutukoy ang mga function ng control
#define CONTROL_CH 1 // Pagbabago ng channel
#define CONTROL_VOL 2 // Dami
#define CONTROL_POW 3 // Power
#define CONTROL_UP 1
#define CONTROL_DOWN -1
#define DIST_MAX 20 // Pinakamataas na distansya sa pulgada, ang anumang bagay sa itaas ay hindi pinapansin.
#define DIST_DOWN 10 // Threshold para sa up / down na utos. Kung mas mataas, ang utos ay "up". Kung mas mababa, "down".
#define DIST_POW 3 // Threshold para sa power command, mas mababa kaysa sa = kapangyarihan on / off
// IR PIN
const int irPin = 3; // ito ay tinukoy sa library, ang var na ito ay paalala lamang. PAGBABAGO ITO AY HINDI Pagbabago PIN sa LIBRARY
// 2 Pin Ping Sensor
const int pingPin = 8;
const int echoPin = 7;
// Confirmation LED Pins
const int led = 13; // panloob na LED para sa pataas / down na pag-debug
const int ledR = 11;
const int ledG = 10;
const int ledB = 9;
// LED sa timer
unsigned long timer;
// object ng transmiter ng IR
IRsend irsend;
// I-flag ang kumpirmasyon ng kapangyarihan (nangangailangan ng dalawang swipe upang magpadala ng signal)
kapangyarihan ng booleanConfirmed = false;
walang pag-setup () {
// pasiunang serye ang komunikasyon at magtakda ng mga pin
Serial.begin (9600);
pinMode (pinangunahan, OUTPUT);
pinMode (ledR, OUTPUT);
pinMode (ledG, OUTPUT);
pinMode (ledB, OUTPUT);
pinMode (pingPin, OUTPUT);
pinMode (echoPin, INPUT);
timer = millis ();
}
walang bisa loop ()
{
// Serial.println (millis ());
mahabang tagal, pulgada;
halaga ng int;
// Suriin para sa isang pagbabasa
tagal = doPing ();
// Timer upang kumpirmahin ang mga aksyon (kasalukuyang kapangyarihan lamang)
kung (timer && timer <(millis () - 5000) && (millis ()> 5000))
{
Serial.println ("pag-reset ng timer");
timer = maling;
}
digitalWrite (pinangunahan, LOW);
setColor (0, 0, 0); // off
// convert ang oras sa isang distansya
pulgada = microsecondsToInches (tagal);
// Kung mas mababa sa max pulgada ang layo, kumilos
kung (pulgada DIST_MAX)
{
doIR (CONTROL_CH, halaga); // mag-swipe
}
iba pa
{
// dami
int d = 500; / Ang unang pagkaantala ay mas mahaba para sa pagbabago ng dami
// ulitin hanggang maalis ang kamay
habang (pulgada DIST_DOWN)
{
digitalWrite (pinangunahan, HIGH);
ibalik ang CONTROL_UP;
}
iba pa
{
digitalWrite (pinangunahan, LOW);
bumalik CONTROL_DOWN;
}
}
/ *
* Sunog off tama ang IR code
* /
walang bisa DoIR (int control, int val)
{
lumipat (kontrol)
{
kaso CONTROL_POW:
// kapangyarihan
Serial.println ("kapangyarihan sa / off 0xa90");
para sa (int i = 0; i <3; i ++)
{
setColor (255, 0, 0);
irsend.sendSony (0xa90, 12); // Sony power code
pagkaantala (40);
}
masira;
kaso CONTROL_CH:
setColor (0, 255, 0);
// output 'channel up / down' depende sa val
kung (val == CONTROL_UP)
{
digitalWrite (pinangunahan, HIGH);
para sa (int i = 0; i <3; i ++)
{
irsend.sendSony (0x90, 12);
pagkaantala (40);
}
Serial.println ("channel up 0xD00A");
}
iba pa // pababa
{
para sa (int i = 0; i <3; i ++)
{
irsend.sendSony (0x890, 12);
pagkaantala (40);
}
Serial.println ("channel down 0x3002");
}
masira;
kaso CONTROL_VOL:
setColor (0, 0, 255);
// output 'volume up / down' depende sa val
kung (val == CONTROL_UP)
{
digitalWrite (pinangunahan, HIGH);
para sa (int i = 0; i <3; i ++)
{
irsend.sendSony (0x490, 12);
pagkaantala (40);
}
Serial.println ("dami hanggang 0x490");
}
iba pa // pababa
{
para sa (int i = 0; i <3; i ++)
{
irsend.sendSony (0xC90, 12);
pagkaantala (40);
}
Serial.println ("volume down 0xC90");
}
masira;
}
}
walang bisa setColor (int pula, int green, int asul)
{
analogWrite (ledR, pula);
analogWrite (ledG, berde);
analogWrite (ledB, asul);
}
mahaba doPing ()
{
digitalWrite (pingPin, LOW);
pagkaantalaMicroseconds (2);
digitalWrite (pingPin, HIGH);
pagkaantalaMicroseconds (5);
digitalWrite (pingPin, LOW);
bumalik pulseIn (echoPin, HIGH);
}
mahaba microsecondsToInches (mahabang microseconds)
{
// Ayon sa datasheet ng Parallax para sa PING))), mayroong
// 73.746 microseconds bawat pulgada (i.e. tunog ng paglalakbay sa 1130 piye bawat
// segundo). Nagbibigay ito ng distansya na nilakbay ng ping, papalabas
// at bumalik, kaya naghati kami ng 2 upang makuha ang distansya ng balakid.
// Tingnan: http://www.parallax.com/dl/docs/prod/acc/28015-PING-v1.3.pdf
ibalik ang microseconds / 74/2;
}
mahaba microsecondsToCentimeter (mahabang microseconds)
{
// Ang bilis ng tunog ay 340 m / s o 29 microseconds bawat sentimetro.
// Ang ping ay naglalakbay at bumalik, upang malaman ang distansya ng
// object na kinukuha namin ang kalahati ng distansya na naglakbay.
ibalik ang microseconds / 29/2;
}
Ang isang tampok ng programa ay ang pagpapadala ng mga debugging na mensahe tungkol sa kung ano ang nangyayari sa ngayon sa Arduino IDE serial port monitor. Matapos siguraduhin na ang lahat ay gumagana nang tama, sa hinaharap maaari mong kapangyarihan ang aparato hindi mula sa computer, ngunit mula sa power supply.
Ang pagkakasunud-sunod ng pagpapadala ng mga utos:1. I-on o i-off ang TV: iwagayway ang iyong palad sa harap ng tagahanap ng saklaw sa layo na 0 hanggang 75 mm, ang RGB LED ay magpapagaan ng lila sa loob ng 5 segundo, habang ito ay naiilawan, kumaway muli sa parehong distansya.
2. Bawasan ang numero ng channel - swing sa layo mula sa 75 (hindi kasama) sa 250 mm. Mag-zoom - pareho, ngunit sa layo na 250 (hindi kasama) sa 500 mm.
3. Bawasan o dagdagan ang lakas ng tunog - pareho sa mga channel, ngunit huwag mag-alon, ngunit hawakan ang iyong palad nang hindi gumagalaw. Habang hinahawakan ng gumagamit ang kanyang palad, ang dami, depende sa distansya, bumababa o tumataas alinsunod sa parehong logic bilang numero ng channel.
Upang magamit ang natitirang mga pag-andar (EPG, teletext, bass input, atbp.), Dapat kang magtago ng isang regular na remote control sa tabi mo. Sa mga modernong kondisyon, ipinapayong i-program ang aparato upang makontrol ang isang standard na kahon ng set-top na DVB-T2. Sa kaso ng sentro ng musika, ang lahat ay naiiba: ang mga pagsasahimpapawid ng analog ay nananatiling para sa oras, bagaman sa hinaharap magkakaroon ng paglipat sa start-up DAB + o DRM +.
Ang pagkakaroon ng pag-debug ng istraktura, dapat itong ilagay sa katawan ng anumang istraktura - mula sa panindang
gawin mo mismo mula sa plexiglass, playwud, sa anumang naaangkop na natapos na kahon, halimbawa, paghihinang. Ang mga butas ay dapat ibigay sa pabahay para sa rangefinder, cable, at parehong mga LED. Maipapayo na idirekta ang range finder at ang RGB LED sa isang direksyon, at ang IR diode sa kabaligtaran ng direksyon.