Juhtmevaba termomeeter, kasutades 433 MHz RF-linki Arduino abil

Proovige Meie Instrumenti Probleemide Kõrvaldamiseks





Selles postituses ehitame Arduino-põhise traadita termomeetri, mis võimaldab jälgida toatemperatuuri ja välistemperatuuri. Andmeid edastatakse ja võetakse vastu 433 MHz RF-ühenduse kaudu.

Kasutades 433MHz RF moodulit ja DHT11 andurit

Kavandatavas projektis kasutatakse Arduinot aju ja südamena 433 MHz saatja / vastuvõtja moodul .



Projekt on jagatud kaheks eraldi vooluringiks, üks, millel on 433 MHz vastuvõtja, LCD-ekraan ja DHT11 sensor, mis paigutatakse ruumi sisse ja lisaks mõõdab toatemperatuuri .

Teises vooluringis on 433MHz saatja, DHT11 andur välistemperatuuri mõõtmiseks. Mõlemal vooluringil on mõlemal üks arduino.



Ruumi sisestatud vooluringil kuvatakse LCD-ekraanil sise- ja välistemperatuuri näidud.

Vaatame nüüd 433 MHz saatja / vastuvõtja moodulit.

433 MHz saatja / vastuvõtja moodul.

Saatja ja vastuvõtja moodulid on näidatud ülalpool, see on võimeline ühepoolselt (ühesuunaliselt) suhtlema. Vastuvõtjal on 4 tihvti Vcc, GND ja DATA. DATA-tihvte on kaks, need on samad ja saame andmeid väljastada kahest tihvtist.

Saatja on palju lihtsam, sellel on lihtsalt Vcc, GND ja DATA sisendnõel. Mõlema mooduliga peame ühendama antenni, mida on kirjeldatud artikli lõpus, ilma et nende vahel antenniga ühendust ei suudetaks luua.

Vaatame nüüd, kuidas need moodulid suhtlevad.

Oletame, et rakendame saatja andmesisestusnõelale 100 Hz taktsimpulsi. Vastuvõtja saab signaali täpse koopia vastuvõtja andmesidelt.

See on lihtne, eks? Jah ... aga see moodul töötab AM ajal ja on müratundlik. Autori tähelepanekutest lähtudes, kui saatja andmepistik jäi signaalita enam kui 250 millisekundiks, tekitab vastuvõtja andmete väljundnupp juhuslikke signaale.

Seega sobib see ainult mittekriitiliste andmete edastamiseks. Kuid see projekt töötab selle mooduliga väga hästi.

Nüüd liigume skeemide juurde.

VASTUVÕTJA:


arduino ja LCD ekraani ühendus. 10K potentsiomeeter

Ülaltoodud vooluahel on arduino ja LCD ekraani ühendus. LCD-ekraani kontrastsuse reguleerimiseks on ette nähtud 10K potentsiomeeter.

Juhtmevaba termomeeter, mis kasutab 433 MHz RF Linki ja Arduino

Ülaltoodud on vastuvõtja vooluring. LCD-ekraan peaks olema selle arduinoga ühendatud.

Enne koodi koostamist laadige alla järgmised teegi failid

Raadio juht: github.com/PaulStoffregen/RadioHead

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

Vastuvõtja programm:

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

Saatja:

Juhtmevaba termomeetri saatja

Ülaltoodud on saatja skeem, mis on vastuvõtjana üsna lihtne. Siin kasutame teist arduino plaati. DHT11 andur tunneb välistemperatuuri ja saadab vastuvõtja moodulisse tagasi.

Saatja ja vastuvõtja vaheline kaugus ei tohiks olla üle 10 meetri. Kui nende vahel on mingeid takistusi, võib ülekandevahemik väheneda.

Saatja programm:

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

Antenni ehitus:

Kui teete seda kasutavaid projekte 433 MHz moodulid , järgige allpool toodud konstruktsioonilisi üksikasju rangelt hea vahemiku jaoks.

433 MHz RF-antenn

Kasutage ühe südamikuga traati, mis peaks olema selle struktuuri toetamiseks piisavalt tugev. Joodise ühendamiseks võite kasutada ka isoleeritud vasktraati, mille alt on eemaldatud isolatsioon. Tehke neist kaks, üks saatja jaoks ja teine ​​vastuvõtja jaoks.

Autori traadita termomeetri prototüüp, kasutades Arduino ja 433 MHz RF Linki:

Traadita termomeetri prototüüp, kasutades 433 MHz RF Linki ja Arduino


Eelmine: Veetaseme regulaatori korrosioonivastased sondid Järgmine: L293 Quad Half-H draiveri IC tihvt, andmeleht, rakendusahel