Brezžični termometer z uporabo 433 MHz RF povezave z uporabo Arduina

Preizkusite Naš Instrument Za Odpravo Težav





V tem prispevku bomo izdelali brezžični termometer na osnovi Arduina, ki lahko nadzoruje sobno temperaturo in zunanjo temperaturo okolice. Podatki se prenašajo in prejemajo prek RF 433 MHz.

Uporaba 433MHz RF modula in senzorja DHT11

Predlagani projekt uporablja Arduino kot možgane in srce kot 433 MHz oddajniški / sprejemni modul .



Projekt je razdeljen na dva ločena vezja, tisto s sprejemnikom 433 MHz, LCD zaslonom in senzorjem DHT11, ki bo nameščen v sobi in tudi meri sobno temperaturo .

Drugo vezje ima 433MHz oddajnik, DHT11 senzor za merjenje zunanje temperature okolice. Oba vezja imata po en arduino.



Vezje, nameščeno v sobi, bo na LCD prikazovalo odčitke notranje in zunanje temperature.

Zdaj pa si oglejmo 433 MHz oddajniški / sprejemni modul.

433 MHz oddajniški / sprejemni modul.

Moduli oddajnika in sprejemnika so prikazani zgoraj in je sposoben enostavne komunikacije (enosmerno). Sprejemnik ima 4 nožice Vcc, GND in DATA nožice. Obstajata dva zatiča DATA, ki sta enaka in podatke lahko izpišemo iz katerega koli od dveh zatičev.

Oddajnik je veliko preprostejši in ima samo vhodni pin Vcc, GND in DATA. Na oba modula moramo povezati anteno, kar je opisano na koncu članka, brez povezave antene med njima pa ne bo več kot nekaj centimetrov.

Zdaj pa poglejmo, kako ti moduli komunicirajo.

Zdaj predpostavimo, da na vhodni zatič oddajnika uporabljamo takt 100 Hz. Sprejemnik bo na podatkovni pin sprejemnika prejel natančno kopijo signala.

To je preprosto kajne? Ja ... ampak ta modul deluje na AM in je občutljiv na šum. Iz avtorjevega opazovanja, če je podatkovni zatič oddajnika ostal brez signala več kot 250 milisekund, izhodni pin sprejemnika oddaja naključne signale.

Torej je primeren le za nekritične prenose podatkov. Vendar ta projekt zelo dobro deluje s tem modulom.

Zdaj pa pojdimo na sheme.

PREJEMNIK:


povezava arduino z LCD zaslonom. 10K potenciometer

Zgornje vezje je povezava med arduino in LCD zaslonom. Za nastavitev kontrasta LCD zaslona je na voljo 10K potenciometer.

Brezžični termometer, ki uporablja 433 MHz RF Link in Arduino

Zgoraj je vezje sprejemnika. LCD zaslon mora biti povezan s tem arduinom.

Pred pripravo kode prenesite naslednje knjižnične datoteke

Radijska vodja: github.com/PaulStoffregen/RadioHead

Knjižnica senzorjev DHT: https://arduino-info.wikispaces.com/file/detail/DHT-lib.zip

Program za sprejemnik:

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

Oddajnik:

Brezžični oddajnik termometra

Zgoraj je shema oddajnika, ki je dokaj preprost kot sprejemnik. Tu uporabljamo drugo ploščo arduino. Senzor DHT11 bo zaznal zunanjo temperaturo okolice in ga poslal nazaj v sprejemniški modul.

Razdalja med oddajnikom in sprejemnikom ne sme biti večja od 10 metrov. Če med njimi obstajajo ovire, se lahko domet prenosa zmanjša.

Program za oddajnik:

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

Gradnja antene:

Če gradite projekte z uporabo tega 433 MHz moduli , natančno sledite spodnjim konstrukcijskim podrobnostim.

433 MHz RF antena

Uporabite enožilno žico, ki mora biti dovolj trdna, da podpira to strukturo. Za spajkanje lahko uporabite tudi izolirano bakreno žico z izolacijo spodaj. Naredite dve izmed njih, eno za oddajnik in drugo za sprejemnik.

Avtorski prototip brezžičnega termometra z uporabo Arduina in 433 MHz RF povezave:

Prototip brezžičnega termometra, ki uporablja 433 MHz RF Link in Arduino


Prejšnja: Protikorozijske sonde za regulator nivoja vode Naprej: L293 Quad Hal-H Driver IC Pinout, Datasheet, Application Circuit