Sada vysílač/přijímač 433Mhz – Praktické použití

V tomto článku si ukážeme jednoduchý příklad, jak se dá použít sada pro dálkové ovládání vysílač/přijímač 433Mhz.

V tomto článku si ukážeme jednoduchý příklad, jak se dá tato sada použít.

Cílem bude vytvořit jednoduché jednokanálové dálkové ovládání. Na straně vysílače použijeme generování PWM signálu o střídě 50%. Tento signál se bude generovat po dobu stisku tlačítka. Na straně přijímače tento signál zdekódujeme a pokud zdekódovaná střída odpovídá střídě 50%, rozsvítíme LED diodu. Dioda bude svítit, dokud se bude PWM signál vysílat (dokud bude tlačítko stisknuto). Napájení vysílače i přijímače se uskuteční pomocí USB kabelů, kterými se bude do desek s Attiny85 nahrávat program.

Kromě této sady (Sada vysílač-přijímač 433Mhz) budeme v této konstrukci používat:
2ks vývojové desky s mikrokontrolerem Attiny85
1ks senzorové tlačítko
2ks nepájivé kontaktní pole
Propojovací Dupont vodiče samec-samice
Arduino IDE + podpora pro Digispark Attiny85
MikroUSB kabel

Vysílač

Komponenty:
Vysílač ze sady
1ks nepájivé pole
1ks vývojová deska Attiny85
1ks senzorové tlačítko
propojovací vodiče

Schéma zapojení:

Arduino kód:

#define LED_BUILTIN 1 // Integrovana LED dioda na pinu PB1
#define BUTTON 0 // Tlacitko na pinu PB0
#define PWM_OUT 4 // Vystup PWM pro vysilac na pinu PB4

void setup() {
  pinMode(LED_BUILTIN, OUTPUT);  // Pin LED jako vystup
  pinMode(BUTTON, INPUT);  // Pin tlacitka jako vstup
  pinMode(PWM_OUT, OUTPUT);  // Pin pro PWM vystup jako vystup
}

void loop() {
  if (digitalRead(BUTTON)){ // Pokud je tlacitko sepnuto
    digitalWrite(LED_BUILTIN, HIGH); // rozsviti se integrovana LED
    analogWrite(PWM_OUT, 127); // vygeneruje se PWM 50%
  }else{ // Pokud tlacitko sepnuto neni
    digitalWrite(LED_BUILTIN, LOW); // zhasne LED
    analogWrite(PWM_OUT, 0);  // PWM 0%
  }
  
  delay(100);
}

Přijímač:

Komponenty:
Přijímač ze sady
1ks nepájivé pole
1ks vývojová deska Attiny85
propojovací vodiče

Schéma zapojení:

Arduino kód:

#define LED_BUILTIN 1 // integrovana LED dioda na pinu PB1
#define PWM_IN_PIN 0  // PWM signal od prijimace na pinu PB0

void setup() {
  pinMode(LED_BUILTIN, OUTPUT);  // Pin LED jako vystup
  pinMode(PWM_IN_PIN, INPUT);  // pin PWM jako vstup
}

void loop() {
  unsigned long highTime = pulseIn(PWM_IN_PIN, HIGH); // Zmerime delku impulzu v log H
  unsigned long lowTime = pulseIn(PWM_IN_PIN, LOW);  // Zmerime delku impulzu v log L
  unsigned long cycleTime = highTime + lowTime;  // Vypocitame celkovou delku PWM cyklu
  float dutyCycle = ((float)highTime / (float)cycleTime) * 100; // Vypocitame stridu PWM v %

  if ((dutyCycle >= 45.0) && (dutyCycle <= 50.0)){  // Pokud je strida v rozsahu 45 - 50%
    digitalWrite(LED_BUILTIN, HIGH);  // rozsviti se integrovana LED 
  }else{
    digitalWrite(LED_BUILTIN, LOW);  // zhasne LED
  }

  delay(100);
}

Tím je základ jednokanálového dálkového ovládání hotov. Pokud budeme chtít vytvořit ovládání s více kanály, na straně vysílače jednoduše na volné piny desky s Attiny85 připojíme další tlačítka a jednotlivým tlačítkům přiřadíme jinou střídu PWM. Na straně přijímače pak přidáme podmínky IF pro rozsahy použitých stříd a přiřadíme k volným pinům na desce Attiny85. Pokud by se nedostával potřebný počet volných pinů, je potřeba zvolit některou z větších Arduino desek, kde bude volných pinů dostatek.

Je potřeba mít na paměti, že tyto rádiové moduly jsou jedny z nejjednodušších a tudíž při přenosu dochází k určitému zkreslení přenášené informace. V našem případě jsme posílali PWM o střídě 49,8% a na výstupu přijímače byla detekována střída cca 46%. Proto je v ukázkovém kódu nastavena podmínka, která rozsvítí LED, pokud je detekovaná střída v rozsahu 45 – 50%.

Pro zjištění skutečné hodnoty dekódované střídy lze na straně přijímače nechat posílat hodnotu proměnné dutyCycle na sériovou konzoli a podle zjištěných hodnot poté upravit rozsah v podmínce IF.

Pokud by bylo zkreslení pro konkrétní použití příliš velké, lze zaměnit modul přijímače za některý z typů s pokročilejší konstrukcí přijímače, např. tento: RXB6. S tímto přijímačem a původním vysílačem ze sady jsme naměřili zkreslení v desetinách %.

Sdílet článek

3 komentáře

  1. Deklarace proměnných
    Nastavení pinů
    Program

    A teď jinak než jsme se učili…

    unsigned long lowTime = pulseIn(PWM_IN_PIN, LOW); // Zmerime delku impulzu v log L
    unsigned long cycleTime = highTime + lowTime; // Vypocitame celkovou delku PWM cyklu
    float dutyCycle = ((float)highTime / (float)cycleTime) * 100; //

    Strana 240 základního manuálu. Deklarace proměnných hadra. Funkce rovnou z nastavení.

    Nastavení módu výstupu se asi přes veškerou snahu nepovedlo udělat nevýukově.

    Na druhou stranu není použita sériová linka…

    1. Dobrý den, v tomto případě jsme využili možnosti programovacího jazyka, kdy není nutné vždy dopředu deklarovat proměnné. Nejedná se o výukový materiál, pouze jako funkční ukázka.

  2. pujde s timto zkombinovat joystick. delam jeden pozemn8 dron a potrebuji zjistit zda po pripojeni vysilace na arduino micro a pridani joysticku a nasledne na arduino uno dat prijmac, tak jestli to ten joystick + aj vysilat jeho pohyby ?

Napsat komentář: Mik Zrušit odpověď na komentář

Vaše e-mailová adresa nebude zveřejněna. Vyžadované informace jsou označeny *

Mohlo by se také líbit