IR control typu HX1838

Moje zkušenosti s modulem pro IR control typu HX1838 od Dratek_cz

Při překladu, když jsem si nenainstaloval potřebnou knihovnu a Arduino IDE 1.8... ji neznalo, tak se mi pro IRremote dohledala knihovna IRremote ale poslední verze 4.4.1. ..

Překlad s ní normálně prošel ale pak mi na monitoru vyjelo sáhodlouhé čtení, které jsem si hned nepřečetl a pokládal jsem to za nějaký autorův pozdrav.

IR mi částečně reagovalo nebo nereagovalo, tak co s tím, nakonec jsem se šel podívat na ten Github a tam jsem zjistil že verze IRremote 4.4.1. je na úplně jiný level komunikace, ani nevím, zda s týmž typem modulu nebo s nějakým vylepšeným, kdo má zájem, ať si to tam zkusí prostudovat.

Teprve potom jsem si přečetl, co se mi na monitoru vlastně vypsalo :

IR remote receiver version 2.6.0 from Github is on !
16:37:46.737 -> **************************************************************************
16:37:46.822 -> Thank you for using the IRremote library!
16:37:46.860 -> It seems, that you are using a old version 2.0 code / example.
16:37:46.960 -> This version is no longer supported!
16:37:46.960 -> Please use one of the new code examples from the library,
16:37:47.060 -> available at "File > Examples > Examples from Custom Libraries / IRremote".
16:37:47.107 -> Or downgrade your library to version 2.6.0.
16:37:47.192 ->
16:37:47.192 -> Start with the SimpleReceiver or SimpleSender example.
16:37:47.239 ->
16:37:47.239 -> The examples are documented here:
16:37:47.277 -> https://github.com/Arduino-IRremote/Arduino-IRremote#examples-for-this-library
16:37:47.323 -> A guide how to convert your 2.0 program is here:
16:37:47.408 -> https://github.com/Arduino-IRremote/Arduino-IRremote#converting-your-2x-program-to-the-4x-version
16:37:47.508 ->
16:37:47.508 -> Thanks
16:37:47.508 -> **************************************************************************

Tak jsem pochopil, že tu doporučenou knihovnu IRremote2 v zipu jsem si asi měl nainstalovat spíš než tu, kterou mi tam Arduino INE dohodilo.

Po její doinstalaci už pak běželo všechno tak, jak to bylo v progámku připraveno !!

Zde je kousek výpisu z monitoru :
IR-control-HX1838-Dratek-po-01 2024-11-27 1214 výpis z monitoru

12:14:02.632 -> IR remote receiver verdion 2.6.0 from Github is on !
12:14:12.807 -> FFE21D
12:14:12.807 -> Stisknuto CH+
12:14:19.077 -> FF629D
12:14:19.077 -> Stisknuto CH
12:14:23.467 -> FFA25D
12:14:23.467 -> Stisknuto CH-
. . . . . . . . .
12:14:44.391 -> FFE01F
12:14:44.391 -> Stisknuto VOL-
12:14:47.052 -> FFA857
12:14:47.052 -> Stisknuto VOL+
12:14:50.338 -> FF906F
12:14:50.338 -> Stisknuto EQ
12:14:53.616 -> FF6897
12:14:53.616 -> Stisknuto 0
12:14:55.690 -> FF9867
12:14:55.690 -> Stisknuto 100+
12:14:57.479 -> FFB04F
12:14:57.479 -> Stisknuto 200+
12:15:00.133 -> FF30CF
12:15:00.133 -> Stisknuto 1
12:15:02.138 -> FF18E7
12:15:02.138 -> Stisknuto 2
12:15:06.180 -> FF7A85
12:15:06.180 -> Stisknuto 3 atd ...

Původní prográmek jsem si trošku upravil, takže s ním mohu zapínat a vypínat dvě ledky, červenou a zelenou ... pokud bych tam přidal ještě žlutou, tak bych z toho měl i semafor ... tady je výpis z monitoru :

17:06:27.457 -> IR remote receiver version 2.6.0 from Github is on !
17:06:36.635 -> FF30CF
17:06:36.635 -> Stisknuto 1
17:06:36.635 -> Green LED on !
17:06:42.650 -> FF7A85
17:06:42.650 -> Stisknuto 3
17:06:42.650 -> Green LED off !
17:06:49.869 -> FF10EF
17:06:49.869 -> Stisknuto 4
17:06:49.869 -> Red LED on !
17:06:55.785 -> FF5AA5
17:06:55.785 -> Stisknuto 6
17:06:55.785 -> Red LED off !

Kód pro Arduino:

// IR-control-HX1838-Dratek-po-02.ino
// Dálkové ovládání infračervené s HX1838
// zkouska ovladani dvou LED diod
// Green Led se zapne tlacitkem 1 a vypne tlacitkem 3
// Red   Led se zapne tlacitkem 4 a vypne tlacitkem 6
// připojení knihovny
#include"IRremote2.h"
//
// nastavení čísla pinu pro propojení s Arduinem
#define pinIN 4
//
//Led diody, ktere budou spinany a vypinany
const int LED1_Pin = 5;     // Green LED
const int LED2_Pin = 6;     // Red  LED

// vytvoření instance dalkoveOvladani z knihovny IRremote2
// a proměnné odezvaSenzoru pro ukládání výsledků
IRrecv dalkoveOvladani(pinIN);
decode_results odezvaSenzoru;

