Trådlös termometer med 433 MHz RF-länk med Arduino

Prova Vårt Instrument För Att Eliminera Problem





I det här inlägget ska vi konstruera en Arduino-baserad trådlös termometer som kan övervaka rumstemperatur och yttre omgivningstemperatur. Data överförs och tas emot via 433 MHz RF-länk.

Använda 433MHz RF-modul och DHT11-sensor

Det föreslagna projektet använder Arduino som hjärna och hjärtat som 433 MHz sändar- / mottagarmodul .



Projektet är uppdelat i två separata kretsar, den med 433 MHz-mottagare, LCD-display och DHT11-sensor som kommer att placeras inne i rummet och även mäter rumstemperaturen .

En annan krets har 433MHz sändare, DHT11-sensor för mätning av omgivningstemperatur utanför. Båda kretsarna har en arduino vardera.



Kretsen placerad inne i rummet visar de interna och externa temperaturavläsningarna på LCD.

Låt oss nu titta på 433 MHz sändare / mottagarmodul.

433 MHz sändar- / mottagarmodul.

Sändar- och mottagarmodulerna visas ovan, den kan simplexkommunikation (enkelriktad). Mottagaren har fyra stift Vcc, GND och DATA-stift. Det finns två DATA-stift, de är desamma och vi kan mata ut data från någon av två stift.

Sändaren är mycket enklare, den har bara Vcc-, GND- och DATA-ingångsstift. Vi måste ansluta en antenn till båda modulerna som beskrivs i slutet av artikeln, utan antennkommunikation mellan dem kommer inte att upprättas längre än några centimeter.

Låt oss nu se hur dessa moduler kommunicerar.

Antag nu att vi applicerar klockpuls på 100Hz på sändarens dataingångsstift. Mottagaren får exakt kopia av signalen vid mottagarens datapinne.

Det är enkelt, eller hur? Ja ... men den här modulen fungerar på AM och känslig för buller. Från författarens observation om sändarens datapinne lämnas utan någon signal i mer än 250 millisekunder, producerar mottagarens utdatapinne slumpmässiga signaler.

Så det är endast lämpligt för icke-kritiska dataöverföringar. Detta projekt fungerar dock mycket bra med den här modulen.

Nu går vi vidare till scheman.

MOTTAGARE:


anslutning av arduino till LCD-skärm. 10K potentiometer

Ovanstående krets är arduino till LCD-skärmanslutning. 10K potentiometer finns för justering av LCD-skärmens kontrast.

Trådlös termometer med 433 MHz RF Link och Arduino

Ovanstående är mottagarkretsen. LCD-skärmen ska anslutas till denna arduino.

Ladda ner följande biblioteksfiler innan du sammanställer koden

Radio Head: github.com/PaulStoffregen/RadioHead

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

Program för mottagare:

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

Sändare:

Trådlös sändare för termometer

Ovanstående är schemat för sändaren, som är ganska enkel som mottagare. Här använder vi ett annat arduino-kort. DHT11-sensorn känner av omgivningstemperaturen utanför och skickar tillbaka till mottagarmodulen.

Avståndet mellan sändare och mottagare bör inte vara mer än 10 meter. Om det finns några hinder mellan dem kan överföringsområdet minska.

Program för sändare:

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

Konstruktion av antenn:

Om du bygger projekt som använder detta 433 MHz-moduler , följ nedanstående konstruktionsdetaljer strikt för bra räckvidd.

433 MHz RF-antenn

Använd en enda kärnkabel som bör vara tillräckligt robust för att stödja denna struktur. Du kan också använda isolerad koppartråd med isolering borttagen i botten för lödfogning. Gör två av dessa, en för sändare och en annan för mottagare.

Författarens trådlösa termometerprototyp med Arduino och 433 MHz RF-länk:

Trådlös termometerprototyp med 433 MHz RF Link och Arduino


Tidigare: Antikorrosionssonder för vattennivåregulator Nästa: L293 Quad Half-H Driver IC Pinout, datablad, applikationskrets