Thermomètre sans fil utilisant une liaison RF 433 MHz utilisant Arduino

Essayez Notre Instrument Pour Éliminer Les Problèmes





Dans cet article, nous allons construire un thermomètre sans fil basé sur Arduino qui peut surveiller la température ambiante et la température ambiante externe. Les données sont transmises et reçues via une liaison RF 433 MHz.

Utilisation du module RF 433 MHz et du capteur DHT11

Le projet proposé utilise Arduino comme cerveau et le cœur comme Module émetteur / récepteur 433 MHz .



Le projet est divisé en deux circuits séparés, celui avec récepteur 433 MHz, écran LCD et capteur DHT11 qui sera placé à l'intérieur de la pièce et également mesure la température ambiante .

Un autre circuit a un émetteur 433 MHz, Capteur DHT11 pour mesurer la température ambiante extérieure. Les deux circuits ont chacun un arduino.



Le circuit placé à l'intérieur de la pièce affichera les lectures de température interne et externe sur l'écran LCD.

Voyons maintenant le module émetteur / récepteur 433 MHz.

Module émetteur / récepteur 433 MHz.

Les modules émetteur et récepteur sont illustrés ci-dessus, ils sont capables de communiquer en simplex (unidirectionnel). Le récepteur possède 4 broches Vcc, GND et DATA. Il y a deux broches DATA, elles sont identiques et nous pouvons sortir les données de l'une des deux broches.

L'émetteur est beaucoup plus simple, il n'a que les broches d'entrée Vcc, GND et DATA. Nous devons connecter une antenne aux deux modules qui est décrit à la fin de l'article, sans antenne la communication entre eux ne s'établira pas au-delà de quelques centimètres.

Voyons maintenant comment ces modules communiquent.

Supposons maintenant que nous appliquions une impulsion d'horloge de 100 Hz à la broche d'entrée de données de l'émetteur. Le récepteur recevra une réplique exacte du signal sur la broche de données du récepteur.

C’est simple, non? Ouais… mais ce module fonctionne sur AM et sensible au bruit. D'après les observations de l'auteur, si la broche de données de l'émetteur est restée sans signal pendant plus de 250 millisecondes, la broche de sortie de données du récepteur produit des signaux aléatoires.

Ainsi, il ne convient que pour les transmissions de données non critiques. Cependant, ce projet fonctionne très bien avec ce module.

Passons maintenant aux schémas.

DESTINATAIRE:


connexion arduino à l

Le circuit ci-dessus est une connexion arduino à l'écran LCD. Un potentiomètre 10K est fourni pour régler le contraste de l'écran LCD.

Thermomètre sans fil utilisant une liaison RF 433 MHz et Arduino

Ce qui précède est le circuit récepteur. L'écran LCD doit être connecté à cet arduino.

Veuillez télécharger les fichiers de bibliothèque suivants avant de compiler le code

Tête de radio: github.com/PaulStoffregen/RadioHead

Bibliothèque de capteurs DHT: https://arduino-info.wikispaces.com/file/detail/DHT-lib.zip

Programme pour le récepteur:

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

Émetteur:

Émetteur de thermomètre sans fil

Ce qui précède est le schéma de l'émetteur, qui est assez simple en tant que récepteur. Ici, nous utilisons une autre carte arduino. Le capteur DHT11 détecte la température ambiante extérieure et renvoie au module récepteur.

La distance entre l'émetteur et le récepteur ne doit pas dépasser 10 mètres. S'il y a des obstacles entre eux, la portée de transmission peut être réduite.

Programme pour l'émetteur:

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

Construction de l'antenne:

Si vous créez des projets en utilisant ce Modules 433 MHz , suivez strictement les détails de construction ci-dessous pour une bonne portée.

Antenne RF 433 MHz

Utilisez un fil à âme unique qui doit être suffisamment solide pour supporter cette structure. Vous pouvez également utiliser un fil de cuivre isolé dont l'isolation a été retirée en bas pour la soudure. Faites-en deux, un pour l'émetteur et un autre pour le récepteur.

Prototype de thermomètre sans fil de l'auteur utilisant Arduino et une liaison RF 433 MHz:

Prototype de thermomètre sans fil utilisant une liaison RF 433 MHz et Arduino


Une paire de: Sondes anti-corrosion pour contrôleur de niveau d'eau Un article: Brochage du circuit intégré du pilote L293 Quad Half-H, fiche technique, circuit d'application