Arduinoを使用した433MHzRFリンクを使用したワイヤレス温度計

問題を排除するために楽器を試してください





この投稿では、室温と外部周囲温度を監視できるArduinoベースのワイヤレス温度計を構築します。データは、433 MHzRFリンクを介して送受信されます。

433MHzRFモジュールとDHT11センサーの使用

提案されたプロジェクトは、Arduinoを脳として、心臓を 433MHz送信機/受信機モジュール 。



プロジェクトは2つの別々の回路に分割されます。1つは433MHzの受信機、LCDディスプレイ、DHT11センサーを備えており、これらは室内に配置されます。 室温を測定します 。

別の回路には433MHzの送信機があります。 DHT11センサー 外気温測定用。両方の回路には、それぞれ1つのarduinoがあります。



部屋の中に配置された回路は、LCDに内部と外部の温度測定値を表示します。

それでは、433MHzの送信機/受信機モジュールを見てみましょう。

433MHz送信機/受信機モジュール。

送信機と受信機のモジュールは上に示されていますが、単方向通信(一方向)が可能です。受信機には4ピンのVcc、GND、DATAピンがあります。 2つのDATAピンがあり、それらは同じであり、2つのピンのいずれかからデータを出力できます。

トランスミッタははるかにシンプルで、Vcc、GND、DATA入力ピンだけがあります。記事の最後で説明されている両方のモジュールにアンテナを接続する必要があります。モジュール間のアンテナ通信が数インチを超えて確立されない場合です。

それでは、これらのモジュールがどのように通信するかを見てみましょう。

ここで、100Hzのクロックパルスを送信機のデータ入力ピンに適用するとします。受信機は、受信機のデータピンで信号の正確なレプリカを受信します。

簡単ですよね?ええ…しかし、このモジュールはAMで動作し、ノイズの影響を受けやすくなっています。著者の観察によると、送信機のデータピンが250ミリ秒を超えて信号がないままになっている場合、受信機のデータ出力ピンはランダムな信号を生成します。

したがって、重要ではないデータ送信にのみ適しています。ただし、このプロジェクトはこのモジュールで非常にうまく機能します。

それでは、回路図に移りましょう。

受信者:


arduinoからLCDディスプレイへの接続。 10Kポテンショメータ

上記の回路はarduinoからLCDディスプレイへの接続です。 LCDディスプレイのコントラストを調整するために10Kポテンショメータが用意されています。

433 MHzRFリンクと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モジュール 、適切な範囲のために、以下の構造の詳細に厳密に従ってください。

433 MHzRFアンテナ

この構造をサポートするのに十分頑丈な単芯線を使用してください。はんだ接合には、下部の絶縁を取り除いた絶縁銅線を使用することもできます。これらのうちの2つを作成します。1つは送信機用、もう1つは受信機用です。

Arduinoと433MHz RFリンクを使用した著者のワイヤレス温度計のプロトタイプ:

433 MHzRFリンクとArduinoを使用したワイヤレス温度計のプロトタイプ


前:水位コントローラー用の防食プローブ 次へ:L293クアッドハーフHドライバーICのピン配列、データシート、アプリケーション回路