Termometro wireless che utilizza un collegamento RF a 433 MHz utilizzando Arduino

Prova Il Nostro Strumento Per Eliminare I Problemi





In questo post costruiremo un termometro wireless basato su Arduino in grado di monitorare la temperatura ambiente e la temperatura ambiente esterna. I dati vengono trasmessi e ricevuti tramite un collegamento RF a 433 MHz.

Utilizzo del modulo RF 433 MHz e del sensore DHT11

Il progetto proposto utilizza Arduino come cervello e il cuore come Modulo trasmettitore / ricevitore 433 MHz .



Il progetto è diviso in due circuiti separati, quello con ricevitore 433 MHz, display LCD e sensore DHT11 che sarà posizionato all'interno della stanza e anche misura la temperatura ambiente .

Un altro circuito ha un trasmettitore a 433 MHz, Sensore DHT11 per misurare la temperatura ambiente esterna. Entrambi i circuiti hanno un arduino ciascuno.



Il circuito posto all'interno della stanza visualizzerà le letture della temperatura interna ed esterna sul display LCD.

Ora diamo un'occhiata al modulo trasmettitore / ricevitore 433 MHz.

Modulo trasmettitore / ricevitore 433 MHz.

I moduli trasmettitore e ricevitore sono mostrati sopra è in grado di comunicazione simplex (unidirezionale). Il ricevitore ha 4 pin Vcc, GND e DATA. Ci sono due pin DATA, sono uguali e possiamo produrre i dati da uno dei due pin.

Il trasmettitore è molto più semplice, ha solo Vcc, GND e pin di ingresso DATA. Dobbiamo collegare un'antenna a entrambi i moduli come descritto alla fine dell'articolo, senza che la comunicazione dell'antenna tra di loro non venga stabilita oltre pochi pollici.

Vediamo ora come comunicano questi moduli.

Supponiamo ora di applicare un impulso di clock di 100Hz al pin di ingresso dati del trasmettitore. Il ricevitore riceverà la replica esatta del segnale sul pin dati del ricevitore.

È semplice, vero? Sì ... ma questo modulo funziona su AM ed è suscettibile al rumore. Dall'osservazione dell'autore se il pin dati del trasmettitore è rimasto senza alcun segnale per più di 250 millisecondi, il pin di uscita dati del ricevitore produce segnali casuali.

Quindi, è adatto solo per trasmissioni di dati non critici. Tuttavia questo progetto funziona molto bene con questo modulo.

Ora passiamo agli schemi.

RICEVITORE:


connessione da arduino a display LCD. Potenziometro 10K

Il circuito sopra è la connessione da arduino a display LCD. Il potenziometro 10K è fornito per regolare il contrasto del display LCD.

Termometro wireless con collegamento RF 433 MHz e Arduino

Quanto sopra è il circuito del ricevitore. Il display LCD dovrebbe essere collegato a questo arduino.

Si prega di scaricare i seguenti file di libreria prima di compilare il codice

Radio Head: github.com/PaulStoffregen/RadioHead

Libreria di sensori DHT: https://arduino-info.wikispaces.com/file/detail/DHT-lib.zip

Programma per ricevitore:

