ในโพสต์นี้เราจะสร้างเทอร์โมมิเตอร์ไร้สายที่ใช้ Arduino ซึ่งสามารถตรวจสอบอุณหภูมิห้องและอุณหภูมิภายนอกได้ ข้อมูลจะถูกส่งและรับผ่านลิงค์ RF 433 MHz
ใช้โมดูล RF 433MHz และเซ็นเซอร์ DHT11
โครงการที่นำเสนอใช้ Arduino เป็นสมองและหัวใจเช่นกัน โมดูลเครื่องส่ง / รับสัญญาณ 433 MHz .
โครงการแบ่งออกเป็นสองวงจรแยกกันวงจรหนึ่งที่มีตัวรับสัญญาณ 433 MHz จอ LCD และเซ็นเซอร์ DHT11 ซึ่งจะถูกวางไว้ภายในห้องและ วัดอุณหภูมิห้อง .
วงจรอื่นมีเครื่องส่งสัญญาณ 433MHz เซ็นเซอร์ DHT11 สำหรับการวัดอุณหภูมิภายนอก ทั้งสองวงจรมีหนึ่ง arduino ต่อกัน
วงจรที่อยู่ภายในห้องจะแสดงการอ่านอุณหภูมิภายในและภายนอกบน LCD
ตอนนี้เรามาดูโมดูลเครื่องส่ง / รับสัญญาณ 433 MHz
โมดูลตัวส่งและตัวรับแสดงไว้ด้านบนซึ่งสามารถสื่อสารแบบซิมเพล็กซ์ได้ (ทางเดียว) เครื่องรับมีพิน Vcc, GND และ DATA 4 พิน มีพิน DATA สองพินซึ่งเหมือนกันและเราสามารถส่งออกข้อมูลจากสองพินใดก็ได้
เครื่องส่งสัญญาณนั้นง่ายกว่ามากโดยมีเพียงขาอินพุต Vcc, GND และ DATA เราต้องเชื่อมต่อเสาอากาศเข้ากับโมดูลทั้งสองซึ่งอธิบายไว้ในตอนท้ายของบทความโดยจะไม่มีการสื่อสารเสาอากาศระหว่างกันเกินสองสามนิ้ว
ตอนนี้เรามาดูกันว่าโมดูลเหล่านี้สื่อสารกันอย่างไร
ตอนนี้สมมติว่าเราใช้สัญญาณนาฬิกา 100Hz กับพินอินพุตข้อมูลของเครื่องส่งสัญญาณ เครื่องรับจะได้รับการจำลองสัญญาณที่ขาข้อมูลของผู้รับ
มันง่ายใช่มั้ย? ใช่… แต่โมดูลนี้ทำงานบน AM และไวต่อเสียงรบกวน จากการสังเกตของผู้เขียนหากขาข้อมูลของเครื่องส่งสัญญาณถูกปล่อยทิ้งไว้โดยไม่มีสัญญาณเป็นเวลานานกว่า 250 มิลลิวินาทีพินเอาต์พุตข้อมูลตัวรับจะสร้างสัญญาณแบบสุ่ม
ดังนั้นจึงเหมาะสำหรับการส่งข้อมูลที่ไม่สำคัญเท่านั้น อย่างไรก็ตามโครงการนี้ทำงานได้ดีกับโมดูลนี้
ตอนนี้เรามาดูแผนงานกัน
ผู้รับ:
วงจรข้างต้นคือการเชื่อมต่อจอแสดงผล arduino กับ LCD โพเทนชิออมิเตอร์ 10K มีไว้สำหรับปรับความคมชัดของจอ LCD
ด้านบนคือวงจรรับ ควรเชื่อมต่อจอ 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 ปฏิบัติตามรายละเอียดโครงสร้างด้านล่างอย่างเคร่งครัดสำหรับช่วงที่ดี
ใช้ลวดแกนเดี่ยวซึ่งควรจะแข็งแรงพอที่จะรองรับโครงสร้างนี้ คุณยังสามารถใช้ลวดทองแดงหุ้มฉนวนโดยถอดฉนวนที่ด้านล่างสำหรับการเชื่อมประสาน ทำสองอย่างหนึ่งสำหรับเครื่องส่งและอีกอันสำหรับเครื่องรับ
เครื่องวัดอุณหภูมิไร้สายของผู้เขียนต้นแบบโดยใช้ Arduino และ 433 MHz RF Link:
คู่ของ: โพรบป้องกันการกัดกร่อนสำหรับตัวควบคุมระดับน้ำ ถัดไป: L293 Quad Half-H Driver IC Pinout, Datasheet, Application Circuit