void setup() {
  // komunikace přes sériovou linku rychlostí 9600 baud
  Serial.begin(9600);
  // start komunikace s IR přijímačem
  Serial.println("IR remote receiver version 2.6.0 from Github is on !");
  dalkoveOvladani.enableIRIn();
  //zhasnuti obou diod
  pinMode(LED1_Pin, OUTPUT);
  pinMode(LED2_Pin, OUTPUT);
  
}

void loop() {
  // v if podmínce je volána funkce decode
  // pro načtení dat z přijímače - pokud přišel
  // signál, provede se obsah if podmínky
  if (dalkoveOvladani.decode(&odezvaSenzoru)) {
    // pro zkoušení nového ovladače stačí odkomentovat
    // následující řádek a číst data po sériové lince
     Serial.println(odezvaSenzoru.value, HEX);

    // volání podprogramu detekceKlaves pro
    // zjištění názvu klávesy
    detekceKlaves();
    // pokračování v detekci nových stisků
    dalkoveOvladani.resume();
  }  
}
// podprogram s překladem syrových hodnot na
// jednotlivá tlačítka
void detekceKlaves() {
  switch(odezvaSenzoru.value) {
    // u každé stisknuté klávesy se vždy vypíše
    // její název po sériové lince
    case 0xFFA25D:  
      Serial.println("Stisknuto CH-");
      break;
    case 0xFF629D:  
      Serial.println("Stisknuto CH");
      break;
    case 0xFFE21D:  
      Serial.println("Stisknuto CH+");
      break;
    case 0xFF22DD:  
      Serial.println("Stisknuto PREV");
      break;
    case 0xFF02FD:  
      Serial.println("Stisknuto NEXT");
      break;
    case 0xFFC23D:  
      Serial.println("Stisknuto PLAY/PAUSE");
      break;
    case 0xFFE01F:  
      Serial.println("Stisknuto VOL-");
      break;
    case 0xFFA857:  
      Serial.println("Stisknuto VOL+");
      break;
    case 0xFF906F:  
      Serial.println("Stisknuto EQ");
      break;
    case 0xFF6897:  
      Serial.println("Stisknuto 0");
      break;
    case 0xFF9867:  
      Serial.println("Stisknuto 100+");
      break;
    case 0xFFB04F:  
      Serial.println("Stisknuto 200+");
      break;
    case 0xFF30CF:  
      Serial.println("Stisknuto 1");  //Green LED on
      digitalWrite(LED1_Pin, HIGH);   
      Serial.println("Green LED on !");
      break;
    case 0xFF18E7:  
      Serial.println("Stisknuto 2");
      break;
    case 0xFF7A85:  
      Serial.println("Stisknuto 3");   //Green LED off
      digitalWrite(LED1_Pin, LOW);
      Serial.println("Green LED off !");
      break;
    case 0xFF10EF:  
      Serial.println("Stisknuto 4");   // Red Led on
      digitalWrite(LED2_Pin, HIGH);
      Serial.println("Red LED on !");
      break;
    case 0xFF38C7:  
      Serial.println("Stisknuto 5");
      break;
    case 0xFF5AA5:  
      Serial.println("Stisknuto 6");
      digitalWrite(LED2_Pin, LOW);   // Red Led off
      Serial.println("Red LED off !");
      break;
    case 0xFF42BD:  
      Serial.println("Stisknuto 7");
      break;
    case 0xFF4AB5:  
      Serial.println("Stisknuto 8");
      break;
    case 0xFF52AD:  
      Serial.println("Stisknuto 9");
      break;
    default: 
      Serial.println("Stisknuta jina klavesa");
  }
  // pauza pro přehlednější výpis
  delay(500);
}

Jinak sensor je také vhodný ke kontrole funkčnosti ovladačů nejrůznějších typů.
To jsem si vyzkoušel na ovladači GoGen a chodilo to bezvadně.

Arduino Nano, diody a snímač jsem si zabudoval do krabičky od šunkových závitků
s křenem a mám z toho hračku pro děti a tester na IR ovladače. Příště si z toho udělám ten semafor .. :)

Další podobné články

ROBOTICKÉ RAMENO

Stavebnice obsahuje všechny potřebné díly na sestavení robotnického ramene včetně spojovacího materiálu, pouze je nutné dokoupit čtyři kusy MIKRO SERV SG90. Dále je nutné dokoupit řídící jednotku já jsem použil domácí zásoby ARDUINO NANO a pro něho pak modul ARDUINO NANO IO SHIELD pro jednoduchost zapojení. Díly pro sestavení ramene jdou dobře tzv. vylamovat „vypadávají skoro sami. K servům pokud použijete nové tak doporučuji je před montáží odzkoušet zda jsou funkční v plném rozsahu tj. od 0° do 180°, po namontování a zjištění že servo nefunguje to pak opravdu dost zahýbá s nervy. 

Electronic TiltMaze

Cílem tohoto projektu je vytvoření jednoduchého ovládacího systému, který umožňuje naklápění dvou servomotorů pomocí analogového joysticku. Platforma řízená servomotory může simulovat pohyb například v ose X a Y — tedy naklánění doleva/doprava a dopředu/dozadu. Tento systém může sloužit jako základ pro různé aplikace:

- Manuální ovládání kamery nebo senzoru (např. na pohyblivé konstrukci nebo robotovi)
- Interaktivní ovládací panel pro školní projekty nebo herní ovladač