Die Elektronikhersteller kommen nach und nach zu dem Schluss, dass die beste Fernbedienung die Handfläche des Benutzers ist. In der neuen Spalte bietet "Yandex.Station Mini" eine solche Verwaltung. Stellen Sie sich nicht von Trends und Freunden ab. Zum Beispiel hat der Autor von Instructables unter dem Spitznamen dan_nicholson ein einfaches Gerät entwickelt, mit dem Sie Ihren Fernseher mit Gesten steuern können. Standardmäßig ist es für die Verwendung mit Sony-Fernsehgeräten programmiert, kann jedoch auch für die Steuerung anderer Fernsehgeräte, Musikzentren usw. konfiguriert werden. Wie aus KDPV ersichtlich ist, besteht
hausgemacht vom Entfernungsmesser
Arduino und mehrere zusätzliche Komponenten. Kann noch kompakter gemacht werden:
Und noch kompakter, wenn Sie das Steckbrett verlassen und alles durch Löten mit Drähten verbinden. Der Master erstellt im Fritzing-Programm ein Gerätediagramm, das nicht jedem gefällt, aber er beeilt sich nicht, Hausschuhe zu werfen. Diese Methode zum Erstellen von Diagrammen kann auch praktisch sein. Der Master verbindet eine Infrarot-LED über einen Widerstand, und alle Kristalle der RGB-LED sind direkt verbunden. Er schreibt, dass Widerstände auch hier wünschenswert sind, aber tatsächlich erforderlich sind.
Nach dem Zusammenbau der Schaltung nimmt der Master die Bibliothek
hierund die Befehlscodes sind
hierschreibt und füllt die Skizze:
/ * Wischfernbedienung
Diese Skizze verwendet einen Ultraschall-Entfernungsmesser, um die Geste des Benutzers zu bestimmen, und gibt basierend auf dem angegebenen Befehl ein IR-Signal an ein Sony-Fernsehgerät aus.
- High Swipe (> 10 Zoll) = Channel Up
- Low Swipe = Channel Down
- High Hold (> 10 Zoll) = Lauter
- Low Hold = Lautstärke verringern
- Abdeckungssensor (<3 Zoll) = Ein- / Ausschalten
Erstellt von Dan Nicholson.
Dieser Beispielcode ist gemeinfrei.
Dieser Code verwendet die IRremote-Bibliothek (https://github.com/shirriff/Arduino-IRremote).
* /
#include
// Definiert für Steuerfunktionen
#define CONTROL_CH 1 // Kanalwechsel
#define CONTROL_VOL 2 // Volume
#define CONTROL_POW 3 // Power
#define CONTROL_UP 1
#define CONTROL_DOWN -1
#define DIST_MAX 20 // Maximaler Abstand in Zoll, alles darüber wird ignoriert.
#define DIST_DOWN 10 // Schwellenwert für Auf- / Ab-Befehle. Wenn höher, ist der Befehl "up". Wenn niedriger, "unten".
#define DIST_POW 3 // Schwellenwert für den Energiebefehl, niedriger als = Ein- / Ausschalten
// IR-PIN
const int irPin = 3; // Dies ist in der Bibliothek definiert. Diese Variable ist nur eine Erinnerung. Wenn Sie dies ändern, wird die PIN in der Bibliothek nicht geändert
// 2-poliger Ping-Sensor
const int pingPin = 8;
const int echoPin = 7;
// Bestätigungs-LED-Pins
const int led = 13; // interne LED für Up / Down-Debugging
const int ledR = 11;
const int ledG = 10;
const int ledB = 9;
// LED am Timer
vorzeichenloser langer Timer;
// IR-Senderobjekt
IRsend irsend;
// Power-Bestätigungsflag (benötigt zwei Wischbewegungen, um das Signal zu senden)
boolean powerConfirmed = false;
void setup () {
// Serielle Kommunikation initialisieren und Pins setzen
Serial.begin (9600);
PinMode (LED, OUTPUT);
pinMode (ledR, OUTPUT);
pinMode (ledG, OUTPUT);
pinMode (ledB, OUTPUT);
pinMode (pingPin, OUTPUT);
pinMode (echoPin, INPUT);
Timer = Millis ();
}}
void loop ()
{
// Serial.println (millis ());
lange Dauer, Zoll;
int value;
// Nach einer Lesung suchen
Dauer = doPing ();
// Timer zur Bestätigung von Aktionen (derzeit nur Stromversorgung)
if (Timer && Timer <(Millis () - 5000) && (Millis ()> 5000))
{
Serial.println ("Timer zurückgesetzt");
Timer = falsch;
}}
digitalWrite (LED, LOW);
setColor (0, 0, 0); // aus
// konvertiere die Zeit in eine Distanz
Zoll = MikrosekundenToInches (Dauer);
// Wenn weniger als max Zoll entfernt, handeln
if (Zoll DIST_MAX)
{
doIR (CONTROL_CH, Wert); // wischen
}}
sonst
{
// Lautstärke
int d = 500; // Die erste Verzögerung ist bei Änderung der einzelnen Lautstärke länger
// Wiederholen, bis die Hand entfernt ist
while (Zoll DIST_DOWN)
{
digitalWrite (LED, HIGH);
return CONTROL_UP;
}}
sonst
{
digitalWrite (LED, LOW);
return CONTROL_DOWN;
}}
}}
/ *
* Feuern Sie den korrekten IR-Code ab
* /
void doIR (int control, int val)
{
Schalter (Steuerung)
{
case CONTROL_POW:
// Macht
Serial.println ("Ein- / Ausschalten 0xa90");
für (int i = 0; i <3; i ++)
{
setColor (255, 0, 0);
irsend.sendSony (0xa90, 12); // Sony TV-Stromversorgungscode
Verzögerung (40);
}}
Pause;
case CONTROL_CH:
setColor (0, 255, 0);
// 'Kanal hoch / runter' ausgeben je nach Wert
if (val == CONTROL_UP)
{
digitalWrite (LED, HIGH);
für (int i = 0; i <3; i ++)
{
irsend.sendSony (0x90, 12);
Verzögerung (40);
}}
Serial.println ("channel up 0xD00A");
}}
sonst // runter
{
für (int i = 0; i <3; i ++)
{
irsend.sendSony (0x890, 12);
Verzögerung (40);
}}
Serial.println ("Kanal runter 0x3002");
}}
Pause;
case CONTROL_VOL:
setColor (0, 0, 255);
// 'Lautstärke erhöhen / verringern' je nach Wert ausgeben
if (val == CONTROL_UP)
{
digitalWrite (LED, HIGH);
für (int i = 0; i <3; i ++)
{
irsend.sendSony (0x490, 12);
Verzögerung (40);
}}
Serial.println ("Volume up 0x490");
}}
sonst // runter
{
für (int i = 0; i <3; i ++)
{
irsend.sendSony (0xC90, 12);
Verzögerung (40);
}}
Serial.println ("Lautstärke 0xC90");
}}
Pause;
}}
}}
void setColor (int rot, int grün, int blau)
{
analogWrite (ledR, rot);
analogWrite (ledG, grün);
analogWrite (ledB, blau);
}}
langes doPing ()
{
digitalWrite (pingPin, LOW);
delayMicroseconds (2);
digitalWrite (pingPin, HIGH);
delayMicroseconds (5);
digitalWrite (pingPin, LOW);
return pulsIn (echoPin, HIGH);
}}
lange MikrosekundenToInches (lange Mikrosekunden)
{
// Laut Parallax 'Datenblatt für den PING))) gibt es
// 73,746 Mikrosekunden pro Zoll (d. H. Schall bewegt sich mit 1130 Fuß pro Zoll
// Sekunde). Dies gibt die vom Ping zurückgelegte Strecke an
// und kehre zurück, also teilen wir durch 2, um die Entfernung des Hindernisses zu erhalten.
// Siehe: http://www.parallax.com/dl/docs/prod/acc/28015-PING-v1.3.pdf
Rückgabe Mikrosekunden / 74/2;
}}
lange Mikrosekunden bis Zentimeter (lange Mikrosekunden)
{
// Die Schallgeschwindigkeit beträgt 340 m / s oder 29 Mikrosekunden pro Zentimeter.
// Der Ping bewegt sich hin und her, um die Entfernung des zu ermitteln
// Objekt nehmen wir die Hälfte der zurückgelegten Strecke.
Rückgabe Mikrosekunden / 29/2;
}}
Eine Funktion des Programms ist das Senden von Debugging-Nachrichten über die aktuellen Ereignisse an den Monitor der seriellen Schnittstelle von Arduino IDE. Nachdem Sie sichergestellt haben, dass alles ordnungsgemäß funktioniert, können Sie das Gerät in Zukunft nicht mehr über den Computer, sondern über das Netzteil mit Strom versorgen.
Die Reihenfolge des Sendens von Befehlen:1. Schalten Sie den Fernseher ein oder aus: Bewegen Sie Ihre Handfläche in einem Abstand von 0 bis 75 mm vor dem Entfernungsmesser. Die RGB-LED leuchtet 5 Sekunden lang lila, während sie leuchtet. Winken Sie erneut im gleichen Abstand.
2. Verringern Sie die Kanalnummer - schwingen Sie in einem Abstand von 75 (nicht inklusive) auf 250 mm. Zoom - das gleiche, aber in einem Abstand von 250 (nicht inklusive) bis 500 mm.
3. Verringern oder erhöhen Sie die Lautstärke - genau wie bei den Kanälen, aber winken Sie nicht, sondern halten Sie Ihre Handfläche bewegungslos. Während der Benutzer seine Handfläche hält, verringert oder erhöht sich die Lautstärke je nach Entfernung gemäß derselben Logik wie die Kanalnummer.
Um die restlichen Funktionen (EPG, Videotext, Bass-Eingang usw.) nutzen zu können, sollten Sie eine normale Fernbedienung neben sich haben. Unter modernen Bedingungen ist es ratsam, das Gerät so zu programmieren, dass es eine DVB-T2-Standard-Set-Top-Box steuert. Beim Music Center ist alles anders: Der analoge Rundfunk bleibt vorerst bestehen, obwohl es in Zukunft einen Übergang zum Start-up DAB + oder DRM + geben wird.
Nach dem Debuggen der Struktur sollte sie in den Körper jeder Struktur eingesetzt werden - von der hergestellten
mit seinen eigenen Händen von Plexiglas, Sperrholz bis zu jeder geeigneten fertigen Box, zum Beispiel Löten. Im Gehäuse sollten Löcher für den Entfernungsmesser, das Kabel und beide LEDs vorhanden sein. Es ist ratsam, den Entfernungsmesser und die RGB-LED in eine Richtung und die IR-Diode in die entgegengesetzte Richtung zu richten.