Производителите на електроника постепенно стигат до извода, че най-доброто дистанционно управление е дланта на потребителя. Така че в новата колона "Yandex.Station Mini" осигурява такова управление. Не стойте настрана от тенденциите и приятелите. Така например авторът на Instructables под псевдонима dan_nicholson излезе с просто устройство, което ви позволява да контролирате телевизора си с помощта на жестове. По подразбиране той е програмиран да работи с телевизори Sony, но също така може да бъде конфигуриран да контролира всички други телевизори, музикални центрове и т.н. Както се вижда от KDPV, се състои
домашно приготвени продукти от далекомера
Arduino и няколко допълнителни компонента. Може да се направи още по-компактен:
И още по-компактен, ако изоставите дънната платка и свържете всичко чрез запояване с помощта на проводници. Майсторът прави схема на устройството в програмата Fritzing, която не всеки харесва, но не бързайте да хвърляте чехли, този метод за съставяне на диаграми също може да бъде удобен. Главният свързва инфрачервен светодиод през резистор и всички кристали на RGB светодиода са свързани директно. Той пише, че тук също са желателни резистори, но всъщност те се изискват.
Сглобявайки схемата, капитанът взема библиотеката
тук, а командните кодове са
тукпише и попълва скицата:
/ * Плъзнете дистанционно управление
Тази скица използва ултразвуков далекомер за определяне на жеста на потребителя и извежда IR сигнал към sony TV въз основа на дадената команда.
- Високо прекарване на пръст (> 10 инча) = Канал нагоре
- Нисък плъзгане = Канал надолу
- Високо задържане (> 10 инча) = увеличаване на силата на звука
- Ниско задържане = Намаляване на звука
- Датчик на капака (<3in) = Включване / Изключване
Създаден от Дан Никълсън.
Този примерен код е в публичното пространство.
Този код използва библиотеката IRremote (https://github.com/shirriff/Arduino-IRremote)
* /
#include
// Определя за контролните функции
#define CONTROL_CH 1 // Промяна на канала
#define CONTROL_VOL 2 // Обем
#define CONTROL_POW 3 // Захранване
#define CONTROL_UP 1
#define CONTROL_DOWN -1
#define DIST_MAX 20 // Максимално разстояние в инчове, всичко по-горе се игнорира.
#define DIST_DOWN 10 // Праг за команди нагоре / надолу. Ако е по-висока, командата е "нагоре". Ако е по-ниско, „надолу“.
#define DIST_POW 3 // Праг за команда за захранване, по-ниска от = включване / изключване на захранването
// IR ПИН
const int irPin = 3; // това е дефинирано в библиотеката, този var е просто напомняне. ПРОМЯНАТЕ ТОВА НЯМА ДА ПРОМЕНЯТ ПИН в БИБЛИОТЕКА
// 2 пинов сензор за пинг
const int pingPin = 8;
const int echoPin = 7;
// Потвърждение LED пинове
const int led = 13; // вътрешен светодиод за отстраняване на грешки
const int ledR = 11;
const int ledG = 10;
const int ledB = 9;
// LED на таймера
неподписан дълъг таймер;
// Обект на IR предавател
IRsend irsend;
// Флаг за потвърждение на захранването (има нужда от два пръста за изпращане на сигнал)
boolean powerConfirmed = false;
настройка за невалидност () {
// инициализирайте серийната комуникация и поставете пинове
Serial.begin (9600);
pinMode (led, OUTPUT);
pinMode (ledR, OUTPUT);
pinMode (ledG, OUTPUT);
pinMode (ledB, OUTPUT);
pinMode (pingPin, OUTPUT);
pinMode (echoPin, INPUT);
таймер = millis ();
}
void loop ()
{
// Serial.println (millis ());
голяма продължителност, инчове;
int стойност;
// Проверете за четене
продължителност = doPing ();
// Таймер за потвърждаване на действия (в момента само захранване)
if (таймер && таймер <(millis () - 5000) && (millis ()> 5000))
{
Serial.println ("нулиране на таймера");
таймер = невярно;
}
digitalWrite (led, LOW);
setColor (0, 0, 0); // изключен
// преобразува времето в разстояние
инчове = микросекундиToInches (продължителност);
// Ако е на по-малко от макси инча, действайте
ако (инча DIST_MAX)
{
doIR (CONTROL_CH, стойност); // прекарайте пръст
}
още
{
// обем
int d = 500; // първото закъснение е по-дълго за единична смяна на звука
// повтаряйте, докато ръката не бъде отстранена
докато (инча DIST_DOWN)
{
digitalWrite (led, HIGH);
връщане CONTROL_UP;
}
още
{
digitalWrite (led, LOW);
връщане CONTROL_DOWN;
}
}
/ *
* Изключете правилния IR код
* /
void doIR (int control, int val)
{
превключвател (управление)
{
случай CONTROL_POW:
// мощност
Serial.println ("включване / изключване 0xa90");
за (int i = 0; i <3; i ++)
{
setColor (255, 0, 0);
irsend.sendSony (0xa90, 12); // Код за захранване на Sony TV
забавяне (40);
}
прекъсване;
случай CONTROL_CH:
setColor (0, 255, 0);
// изход 'канал нагоре / надолу' в зависимост от val
ако (val == CONTROL_UP)
{
digitalWrite (led, HIGH);
за (int i = 0; i <3; i ++)
{
irsend.sendSony (0x90, 12);
забавяне (40);
}
Serial.println ("канал нагоре 0xD00A");
}
друго // надолу
{
за (int i = 0; i <3; i ++)
{
irsend.sendSony (0x890, 12);
забавяне (40);
}
Serial.println ("канал надолу 0x3002");
}
прекъсване;
случай CONTROL_VOL:
setColor (0, 0, 255);
// изход 'обем нагоре / надолу' в зависимост от val
ако (val == CONTROL_UP)
{
digitalWrite (led, HIGH);
за (int i = 0; i <3; i ++)
{
irsend.sendSony (0x490, 12);
забавяне (40);
}
Serial.println ("обем до 0x490");
}
друго // надолу
{
за (int i = 0; i <3; i ++)
{
irsend.sendSony (0xC90, 12);
забавяне (40);
}
Serial.println ("обем надолу 0xC90");
}
прекъсване;
}
}
void setColor (int червен, int green, int blue)
{
analogWrite (ledR, червен);
analogWrite (ledG, зелен);
analogWrite (ledB, син);
}
дълъг doPing ()
{
digitalWrite (pingPin, LOW);
забавянеМикросекунди (2);
digitalWrite (pingPin, HIGH);
забавянеМикросекунди (5);
digitalWrite (pingPin, LOW);
връщане импулсIn (echoPin, HIGH);
}
дълги микросекундиToInches (дълги микросекунди)
{
// Според информационния лист на Parallax за PING))), има
// 73.746 микросекунди на инч (т.е. звукът се движи със скорост 1130 фута на per
// втори). Това дава изминатото разстояние от пинга
// и се връщаме, така че разделяме на 2, за да получим разстоянието на препятствието.
// Вижте: http://www.parallax.com/dl/docs/prod/acc/28015-PING-v1.3.pdf
връщане на микросекунди / 74/2;
}
дълги микросекундиToCentimeters (дълги микросекунди)
{
// Скоростта на звука е 340 m / s или 29 микросекунди на сантиметър.
// Пингът пътува назад и назад, така че да намери разстоянието на
// обект, заемаме половината от изминатото разстояние.
връщане на микросекунди / 29/2;
}
Характеристика на програмата е изпращането на съобщения за отстраняване на грешки за случващото се в момента към монитора на серийния порт Arduino IDE. След като се уверите, че всичко работи правилно, в бъдеще можете да захранвате устройството не от компютъра, а от захранването.
Редът за изпращане на команди:1. Включете или изключете телевизора: махнете дланта си пред далекомера на разстояние от 0 до 75 мм, RGB светодиодът ще светне лилаво за 5 секунди, докато той свети, махайте отново на същото разстояние.
2. Намалете номера на канала - люлеете се на разстояние от 75 (не включва) до 250 мм. Zoom - същото, но на разстояние от 250 (не включва) до 500 mm.
3. Намалете или увеличете силата на звука - същата като при каналите, но не махайте, а дръжте дланта си неподвижна. Докато потребителят държи дланта си, силата на звука в зависимост от разстоянието намалява или се увеличава по същата логика като номера на канала.
За да използвате други функции (EPG, телетекст, нискочестотен вход и т.н.), трябва да държите редовно дистанционно управление до себе си. В съвременните условия е препоръчително да програмирате устройството за управление на DVB-T2 стандартна приставка. В случая с музикалния център всичко е различно: аналоговото излъчване все още е налице, въпреки че в бъдеще ще има преход към стартиращия DAB + или DRM +.
След като отстрани грешката в структурата, тя трябва да бъде поставена в тялото на всяка структура - от произведената
направете го сами от плексиглас, шперплат, до всяка подходяща готова кутия, например запояване. В корпуса трябва да има отвори за далекомер, кабел и двата светодиода. Препоръчително е да насочите далекомера и RGB светодиода в една посока, а IR диода в обратна посока.