Ciao a tutti
Oggi vorrei presentarti l'ultimo contributo della serie "Che cosa scintilla lì?" immaginare. Iniziamo con un primitivo collegamento radio tra due UNOs, Usiamo a per questo 433 Mhz set dal nostro negozio online insieme a due controller. È possibile trovare l'e-book per i moduli radio QUI.Innanzitutto colleghiamo semplicemente i moduli su Unos, come mostrato nella figura:
In generale, non è consigliabile utilizzare i moduli 433Mhz su una breadboard perché il metallo in essi contenuto si disperde o interferisce con il segnale, ma parleremo del problema delle interferenze.
L'idea alla base dei seguenti schizzi è quella di trasmettere un semplice segnale alto tramite i moduli 433Mhz dall'invio all'ONU ricevente. Iniziamo con il codice per il trasmettitore:
int dati = 7; vuoto configurazione(){ serial.iniziare(9600); pinMode(LED_BUILTIN, USCITA); pinMode(5, USCITA); digitalWrite(5, LOW); // Usiamo come GND pinMode(6, USCITA); digitalWrite(6, ALTA); // Usiamo come VCC pinMode(dati, USCITA); digitalWrite(dati, LOW); // Per i dati } vuoto cappio() { digitalWrite(dati, LOW); digitalWrite(LED_BUILTIN, LOW); ritardo(1000); digitalWrite(dati, ALTA); digitalWrite(LED_BUILTIN, ALTA); ritardo(1000); }
Nei nostri post precedenti abbiamo mostrato come impostare uno stick DVB-T come SDR sul Raspberry e come installare GQRX. Bene, abbiamo superato un po 'questa soluzione e in questo esempio utilizziamo SDR # in Windows.
Come possiamo vedere, il nostro schizzo funziona abbastanza bene e fa quello che dovrebbe. Ora ci occupiamo del codice per il destinatario:
int dati = 5; vuoto configurazione(){ serial.iniziare(9600); pinMode(LED_BUILTIN, USCITA); pinMode(4, USCITA); digitalWrite(4, LOW); // Usiamo come GND pinMode(dati, INGRESSO); digitalWrite(dati, LOW); // Per i dati pinMode(7, USCITA); digitalWrite(7, ALTA); // Usiamo come VCC } vuoto cappio() { // imposta il LED su alto quando viene ricevuto il segnale digitalWrite(LED_BUILTIN,Leggi digitale(dati)); ritardo(50); }
Una volta che il codice è stato trasmesso, dovremmo registrare che il LED interno del ricevitore si illumina per ogni segnale alto dal trasmettitore. Sfortunatamente, questo non funziona affatto, come potresti scoprire quando costruisci questo progetto.
Ci sono molte ragioni per questo, ma non voglio andare più in dettaglio per non andare oltre lo scopo di questo articolo. Pertanto stiamo cercando una libreria che contenga correzioni di errori e possiamo trasmettere in modo affidabile dati più complessi di un segnale primitivo alto-basso. La soluzione a questo problema è il successore di VirtualWire Libary: Radiohead
È possibile utilizzare questa libreria dopo scaricare tramite la funzione "* .zip library" contenuta nell'IDE
Usiamo una versione leggermente modificata di ask_receiver e ask_transmitter per il nostro esempio.
Per non dover cambiare i pin in RH_Ask.h, ricolleghiamo il nostro Unos. I pin predefiniti in Libary sono assegnati come segue:
Modulo 433 | Ricevitore ONU | Trasmettitore ONU |
VCC | 5V | 5V |
GND | GND | GND |
DATI | 11 | 12 |
Il codice per il trasmettitore:
#include <RH_ASK.B> #include <SPI.B> // Non effettivamente utilizzato ma necessario per la compilazione RH_ASK autista; vuoto configurazione() { serial.iniziare(9600); se (!autista.init()) serial.println("init fallito"); } vuoto cappio() { const carbonizzare *msg = "Dati di misurazione"; // messaggio da inviare. autista.trasmissione((uint8_t *)msg, strlen(msg)); autista.waitPacketSent(); ritardo(200); }
Il codice per il destinatario:
#include <RH_ASK.B> #include <SPI.B> // Non effettivamente utilizzato ma necessario per la compilazione RH_ASK autista; vuoto configurazione() { serial.iniziare(9600); // solo debug se (!autista.init()) serial.println("init fallito"); } vuoto cappio() { uint8_t buf[9]; // Formato del messaggio da ricevere uint8_t buflen = Sizeof(Buf); Se (autista.Recv(Buf, &buflen)) Non bloccante { Int Ho; Messaggio con un buon checksum ricevuto, scaricarlo. Seriale.Stampare("Messaggio: "); Seriale.println((Char*)Buf); } } Im seriellen Monitor des Empf-ngers sehen wir die Ausgabe:
Viel Spass beim Basteln & bis zum n'chsten Mal :)