Trådløst termometer ved hjælp af 433 MHz RF-link ved hjælp af Arduino

Prøv Vores Instrument Til At Fjerne Problemer





I dette indlæg skal vi konstruere et Arduino-baseret trådløst termometer, der kan overvåge stuetemperatur og ekstern omgivelsestemperatur. Dataene transmitteres og modtages via 433 MHz RF-link.

Brug af 433MHz RF-modul og DHT11-sensor

Det foreslåede projekt bruger Arduino som hjerne og hjertet som 433 MHz sender / modtager modul .



Projektet er opdelt i to separate kredsløb, det ene med 433 MHz-modtager, LCD-skærm og DHT11-sensor, som placeres inde i rummet og også måler rumtemperaturen .

Et andet kredsløb har 433MHz sender, DHT11-sensor til måling af omgivelsestemperatur udenfor. Begge kredsløb har hver sin arduino.



Kredsløbet placeret inde i rummet viser de interne og eksterne temperaturmålinger på LCD.

Lad os nu se på 433 MHz sender / modtager modul.

433 MHz sender / modtager modul.

Senderen og modtagermodulerne er vist ovenfor, den er i stand til simplex-kommunikation (en vej). Modtageren har 4 ben Vcc, GND og DATA ben. Der er to DATA-ben, de er ens, og vi kan sende dataene fra en af ​​de to ben.

Senderen er meget enklere, den har bare Vcc, GND og DATA input pin. Vi er nødt til at forbinde en antenne til begge moduler, som er beskrevet i slutningen af ​​artiklen, uden antennekommunikation mellem dem vil ikke blive etableret ud over få inches.

Lad os nu se, hvordan disse moduler kommunikerer.

Antag nu, at vi anvender en klokkepuls på 100Hz til transmitterens dataindgangsstift. Modtageren modtager nøjagtig kopi af signalet ved modtagerens datapind.

Det er simpelt, ikke? Ja ... men dette modul fungerer på AM og modtageligt for støj. Fra forfatterens observation, hvis senderens datapind efterlades uden signal i mere end 250 millisekunder, producerer modtagerens dataudgangsstifter tilfældige signaler.

Så det er kun egnet til ikke-kritiske dataoverførsler. Dette projekt fungerer dog meget godt sammen med dette modul.

Lad os nu gå over til skemaer.

MODTAGER:


tilslutning af arduino til LCD-skærm. 10K potentiometer

Ovenstående kredsløb er arduino til LCD-skærmforbindelse. 10K potentiometer er tilvejebragt til justering af LCD-displayets kontrast.

Trådløst termometer ved hjælp af 433 MHz RF Link og Arduino

Ovenstående er modtager kredsløb. LCD-skærmen skal forbindes til denne arduino.

Download venligst følgende biblioteksfiler, inden du kompilerer koden

Radiohoved: github.com/PaulStoffregen/RadioHead

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

Program til modtager:

//--------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 skematisk for senderen, som er ret simpel som modtager. Her bruger vi et andet arduino-kort. DHT11-sensoren registrerer uden for den omgivende temperatur og sender tilbage til modtagermodulet.

Afstanden mellem sender og modtager må ikke være mere end 10 meter. Hvis der er forhindringer imellem dem, kan transmissionens rækkevidde reduceres.

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

Konstruktion af antenne:

Hvis du bygger projekter ved hjælp af dette 433 MHz moduler , følg nedenstående konstruktionsdetaljer nøje for et godt rækkevidde.

433 MHz RF-antenne

Brug en enkelt kernetråd, der skal være robust nok til at understøtte denne struktur. Du kan også bruge isoleret kobbertråd med isolering fjernet i bunden til loddetilslutning. Lav to af disse, en til senderen og en til modtageren.

Forfatterens trådløse termometerprototype ved hjælp af Arduino og 433 MHz RF-link:

Trådløs termometer prototype ved hjælp af 433 MHz RF Link og Arduino


Tidligere: Korrosionssonder til vandstandsregulator Næste: L293 Quad Half-H Driver IC Pinout, datablad, applikationskredsløb