Termòmetre sense fils amb enllaç RF de 433 MHz mitjançant Arduino

Proveu El Nostre Instrument Per Eliminar Problemes





En aquest post anem a construir un termòmetre sense fils basat en Arduino que pugui controlar la temperatura ambient i la temperatura ambiental externa. Les dades es transmeten i reben mitjançant un enllaç RF de 433 MHz.

Utilització del mòdul RF de 433 MHz i del sensor DHT11

El projecte proposat utilitza Arduino com a cervell i el cor com a Mòdul transmissor / receptor de 433 MHz .



El projecte es divideix en dos circuits separats, un amb receptor de 433 MHz, pantalla LCD i sensor DHT11 que es col·locaran a l’habitació i també mesura la temperatura ambient .

Un altre circuit té un transmissor de 433 MHz, Sensor DHT11 per mesurar la temperatura ambiental exterior. Tant el circuit té un arduino cadascun.



El circuit situat a l'interior de la sala mostrarà les lectures de temperatura internes i externes a la pantalla LCD.

Ara fem una ullada al mòdul transmissor / receptor de 433 MHz.

Mòdul transmissor / receptor de 433 MHz.

Els mòduls de transmissor i receptor es mostren a sobre; és capaç de comunicar-se de manera senzilla (unidireccional). El receptor té 4 pins Vcc, GND i pins DATA. Hi ha dos pins de DATA, són iguals i podem enviar les dades des de qualsevol de dos pins.

El transmissor és molt més senzill, només té pin d'entrada Vcc, GND i DATA. Hem de connectar una antena als dos mòduls que es descriu al final de l’article, sense que la comunicació de l’antena entre ells no s’estableixi més enllà d’uns quants centímetres.

Ara vegem com es comuniquen aquests mòduls.

Ara suposem que estem aplicant un pols de rellotge de 100Hz al pin d’entrada de dades del transmissor. El receptor rebrà la rèplica exacta del senyal al pin de dades del receptor.

Això és senzill, oi? Sí ... però aquest mòdul funciona amb AM i és susceptible al soroll. Segons l’observació de l’autor, si el pin de dades del transmissor es queda sense cap senyal durant més de 250 mil·lisegons, el pin de sortida de dades del receptor produeix senyals aleatoris.

Per tant, només és adequat per a transmissions de dades no crítiques. Tot i això, aquest projecte funciona molt bé amb aquest mòdul.

Ara passem als esquemes.

RECEPTOR:


connexió arduino a pantalla LCD. Potenciòmetre de 10K

El circuit anterior és una connexió arduino a pantalla LCD. Es proporciona un potenciòmetre de 10K per ajustar el contrast de la pantalla LCD.

Termòmetre sense fils que utilitza enllaç RF de 433 MHz i Arduino

L’anterior és el circuit receptor. La pantalla LCD hauria d'estar connectada a aquest arduino.

Si us plau, baixeu els fitxers de la biblioteca següents abans de compilar el codi

Cap de ràdio: github.com/PaulStoffregen/RadioHead

Biblioteca del sensor DHT: https://arduino-info.wikispaces.com/file/detail/DHT-lib.zip

Programa per al receptor:

//--------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-----//

Emissor:

Transmissor de termòmetre sense fils

L'anterior és l'esquema del transmissor, que és bastant senzill com a receptor. Aquí estem fent servir una altra placa arduino. El sensor DHT11 detectarà la temperatura ambiental exterior i l’enviarà al mòdul receptor.

La distància entre el transmissor i el receptor no ha de ser superior a 10 metres. Si hi ha obstacles entre ells, es pot reduir el rang de transmissió.

Programa per a l'emissor:

//------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----//

Construcció d'antena:

Si esteu construint projectes amb això Mòduls de 433 MHz , seguiu els detalls constructius següents estrictament per obtenir un bon abast.

Antena RF de 433 MHz

Utilitzeu un cable de nucli únic que hauria de ser prou resistent per suportar aquesta estructura. També podeu utilitzar filferro de coure aïllat amb aïllament retirat a la part inferior per unir la soldadura. Feu-ne dos, un per al transmissor i un altre per al receptor.

Prototip de termòmetre sense fils de l'autor que utilitza Arduino i enllaç RF de 433 MHz:

Prototip de termòmetre sense fils amb 433 MHz RF Link i Arduino


Anterior: sondes anticorrosives per al controlador de nivell d’aigua Següent: L293 Quad Half-H Driver IC Pinout, Full de dades, circuit d'aplicacions