- Modul emițător și receptor RF de 433 MHz:
- Nevoia de codificatoare și decodificatoare:
- Componente necesare:
- Diagrama circuitului:
- Explicatie cod:
Bună ziua tuturor, astăzi, în acest proiect, vom interfața modulul receptorului și transmițătorului RF cu microcontrolerul PIC și vom comunica fără fir între două microcontrolere pic diferite.
În acest proiect vom face următoarele lucruri: -
- Vom folosi PIC16F877A pentru emițător și PIC18F4520 pentru secțiunea Receptor.
- Vom interfața tastatura și LCD cu microcontroler PIC.
- Pe partea transmițătorului, vom interfața tastatura cu PIC și vom transmite datele. Pe partea receptorului, vom primi datele fără fir și vom arăta ce tastă este apăsată pe ecranul LCD.
- Vom folosi codificator și decodor IC pentru a transmite date pe 4 biți.
- Frecvența de recepție va fi de 433Mhz folosind modulul RF TX-RX ieftin disponibil pe piață.
Înainte de a intra în schemele și codurile, să înțelegem funcționarea modulului RF cu IC-uri cu codificator-decodor. De asemenea, parcurgeți mai jos două articole pentru a afla cum să interfațați LCD-ul și tastatura cu microcontrolerul PIC:
- Interfață LCD cu microcontroler PIC folosind MPLABX și XC8
- Interfațare cu tastatură matricială 4x4 cu microcontroler PIC
Modul emițător și receptor RF de 433 MHz:
Acestea sunt modulele emițător și receptor pe care le folosim în proiect. Este cel mai ieftin modul disponibil pentru 433 MHz Aceste module acceptă date seriale pe un canal.
Dacă vedem specificațiile modulelor, emițătorul este evaluat pentru funcționarea de 3,5-12V ca tensiune de intrare, iar distanța de transmisie este de 20-200 metri. Transmite în protocolul AM (modulare audio) la o frecvență de 433 MHz. Putem transfera date la o viteză de 4KB / S cu o putere de 10 mW.
În imaginea de sus putem vedea pin-out-ul modulului Transmițător. De la stânga la dreapta pinii sunt VCC, DATA și GND. De asemenea, putem adăuga antena și o putem lipi pe punctul indicat în imaginea de mai sus.
Pentru specificația receptorului, receptorul are un rating de 5V c.c. și curent de repaus 4MA ca intrare. Frecvența de recepție este de 433,92 MHz cu o sensibilitate de -105DB.
În imaginea de mai sus putem vedea pin-out-ul modulului receptor. Cei patru pini sunt de la stânga la dreapta, VCC, DATA, DATA și GND. Acești doi pini din mijloc sunt conectați intern. Putem folosi oricare sau ambele. Dar este o bună practică să le folosiți atât pentru a reduce cuplajul de zgomot.
De asemenea, un singur lucru nu este menționat în foaia tehnică, inductorul variabil sau POT din mijlocul modulului este utilizat pentru calibrarea frecvenței. Dacă nu am putea primi datele transmise, există posibilități ca frecvențele de transmisie și recepție să nu fie potrivite. Acesta este un circuit RF și trebuie să reglăm transmițătorul la punctul de frecvență transmis perfect. De asemenea, la fel ca și emițătorul, acest modul are și un port de antenă; putem lipi sârmă sub formă de spirală pentru o recepție mai lungă.
Gama de transmisie este dependentă de tensiunea furnizată emițătorului și de lungimea antenelor din ambele părți. Pentru acest proiect specific nu am folosit antenă externă și nu am folosit 5V pe partea transmițătorului. Am verificat la 5 metri distanță și a funcționat perfect.
Modulele RF sunt foarte utile pentru comunicațiile fără fir la distanță mare. Aici este prezentat un circuit de bază al emițătorului și al receptorului RF. Am realizat multe proiecte folosind modulul RF:
- Electrocasnice controlate RF
- Mașină de jucărie controlată prin Bluetooth folosind Arduino
- LED-uri cu telecomandă RF folosind Raspberry Pi
Nevoia de codificatoare și decodificatoare:
Acest senzor RF are câteva dezavantaje: -
- Comunicare într-un singur sens.
- Un singur canal
- Interferență foarte zgomotoasă.
Datorită acestui dezavantaj, am folosit codificatoare și decodificatoare IC, HT12D și HT12E. D reprezintă decodor care va fi utilizat în partea receptorului și E reprezintă codificatorul care va fi utilizat în partea transmițătorului. Aceste circuite integrate oferă 4 canale. De asemenea, datorită codificării și decodificării, nivelul de zgomot este foarte scăzut.
În imaginea de mai sus, stânga este HT12D decodificatorul și dreapta este HT12E, codificatorul. Ambele circuite integrate sunt identice. A0 la A7 este utilizat pentru codificare specială. Putem utiliza pini de microcontroler pentru a controla acei pini și pentru a configura configurații. Aceleași configurații trebuie să fie potrivite pe cealaltă parte. Dacă ambele configurații sunt corecte și potrivite, putem primi date. Acești 8 pini pot fi conectați la Gnd sau VCC sau lăsați deschise. Indiferent de configurațiile pe care le facem în codificator, trebuie să potrivim conexiunea de pe decodor. În acest proiect vom lăsa deschise cele 8 pini atât pentru codificator, cât și pentru decodor. 9 și 18 pini sunt VSS și respectiv VDD. Putem folosi pinul VT înHT12D ca scop de notificare. Pentru acest proiect nu l-am folosit. TE PIN - ul este pentru transmisia activa sau PIN - ul de dezactivare.
Partea importantă este pinul OSC, unde trebuie să conectăm rezistențe, este să oferim oscilație codificatorului și decodorului. Decodorul are nevoie de o oscilație mai mare decât decodorul. De obicei, valoarea rezistorului codificatorului va fi de 1Meg, iar valoarea decodificatorului este de 33k. Vom folosi aceste rezistențe pentru proiectul nostru.
Pinul DOUT este pinul de date al emițătorului RF pe HT12E, iar pinul DIN din HT12D este utilizat pentru a conecta pinul de date al modulului RF.
În HT12E, AD8 la AD11 este o intrare pe patru canale care este convertită și transmisă serial prin modulul RF și se întâmplă exact inversul în HT12D, datele seriale primite și decodificate și obținem o ieșire paralelă de 4 biți pe cei 4 pini D8 la D11.
Componente necesare:
- 2 - Placă de pâine
- 1 - LCD 16x2
- 1 - Tastatură
- Pereche HT12D și HT12E
- Modul RF RX-TX
- 1- 10K presetate
- 2 - rezistență 4,7k
- Rezistor 1- 1M
- 1- rezistor de 33k
- Condensatoare ceramice 2- 33pF
- 1 - 20Mhz cristal
- Bergsticks
- Câteva fire cu un singur fir.
- PIC16F877A MCU
- PIC18F4520 MCU
- Un șurubelniță pentru controlul potului de frecvență trebuie izolat de corpul uman.
Diagrama circuitului:
Schema circuitului pentru partea transmițătorului (PIC16F877A):
Am folosit PIC16F877A în scopul transmiterii. Tastatura Hex conectat între PORTB și 4 canale conectate peste ultimele 4 biți de PORTD. Aflați mai multe despre conectarea tastaturii 4x4 Matrix aici.
Fixează după cum urmează-
1. AD11 = RD7
2. AD10 = RD6
3. AD9 = RD5
4. AD8 = RD4
Schema circuitului pentru partea receptorului (PIC18F4520):
În imaginea de mai sus, este afișat circuitul receptorului. Ecranul LCD este conectat prin PORTB. Am folosit oscilator intern de PIC18F4520 pentru acest proiect. Cele 4 canale sunt conectate la fel ca înainte în circuitul emițătorului. Aflați mai multe despre conectarea LCD 16x2 cu microcontrolerul PIC aici.
Aceasta este partea Transmițătorului -
Și partea receptorului în panou separat -
Explicatie cod:
Există două părți ale codului, una este pentru emițător și una este pentru receptor. Puteți descărca codul complet de aici.
Cod PIC16F877A pentru emițător RF:
Ca întotdeauna mai întâi, trebuie să setăm biții de configurare în microcontrolerul pic, să definim câteva macrocomenzi, inclusiv biblioteci și frecvența cristalelor. AD8-AD11 portul IC Encoder este definit ca RF_TX la PORTD. Puteți verifica codul pentru toți cei din codul complet dat la final.
Am folosit două funcții, void system_init (void) și void encode_rf_sender (date char).
System_init este utilizat pentru PIN - ul de inițializare și tastatură initializations. Inițializarea tastaturii este apelată din biblioteca tastaturii.
Portul tastaturii este de asemenea definit în tastatură.h. Am făcut PORTD ca ieșire folosind TRISD = 0x00 și am făcut portul RF_TX ca 0x00 ca stare implicită.
void system_init (void) { TRISD = 0x00; RF_TX = 0x00; keyboard_initialization (); }
În encode_rf_sender am schimbat starea cu 4 pini în funcție de butonul apăsat. Am creat 16 valori hexagonale diferite sau stări PORTD în funcție de ( 4x4) 16 butoane diferite apăsate.void encode_rf_sender (char data) { if (data == '1') RF_TX = 0x10; if (data == '2') RF_TX = 0x20; if (date == '3') …………... … ….
În funcția principală primim mai întâi butonul tastaturii date apăsate folosind funcția switch_press_scan () și stocăm datele în variabila cheie. După aceea, am codificat datele folosind funcția encode_rf_sender () și schimbând starea PORTD.
Cod PIC18F4520 pentru receptor RF:
Ca întotdeauna, am setat mai întâi biții de configurare în PIC18f4520. Este puțin diferit de PIC16F877A, puteți verifica codul din fișierul zip atașat.
Am inclus fișierul cu antet LCD. Definirea D8-D11 conexiunea prin portul de Decodor IC peste PORTD folosind #define RF_RX PORTD linie, conexiune este același ca cel folosit în secțiunea Encoder. Declarația portului LCD se face și în fișierul lcd.c.
#include
Așa cum sa menționat mai înainte ne folosim oscilatorul intern pentru 18F4520, ne - am folosit sistem _ inițializare funcție unde am configurat OSCON registrul 18F4520 pentru a seta oscilator intern de 8 MHz. De asemenea, am setat bitul TRIS atât pentru pinii LCD, cât și pentru pinii Decoder. Deoarece HT - 12D oferă ieșire la porturile D8-D11, trebuie să configurăm PORTD ca intrare pentru a primi ieșirea.
void system_init (void) { OSCCON = 0b01111110; // 8Mhz,, intosc // OSCTUNE = 0b01001111; // Activare PLL, Max prescaler 8x4 = 32Mhz TRISB = 0x00; TRISD = 0xFF; // Ultimul 4 biți ca bit de intrare. }
Am configurat registrul OSCON la 8 MHz, am făcut și portul B ca ieșire și portul D ca intrare.
Funcția de mai jos este realizată utilizând logica inversă exactă utilizată în secțiunea anterioară a emițătorului. Aici obținem aceeași valoare hexagonală din portul D și prin acea valoare hexagonală identificăm ce comutator a fost apăsat în secțiunea transmițătorului. Putem identifica fiecare apăsare a tastei și trimitem caracterul corespondent la LCD.
void rf_analysis (caractere nesemnate recived_byte) { if (recived_byte == 0x10) lcd_data ('1'); if (recived_byte == 0x20) lcd_data ('2'); if (recived_byte == 0x30) ……. ….. …… ………..
Lcd_data este numit din lcd.c fișierul.
În funcția principală inițializăm mai întâi sistemul și ecranul LCD. Am luat o variabilă octet, și stocate valoarea hex primit de la portul D. Apoi prin funcția rf_analysis putem imprima caracterul pe LCD.
void main (void) { octet de caractere nesemnat = 0; system_init (); lcd_init (); while (1) { lcd_com (0x80); lcd_puts ("CircuitDigest"); lcd_com (0xC0); octet = RF_RX; rf_analysis (octet); lcd_com (0xC0); } întoarcere; }
Înainte de al rula, am reglat circuitul. Mai întâi am apăsat butonul „ D ” din tastatură. Deci, 0xF0 este transmis continuu de către transmițătorul RF. Apoi am reglat circuitul receptorului până când pe ecranul LCD apare caracterul „ D ”. Uneori modulul este reglat corect de la producător, alteori nu. Dacă totul este conectat corect și nu se apasă valoarea butonului pe ecranul LCD, atunci există posibilitatea ca receptorul RF să nu fie acordat. Am folosit șurubelnița izolată pentru a reduce posibilitățile de reglare greșite datorită inductanței corpului nostru.
Acesta este modul în care puteți interfața modulul RF cu microcontrolerul PIC și puteți comunica fără fir între două microcontrolere PIC utilizând senzorul RF.
Puteți descărca codul complet pentru emițător și receptor de aici, de asemenea, verificați videoclipul demonstrativ de mai jos.