Nhiệt kế không dây sử dụng liên kết RF 433 MHz sử dụng Arduino

Hãy Thử Công Cụ CủA Chúng Tôi Để LoạI Bỏ Các VấN Đề





Trong bài đăng này, chúng tôi sẽ xây dựng một nhiệt kế không dây dựa trên Arduino có thể theo dõi nhiệt độ phòng và nhiệt độ môi trường bên ngoài. Dữ liệu được truyền và nhận qua liên kết RF 433 MHz.

Sử dụng mô-đun RF 433MHz và cảm biến DHT11

Dự án được đề xuất sử dụng Arduino như bộ não và trái tim như Mô-đun máy phát / máy thu 433 MHz .



Dự án được chia thành hai mạch riêng biệt, mạch có bộ thu 433 MHz, màn hình LCD và cảm biến DHT11 sẽ được đặt bên trong phòng và cũng đo nhiệt độ phòng .

Một mạch khác có máy phát 433MHz, Cảm biến DHT11 để đo nhiệt độ môi trường bên ngoài. Cả hai mạch đều có một arduino mỗi loại.



Mạch điện được đặt bên trong phòng sẽ hiển thị nhiệt độ bên trong và bên ngoài trên màn hình LCD.

Bây giờ chúng ta hãy xem xét mô-đun bộ phát / thu 433 MHz.

Mô-đun phát / thu 433 MHz.

Mô-đun máy phát và máy thu được trình bày ở trên, nó có khả năng giao tiếp đơn giản (một chiều). Đầu thu có 4 chân Vcc, GND và DATA. Có hai chân DATA, chúng giống nhau và chúng ta có thể xuất dữ liệu từ một trong hai chân.

Bộ phát đơn giản hơn nhiều, nó chỉ có chân đầu vào Vcc, GND và DATA. Chúng tôi phải kết nối ăng-ten với cả hai mô-đun được mô tả ở cuối bài viết, nếu không kết nối ăng-ten giữa chúng sẽ không được thiết lập ngoài vài inch.

Bây giờ, hãy xem cách các mô-đun này giao tiếp.

Bây giờ, giả sử chúng ta đang áp dụng xung đồng hồ 100Hz cho chân đầu vào dữ liệu của máy phát. Bộ thu sẽ nhận được bản sao chính xác của tín hiệu tại chân dữ liệu của bộ thu.

Thật đơn giản phải không? Vâng… nhưng mô-đun này hoạt động trên AM và dễ bị nhiễu. Theo quan sát của tác giả nếu chân dữ liệu của bộ phát không có bất kỳ tín hiệu nào trong hơn 250 mili giây, thì chân đầu ra dữ liệu của bộ thu sẽ tạo ra tín hiệu ngẫu nhiên.

Vì vậy, nó chỉ thích hợp cho việc truyền dữ liệu không quan trọng. Tuy nhiên dự án này hoạt động rất tốt với mô-đun này.

Bây giờ chúng ta hãy chuyển sang sơ đồ.

NGƯỜI NHẬN:


arduino kết nối màn hình LCD. Chiết áp 10K

Mạch trên là kết nối arduino với màn hình LCD. Chiết áp 10K được cung cấp để điều chỉnh độ tương phản của màn hình LCD.

Nhiệt kế không dây sử dụng liên kết RF 433 MHz và Arduino

Trên đây là mạch thu. Màn hình LCD phải được kết nối với arduino này.

Vui lòng tải xuống các tệp thư viện sau trước khi biên dịch mã

Radio Head: github.com/PaulStoffregen/RadioHead

Thư viện cảm biến DHT: https://arduino-info.wikispaces.com/file/detail/DHT-lib.zip

Chương trình cho người nhận:

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

Hệ thống điều khiển:

Máy phát nhiệt kế không dây

Trên đây là sơ đồ cho Máy phát, khá đơn giản như máy thu. Ở đây chúng tôi đang sử dụng một bảng arduino khác. Cảm biến DHT11 sẽ cảm nhận nhiệt độ môi trường bên ngoài và gửi trở lại mô-đun bộ thu.

Khoảng cách giữa máy phát và máy thu không được quá 10 mét. Nếu có bất kỳ vật cản nào giữa chúng, phạm vi truyền dẫn có thể bị giảm.

Chương trình cho Máy phát:

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

Cấu tạo của Antenna:

Nếu bạn đang xây dựng các dự án bằng cách sử dụng Mô-đun 433 MHz , hãy tuân thủ nghiêm ngặt các chi tiết cấu tạo bên dưới để có phạm vi tốt.

Ăng ten RF 433 MHz

Sử dụng dây lõi đơn đủ chắc chắn để hỗ trợ cấu trúc này. Bạn cũng có thể sử dụng dây đồng cách điện với lớp cách điện được loại bỏ ở đáy để hàn nối. Làm hai trong số này, một cho máy phát và một cho máy thu.

Nguyên mẫu nhiệt kế không dây của tác giả sử dụng Arduino và Liên kết RF 433 MHz:

Nguyên mẫu nhiệt kế không dây sử dụng liên kết RF 433 MHz và Arduino


Trước: Đầu dò chống ăn mòn cho bộ điều khiển mức nước Tiếp theo: Sơ đồ IC trình điều khiển Quad Half-H L293, Biểu dữ liệu, Mạch ứng dụng