- 433MHz RF vysílač a přijímač modul:
- Potřeba kodéru a dekodérů:
- Požadované komponenty:
- Kruhový diagram:
- Vysvětlení kódu:
Ahoj všichni, dnes v tomto projektu propojíme modul RF přijímače a vysílače s mikrokontrolérem PIC a budeme bezdrátově komunikovat mezi dvěma různými mikrokontroléry pic.
V tomto projektu uděláme následující věci: -
- Budeme používat PIC16F877A pro vysílač a PIC18F4520 pro sekci přijímače.
- Budeme propojovat klávesnici a LCD s mikrokontrolérem PIC.
- Na straně vysílače budeme propojovat klávesnici s PIC a přenášet data. Na straně přijímače přijmeme data bezdrátově a ukážeme, která klávesa je stisknuta na LCD.
- K přenosu 4bitových dat použijeme kodér a dekodér IC.
- Frekvence příjmu bude 433 MHz pomocí levného modulu RF TX-RX dostupného na trhu.
Než se pustíme do schémat a kódů, pochopíme fungování RF modulu s integrovanými obvody Encoder-Decoder. Projděte si níže dva články, kde se dozvíte, jak propojit LCD a klávesnici s mikrokontrolérem PIC:
- Rozhraní LCD s mikrokontrolérem PIC pomocí MPLABX a XC8
- Rozhraní maticové klávesnice 4x4 s mikrokontrolérem PIC
433MHz RF vysílač a přijímač modul:
Jedná se o vysílací a přijímací moduly, které v projektu používáme. Jedná se o nejlevnější dostupný modul pro 433 MHz. Tyto moduly přijímají sériová data v jednom kanálu.
Pokud vidíme specifikace modulů, je vysílač dimenzován na provoz 3,5-12 V jako vstupní napětí a vysílací vzdálenost je 20-200 metrů. Vysílá v AM (Audio Modulation) protokolu na frekvenci 433 MHz. Můžeme přenášet data rychlostí 4 kB / s výkonem 10 mW.
Na horním obrázku vidíme výčnělek modulu vysílače. Zleva doprava jsou kolíky VCC, DATA a GND. Můžeme také přidat anténu a připájet ji k bodu označenému na obrázku výše.
Pro specifikaci přijímače má přijímač jako vstup hodnocení 5V ss a 4MA klidový proud. Přijímací frekvence je 433,92 MHz s citlivostí -105 dB.
Na výše uvedeném obrázku vidíme pin-out modulu přijímače. Čtyři piny jsou zleva doprava, VCC, DATA, DATA a GND. Tyto prostřední dva kolíky jsou interně propojeny. Můžeme použít jednu nebo obě. Je ale dobrým zvykem použít obojí ke snížení hlukové vazby.
Jedna věc také není uvedena v datovém listu, pro kalibraci frekvence se používá variabilní induktor nebo POT ve středu modulu. Pokud bychom nemohli přijímat přenášená data, existují možnosti, že se vysílací a přijímací frekvence neshodují. Jedná se o RF obvod a musíme vyladit vysílač v dokonalém vysílaném kmitočtovém bodě. Stejně jako vysílač má tento modul také anténní port; můžeme pájet drát ve svinuté formě pro delší příjem.
Rozsah přenosu je závislý na napětí dodávaném do vysílače a délce antén na obou stranách. Pro tento konkrétní projekt jsme nepoužili externí anténu a použili 5V na straně vysílače. Zkontrolovali jsme to na 5 metrů a fungovalo to perfektně.
RF moduly jsou velmi užitečné pro bezdrátovou komunikaci na velké vzdálenosti. Zde je zobrazen základní obvod RF vysílače a přijímače. Udělali jsme mnoho projektů pomocí RF modulu:
- RF řízené domácí spotřebiče
- Bluetooth řízené autíčko pomocí Arduina
- RF dálkově ovládané LED diody pomocí Raspberry Pi
Potřeba kodéru a dekodérů:
Tento RF senzor má několik nevýhod: -
- Jednosměrná komunikace.
- Pouze jeden kanál
- Velmi rušení šumem.
Kvůli této nevýhodě jsme použili integrované obvody kodéru a dekodéru, HT12D a HT12E. D znamená dekodér, který bude použit na straně přijímače, a E znamená kodér, který bude použit na straně vysílače. Tyto integrované obvody poskytují 4 kanály. Také kvůli kódování a dekódování je úroveň šumu velmi nízká.
Na obrázku výše je levý dekodér HT12D a pravý HT12E, kodér. Oba integrované obvody jsou identické. A0 až A7 se používá pro speciální kódování. Můžeme použít piny mikrokontroléru k ovládání těchto pinů a nastavení konfigurací. Stejné konfigurace je třeba porovnat na druhé straně. Pokud jsou obě konfigurace přesné a shodné, můžeme přijímat data. Těchto 8 pinů lze připojit k Gnd nebo VCC nebo je ponechat otevřené. Bez ohledu na to, jaké konfigurace v kodéru provádíme, musíme se shodovat s připojením na dekodéru. V tomto projektu necháme těch 8 pinů otevřených jak pro kodér, tak pro dekodér. 9 a 18 pin je VSS, respektive VDD. Můžeme použít pin VTHT12D jako oznámení. Pro tento projekt jsme jej nepoužili. TE kolíku pro vysílání povolení nebo zakázání kolík.
Důležitou součástí je kolík OSC, kde musíme připojit rezistory, abychom zajistili oscilaci kodéru a dekodéru. Dekodér potřebuje vyšší kmitání než dekodér. Hodnota rezistoru kodéru bude typicky 1 Meg a hodnota dekodéru je 33k. Tyto odpory použijeme pro náš projekt.
Kolík DOUT je datový kolík RF vysílače na HT12E a DIN kolík v HT12D se používá k připojení datového kolíku RF modulu.
V HT12E je AD8 až AD11 čtyřkanálový vstup, který se převádí a sériově přenáší přes RF modul a přesná reverzní věc se děje v HT12D, sériových datech přijatých a dekódovaných a dostaneme 4bitový paralelní výstup přes 4 piny D8 až D11.
Požadované komponenty:
- 2 - Chlebová deska
- 1 - LCD 16x2
- 1 - Klávesnice
- Pár HT12D a HT12E
- RF modul RX-TX
- 1- 10K předvolba
- 2 - 4,7k rezistor
- 1- 1M rezistor
- 1-33k rezistor
- 2- 33pF keramické kondenzátory
- Krystal 1 - 20 MHz
- Hůlky
- Několik jednovodičových vodičů.
- PIC16F877A MCU
- PIC18F4520 MCU
- Šroubovák pro ovládání frekvenčního měniče musí být izolován od lidského těla.
Kruhový diagram:
Schéma zapojení na straně vysílače (PIC16F877A):
Pro účely přenosu jsme použili PIC16F877A. Hex klávesnice připojena přes PORTB a 4 kanály připojených přes poslední 4 bity PORTD. Další informace o připojení matice 4x4 Matrix se dozvíte zde.
Pin out takto -
1. AD11 = RD7
2. AD10 = RD6
3. AD9 = RD5
4. AD8 = RD4
Schéma zapojení na straně přijímače (PIC18F4520):
Na výše uvedeném obrázku je zobrazen obvod přijímače. LCD je připojen přes PORTB. Použili jsme interní oscilátor o PIC18F4520 pro tento projekt. Tyto 4 kanály jsou připojeny stejným způsobem, jako jsme to udělali předtím v obvodu vysílače. Další informace o připojení 16x2 LCD k mikrokontroléru PIC najdete zde.
Toto je strana vysílače -
A strana přijímače v samostatném prkénku -
Vysvětlení kódu:
Existují dvě části kódu, jedna je pro vysílač a druhá pro přijímač. Zde si můžete stáhnout kompletní kód.
Kód PIC16F877A pro RF vysílač:
Jako vždy nejdříve musíme nastavit konfigurační bity v mikrokontroléru pic, definovat některá makra, včetně knihoven a frekvence krystalů. AD8-AD11 port Encoder ic je definována jako RF_TX na PORTD. Můžete zkontrolovat kód pro všechny v úplném kódu uvedeném na konci.
Použili jsme dvě funkce, void system_init (void) a void encode_rf_sender (char data).
System_init se používá pro inicializaci pin a klávesnice inicializace. Inicializace klávesnice se volá z knihovny klávesnic.
Port klávesnice je také definován v keypad.h. Udělali jsme PORTD jako výstup pomocí TRISD = 0x00 a jako výchozí stav jsme udělali port RF_TX jako 0x00.
void system_init (void) { TRISD = 0x00; RF_TX = 0x00; keyboard_initialization (); }
V encode_rf_sender jsme změnili stav 4 pinů v závislosti na stisknutém tlačítku. Vytvořili jsme 16 různých hexadecimálních hodnot nebo PORTD stavů v závislosti na ( 4x4) 16 různých stisknutí tlačítka.void encode_rf_sender (char data) { if (data == '1') RF_TX = 0x10; if (data == '2') RF_TX = 0x20; if (data == '3') …………... …. ….
V hlavní funkci nejprve přijímáme data stisknutí tlačítka na klávesnici pomocí funkce switch_press_scan () a ukládáme data do klíčové proměnné. Poté jsme data zakódovali pomocí funkce encode_rf_sender () a změnou stavu PORTD.
Kód PIC18F4520 pro RF přijímač:
Jako vždy jsme nejprve nastavili konfigurační bity v PIC18f4520. Jeho trochu odlišné od PIC16F877A, můžete zkontrolovat kód v přiloženém zip souboru.
Zahrnuli jsme soubor záhlaví LCD. Definováno připojení portu D8-D11 dekodéru IC přes PORTD pomocí linky #define RF_RX PORTD, připojení je stejné jako v sekci Kodér. Prohlášení o LCD port je také provádí v lcd.c souboru.
#zahrnout
Jak již bylo řečeno jsme pomocí interní oscilátor na 18F4520, jsme použili systém _ init funkcí, kde nakonfigurován na OSCON registr na 18F4520 nastavit interní oscilátor na 8 MHz. Nastavili jsme také bit TRIS pro piny LCD i piny dekodéru. Protože HT - 12D poskytuje výstup na portech D8-D11, musíme pro příjem výstupu nakonfigurovat PORTD jako vstup.
void system_init (void) { OSCCON = 0b01111110; // 8Mhz ,, intosc // OSCTUNE = 0b01001111; // PLL povolit, Max prescaler 8x4 = 32Mhz TRISB = 0x00; TRISD = 0xFF; // Poslední 4 bit jako vstupní bit. }
Nakonfigurovali jsme registr OSCON na 8 MHz, také jsme vytvořili port B jako výstup a port D jako vstup.
Níže uvedená funkce je provedena s použitím přesné reverzní logiky použité v předchozí sekci vysílače. Zde získáme stejnou hexadecimální hodnotu z portu D a podle této hexadecimální hodnoty identifikujeme, který přepínač byl stisknut v sekci vysílače. Můžeme identifikovat každé stisknutí klávesy a odeslat odpovídající znak na LCD.
void rf_analysis (unsigned char recived_byte) { if (recived_byte == 0x10) lcd_data ('1'); if (recived_byte == 0x20) lcd_data ('2'); if (recived_byte == 0x30) ……. ….. …… ………..
Lcd_data je volána z lcd.c souboru.
V hlavní funkci nejprve inicializujeme systém a LCD. Vzali jsme variabilní byte, a uložil hexadecimální hodnoty přijímané z portu D. Potom pomocí funkce rf_analysis můžeme vytisknout znak na LCD.
void main (void) { unsigned char byte = 0; system_init (); lcd_init (); while (1) { lcd_com (0x80); lcd_puts ("CircuitDigest"); lcd_com (0xC0); byte = RF_RX; rf_analysis (byte); lcd_com (0xC0); } návrat; }
Před spuštěním jsme vyladili obvod. Nejprve jsme stiskli tlačítko „ D “ na klávesnici. Takže 0xF0 je průběžně přenášeny RF vysílač. Poté jsme ladili obvod přijímače, dokud se na LCD displeji nezobrazí znak „ D “. Někdy je modul správně naladěn od výrobce, jindy tomu tak není. Pokud je vše správně připojeno a na LCD se nezobrazuje hodnota stisknutí tlačítka, existují možnosti, že RF přijímač není naladěn. Použili jsme izolovaný šroubovák ke snížení nesprávných možností ladění díky indukčnosti našeho těla.
Takto můžete propojit RF modul s mikrokontrolérem PIC a bezdrátově komunikovat mezi dvěma mikrokontroléry PIC pomocí RF senzoru.
Zde si můžete stáhnout kompletní kód vysílače a přijímače, zkontrolujte také ukázkové video níže.