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 %.
3 Responses
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…
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.
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 ?