Trådløst termometer ved bruk av 433 MHz RF-kobling ved hjelp av Arduino

Prøv Instrumentet Vårt For Å Eliminere Problemer





I dette innlegget skal vi konstruere et Arduino-basert trådløst termometer som kan overvåke romtemperaturen og den eksterne omgivelsestemperaturen. Dataene overføres og mottas via 433 MHz RF-kobling.

Bruker 433MHz RF-modul og DHT11-sensor

Det foreslåtte prosjektet bruker Arduino som hjerne og hjertet som 433 MHz sender / mottaker modul .



Prosjektet er delt inn i to separate kretser, den ene med 433 MHz mottaker, LCD-skjerm og DHT11-sensor som vil bli plassert inne i rommet og også måler romtemperaturen .

En annen krets har 433MHz sender, DHT11-sensor for måling av omgivelsestemperatur utenfor. Begge kretsene har en arduino hver.



Kretsen plassert inne i rommet viser interne og eksterne temperaturmålinger på LCD.

La oss nå ta en titt på 433 MHz sender / mottakermodul.

433 MHz sender / mottaker modul.

Senderen og mottakermodulene er vist ovenfor, den er i stand til enkeltsidig kommunikasjon (en vei). Mottakeren har 4 pinner Vcc, GND og DATA pinner. Det er to DATA-pinner, de er like, og vi kan sende dataene fra en av de to pinnene.

Senderen er mye enklere, den har bare Vcc, GND og DATA-inngangspinne. Vi må koble en antenne til begge modulene som er beskrevet på slutten av artikkelen, uten at antennekommunikasjon mellom dem vil bli etablert lenger enn noen få inches.

La oss nå se hvordan disse modulene kommuniserer.

Anta nå at vi bruker klokkepuls på 100Hz på senderens datainntaksstift. Mottakeren vil motta nøyaktig kopi av signalet ved mottakerens datapinne.

Det er enkelt, ikke sant? Ja ... men denne modulen fungerer på AM og utsatt for støy. Fra forfatterens observasjon hvis senderens datapinne er igjen uten noe signal i mer enn 250 millisekunder, produserer mottakerens utgangspinne tilfeldige signaler.

Så det er bare egnet for ikke-kritiske dataoverføringer. Dette prosjektet fungerer imidlertid veldig bra med denne modulen.

La oss nå gå over til skjemaer.

MOTTAKER:


tilkobling av arduino til LCD-skjerm. 10K potensiometer

Ovennevnte krets er tilkobling av arduino til LCD-skjerm. 10K potensiometer er gitt for å justere kontrasten på LCD-skjermen.

Trådløst termometer med 433 MHz RF Link og Arduino

Ovennevnte er mottakerkretsen. LCD-skjermen skal være koblet til denne arduinoen.

Last ned følgende biblioteksfiler før du kompilerer koden

Radiohode: github.com/PaulStoffregen/RadioHead

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

Program for mottaker:

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

Trådløs termometersender

Ovenstående er skjematisk for senderen, som er ganske enkel som mottaker. Her bruker vi et annet arduino-brett. DHT11-sensoren vil føle utenfor omgivelsestemperaturen og sende tilbake til mottakermodulen.

Avstanden mellom sender og mottaker bør ikke være mer enn 10 meter. Hvis det er noen hindringer mellom dem, kan overføringsområdet reduseres.

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

Bygging av antenne:

Hvis du bygger prosjekter ved hjelp av dette 433 MHz-moduler , følg nedenstående konstruksjonsdetaljer strengt for godt rekkevidde.

433 MHz RF-antenne

Bruk en ledning med en enkelt kjerne som skal være solid nok til å støtte denne strukturen. Du kan også bruke isolert kobbertråd med isolasjon fjernet i bunnen for loddefeste. Lag to av disse, en for sender og en for mottaker.

Forfatterens trådløse termometerprototype med Arduino og 433 MHz RF Link:

Trådløs termometerprototype ved bruk av 433 MHz RF Link og Arduino


Forrige: Antikorrosjonssonder for vannstandsregulator Neste: L293 Quad Half-H Driver IC Pinout, datablad, applikasjonskrets