Drahtloses Thermometer mit 433 MHz HF-Verbindung mit Arduino

Versuchen Sie Unser Instrument, Um Probleme Zu Beseitigen





In diesem Beitrag werden wir ein drahtloses Thermometer auf Arduino-Basis konstruieren, das die Raumtemperatur und die äußere Umgebungstemperatur überwachen kann. Die Daten werden über eine 433-MHz-HF-Verbindung gesendet und empfangen.

Verwendung eines 433-MHz-HF-Moduls und eines DHT11-Sensors

Das vorgeschlagene Projekt nutzt Arduino als Gehirn und das Herz als 433 MHz Sender / Empfänger-Modul .



Das Projekt ist in zwei separate Schaltkreise unterteilt, einen mit 433-MHz-Empfänger, LCD-Display und DHT11-Sensor, die im Raum und auch im Raum platziert werden misst die Raumtemperatur .

Eine andere Schaltung hat einen 433-MHz-Sender, DHT11-Sensor zur Messung der Außentemperatur. Beide Schaltungen haben jeweils ein Arduino.



Der im Raum platzierte Stromkreis zeigt die internen und externen Temperaturwerte auf dem LCD an.

Schauen wir uns nun das 433-MHz-Sender / Empfänger-Modul an.

433 MHz Sender / Empfänger-Modul.

Die oben gezeigten Sender- und Empfängermodule sind für die Simplex-Kommunikation (Einweg) geeignet. Der Empfänger verfügt über 4 Pins Vcc, GND und DATA. Es gibt zwei DATA-Pins, sie sind gleich und wir können die Daten von einem der beiden Pins ausgeben.

Der Sender ist viel einfacher und hat nur einen Vcc-, GND- und DATA-Eingangspin. Wir müssen eine Antenne an beide Module anschließen, die am Ende des Artikels beschrieben wird, ohne dass die Antennenkommunikation zwischen ihnen nicht über einige Zentimeter hinaus hergestellt wird.

Nun wollen wir sehen, wie diese Module kommunizieren.

Nehmen wir nun an, wir legen einen Takt von 100 Hz an den Dateneingangspin des Senders an. Der Empfänger empfängt eine exakte Nachbildung des Signals am Daten-Pin des Empfängers.

Das ist einfach, oder? Ja… aber dieses Modul funktioniert mit AM und ist anfällig für Rauschen. Nach der Beobachtung des Autors erzeugt der Datenausgangspin des Empfängers zufällige Signale, wenn der Datenstift des Senders länger als 250 Millisekunden ohne Signal bleibt.

Es ist also nur für unkritische Datenübertragungen geeignet. Dieses Projekt funktioniert jedoch sehr gut mit diesem Modul.

Kommen wir nun zu den Schaltplänen.

EMPFÄNGER:


Verbindung von Arduino zu LCD-Display. 10K Potentiometer

Die obige Schaltung ist eine Verbindung zwischen Arduino und LCD-Display. Das 10K-Potentiometer dient zum Einstellen des Kontrasts des LCD-Displays.

Drahtloses Thermometer mit 433 MHz RF Link und Arduino

Das Obige ist die Empfängerschaltung. Das LCD-Display sollte an dieses Arduino angeschlossen sein.

Bitte laden Sie die folgenden Bibliotheksdateien herunter, bevor Sie den Code kompilieren

Radiokopf: github.com/PaulStoffregen/RadioHead

DHT-Sensorbibliothek: https://arduino-info.wikispaces.com/file/detail/DHT-lib.zip

Programm für Empfänger:

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

Sender:

Drahtloser Thermometer-Sender

Das Obige ist das Schema für den Sender, das als Empfänger ziemlich einfach ist. Hier verwenden wir ein anderes Arduino-Board. Der DHT11-Sensor erfasst die Außentemperatur und sendet sie an das Empfängermodul zurück.

Der Abstand zwischen Sender und Empfänger sollte nicht mehr als 10 Meter betragen. Wenn sich zwischen ihnen Hindernisse befinden, kann sich die Reichweite verringern.

Programm für Sender:

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

Bau der Antenne:

Wenn Sie damit Projekte erstellen 433 MHz Module Befolgen Sie die folgenden Konstruktionsdetails genau, um eine gute Reichweite zu erzielen.

433 MHz HF-Antenne

Verwenden Sie einen einadrigen Draht, der robust genug sein sollte, um diese Struktur zu tragen. Sie können auch isolierten Kupferdraht verwenden, dessen Isolierung unten für die Lötverbindung entfernt ist. Machen Sie zwei davon, eine für den Sender und eine für den Empfänger.

Prototyp des drahtlosen Thermometers des Autors mit Arduino und 433 MHz RF Link:

Prototyp eines drahtlosen Thermometers mit 433 MHz RF Link und Arduino


Zurück: Korrosionsschutzsonden für Wasserstandsregler Weiter: L293 Quad Half-H-Treiber-IC-Pinbelegung, Datenblatt, Anwendungsschaltung