Arduino를 사용하는 433MHz RF 링크를 사용하는 무선 온도계

문제를 제거하기 위해 도구를 사용해보십시오





이 글에서는 실내 온도와 외부 주변 온도를 모니터링 할 수있는 Arduino 기반 무선 온도계를 구성 할 것입니다. 데이터는 433MHz RF 링크를 통해 송수신됩니다.

433MHz RF 모듈 및 DHT11 센서 사용

제안 된 프로젝트는 Arduino를 뇌로, 심장을 433MHz 송신기 / 수신기 모듈 .



이 프로젝트는 433MHz 수신기, LCD 디스플레이 및 DHT11 센서가있는 두 개의 개별 회로로 나뉘어 있으며, 이는 실내에 배치됩니다. 실내 온도를 측정 .

다른 회로에는 433MHz 송신기가 있습니다. DHT11 센서 외부 주변 온도 측정 용. 두 회로에는 각각 하나의 arduino가 있습니다.



실내에 배치 된 회로는 LCD에 내부 및 외부 온도 판독 값을 표시합니다.

이제 433MHz 송신기 / 수신기 모듈을 살펴 보겠습니다.

433MHz 송신기 / 수신기 모듈.

송신기 및 수신기 모듈은 위에 표시되어 있으며 단방향 통신이 가능합니다. 수신기에는 4 핀 Vcc, GND 및 DATA 핀이 있습니다. 두 개의 DATA 핀이 있으며 두 핀 중 하나에서 데이터를 출력 할 수 있습니다.

송신기는 Vcc, GND 및 DATA 입력 핀만 있으면 훨씬 간단합니다. 기사 끝 부분에서 설명하는 두 모듈에 안테나를 연결해야합니다. 두 모듈 사이의 안테나 통신은 몇 인치 이상으로 설정되지 않습니다.

이제 이러한 모듈이 어떻게 통신하는지 살펴 보겠습니다.

이제 송신기의 데이터 입력 핀에 100Hz의 클록 펄스를 적용한다고 가정합니다. 수신기는 수신기의 데이터 핀에서 신호의 정확한 복제본을 수신합니다.

간단 하죠? 그래 ...하지만이 모듈은 AM에서 작동하며 소음에 민감합니다. 작성자가 관찰 한 바에 따르면 송신기의 데이터 핀이 250 밀리 초 이상 신호없이 남겨진 경우 수신기 데이터 출력 핀은 임의의 신호를 생성합니다.

따라서 중요하지 않은 데이터 전송에만 적합합니다. 그러나이 프로젝트는이 모듈에서 매우 잘 작동합니다.

이제 회로도를 살펴 보겠습니다.

리시버:


arduino와 LCD 디스플레이 연결. 10K 전위차계

위의 회로는 LCD 디스플레이 연결에 대한 arduino입니다. LCD 디스플레이의 대비를 조정하기 위해 10K 전위차계가 제공됩니다.

433MHz RF 링크 및 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----//

안테나 구성 :

이것을 사용하여 프로젝트를 구축하는 경우 433MHz 모듈 , 좋은 범위에 대해 엄격하게 아래의 구성 세부 사항을 따르십시오.

433MHz RF 안테나

이 구조를 지탱할 수있을만큼 견고해야하는 단일 심선을 사용하십시오. 납땜 결합을 위해 바닥에서 절연이 제거 된 절연 구리선을 사용할 수도 있습니다. 송신기 용과 수신기 용으로 두 개를 만드십시오.

Arduino 및 433MHz RF 링크를 사용하는 저자의 무선 온도계 프로토 타입 :

433MHz RF 링크 및 Arduino를 사용한 무선 온도계 프로토 타입


이전 : 수위 컨트롤러 용 부식 방지 프로브 Next : L293 쿼드 하프 -H 드라이버 IC 핀아웃, 데이터 시트, 애플리케이션 회로