Eine Fernsteuerung für unsere Stimmungslaterne - AZ-Delivery

El farol está junto a mí en casa en un rincón que no debe ser conseguido tan fácilmente de la mano. Cada vez la clavija de parte de red entran o un interruptor accionan alrededor del farol y respectivamente desconectar, por eso, encuentro un poco penosamente. ¡A pesar de todo esto tiene que ir también de otra manera! Y sí, está también de otra manera, o sea, fiel al televisor el modelo, con un mando a distancia Infrarrojo. Antes de que nosotros sin embargo cómodamente en el sofá comencemos podemos poder y desconect nuestro farolcito con el mando a distancia y, nosotros tenemos que dar como siempre algunos cambios y preparaciones. Lo más importante que necesitamos al principio, ante todo el mando a distancia mismo es. Me tengo firmemente para mis televisores el mando a distancia que tiene todavía algunas teclas no utilizadas que quisiera usar con eso. Con eso sin embargo más tarde más. Lo cercano que necesitamos De lados de hardware, esto es IR receptor KY-022 el módulo. de nuestro AZ Delivery Shop. Nosotros necesitamos éste, para que nuestro Nano las señales Infrarrojo reciban y puede evaluar. Alambramos nuestro nuevo módulo como sigue:

Fritzing el plan de cambio - Con el receptor IR

Cómo debe ser reconocido, las señales de IR Receivers en Pin 11 de Nanos son acompañadas y son evaluadas por Arduino. Para que Arduino pueda evaluar las señales infrarrojas necesitamos para nuestro código la biblioteca IRRemote tenemos que bajar e instalar antes en IDE. Después de la instalación de la biblioteca cargamos en lo alto el código siguiente:

 

#include <Adafruit_NeoPixel.h>
#include <IRremote.h>

#define PIN        6  //¿Which pin on the Arduino is connected to neopíxeles the?
#define RECV_PIN 11  //define el input IR pin on Arduino 
#define NUMPIXELS 12 //¿How many neopíxeles are attached to the Arduino?//Popularmente el neopíxel lucha size

Adafruit_NeoPixel píxeles(NUMPIXELS, PIN, NEO_GRB + NEO_KHZ800);
IRrecv irrecv(RECV_PIN);
decode_results results; //decode_results class is defined en IRremote.h

long FirelastTime = 0;
long IRlastTime = 0;
long TimerlastTime = 0;
int interval;
long IRCode = 0;
long OLDIRCode = 0;
bool FireON = false;
bool FireOFF = false;
byte FireSequence = 0;

void Setup()
{   Serial.begin(115200);   while (!Serial);   //wait until Serial is established - required on some Platforms   irrecv.enableIRIn(); //Salida the receiver   píxeles.begin(); //Neopíxeles INITIALIZE   píxeles.show(); //Initialize todos los píxeles to 'off'   interval = 400;   randomSeed(analogRead(0));
}

