Bezprzewodowy termometr wykorzystujący łącze RF 433 MHz przy użyciu Arduino

Wypróbuj Nasz Instrument Do Eliminowania Problemów





W tym poście zamierzamy zbudować bezprzewodowy termometr oparty na Arduino, który może monitorować temperaturę w pomieszczeniu i zewnętrzną temperaturę otoczenia. Dane są przesyłane i odbierane za pomocą łącza RF 433 MHz.

Korzystanie z modułu RF 433 MHz i czujnika DHT11

Proponowany projekt wykorzystuje Arduino jako mózg i serce jako Moduł nadajnika / odbiornika 433 MHz .



Projekt podzielony jest na dwa osobne obwody, jeden z odbiornikiem 433 MHz, wyświetlaczem LCD i czujnikiem DHT11, który zostanie umieszczony w pomieszczeniu, a także mierzy temperaturę w pomieszczeniu .

Kolejny obwód ma nadajnik 433MHz, Czujnik DHT11 do pomiaru zewnętrznej temperatury otoczenia. Oba tory mają po jednym arduino.



Obwód umieszczony w pomieszczeniu wyświetli odczyty temperatury wewnętrznej i zewnętrznej na wyświetlaczu LCD.

Przyjrzyjmy się teraz modułowi nadajnika / odbiornika 433 MHz.

Moduł nadajnika / odbiornika 433 MHz.

Powyżej pokazane moduły nadajnika i odbiornika umożliwiają komunikację simplex (w jedną stronę). Odbiornik posiada 4 piny Vcc, GND i DATA. Są dwa piny DATA, są takie same i możemy wyprowadzić dane z jednego z dwóch pinów.

Nadajnik jest znacznie prostszy, ma tylko pin wejściowy Vcc, GND i DATA. Musimy podłączyć antenę do obu modułów, co jest opisane na końcu artykułu, bez połączenia antenowego między nimi nie zostanie nawiązana większa niż kilka cali.

Zobaczmy teraz, jak komunikują się te moduły.

Teraz załóżmy, że przykładamy impuls zegarowy o częstotliwości 100 Hz do styku wejścia danych nadajnika. Odbiornik otrzyma dokładną replikę sygnału na pinie danych odbiornika.

To proste, prawda? Tak… ale ten moduł działa na AM i jest podatny na hałas. Z obserwacji autora wynika, że ​​jeśli pin danych nadajnika pozostawał bez żadnego sygnału przez ponad 250 milisekund, pin wyjściowy danych odbiornika generuje sygnały losowe.

Dlatego nadaje się tylko do transmisji danych niekrytycznych. Jednak ten projekt działa bardzo dobrze z tym modułem.

Przejdźmy teraz do schematów.

ODBIORCA:


arduino do podłączenia wyświetlacza LCD. Potencjometr 10 K.

Powyższy obwód to połączenie arduino z wyświetlaczem LCD. Potencjometr 10K służy do regulacji kontrastu wyświetlacza LCD.

Bezprzewodowy termometr wykorzystujący łącze RF 433 MHz i Arduino

Powyższe to obwód odbiornika. Do tego arduino należy podłączyć wyświetlacz LCD.

Przed skompilowaniem kodu pobierz następujące pliki biblioteki

Radio Head: github.com/PaulStoffregen/RadioHead

Biblioteka czujników DHT: https://arduino-info.wikispaces.com/file/detail/DHT-lib.zip

Program dla odbiornika:

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

Nadajnik:

Bezprzewodowy nadajnik termometru

Powyższe jest schematem dla Nadajnika, który jest dość prosty jako odbiornik. Tutaj używamy innej płyty arduino. Czujnik DHT11 wykryje zewnętrzną temperaturę otoczenia i odeśle z powrotem do modułu odbiornika.

Odległość między nadajnikiem a odbiornikiem nie powinna przekraczać 10 metrów. Jeśli między nimi znajdują się przeszkody, zasięg transmisji może się zmniejszyć.

Program dla nadajnika:

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

Budowa anteny:

Jeśli budujesz projekty przy użyciu tego Moduły 433 MHz , postępuj ściśle według poniższych szczegółów konstrukcyjnych, aby uzyskać dobry zasięg.

Antena RF 433 MHz

Użyj drutu jednożyłowego, który powinien być wystarczająco mocny, aby utrzymać tę konstrukcję. Możesz również użyć izolowanego drutu miedzianego z izolacją usuniętą na dole do połączenia lutowanego. Zrób dwa z nich, jeden dla nadajnika i drugi dla odbiornika.

Autorski prototyp bezprzewodowego termometru wykorzystujący Arduino i łącze RF 433 MHz:

Prototyp bezprzewodowego termometru wykorzystujący łącze RF 433 MHz i Arduino


Poprzedni: Sondy antykorozyjne do kontrolera poziomu wody Dalej: Układ scalony sterownika L293 Quad Half-H, arkusz danych, obwód aplikacji