Elektronicafabrikanten komen geleidelijk tot de conclusie dat de beste afstandsbediening de handpalm van de gebruiker is. Dus in de nieuwe kolom "Yandex.Station Mini" biedt een dergelijk beheer. Blijf niet los van trends en vrienden. Zo bedacht de auteur van Instructables onder de bijnaam dan_nicholson bijvoorbeeld een eenvoudig apparaat waarmee je je tv kunt bedienen met gebaren. Standaard is het geprogrammeerd om te werken met Sony-tv's, maar het kan ook worden geconfigureerd om andere tv's, muziekcentra, enz. Te bedienen. Zoals te zien is bij KDPV, bestaat
zelfgemaakt uit de afstandsmeter
Arduino en verschillende extra componenten. Kan nog compacter worden gemaakt:
En nog compacter als je de breadboard verlaat en alles aansluit door te solderen met draden. De meester maakt een apparaatdiagram in het Fritzing-programma, wat niet iedereen leuk vindt, maar haast je niet om slippers te gooien, deze methode voor het opstellen van diagrammen kan ook handig zijn. De master sluit een infrarood-led aan via een weerstand en alle kristallen van de RGB-led zijn direct aangesloten. Hij schrijft dat weerstanden ook hier wenselijk zijn, maar in feite wel.
Nadat hij het circuit heeft samengesteld, neemt de meester de bibliotheek
hier, en de opdrachtcodes zijn
hierschrijft en vult de schets:
/ * Veeg over de afstandsbediening
Deze schets gebruikt een ultrasone afstandsmeter om het gebaar van de gebruiker te bepalen en voert een IR-signaal uit naar een Sony-tv op basis van de gegeven opdracht.
- Hoge veeg (> 10in) = kanaal omhoog
- Lage veeg = Channel Down
- High hold (> 10in) = Volume hoger
- Low hold = Volume lager
- Cover sensor (<3in) = inschakelen / uitschakelen
Gemaakt door Dan Nicholson.
Deze voorbeeldcode bevindt zich in het publieke domein.
Deze code maakt gebruik van de IRremote-bibliotheek (https://github.com/shirriff/Arduino-IRremote)
* /
#include
// Definieert voor besturingsfuncties
#define CONTROL_CH 1 // Kanaalwisseling
#define CONTROL_VOL 2 // Volume
#define CONTROL_POW 3 // Vermogen
#define CONTROL_UP 1
#define CONTROL_DOWN -1
#define DIST_MAX 20 // Maximale afstand in inches, alles hierboven wordt genegeerd.
#define DIST_DOWN 10 // Drempel voor op / neer-opdrachten. Indien hoger is het commando "up". Indien lager, "omlaag".
#define DIST_POW 3 // Drempel voor aan / uit-commando, lager dan = aan / uitzetten
// IR PIN
const int irPin = 3; // dit is gedefinieerd in de bibliotheek, deze var is slechts een herinnering. HET VERANDEREN VAN DIT ZAL DE PIN IN DE BIBLIOTHEEK NIET VERANDEREN
// 2-pins ping-sensor
const int pingPin = 8;
const int echoPin = 7;
// Bevestiging LED-pinnen
const int led = 13; // interne LED voor up / down debugging
const int ledR = 11;
const int ledG = 10;
const int ledB = 9;
// LED op timer
ongetekende lange timer;
// IR-zenderobject
IRsend irsend;
// Stroombevestigingsvlag (vereist twee veegbewegingen om signaal te verzenden)
boolean powerConfirmed = false;
ongeldige setup () {
// initialiseer seriële communicatie en stel pinnen in
Serial.begin (9600);
pinMode (led, OUTPUT);
pinMode (ledR, OUTPUT);
pinMode (ledG, OUTPUT);
pinMode (ledB, OUTPUT);
pinMode (pingPin, OUTPUT);
pinMode (echoPin, INPUT);
timer = millis ();
}
leegte lus ()
{
// Serial.println (millis ());
lange duur, inches;
int waarde;
// Controleer op een lezing
duur = doPing ();
// Timer om acties te bevestigen (momenteel alleen stroom)
if (timer && timer <(millis () - 5000) && (millis ()> 5000))
{
Serial.println ("timer reset");
timer = false;
}
digitalWrite (led, LOW);
setColor (0, 0, 0); // uit
// zet de tijd om in een afstand
inches = microsecondsToInches (duur);
// Als iets minder dan max. Inches verwijderd is, handel dan
if (inches DIST_MAX)
{
doIR (CONTROL_CH, waarde); // vegen
}
anders
{
// volume
int d = 500; // eerste vertraging is langer voor een enkele volumeverandering
// herhaal tot de hand is verwijderd
terwijl (inches DIST_DOWN)
{
digitalWrite (led, HIGH);
retourneer CONTROL_UP;
}
anders
{
digitalWrite (led, LOW);
retourneer CONTROL_DOWN;
}
}
/ *
* Vuur de juiste IR-code af
* /
void doIR (int control, int val)
{
schakelaar (controle)
{
case CONTROL_POW:
// kracht
Serial.println ("power on / off 0xa90");
voor (int i = 0; i <3; i ++)
{
setColor (255, 0, 0);
irsend.sendSony (0xa90, 12); // Sony TV-voedingscode
vertraging (40);
}
breken;
case CONTROL_CH:
setColor (0, 255, 0);
// output 'kanaal omhoog / omlaag' afhankelijk van val
if (val == CONTROL_UP)
{
digitalWrite (led, HIGH);
voor (int i = 0; i <3; i ++)
{
irsend.sendSony (0x90, 12);
vertraging (40);
}
Serial.println ("channel up 0xD00A");
}
anders // beneden
{
voor (int i = 0; i <3; i ++)
{
irsend.sendSony (0x890, 12);
vertraging (40);
}
Serial.println ("channel down 0x3002");
}
breken;
case CONTROL_VOL:
setColor (0, 0, 255);
// output 'volume omhoog / omlaag' afhankelijk van val
if (val == CONTROL_UP)
{
digitalWrite (led, HIGH);
voor (int i = 0; i <3; i ++)
{
irsend.sendSony (0x490, 12);
vertraging (40);
}
Serial.println ("volume omhoog 0x490");
}
anders // beneden
{
voor (int i = 0; i <3; i ++)
{
irsend.sendSony (0xC90, 12);
vertraging (40);
}
Serial.println ("volume omlaag 0xC90");
}
breken;
}
}
leegte setColor (int rood, int groen, int blauw)
{
analogWrite (ledR, rood);
analogWrite (ledG, groen);
analogWrite (ledB, blauw);
}
lang doPing ()
{
digitalWrite (pingPin, LOW);
delayMicroseconds (2);
digitalWrite (pingPin, HIGH);
delayMicroseconds (5);
digitalWrite (pingPin, LOW);
return pulseIn (echoPin, HIGH);
}
lange microsecondenToInches (lange microseconden)
{
// Volgens het gegevensblad van Parallax voor de PING))) zijn er
// 73,746 microseconden per inch (d.w.z. geluid reist op 1130 voet per
// tweede). Dit geeft de afstand die door de ping is afgelegd, uitgaand
// en terugkeren, dus delen we door 2 om de afstand van het obstakel te krijgen.
// Zie: http://www.parallax.com/dl/docs/prod/acc/28015-PING-v1.3.pdf
microseconden retourneren / 74/2;
}
lange microsecondenToCentimeters (lange microseconden)
{
// De geluidssnelheid is 340 m / s of 29 microseconden per centimeter.
// De ping reist heen en weer, dus om de afstand van de
// object nemen we de helft van de afgelegde afstand.
microseconden retourneren / 29/2;
}
Een kenmerk van het programma is het naar de Arduino IDE seriële poortmonitor verzenden van foutopsporingsberichten over wat er op dit moment gebeurt. Nadat u ervoor hebt gezorgd dat alles correct werkt, kunt u het apparaat in de toekomst niet van de computer, maar van de voeding voorzien.
De volgorde van het verzenden van opdrachten:1. Zet de tv aan of uit: zwaai met je handpalm voor de afstandsmeter op een afstand van 0 tot 75 mm, de RGB-led zal 5 seconden paars oplichten, terwijl hij oplicht, zwaai weer op dezelfde afstand.
2. Verlaag het kanaalnummer - zwaai op een afstand van 75 (niet inclusief) tot 250 mm. Zoom - hetzelfde, maar op een afstand van 250 (niet inclusief) tot 500 mm.
3. Verlaag of verhoog het volume - hetzelfde als bij de kanalen, maar zwaai niet, maar houd uw handpalm stil. Terwijl de gebruiker zijn handpalm vasthoudt, neemt het volume, afhankelijk van de afstand, af of toe volgens dezelfde logica als het kanaalnummer.
Om de rest van de functies (EPG, teletekst, basinvoer, enz.) Te gebruiken, moet u een gewone afstandsbediening naast u houden. Onder moderne omstandigheden is het raadzaam om het apparaat te programmeren om een DVB-T2 standaard set-top box te bedienen. Bij het muziekcentrum is alles anders: analoge uitzendingen blijven voorlopig, hoewel er in de toekomst een overgang zal zijn naar de start-up DAB + of DRM +.
Nadat de structuur is gedebugged, moet deze in het lichaam van elke structuur worden geplaatst - vanaf de fabricage
doe het zelf van plexiglas, multiplex tot elke geschikte afgewerkte doos, bijvoorbeeld solderen. Er moeten gaten in de behuizing zijn voorzien voor de afstandsmeter, kabel en beide LED's. Het is raadzaam om de afstandsmeter en de RGB-LED in één richting te richten, en de IR-diode in de tegenovergestelde richting.