void SimulateFire (bool On, int FireSq)
{   if (millis() - FirelastTime >= interval)   {     if (On)     {       FireOFF = false;       FirelastTime = millis();       byte LightValue[NUMPIXELS * 3];       byte FireColor = 60;       interval = random(150, 200);       FireColor = 60; //random (0,50);       for (int i = 0; i < NUMPIXELS; i++)       { //For each el píxel...         LightValue[i * 3] = random(240, 255); // 250         LightValue[i * 3 + 1] = random(30, 60); // 50         LightValue[i * 3 + 2] = 0;       }       //Switch some lights darker       byte LightsOff  = random(0, 4);       for (int i = 0; i < LightsOff; i++)       {         byte Selected = random(NUMPIXELS);         LightValue[Selected * 3] = random(50, 60);         LightValue[Selected * 3 + 1] = random(5, 10);         LightValue[Selected * 3 + 2] = 0;       }       for (int i = 0; i < NUMPIXELS; i++)       { //For each el píxel...         píxeles.setPixelColor(i, LightValue[i * 3], LightValue[i * 3 + 1], LightValue[i * 3 + 2]);       }       noInterrupts();       píxeles.show();   //Envía the updated el píxel colors to el hardware the.       irrecv.resume();       interrupts();     }     else     {       if (!(FireOFF))       {         píxeles.clear();         noInterrupts();         píxeles.show();   //Envía the updated el píxel colors to el hardware the.         irrecv.resume();         interrupts();         FireOFF = true;       }     }   }
}

long ReceiveIrCommand ()
{   long result = 0;   if (millis() - IRlastTime >= 200)   {     IRlastTime = millis();     if (irrecv.decode(&results))     {       result = results.value;       irrecv.resume(); //Receive the next value       return result;     }     //irrecv.resume ();//Receive the next value   }   return 0 ;
}

void IRCommandProcessor (long IrCommand)
{   if (IRCode == OLDIRCode) {     TimerlastTime = millis(); //Some stuff about debouncing IR Remote   }   if (millis() - TimerlastTime >= 400) {     OLDIRCode = 0 ; //Some stuff about debouncing IR Remote   }   if ((IRCode < -1) & (IRCode != OLDIRCode))   //Señal IR Received   {     OLDIRCode = IRCode;                                           //Some stuff about debouncing IR Remote     switch (IRCode)     {       case -522164073:        //En my case a blue Switch on my la tele - Remote         {           FireON = !FireON;         }         break;       default:         Serial.println(IRCode);         break;     }   }
}

void loop()
{   IRCode = ReceiveIrCommand();   IRCommandProcessor(IRCode);   SimulateFire(FireON, FireSequence);
}

Antes de que podamos integrar ahora sin embargo nuestro mando a distancia propio, tenemos que abrir antes en primer lugar la ventana de terminal en una velocidad de interfaces de 115200 Baud. Ahora sostenemos nuestro mando a distancia escogido delante del sensor y aprietan algunas teclas. Un gasto debía ser a mirar aproximadamente como sigue:

Gasto el terminal la ventana: números largos con el signo negativo

Los números largos negativos a cada presión sobre la tecla en el mando a distancia son indicados, corresponden al código Infrarrojo, la tecla respectiva en el mando a distancia. Por ejemplo, el número-522145713 corresponde a la tecla „1“ en el mando a distancia. Si queremos usar la tecla „1“ al un desconectar y nuestro farol, tenemos que registrar este "código de números" en nuestro Arduino el código. Lo hacemos en el lugar siguiente en el código:

switch (IRCode)
{
case-522145713://Aquí el código de números IR establecido propio para
//registran la función / de
{
¡FireON =! FireON;
}

Desde ahora el código no es indicado más con la actividad de la tecla de mando a distancia elegida en el monitor en serie, sin embargo en la recepción el farol un y respectivamente es desconectado.
El lector inclinado habrá reconocido probablemente ya que sobre la estructura "switch-case" no sólo códigos de mando a distancia para el embrague y le fait de desconecta del farol se dejan utilizar, sino con eso cualesquiera ampliaciones de las funciones dejan llevar a cabo. En la parte cercana de la fila lo miramos exactamente y ampliamos las funciones de nuestro farol en tipos de simulación de fuego diferentes. Me os alegro pronto ya poder poner a la disposición de la parte cercana y os desea mucha diversión copiando. Preguntas son naturales como siempre de todo corazón bienvenido.

 

 

Für arduinoProjekte für fortgeschrittene

8 comentarios

Randolf

Randolf

Ich habe das gleich Problem , jedesmal wenn ich eine Taste drücke kommt ein anderer Code raus.
Schaltung funktioniert aber eben nur wenn man die Taste mehrfach drückt kommt das Programm welches dahinter steht .
sieht so aus im Monitor , immer die gleiche Taste gedrückt .
3:53:14.848 → -1821391323
23:53:14.915 → -1
23:53:15.418 → -1
23:53:16.627 → -1
23:53:18.351 → 280931138
23:53:18.385 → -1
23:53:19.457 → -1124551177
23:53:20.157 → -781353116
23:53:20.192 → -1
23:53:20.937 → 1744117259
23:53:21.003 → -1

Dirk, der olle brummbaer

Dirk, der olle brummbaer

Moin Tobias!
Der Tip mit der geänderten Codezeile war Klasse; jetzt funzen alle in meiner Reichweite befindlichen Fernbedienungen… :D
Leider habe ich noch ein anderes Problem: obwohl die Schaltung wie gezeichnet aufgebaut wurde, bekomme ich bei mehreren Impulsen (aus der mechanisch identischen Position) entweder gar keine oder unterschiedliche Werte zurück gemeldet. Somit ist das Ein- und Ausschalten des Ringes ein reines Glücksspiel (ausprobiert habe ich es mit drei verschiedenen Folientastaturen und der von meinem Fernseher – identische Ergebnisse).

Langer Rede kurzer Sinn: Hiiiiiilfe!!

Lass’ mal von Dir lesen.

Dirk

Tobias Kuch

Tobias Kuch

Hallo Mirko,
Probiere mal bitte folgende Code Änderung aus :

if ((IRCode != 0) & (IRCode != OLDIRCode))

Damit sollten jetzt beide Fernbedienungsarten funktionieren.

Mirko Voigtländer

Mirko Voigtländer

Der verwendete Code “(IRCode < -1)” verhindert die Benutzung der Folienfernbedienungen, die in vielen Lern- und Experimentierbausätzen mit geliefert werden.
Ich habe den Code wie folgt abgeändert “(IRCode > 0)”.
Jetzt funktionieren allerdings alle anderen Fernbedienungen nicht mehr.

Markus Neumann

Markus Neumann

Hallo Bert,

das gezeigte Netzteil trägt die Bezeichnung “MB102”. Im Shop ist es zu finden unter: https://www.az-delivery.de/products/mb102-breadboard

Viele Grüße und ein schönes Wochenende!
Markus

Bert

Bert

Unter welcher Bestellnummer ist das 5 v Netzteil erhältlich ?
=> https://cdn.shopify.com/s/files/1/1509/1638/files/Teil2-Fritzing_grande.jpg?v=1566908403

Georg

Georg

Hallo Hr Frey, das ich auch ein Einsteiger bin und mit Programmieren nichts zu tun gehabt habe bin gezwungen solchen Beispielen folgen. Schritt für Schritt habe alles aufgebaut, kopiert und doch ist mir irgendwo ein Fehler unterlaufen denn ich nicht finden kann. Zu Zeit bin in der Lage denn WS2812b Ring mit Hilfe einer Fernbedienung einschalten aber das ausschalten will nicht funktionieren. Über Ratschläge möchte ich mich sehr freuen.
Es grüßt, Georg

Stefan Frey

Stefan Frey

Schönes, einfaches, aber effektvolles Projekt für Einsteiger, gut erklärt.

Deja un comentario

Todos los comentarios son moderados antes de ser publicados