Les fabricants d'électronique arrivent progressivement à la conclusion que la meilleure télécommande est la paume de l'utilisateur. Ainsi, dans la nouvelle colonne "Yandex.Station Mini" fournit une telle gestion. Ne restez pas à l'écart des tendances et des amis. Par exemple, l'auteur d'Instructables sous le surnom dan_nicholson est venu avec un appareil simple qui vous permet de contrôler votre téléviseur avec des gestes. Par défaut, il est programmé pour fonctionner avec les téléviseurs Sony, mais peut également être configuré pour contrôler tous les autres téléviseurs, centres de musique, etc. Comme le montre KDPV, consiste
fait maison du télémètre
Arduino et plusieurs composants supplémentaires. Peut être rendu encore plus compact:
Et encore plus compact si vous abandonnez la planche à pain et connectez tout en soudant à l'aide de fils. Le maître fait un diagramme d'appareil dans le programme Fritzing, que tout le monde n'aime pas, mais ne se précipite pas pour lancer des pantoufles, cette méthode de dessin de diagrammes peut également être pratique. Le maître connecte une LED infrarouge via une résistance, et tous les cristaux de la LED RGB sont directement connectés. Il écrit que les résistances sont également souhaitables ici, mais en fait elles sont nécessaires.
Après avoir assemblé le circuit, le maître prend la bibliothèque
iciet les codes de commande sont
iciécrit et remplit l'esquisse:
/ * Glisser la télécommande
Cette esquisse utilise un télémètre à ultrasons pour déterminer le geste de l'utilisateur et émet un signal infrarouge vers un téléviseur Sony en fonction de la commande donnée.
- Balayage élevé (> 10 pouces) = Canal haut
- Balayage bas = Canal vers le bas
- Maintien élevé (> 10 pouces) = Augmentation du volume
- Maintien bas = Volume bas
- Capteur de couverture (<3 pouces) = Activer / désactiver
Créé par Dan Nicholson.
Cet exemple de code est dans le domaine public.
Ce code utilise la bibliothèque IRremote (https://github.com/shirriff/Arduino-IRremote)
* /
#include
// Définit pour les fonctions de contrôle
#define CONTROL_CH 1 // Changement de chaîne
#define CONTROL_VOL 2 // Volume
#define CONTROL_POW 3 // Puissance
#define CONTROL_UP 1
#define CONTROL_DOWN -1
#define DIST_MAX 20 // Distance maximale en pouces, tout ce qui précède est ignoré.
#define DIST_DOWN 10 // Seuil pour les commandes haut / bas. S'il est supérieur, la commande est "up". Si inférieur, "vers le bas".
#define DIST_POW 3 // Seuil de commande d'alimentation, inférieur à = mise sous / hors tension
// PIN IR
const int irPin = 3; // c'est défini dans la bibliothèque, ce var n'est qu'un rappel. CHANGER CECI NE CHANGERA PAS LE PIN DANS LA BIBLIOTHÈQUE
// Capteur Ping à 2 broches
const int pingPin = 8;
const int echoPin = 7;
// Broches LED de confirmation
const int led = 13; // LED interne pour le débogage haut / bas
const int ledR = 11;
const int ledG = 10;
const int ledB = 9;
// LED sur minuterie
minuterie longue non signée;
// Objet émetteur IR
IRsend irsend;
// Indicateur de confirmation d'alimentation (nécessite deux balayages pour envoyer le signal)
boolean powerConfirmed = false;
void setup () {
// initialise la communication série et définit les broches
Serial.begin (9600);
pinMode (led, SORTIE);
pinMode (ledR, OUTPUT);
pinMode (ledG, OUTPUT);
pinMode (ledB, OUTPUT);
pinMode (pingPin, OUTPUT);
pinMode (echoPin, INPUT);
timer = millis ();
}
boucle vide ()
{
// Serial.println (millis ());
longue durée, pouces;
valeur int;
// Vérifier une lecture
durée = doPing ();
// Minuterie pour confirmer les actions (actuellement uniquement sous tension)
if (timer && timer <(millis () - 5000) && (millis ()> 5000))
{
Serial.println ("réinitialisation de la minuterie");
timer = false;
}
digitalWrite (led, LOW);
setColor (0, 0, 0); // off
// convertir le temps en distance
pouces = microsecondes à pouces (durée);
// Si à moins de pouces max, agir
si (pouces DIST_MAX)
{
doIR (CONTROL_CH, valeur); // glisser
}
d'autre
{
// volume
int d = 500; // le premier délai est plus long pour un changement de volume unique
// répète jusqu'à ce que la main soit retirée
tandis que (pouces DIST_DOWN)
{
digitalWrite (led, HIGH);
return CONTROL_UP;
}
d'autre
{
digitalWrite (led, LOW);
return CONTROL_DOWN;
}
}
/ *
* Déclenchez le code IR correct
* /
void doIR (int control, int val)
{
interrupteur (contrôle)
{
case CONTROL_POW:
// puissance
Serial.println ("mise sous / hors tension 0xa90");
pour (int i = 0; i <3; i ++)
{
setColor (255, 0, 0);
irsend.sendSony (0xa90, 12); // Code d'alimentation Sony TV
retard (40);
}
casser;
case CONTROL_CH:
setColor (0, 255, 0);
// sortie 'canal haut / bas' selon val
if (val == CONTROL_UP)
{
digitalWrite (led, HIGH);
pour (int i = 0; i <3; i ++)
{
irsend.sendSony (0x90, 12);
retard (40);
}
Serial.println ("canal up 0xD00A");
}
else // down
{
pour (int i = 0; i <3; i ++)
{
irsend.sendSony (0x890, 12);
retard (40);
}
Serial.println ("canal vers le bas 0x3002");
}
casser;
case CONTROL_VOL:
setColor (0, 0, 255);
// sortie 'volume haut / bas' selon val
if (val == CONTROL_UP)
{
digitalWrite (led, HIGH);
pour (int i = 0; i <3; i ++)
{
irsend.sendSony (0x490, 12);
retard (40);
}
Serial.println ("volume up 0x490");
}
else // down
{
pour (int i = 0; i <3; i ++)
{
irsend.sendSony (0xC90, 12);
retard (40);
}
Serial.println ("volume bas 0xC90");
}
casser;
}
}
void setColor (int rouge, int vert, int bleu)
{
analogWrite (ledR, rouge);
analogWrite (ledG, vert);
analogWrite (ledB, bleu);
}
longue doPing ()
{
digitalWrite (pingPin, LOW);
delayMicroseconds (2);
digitalWrite (pingPin, HIGH);
delayMicroseconds (5);
digitalWrite (pingPin, LOW);
return pulseIn (echoPin, HIGH);
}
microsecondes longuesToInches (microsecondes longues)
{
// Selon la fiche technique de Parallax pour le PING))), il existe
// 73,746 microsecondes par pouce (c'est-à-dire que le son se déplace à 1130 pieds par
// seconde). Cela donne la distance parcourue par le ping, sortant
// et revenons, donc nous divisons par 2 pour obtenir la distance de l'obstacle.
// Voir: http://www.parallax.com/dl/docs/prod/acc/28015-PING-v1.3.pdf
retour microsecondes / 74/2;
}
microsecondes longues ToCentimeters (microsecondes longues)
{
// La vitesse du son est de 340 m / s ou 29 microsecondes par centimètre.
// Le ping va et vient, donc pour trouver la distance du
// objet on prend la moitié de la distance parcourue.
retour microsecondes / 29/2;
}
Une caractéristique du programme est l'envoi de messages de débogage sur ce qui se passe en ce moment au moniteur de port série IDE Arduino. Après vous être assuré que tout fonctionne correctement, vous pourrez à l'avenir alimenter l'appareil non pas à partir de l'ordinateur, mais à partir de l'alimentation.
L'ordre d'envoi des commandes:1. Allumez ou éteignez le téléviseur: agitez votre paume devant le télémètre à une distance de 0 à 75 mm, la LED RGB s'allumera en violet pendant 5 secondes, tandis qu'elle est allumée, ondulez à nouveau à la même distance.
2. Diminuez le numéro de canal - oscillez à une distance de 75 (non inclus) à 250 mm. Zoom - le même, mais à une distance de 250 (non inclus) à 500 mm.
3. Diminuez ou augmentez le volume - comme pour les canaux, mais n'agitez pas, mais tenez votre paume immobile. Pendant que l'utilisateur tient sa paume, le volume, selon la distance, diminue ou augmente selon la même logique que le numéro de canal.
Pour utiliser le reste des fonctions (EPG, télétexte, entrée des basses, etc.), vous devez garder une télécommande régulière à côté de vous. Dans des conditions modernes, il est conseillé de programmer l'appareil pour contrôler un décodeur DVB-T2 standard. Dans le cas du music center, tout est différent: la diffusion analogique reste pour le moment, bien qu'à l'avenir il y aura une transition vers la start-up DAB + ou DRM +.
Après avoir débogué la structure, elle doit être placée dans le corps de toute structure - à partir de la fabrication
fais-le toi-même du plexiglas, du contreplaqué, à toute boîte finie appropriée, par exemple la soudure. Des trous doivent être prévus dans le boîtier pour le télémètre, le câble et les deux LED. Il est conseillé de diriger le télémètre et la LED RGB dans une direction, et la diode IR dans la direction opposée.