เครื่องวัดอุณหภูมิแบบไร้สายโดยใช้ RF Link 433 MHz โดยใช้ Arduino

ลองใช้เครื่องมือของเราเพื่อกำจัดปัญหา





ในโพสต์นี้เราจะสร้างเทอร์โมมิเตอร์ไร้สายที่ใช้ Arduino ซึ่งสามารถตรวจสอบอุณหภูมิห้องและอุณหภูมิภายนอกได้ ข้อมูลจะถูกส่งและรับผ่านลิงค์ RF 433 MHz

ใช้โมดูล RF 433MHz และเซ็นเซอร์ DHT11

โครงการที่นำเสนอใช้ Arduino เป็นสมองและหัวใจเช่นกัน โมดูลเครื่องส่ง / รับสัญญาณ 433 MHz .



โครงการแบ่งออกเป็นสองวงจรแยกกันวงจรหนึ่งที่มีตัวรับสัญญาณ 433 MHz จอ LCD และเซ็นเซอร์ DHT11 ซึ่งจะถูกวางไว้ภายในห้องและ วัดอุณหภูมิห้อง .

วงจรอื่นมีเครื่องส่งสัญญาณ 433MHz เซ็นเซอร์ DHT11 สำหรับการวัดอุณหภูมิภายนอก ทั้งสองวงจรมีหนึ่ง arduino ต่อกัน



วงจรที่อยู่ภายในห้องจะแสดงการอ่านอุณหภูมิภายในและภายนอกบน LCD

ตอนนี้เรามาดูโมดูลเครื่องส่ง / รับสัญญาณ 433 MHz

โมดูลเครื่องส่ง / รับสัญญาณ 433 MHz

โมดูลตัวส่งและตัวรับแสดงไว้ด้านบนซึ่งสามารถสื่อสารแบบซิมเพล็กซ์ได้ (ทางเดียว) เครื่องรับมีพิน Vcc, GND และ DATA 4 พิน มีพิน DATA สองพินซึ่งเหมือนกันและเราสามารถส่งออกข้อมูลจากสองพินใดก็ได้

เครื่องส่งสัญญาณนั้นง่ายกว่ามากโดยมีเพียงขาอินพุต Vcc, GND และ DATA เราต้องเชื่อมต่อเสาอากาศเข้ากับโมดูลทั้งสองซึ่งอธิบายไว้ในตอนท้ายของบทความโดยจะไม่มีการสื่อสารเสาอากาศระหว่างกันเกินสองสามนิ้ว

ตอนนี้เรามาดูกันว่าโมดูลเหล่านี้สื่อสารกันอย่างไร

ตอนนี้สมมติว่าเราใช้สัญญาณนาฬิกา 100Hz กับพินอินพุตข้อมูลของเครื่องส่งสัญญาณ เครื่องรับจะได้รับการจำลองสัญญาณที่ขาข้อมูลของผู้รับ

มันง่ายใช่มั้ย? ใช่… แต่โมดูลนี้ทำงานบน AM และไวต่อเสียงรบกวน จากการสังเกตของผู้เขียนหากขาข้อมูลของเครื่องส่งสัญญาณถูกปล่อยทิ้งไว้โดยไม่มีสัญญาณเป็นเวลานานกว่า 250 มิลลิวินาทีพินเอาต์พุตข้อมูลตัวรับจะสร้างสัญญาณแบบสุ่ม

ดังนั้นจึงเหมาะสำหรับการส่งข้อมูลที่ไม่สำคัญเท่านั้น อย่างไรก็ตามโครงการนี้ทำงานได้ดีกับโมดูลนี้

ตอนนี้เรามาดูแผนงานกัน

ผู้รับ:


การเชื่อมต่อจอแสดงผล Arduino กับ LCD โพเทนชิออมิเตอร์ 10K

วงจรข้างต้นคือการเชื่อมต่อจอแสดงผล arduino กับ LCD โพเทนชิออมิเตอร์ 10K มีไว้สำหรับปรับความคมชัดของจอ LCD

เครื่องวัดอุณหภูมิแบบไร้สายใช้ RF Link 433 MHz และ Arduino

ด้านบนคือวงจรรับ ควรเชื่อมต่อจอ LCD กับ arduino นี้

โปรดดาวน์โหลดไฟล์ไลบรารีต่อไปนี้ก่อนคอมไพล์โค้ด

หัวหน้าวิทยุ: github.com/PaulStoffregen/RadioHead

ห้องสมุดเซ็นเซอร์ DHT: https://arduino-info.wikispaces.com/file/detail/DHT-lib.zip

โปรแกรมสำหรับผู้รับ:

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

เครื่องส่ง:

เครื่องส่งสัญญาณเทอร์โมมิเตอร์ไร้สาย

ข้างต้นเป็นแผนผังสำหรับเครื่องส่งสัญญาณซึ่งค่อนข้างง่ายเหมือนเครื่องรับ ที่นี่เรากำลังใช้บอร์ด arduino อื่น เซ็นเซอร์ DHT11 จะตรวจจับอุณหภูมิภายนอกและส่งกลับไปยังโมดูลตัวรับ

ระยะห่างระหว่างเครื่องส่งและเครื่องรับไม่ควรเกิน 10 เมตร หากมีอุปสรรคใด ๆ ระหว่างพวกเขาระยะการส่งสัญญาณอาจลดลง

โปรแกรมสำหรับเครื่องส่ง:

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

การก่อสร้างเสาอากาศ:

หากคุณกำลังสร้างโครงการโดยใช้สิ่งนี้ โมดูล 433 MHz ปฏิบัติตามรายละเอียดโครงสร้างด้านล่างอย่างเคร่งครัดสำหรับช่วงที่ดี

เสาอากาศ RF 433 MHz

ใช้ลวดแกนเดี่ยวซึ่งควรจะแข็งแรงพอที่จะรองรับโครงสร้างนี้ คุณยังสามารถใช้ลวดทองแดงหุ้มฉนวนโดยถอดฉนวนที่ด้านล่างสำหรับการเชื่อมประสาน ทำสองอย่างหนึ่งสำหรับเครื่องส่งและอีกอันสำหรับเครื่องรับ

เครื่องวัดอุณหภูมิไร้สายของผู้เขียนต้นแบบโดยใช้ Arduino และ 433 MHz RF Link:

เครื่องวัดอุณหภูมิไร้สายต้นแบบโดยใช้ RF Link 433 MHz และ Arduino


คู่ของ: โพรบป้องกันการกัดกร่อนสำหรับตัวควบคุมระดับน้ำ ถัดไป: L293 Quad Half-H Driver IC Pinout, Datasheet, Application Circuit