- Modulo trasmettitore e ricevitore RF 433 MHz:
- Necessità di codificatore e decodificatore:
- Componenti richiesti:
- Schema elettrico:
- Spiegazione del codice:
Ciao a tutti, oggi in questo progetto, interfacciamo il modulo ricevitore e trasmettitore RF con il microcontrollore PIC e comunicheremo tra due diversi microcontrollori pic in modalità wireless.
In questo progetto faremo le seguenti cose: -
- Useremo PIC16F877A per il trasmettitore e PIC18F4520 per la sezione Ricevitore.
- Interfacciamo tastiera e LCD con microcontrollore PIC.
- Sul lato trasmettitore, interfacciamo la tastiera con il PIC e trasmettiamo i dati. Sul lato ricevitore, riceveremo i dati in modalità wireless e mostreremo quale tasto viene premuto sul display LCD.
- Useremo encoder e decoder IC per trasmettere dati a 4 bit.
- La frequenza di ricezione sarà di 433 Mhz utilizzando il modulo RF TX-RX disponibile sul mercato.
Prima di entrare negli schemi e nei codici, comprendiamo il funzionamento del modulo RF con CI encoder-decoder. Leggi anche i due articoli seguenti per imparare come interfacciare LCD e tastiera con il microcontrollore PIC:
- Interfacciamento LCD con microcontrollore PIC utilizzando MPLABX e XC8
- Tastiera a matrice 4x4 interfacciata con microcontrollore PIC
Modulo trasmettitore e ricevitore RF 433 MHz:
Questi sono i moduli trasmettitore e ricevitore che stiamo utilizzando nel progetto. È il modulo più economico disponibile per 433 MHz. Questi moduli accettano dati seriali in un canale.
Se vediamo le specifiche dei moduli, il trasmettitore ha una tensione nominale di 3,5-12 V come tensione di ingresso e la distanza di trasmissione è di 20-200 metri. Trasmette nel protocollo AM (Audio Modulation) alla frequenza di 433 MHz. Possiamo trasferire dati a una velocità di 4KB / S con una potenza di 10 mW.
Nell'immagine in alto possiamo vedere il pin-out del modulo trasmettitore. Da sinistra a destra i pin sono VCC, DATA e GND. Possiamo anche aggiungere l'antenna e saldarla nel punto indicato nell'immagine sopra.
Per le specifiche del ricevitore, il ricevitore ha un valore nominale di 5 V cc e una corrente di riposo di 4 mA come ingresso. La frequenza di ricezione è 433,92 MHz con una sensibilità di -105DB.
Nell'immagine sopra possiamo vedere il pin-out del modulo ricevitore. I quattro pin sono da sinistra a destra, VCC, DATA, DATA e GND. Quei due pin centrali sono collegati internamente. Possiamo usarne uno o entrambi. Ma è buona norma utilizzarli entrambi per abbassare l'accoppiamento acustico.
Inoltre, una cosa non è menzionata nella scheda tecnica, l' induttore variabile o POT al centro del modulo viene utilizzato per la calibrazione della frequenza. Se non siamo riusciti a ricevere i dati trasmessi, ci sono possibilità che le frequenze di trasmissione e ricezione non siano abbinate. Questo è un circuito RF e dobbiamo sintonizzare il trasmettitore sul punto di frequenza di trasmissione perfetto. Inoltre, come il trasmettitore, questo modulo ha anche una porta antenna; possiamo saldare il filo in forma arrotolata per una ricezione più lunga.
Il raggio di trasmissione dipende dalla tensione fornita al trasmettitore e dalla lunghezza delle antenne su entrambi i lati. Per questo specifico progetto non abbiamo utilizzato un'antenna esterna e utilizzato 5V sul lato del trasmettitore. Abbiamo controllato con una distanza di 5 metri e ha funzionato perfettamente.
I moduli RF sono molto utili per la comunicazione wireless a lunga distanza. Qui viene mostrato un circuito di trasmettitore e ricevitore RF di base. Abbiamo realizzato molti progetti utilizzando il modulo RF:
- Elettrodomestici a controllo RF
- Macchinina controllata tramite Bluetooth con Arduino
- LED telecomandati RF utilizzando Raspberry Pi
Necessità di codificatore e decodificatore:
Questo sensore RF presenta alcuni inconvenienti: -
- Comunicazione unidirezionale.
- Solo un canale
- Interferenza molto rumorosa.
A causa di questo inconveniente abbiamo utilizzato encoder e decoder IC, HT12D e HT12E. D sta per decoder che verrà utilizzato sul lato del ricevitore ed E sta per Encoder che sarà utilizzato sul lato del trasmettitore. Questi circuiti integrati forniscono 4 canali. Anche a causa della codifica e della decodifica il livello di rumore è molto basso.
Nell'immagine sopra, quello di sinistra è HT12D il decoder e quello di destra è HT12E, quello dell'encoder. Entrambi i circuiti integrati sono identici. Da A0 a A7 vengono utilizzati per codifiche speciali. Possiamo usare i pin del microcontrollore per controllare quei pin e impostare le configurazioni. Le stesse configurazioni devono essere abbinate sull'altro lato. Se entrambe le configurazioni sono accurate e abbinate, possiamo ricevere i dati. Questi 8 pin possono essere collegati a Gnd o VCC o lasciati aperti. Qualunque sia la configurazione che facciamo nell'encoder, dobbiamo far corrispondere la connessione sul decoder. In questo progetto lasceremo aperti quegli 8 pin sia per l'encoder che per il decoder. 9 e 18 pin sono rispettivamente VSS e VDD. Possiamo usare il pin VT inHT12D come scopo di notifica. Per questo progetto non l'abbiamo utilizzato. Il pin TE serve per abilitare o disabilitare il pin della trasmissione.
La parte importante è il pin OSC a cui dobbiamo collegare i resistori per fornire l'oscillazione all'encoder e al decoder. Il decoder necessita di oscillazioni maggiori rispetto al decoder. In genere il valore della resistenza dell'encoder sarà 1Meg e il valore del decoder è 33k. Useremo quelle resistenze per il nostro progetto.
Il pin DOUT è il pin dati del trasmettitore RF su HT12E e il pin DIN nell'HT12D viene utilizzato per collegare il pin dati del modulo RF.
In HT12E, da AD8 a AD11 è un ingresso a quattro canali che viene convertito e trasmesso in serie tramite il modulo RF e l'esatto contrario accade in HT12D, i dati seriali ricevuti e decodificati, e otteniamo un'uscita parallela a 4 bit sui 4 pin da D8 a D11.
Componenti richiesti:
- 2 - Tagliere per pane
- 1 - LCD 16x2
- 1 - Tastiera
- Coppia HT12D e HT12E
- Modulo RF RX-TX
- 1- 10K preimpostato
- 2 - Resistenza da 4,7 k
- 1 resistenza da 1M
- 1- Resistenza da 33k
- 2- Condensatori ceramici da 33pF
- Cristallo da 1 - 20 Mhz
- Bergsticks
- Pochi fili a filo singolo.
- MCU PIC16F877A
- MCU PIC18F4520
- Un cacciavite per il controllo del potenziometro di frequenza, deve essere isolato dal corpo umano.
Schema elettrico:
Schema del circuito per il lato del trasmettitore (PIC16F877A):
Abbiamo usato PIC16F877A per scopi di trasmissione. La tastiera esadecimale collegata attraverso il PORTB ei 4 canali collegati attraverso gli ultimi 4 bit di PORTD. Scopri di più sul collegamento della tastiera 4x4 Matrix qui.
Pin out come segue-
1. AD11 = RD7
2. AD10 = RD6
3. AD9 = RD5
4. AD8 = RD4
Schema del circuito per il lato del ricevitore (PIC18F4520):
Nell'immagine sopra, è mostrato il circuito del ricevitore. Il display LCD è collegato tramite PORTB. Abbiamo utilizzato l'oscillatore interno del PIC18F4520 per questo progetto. I 4 canali sono collegati allo stesso modo di prima nel circuito del trasmettitore. Scopri di più sul collegamento di LCD 16x2 con microcontrollore PIC qui.
Questo è il lato del trasmettitore -
E il lato del ricevitore in una breadboard separata -
Spiegazione del codice:
Ci sono due parti del codice, una è per il trasmettitore e una è per il ricevitore. Puoi scaricare il codice completo da qui.
Codice PIC16F877A per trasmettitore RF:
Come sempre prima, dobbiamo impostare i bit di configurazione nel microcontrollore pic, definire alcune macro, incluse le librerie e la frequenza dei cristalli. La porta AD8-AD11 dell'encoder ic è definita come RF_TX su PORTD. Puoi controllare il codice per tutti quelli nel codice completo dato alla fine.
Abbiamo usato due funzioni, void system_init (void) e void encode_rf_sender (char data).
Lo system_init è utilizzato per inizializzazione perno e tastiera inizializzazioni. L'inizializzazione della tastiera viene chiamata dalla libreria della tastiera.
La porta della tastiera è definita anche in keypad.h. Abbiamo creato PORTD come output utilizzando TRISD = 0x00 e impostato la porta RF_TX come 0x00 come stato predefinito.
void system_init (void) { TRISD = 0x00; RF_TX = 0x00; keyboard_initialization (); }
In encode_rf_sender abbiamo cambiato lo stato dei 4 pin a seconda del pulsante premuto. Abbiamo creato 16 diversi valori esadecimali o stati PORTD a seconda di ( 4x4) 16 diversi pulsanti premuti.void encode_rf_sender (char data) { if (data == '1') RF_TX = 0x10; if (data == '2') RF_TX = 0x20; if (data == '3') …………... …. ….
Nella funzione principale riceviamo prima i dati premuti sul pulsante della tastiera usando la funzione switch_press_scan () e memorizziamo i dati nella variabile chiave. Dopodiché abbiamo codificato i dati usando la funzione encode_rf_sender () e cambiando lo stato PORTD.
Codice PIC18F4520 per ricevitore RF:
Come sempre, per prima cosa impostiamo i bit di configurazione in PIC18f4520. È leggermente diverso da PIC16F877A, puoi controllare il codice nel file zip allegato.
Abbiamo incluso il file di intestazione LCD. Definita la connessione della porta D8-D11 dell'IC del decodificatore attraverso PORTD utilizzando la linea #define RF_RX PORTD, la connessione è la stessa utilizzata nella sezione Encoder. Anche la dichiarazione della porta LCD viene eseguita nel file lcd.c.
#includere
Come detto prima, stiamo usando l'oscillatore interno per il 18F4520, abbiamo usato la funzione system _ init dove abbiamo configurato il registro OSCON del 18F4520 per impostare l' oscillatore interno per 8 MHz. Abbiamo anche impostato il bit TRIS sia per i pin LCD che per i pin Decoder. Poiché HT - 12D fornisce l'output alle porte D8-D11, è necessario configurare PORTD come input per ricevere l'output.
void system_init (void) { OSCCON = 0b01111110; // 8Mhz`` intosc // OSCTUNE = 0b01001111; // Abilitazione PLL, prescaler max 8x4 = 32Mhz TRISB = 0x00; TRISD = 0xFF; // Ultimi 4 bit come bit di ingresso. }
Abbiamo configurato il registro OSCON a 8 MHz, inoltre abbiamo impostato la porta B come output e la porta D come input.
La seguente funzione viene eseguita utilizzando l'esatta logica inversa utilizzata nella sezione precedente del trasmettitore. Qui otteniamo lo stesso valore esadecimale dalla porta D e da quel valore esadecimale identifichiamo quale interruttore è stato premuto nella sezione del trasmettitore. Possiamo identificare ogni tasto premuto e inviare il carattere corrispondente al display 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) ……. ….. …… ………..
Il lcd_data viene chiamato dal lcd.c file.
Nella funzione principale inizializziamo prima il sistema e il display LCD. Abbiamo preso una variabile di byte, e memorizzato il valore esadecimale ricevuto dalla porta D. Quindi dalla funzione rf_analysis possiamo stampare il carattere sul display 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); } ritorno; }
Prima di eseguirlo, abbiamo messo a punto il circuito. Per prima cosa abbiamo premuto il pulsante " D " nella tastiera. Quindi, lo 0xF0 viene trasmesso continuamente dal trasmettitore RF. Abbiamo quindi sintonizzato il circuito del ricevitore fino a quando il display LCD mostra il carattere " D ". A volte il modulo è sintonizzato correttamente dal produttore, a volte non lo è. Se tutto è collegato correttamente e non viene visualizzato il valore del pulsante premuto sul display LCD, è possibile che il ricevitore RF non sia sintonizzato. Abbiamo utilizzato il cacciavite isolato per diminuire le possibilità di accordatura errata a causa dell'induttanza del nostro corpo.
In questo modo è possibile interfacciare il modulo RF al microcontrollore PIC e comunicare tra due microcontrollori PIC in modalità wireless utilizzando il sensore RF.
Puoi scaricare il codice completo per trasmettitore e ricevitore da qui, guarda anche il video dimostrativo qui sotto.