- 433 MHz RF-zender- en ontvangermodule:
- Behoefte aan encoder en decoders:
- Vereiste componenten:
- Schakelschema:
- Code Verklaring:
Hallo allemaal, Vandaag zullen we in dit project de RF-ontvanger en zendermodule koppelen aan PIC Microcontroller en draadloos communiceren tussen twee verschillende pic-microcontrollers.
In dit project zullen we de volgende dingen doen: -
- We zullen PIC16F877A gebruiken voor de zender en PIC18F4520 voor de ontvanger.
- We zullen toetsenbord en LCD koppelen aan de PIC-microcontroller.
- Aan de zenderzijde zullen we het toetsenbord met PIC verbinden en de gegevens verzenden. Aan de ontvangerzijde ontvangen we de gegevens draadloos en laten we op het LCD-scherm zien welke toets wordt ingedrukt.
- We zullen encoder en decoder IC gebruiken om 4 bit-gegevens te verzenden.
- De ontvangstfrequentie zal 433Mhz zijn met behulp van een goedkope RF TX-RX-module die op de markt verkrijgbaar is.
Laten we, voordat we ingaan op de schema's en codes, de werking van de RF-module met Encoder-Decoder IC's begrijpen. Lees ook de onderstaande twee artikelen om te leren hoe u LCD en toetsenbord met PIC Microcontroller kunt verbinden:
- LCD-interface met PIC-microcontroller met MPLABX en XC8
- 4x4 Matrix-toetsenbordinterface met PIC-microcontroller
433 MHz RF-zender- en ontvangermodule:
Dat zijn de zender- en ontvangermodules die we in het project gebruiken. Het is de goedkoopste module die beschikbaar is voor 433 MHz. Deze modules accepteren seriële data in één kanaal.
Als we de specificaties van de modules zien, is de zender geschikt voor werking van 3,5-12V als ingangsspanning en is de zendafstand 20-200 meter. Het zendt uit in het AM-protocol (Audiomodulatie) met een frequentie van 433 MHz. We kunnen gegevens overdragen met een snelheid van 4KB / S met een vermogen van 10mW.
In de bovenste afbeelding kunnen we de pin-out van de zendermodule zien. Van links naar rechts zijn de pinnen VCC, DATA en GND. We kunnen ook de antenne toevoegen en deze solderen op het punt dat in de bovenstaande afbeelding wordt aangegeven.
Voor de ontvangerspecificatie heeft de ontvanger een vermogen van 5V gelijkstroom en 4MA ruststroom als ingang. De ontvangstfrequentie is 433,92 MHz met een gevoeligheid van -105DB.
In de bovenstaande afbeelding kunnen we de pin-out van de ontvangermodule zien. De vier pinnen zijn van links naar rechts, VCC, DATA, DATA en GND. Die middelste twee pinnen zijn intern met elkaar verbonden. We kunnen een van beide of beide gebruiken. Maar het is een goede gewoonte om beide te gebruiken om de geluidskoppeling te verlagen.
Een ding wordt ook niet vermeld in de datasheet, de variabele inductor of POT in het midden van de module wordt gebruikt voor frequentiekalibratie. Als we de verzonden gegevens niet kunnen ontvangen, zijn er mogelijkheden dat de zend- en ontvangstfrequenties niet overeenkomen. Dit is een RF-circuit en we moeten de zender afstemmen op het perfecte uitgezonden frequentiepunt. Ook heeft deze module, net als de zender, een antennepoort; we kunnen draad in opgerolde vorm solderen voor een langere ontvangst.
Het zendbereik is afhankelijk van de spanning die aan de zender wordt geleverd en de lengte van de antennes aan beide zijden. Voor dit specifieke project hebben we geen externe antenne gebruikt en 5V aan de zenderzijde. We hebben gecontroleerd op 5 meter afstand en het werkte perfect.
RF-modules zijn erg handig voor draadloze communicatie over lange afstanden. Een basis RF-zender- en ontvangercircuit wordt hier getoond. We hebben veel projecten gemaakt met behulp van de RF-module:
- RF-gestuurde huishoudelijke apparaten
- Bluetooth-gestuurde speelgoedauto met Arduino
- RF-afstandsbediende LED's met Raspberry Pi
Behoefte aan encoder en decoders:
Deze RF-sensor heeft enkele nadelen: -
- Eenrichtingscommunicatie.
- Slechts één kanaal
- Zeer ruisinterferentie.
Vanwege dit nadeel hebben we encoder en decoder IC's gebruikt, HT12D en HT12E. D staat voor decoder die zal worden gebruikt in de ontvangerzijde en E staat voor encoder die zal worden gebruikt in de zenderzijde. Deze IC's bieden 4 kanalen. Mede door het coderen en decoderen is het ruisniveau erg laag.
In de bovenstaande afbeelding is de linker HT12D de decoder en de rechter HT12E, de encoder. Beide IC's zijn identiek. A0 tot A7 wordt gebruikt voor speciale codering. We kunnen microcontroller-pinnen gebruiken om die pinnen te besturen en configuraties in te stellen. Dezelfde configuraties moeten aan de andere kant worden afgestemd. Als beide configuraties kloppen en overeenkomen, kunnen we gegevens ontvangen. Deze 8 pinnen kunnen worden aangesloten op Gnd of VCC of open worden gelaten. Welke configuraties we ook doen in de encoder, we moeten de aansluiting op de decoder matchen. In dit project laten we die 8 pinnen open voor zowel encoder als decoder. 9 en 18 pin is respectievelijk VSS en VDD. We kunnen de VT- pin gebruikenHT12D als kennisgevingsdoeleinden. Voor dit project hebben we het niet gebruikt. De TE- pin is voor het in- of uitschakelen van de transmissie.
Het belangrijkste onderdeel is de OSC- pin waar we weerstanden moeten aansluiten om oscillatie te bieden aan de encoder en decoder. De decoder heeft een hogere oscillatie nodig dan de decoder. Typisch is de waarde van de encoderweerstand 1Meg en de waarde van de decoder is 33k. We zullen die weerstanden gebruiken voor ons project.
DOUT- pin is de datapin van de RF-zender op de HT12E en de DIN- pin in de HT12D wordt gebruikt om de datapin van de RF-module aan te sluiten.
In HT12E is AD8 naar AD11 een vierkanaals ingang die wordt geconverteerd en serieel wordt verzonden via de RF-module en het exacte omgekeerde gebeurt in HT12D, de seriële gegevens ontvangen en gedecodeerd, en we krijgen een 4-bits parallelle uitvoer over de 4 pinnen D8 tot D11.
Vereiste componenten:
- 2 - Broodplank
- 1 - LCD 16x2
- 1 - Toetsenbord
- HT12D en HT12E paar
- RX-TX RF-module
- 1-10K voorinstelling
- 2 - 4.7k weerstand
- 1- 1M weerstand
- 1- 33k weerstand
- 2- 33pF keramische condensatoren
- 1 - 20Mhz kristal
- Bergsticks
- Weinig enkeldraads draden.
- PIC16F877A MCU
- PIC18F4520 MCU
- Een schroevendraaier voor het regelen van de frequentiepot, moet worden geïsoleerd van het menselijk lichaam.
Schakelschema:
Schakelschema voor zenderzijde (PIC16F877A):
We hebben PIC16F877A gebruikt voor het verzenden van doeleinden. Het Hex-toetsenbord is aangesloten op de PORTB en de 4 kanalen zijn aangesloten op de laatste 4 bits van PORTD. Lees hier meer over het aansluiten van een 4x4 Matrix-toetsenbord.
Pin als volgt vast:
1. AD11 = RD7
2. AD10 = RD6
3. AD9 = RD5
4. AD8 = RD4
Schakelschema voor ontvangerzijde (PIC18F4520):
In de bovenstaande afbeelding wordt het ontvangercircuit getoond. Het LCD-scherm is verbonden via PORTB. We hebben voor dit project een interne oscillator van PIC18F4520 gebruikt. De 4 kanalen zijn op dezelfde manier verbonden als we eerder deden in het zendcircuit. Lees hier meer over het aansluiten van een 16x2 LCD-scherm met PIC Microcontroller.
Dit is de zenderkant -
En ontvangerzijde in apart breadboard -
Code Verklaring:
Er zijn twee delen van de code, een is voor de zender en een is voor de ontvanger. U kunt hier de volledige code downloaden.
PIC16F877A-code voor RF-zender:
Zoals altijd eerst, moeten we de configuratiebits in de pic-microcontroller instellen, enkele macro's definiëren, inclusief bibliotheken en kristalfrequentie. De AD8-AD11 poort van de encoder ic gedefinieerd als RF_TX bij PORTD. U kunt de code voor al degenen in de volledige code aan het einde controleren.
We hebben twee functies gebruikt, void system_init (void) en void encode_rf_sender (char data).
De system_init wordt gebruikt voor pin-initialisatie en toetsenbordinitialisatie. De toetsenbordinitialisatie wordt aangeroepen vanuit de toetsenbordbibliotheek.
De bediendeelpoort wordt ook gedefinieerd in het bediendeel. H. We hebben de PORTD als uitvoer gemaakt met TRISD = 0x00, en de RF_TX- poort als 0x00 als standaardstatus gemaakt.
void system_init (void) { TRISD = 0x00; RF_TX = 0x00; keyboard_initialization (); }
In de encode_rf_sender hebben we de 4-pins status gewijzigd afhankelijk van de ingedrukte knop. We hebben 16 verschillende hexadecimale waarden of PORTD- statussen gemaakt, afhankelijk van ( 4x4) 16 verschillende ingedrukte knoppen.void encode_rf_sender (char data) { if (data == '1') RF_TX = 0x10; if (data == '2') RF_TX = 0x20; if (data == '3') …………... …. ….
In de hoofdfunctie ontvangen we eerst de gegevens van de toetsenbordknop ingedrukt met de functie switch_press_scan () en slaan de gegevens op in de sleutelvariabele. Daarna hebben we de gegevens gecodeerd met behulp van de functie encode_rf_sender () en het wijzigen van de PORTD- status.
PIC18F4520- code voor RF-ontvanger:
Zoals altijd stellen we eerst de configuratiebits in PIC18f4520 in. Het is een beetje anders dan PIC16F877A, je kunt de code in het bijgevoegde zip-bestand controleren.
We hebben het LCD-headerbestand toegevoegd. De D8-D11- poortverbinding van Decoder IC over PORTD is gedefinieerd met de #define RF_RX PORTD- lijn, de verbinding is hetzelfde als gebruikt in de sectie Encoder. De LCD-poortverklaring wordt ook gedaan in het lcd.c- bestand.
# omvatten
Zoals eerder vermeld, gebruiken we een interne oscillator voor de 18F4520, we hebben de system _ init- functie gebruikt waarbij we het OSCON- register van de 18F4520 hebben geconfigureerd om de interne oscillator in te stellen op 8 MHz. We hebben ook de TRIS- bit ingesteld voor beide LCD-pinnen en de Decoder-pinnen. Omdat HT - 12D uitvoer levert via D8-D11- poorten, moeten we de PORTD configureren als invoer om de uitvoer te ontvangen.
void system_init (void) { OSCCON = 0b01111110; // 8Mhz`` intosc // OSCTUNE = 0b01001111; // PLL inschakelen, Max. Voorschrijver 8x4 = 32Mhz TRISB = 0x00; TRISD = 0xFF; // Laatste 4 bit als invoerbit. }
We configureerden het OSCON- register op 8 MHz, maakten ook poort B als output en poort D als input.
De onderstaande functie is gemaakt met behulp van de exacte omgekeerde logica die in de vorige zendersectie werd gebruikt. Hier krijgen we dezelfde hexadecimale waarde van poort D en aan de hand van die hexadecimale waarde identificeren we welke schakelaar in het zendergedeelte is ingedrukt. We kunnen elke toetsaanslag identificeren en het corresponderende teken naar het LCD-scherm sturen.
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) ……. ….. …… ………..
De lcd_data wordt aangeroepen vanuit het lcd.c- bestand.
In de hoofdfunctie initialiseren we eerst het systeem en het LCD-scherm. We namen een variabele byte, en opgeslagen worden de hex-waarde ontvangen van poort D. Vervolgens kunnen we met de functie rf_analysis het karakter op het LCD-scherm afdrukken.
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); } terugkeer; }
Voordat we het uitvoeren, hebben we het circuit afgestemd. Eerst hebben we op de ' D ' knop in het toetsenbord gedrukt. De 0xF0 wordt dus continu uitgezonden door de RF-zender. Vervolgens hebben we het ontvangercircuit afgestemd totdat op het LCD-scherm het teken ' D ' wordt weergegeven. Soms is de module goed afgesteld van de fabrikant, soms niet. Als alles goed is aangesloten en de knop niet wordt ingedrukt in het LCD-scherm, zijn er mogelijkheden dat de RF-ontvanger niet is afgestemd. We hebben de geïsoleerde schroevendraaier gebruikt om verkeerde afstemmingsmogelijkheden te verminderen vanwege onze lichaamsinductie.
Dit is hoe u de RF-module kunt koppelen aan de PIC-microcontroller en draadloos kunt communiceren tussen twee PIC-microcontrollers met behulp van een RF-sensor.
U kunt hier de volledige code voor zender en ontvanger downloaden, bekijk ook de onderstaande demonstratievideo.