Producenci elektroniki stopniowo dochodzą do wniosku, że najlepszym pilotem jest dłoń użytkownika. Tak więc w nowej kolumnie „Yandex.Station Mini” zapewnia takie zarządzanie. Nie stój z dala od trendów i przyjaciół. Na przykład autor Instructables pod pseudonimem dan_nicholson wymyślił proste urządzenie, które pozwala sterować telewizorem za pomocą gestów. Domyślnie jest zaprogramowany do pracy z telewizorami Sony, ale można go również skonfigurować do sterowania innymi telewizorami, centrami muzycznymi itp. Jak widać z KDPV, składa się
domowej roboty z dalmierza
Arduino i kilka dodatkowych komponentów. Może być jeszcze bardziej kompaktowy:
A nawet bardziej kompaktowy, jeśli porzucisz płytkę ścienną i połączysz wszystko lutując za pomocą przewodów. Mistrz tworzy schemat urządzenia w programie Fritzinga, który nie wszystkim się podoba, ale nie spiesz się, aby rzucać kapciami, ta metoda sporządzania diagramów może być również wygodna. Master łączy diodę podczerwieni przez rezystor, a wszystkie kryształy diody RGB są bezpośrednio połączone. Pisze, że tutaj również pożądane są rezystory, ale w rzeczywistości są one wymagane.
Po złożeniu obwodu mistrz bierze bibliotekę
tutaj, a kody poleceń to
tutajpisze i wypełnia szkic:
/ * Przeciągnij pilotem
Ten szkic wykorzystuje ultradźwiękowy dalmierz do określenia gestu użytkownika i wysyła sygnał IR do telewizora Sony na podstawie podanego polecenia.
- Duże przesunięcie (> 10 cali) = kanał w górę
- Niski przesuw = kanał w dół
- Wysokie trzymanie (> 10 cali) = Zwiększanie głośności
- Low hold = Zmniejszenie głośności
- Czujnik osłony (<3 cale) = Włącz / Wyłącz
Stworzony przez Dan Nicholson.
Ten przykładowy kod jest własnością publiczną.
Ten kod korzysta z biblioteki IRremote (https://github.com/shirriff/Arduino-IRremote)
* /
#include
// Definiuje funkcje kontrolne
# zdefiniować CONTROL_CH 1 // Zmiana kanału
# zdefiniować CONTROL_VOL 2 // Tom
# zdefiniować CONTROL_POW 3 // Moc
# Zdefiniuj CONTROL_UP 1
# zdefiniuj CONTROL_DOWN -1
# zdefiniować DIST_MAX 20 // Maksymalna odległość w calach, wszystko powyżej jest ignorowane.
# zdefiniować DIST_DOWN 10 // Próg dla poleceń góra / dół. Jeśli wyższy, polecenie jest „w górę”. Jeśli niższy, „w dół”.
# zdefiniować DIST_POW 3 // Próg dla polecenia zasilania, niższy niż = włączanie / wyłączanie zasilania
// PIN IR
const int irPin = 3; // to jest zdefiniowane w bibliotece, ten var jest tylko przypomnieniem. ZMIANA TEGO NIE BĘDZIE ZMIENIĆ PINU W BIBLIOTECE
// 2-pinowy czujnik ping
const int pingPin = 8;
const int echoPin = 7;
// Kołki LED potwierdzenia
const int led = 13; // wewnętrzna dioda LED do debugowania góra / dół
const int ledR = 11;
const int ledG = 10;
const int ledB = 9;
// LED na zegarze
długi zegar bez znaku;
// Obiekt nadajnika podczerwieni
IRsend irsend;
// Flaga potwierdzenia zasilania (wymaga dwóch przeciągnięć, aby wysłać sygnał)
boolean powerConfirmed = false;
void setup () {
// zainicjuj komunikację szeregową i ustaw piny
Serial.begin (9600);
pinMode (dioda LED, WYJŚCIE);
pinMode (ledR, OUTPUT);
pinMode (ledG, OUTPUT);
pinMode (ledB, WYJŚCIE);
pinMode (pingPin, OUTPUT);
pinMode (echoPin, INPUT);
timer = millis ();
}
void loop ()
{
// Serial.println (millis ());
długi czas trwania, cale;
wartość int;
// Sprawdź odczyt
czas trwania = doPing ();
// Timer potwierdzający akcje (aktualnie tylko moc)
if (timer && timer <(millis () - 5000) && (millis ()> 5000))
{
Serial.println („reset zegara”);
timer = false;
}
digitalWrite (led, LOW);
setColor (0, 0, 0); // off
// przelicz czas na odległość
cale = microsecondsToInches (czas trwania);
// Jeśli dzieli Cię mniej niż maks. Cale, działaj
jeśli (cale DIST_MAX)
{
doIR (CONTROL_CH, wartość); // machnięcie
}
jeszcze
{
// wolumin
int d = 500; // pierwsze opóźnienie jest dłuższe w przypadku zmiany pojedynczego woluminu
// powtarzaj, aż ręka zostanie usunięta
podczas gdy (cale DIST_DOWN)
{
digitalWrite (led, HIGH);
zwróć CONTROL_UP;
}
jeszcze
{
digitalWrite (led, LOW);
zwróć CONTROL_DOWN;
}
}
/ *
* Odpal poprawny kod IR
* /
void doIR (int control, int val)
{
przełącznik (kontrola)
{
przypadek CONTROL_POW:
// moc
Serial.println („włączanie / wyłączanie 0xa90”);
dla (int i = 0; i <3; i ++)
{
setColor (255, 0, 0);
irsend.sendSony (0xa90, 12); // Kod zasilania telewizora Sony
opóźnienie (40);
}
przerwa;
przypadek CONTROL_CH:
setColor (0, 255, 0);
// wyjście „kanał góra / dół” w zależności od wartości
if (val == CONTROL_UP)
{
digitalWrite (led, HIGH);
dla (int i = 0; i <3; i ++)
{
irsend.sendSony (0x90, 12);
opóźnienie (40);
}
Serial.println („channel up 0xD00A”);
}
else // w dół
{
dla (int i = 0; i <3; i ++)
{
irsend.sendSony (0x890, 12);
opóźnienie (40);
}
Serial.println („kanał w dół 0x3002”);
}
przerwa;
przypadek CONTROL_VOL:
setColor (0, 0, 255);
// wyjściowe „zwiększenie / zmniejszenie głośności” w zależności od wartości
if (val == CONTROL_UP)
{
digitalWrite (led, HIGH);
dla (int i = 0; i <3; i ++)
{
irsend.sendSony (0x490, 12);
opóźnienie (40);
}
Serial.println („zwiększenie głośności 0x490”);
}
else // w dół
{
dla (int i = 0; i <3; i ++)
{
irsend.sendSony (0xC90, 12);
opóźnienie (40);
}
Serial.println („zmniejszenie głośności 0xC90”);
}
przerwa;
}
}
void setColor (int czerwony, int zielony, int niebieski)
{
analogWrite (ledR, czerwony);
analogWrite (ledG, zielony);
analogWrite (ledB, niebieski);
}
long doPing ()
{
digitalWrite (pingPin, LOW);
delayMicroseconds (2);
digitalWrite (pingPin, HIGH);
delayMicroseconds (5);
digitalWrite (pingPin, LOW);
powrót impulsu (echoPin, WYSOKI);
}
długie mikrosekundy ToCale (długie mikrosekundy)
{
// Według arkusza danych Parallax dla PING))), są
// 73,746 mikrosekund na cal (tj. Dźwięk przemieszcza się z prędkością 1130 stóp na
// sekunda). Daje to odległość przebytą przez ping, wychodzącą
// i wróć, więc dzielimy przez 2, aby uzyskać odległość od przeszkody.
// Patrz: http://www.parallax.com/dl/docs/prod/acc/28015-PING-v1.3.pdf
zwraca mikrosekundy / 74/2;
}
długie mikrosekundy do centymetrów (długie mikrosekundy)
{
// Prędkość dźwięku wynosi 340 m / s lub 29 mikrosekund na centymetr.
// Ping podróżuje w obie strony, aby znaleźć odległość
// obiekt bierzemy połowę przebytej odległości.
zwraca mikrosekundy / 29/2;
}
Cechą programu jest wysyłanie do monitora portu szeregowego Arduino IDE komunikatów debugujących o tym, co się aktualnie dzieje. Po upewnieniu się, że wszystko działa poprawnie, w przyszłości możesz zasilać urządzenie nie z komputera, ale z zasilacza.
Kolejność wysyłania poleceń:1. Włącz lub wyłącz telewizor: machaj dłonią przed dalmierzem w odległości od 0 do 75 mm, dioda LED RGB zaświeci się na fioletowo przez 5 sekund, gdy jest zapalona, ponownie machnij w tej samej odległości.
2. Zmniejsz numer kanału - wychyl w odległości od 75 (brak w zestawie) do 250 mm. Zoom - taki sam, ale w odległości od 250 (brak w zestawie) do 500 mm.
3. Zmniejsz lub zwiększ głośność - tak samo jak w przypadku kanałów, ale nie machaj, ale unieruchom dłoń. Gdy użytkownik trzyma dłoń, głośność, w zależności od odległości, zmniejsza się lub zwiększa zgodnie z tą samą logiką, co numer kanału.
Aby korzystać z pozostałych funkcji (EPG, telegazeta, wprowadzanie basów itp.), Należy trzymać obok siebie zwykłego pilota. W nowoczesnych warunkach zaleca się zaprogramowanie urządzenia do sterowania standardowym dekoderem DVB-T2. W przypadku centrum muzycznego wszystko jest inne: nadawanie analogowe wciąż tam jest, chociaż w przyszłości nastąpi przejście na start-up DAB + lub DRM +.
Po debugowaniu konstrukcji należy ją umieścić w korpusie dowolnej konstrukcji - od wyprodukowanego
zrób to sam od pleksiglasu, sklejki, do dowolnego odpowiedniego gotowego pudełka, na przykład do lutowania. W obudowie powinny znajdować się otwory na dalmierz, kabel i obie diody LED. Wskazane jest skierowanie dalmierza i diody LED RGB w jednym kierunku, a diody IR w przeciwnym kierunku.