//--------Program Developed by R.Girish-----//
#include
#include
#include
#include
#define DHTxxPIN A0
LiquidCrystal lcd(12,11,5,4,3,2)
RH_ASK driver(2000, 7, 9, 10)
int ack = 0
dht DHT
void setup()
{
Serial.begin(9600)
lcd.begin(16,2)
if (!driver.init())
Serial.println('init failed')
}
void loop()
{
ack = 0
int chk = DHT.read11(DHTxxPIN)
switch (chk)
{
case DHTLIB_ERROR_CONNECT:
ack = 1
lcd.setCursor(0,0)
lcd.print('INSIDE:')
lcd.print('NO DATA')
delay(1000)
break
}
if(ack == 0)
{
lcd.setCursor(0,0)
lcd.print('INSIDE:')
lcd.print(DHT.temperature)
lcd.print(' C')
delay(2000)
}
uint8_t buf[RH_ASK_MAX_MESSAGE_LEN]
uint8_t buflen = sizeof(buf)
if (driver.recv(buf, &buflen))
{
int i
String str = ''
for(i = 0 i {
str += (char)buf[i]
}
lcd.setCursor(0,1)
lcd.print('OUTSIDE:')
lcd.print(str)
Serial.println(str)
delay(2000)
}
}
//--------Program Developed by R.Girish-----//

Trasmettitore:

Trasmettitore termometro wireless

Quanto sopra è lo schema per il trasmettitore, che è abbastanza semplice come ricevitore. Qui stiamo usando un'altra scheda arduino. Il sensore DHT11 rileverà la temperatura ambiente esterna e la rimanderà al modulo ricevitore.

La distanza tra trasmettitore e ricevitore non deve essere superiore a 10 metri. Se ci sono degli ostacoli tra di loro, il raggio di trasmissione potrebbe ridursi.

Programma per trasmettitore:

//------Program Developed by R.Girish----//
#include
#include
#define DHTxxPIN A0
#include
int ack = 0
RH_ASK driver(2000, 9, 2, 10)
dht DHT
void setup()
{
Serial.begin(9600)
if (!driver.init())
Serial.println('init failed')
}
void loop()
{
ack = 0
int chk = DHT.read11(DHTxxPIN)
switch (chk)
{
case DHTLIB_ERROR_CONNECT:
ack = 1
const char *temp = 'NO DATA'
driver.send((uint8_t *)temp, strlen(temp))
driver.waitPacketSent()
break
}
if(ack == 0)
{
if(DHT.temperature == 15)
{
const char *temp = '15.00 C'
driver.send((uint8_t *)temp, strlen(temp))
driver.waitPacketSent()
}
if(DHT.temperature == 16)
{
const char *temp = '16.00 C'
driver.send((uint8_t *)temp, strlen(temp))
driver.waitPacketSent()
}
if(DHT.temperature == 17)
{
const char *temp = '17.00 C'
driver.send((uint8_t *)temp, strlen(temp))
driver.waitPacketSent()
}
if(DHT.temperature == 18)
{
const char *temp = '18.00 C'
driver.send((uint8_t *)temp, strlen(temp))
driver.waitPacketSent()
}
if(DHT.temperature == 19)
{
const char *temp = '19.00 C'
driver.send((uint8_t *)temp, strlen(temp))
driver.waitPacketSent()
}
if(DHT.temperature == 20)
{
const char *temp = '20.00 C'
driver.send((uint8_t *)temp, strlen(temp))
driver.waitPacketSent()
}
if(DHT.temperature == 21)
{
const char *temp = '21.00 C'
driver.send((uint8_t *)temp, strlen(temp))
driver.waitPacketSent()
}
if(DHT.temperature == 22)
{
const char *temp = '22.00 C'
driver.send((uint8_t *)temp, strlen(temp))
driver.waitPacketSent()
}
if(DHT.temperature == 23)
{
const char *temp = '23.00 C'
driver.send((uint8_t *)temp, strlen(temp))
driver.waitPacketSent()
}
if(DHT.temperature == 24)
{
const char *temp = '24.00 C'
driver.send((uint8_t *)temp, strlen(temp))
driver.waitPacketSent()
}
if(DHT.temperature == 25)
{
const char *temp = '25.00 C'
driver.send((uint8_t *)temp, strlen(temp))
driver.waitPacketSent()
}
if(DHT.temperature == 26)
{
const char *temp = '26.00 C'
driver.send((uint8_t *)temp, strlen(temp))
driver.waitPacketSent()
}
if(DHT.temperature == 27)
{
const char *temp = '27.00 C'
driver.send((uint8_t *)temp, strlen(temp))
driver.waitPacketSent()
}
if(DHT.temperature == 28)
{
const char *temp = '28.00 C'
driver.send((uint8_t *)temp, strlen(temp))
driver.waitPacketSent()
}
if(DHT.temperature == 29)
{
const char *temp = '29.00 C'
driver.send((uint8_t *)temp, strlen(temp))
driver.waitPacketSent()
}
if(DHT.temperature == 30)
{
const char *temp = '30.00 C'
driver.send((uint8_t *)temp, strlen(temp))
driver.waitPacketSent()
}
if(DHT.temperature == 31)
{
const char *temp = '31.00 C'
driver.send((uint8_t *)temp, strlen(temp))
driver.waitPacketSent()
}
if(DHT.temperature == 32)
{
const char *temp = '32.00 C'
driver.send((uint8_t *)temp, strlen(temp))
driver.waitPacketSent()
}
if(DHT.temperature == 33)
{
const char *temp = '33.00 C'
driver.send((uint8_t *)temp, strlen(temp))
driver.waitPacketSent()
}
if(DHT.temperature == 34)
{
const char *temp = '34.00 C'
driver.send((uint8_t *)temp, strlen(temp))
driver.waitPacketSent()
}
if(DHT.temperature == 35)
{
const char *temp = '35.00 C'
driver.send((uint8_t *)temp, strlen(temp))
driver.waitPacketSent()
}
if(DHT.temperature == 36)
{
const char *temp = '36.00 C'
driver.send((uint8_t *)temp, strlen(temp))
driver.waitPacketSent()
}
if(DHT.temperature == 37)
{
const char *temp = '37.00 C'
driver.send((uint8_t *)temp, strlen(temp))
driver.waitPacketSent()
}
if(DHT.temperature == 38)
{
const char *temp = '38.00 C'
driver.send((uint8_t *)temp, strlen(temp))
driver.waitPacketSent()
}
if(DHT.temperature == 39)
{
const char *temp = '39.00 C'
driver.send((uint8_t *)temp, strlen(temp))
driver.waitPacketSent()
}
if(DHT.temperature == 40)
{
const char *temp = '40.00 C'
driver.send((uint8_t *)temp, strlen(temp))
driver.waitPacketSent()
}
if(DHT.temperature == 41)
{
const char *temp = '41.00 C'
driver.send((uint8_t *)temp, strlen(temp))
driver.waitPacketSent()
}
if(DHT.temperature == 42)
{
const char *temp = '42.00 C'
driver.send((uint8_t *)temp, strlen(temp))
driver.waitPacketSent()
}
if(DHT.temperature == 43)
{
const char *temp = '43.00 C'
driver.send((uint8_t *)temp, strlen(temp))
driver.waitPacketSent()
}
if(DHT.temperature == 44)
{
const char *temp = '44.00 C'
driver.send((uint8_t *)temp, strlen(temp))
driver.waitPacketSent()
}
delay(500)
if(DHT.temperature == 45)
{
const char *temp = '45.00 C'
driver.send((uint8_t *)temp, strlen(temp))
driver.waitPacketSent()
}
if(DHT.temperature == 46)
{
const char *temp = '46.00 C'
driver.send((uint8_t *)temp, strlen(temp))
driver.waitPacketSent()
}
if(DHT.temperature == 47)
{
const char *temp = '47.00 C'
driver.send((uint8_t *)temp, strlen(temp))
driver.waitPacketSent()
}
if(DHT.temperature == 48)
{
const char *temp = '48.00 C'
driver.send((uint8_t *)temp, strlen(temp))
driver.waitPacketSent()
}
if(DHT.temperature == 49)
{
const char *temp = '49.00 C'
driver.send((uint8_t *)temp, strlen(temp))
driver.waitPacketSent()
}
if(DHT.temperature == 50)
{
const char *temp = '50.00 C'
driver.send((uint8_t *)temp, strlen(temp))
driver.waitPacketSent()
}
delay(500)
}
}
//------Program Developed by R.Girish----//

Costruzione dell'antenna:

Se stai realizzando progetti usando questo file Moduli 433 MHz , seguire i dettagli costruttivi di seguito rigorosamente per una buona gamma.

Antenna RF 433 MHz

Utilizzare un filo unipolare che dovrebbe essere abbastanza robusto da supportare questa struttura. È inoltre possibile utilizzare un filo di rame isolato con l'isolamento rimosso nella parte inferiore per la saldatura. Creane due, uno per il trasmettitore e un altro per il ricevitore.

Prototipo di termometro wireless dell'autore che utilizza Arduino e collegamento RF a 433 MHz:

Prototipo di termometro wireless con collegamento RF a 433 MHz e Arduino


Precedente: Sonde anticorrosione per controller del livello dell'acqua Avanti: L293 Quad Half-H Driver IC Pinout, Datasheet, Application Circuit