RF 433およびattiny85 MKの無線センサー付きRaspberry pi温度計

この記事では、Attiny85 + ds18b20 + rf 433 TX MKバッテリーに基づいてワイヤレス温度センサーを作成した経験を説明します。 Attiny85データの受信とプログラミングは、Raspberry pi B +に基づいています。



まえがき



Habréでは、Raspberry Piミニコンピューターについて多くの興味深いことがあります。 私は私の家でそのようなおもちゃを手に入れることにしました。 この特定のプラットフォームの選択を批判しないでください。 選択は、かなり広範囲にわたるドキュメントと、このミニコンピューターの使用の多くの異なる例のためだけに落ちました。



温度センサーから始めることにしました。 手元にはセンサーのペア(ds18b20、ds1822)がありました。 これらのセンサーの接続に関する豊富な記事は、センサーを取り付けて温度値を取得するのに多くの時間を必要としませんでした。 DHT22センサーを購入する必要があったため、温度だけでなく湿度も記録できました。 Lighttpd + php + mysqlはラズベリーで発生しました。 センサーからのデータは、データベースに特定の頻度で記録されるようになりました。 「インターネット温度計または田舎の家の遠隔測定」という記事から、 Highchartsでグラフを作成 するという考えが取り入れられました。 プログラマーの特別なスキルを持っていなかったので、私は2、3の無料の夜を過ごす必要がありました。 その結果、ローカルページに移動して、通り、アパート内の現在の気温、および過去n日間の気温変化のダイナミクスを確認できます。



しばらくの間、2つのDHT22およびds18b20センサーが窓の外にぶら下がっていました。 これらのセンサーの温度測定値は、通常、数十分の差がありました。 目標は、非常に高い精度で測定を行うことではなく、測定値のそのような違いは私にとって非常に良いものでした。



同じ記事内のリンクはすべて、 openweathermap.comおよびnarodmon.ruプロジェクトにリンクされています 。 したがって、温度および圧力センサー(DHT22)からのデータは、これら2つのサービスに送信され始めました。



Openweathermapサービスをよく理解していませんでした。 人々の監視がもっと好きだった。 地図上で、測定値を自分の街の他のセンサーのデータと視覚的に比較できます。 AndroidおよびiOSの電話用のアプリケーションがあります。

もちろん、すべてが素晴らしいですが、問題はいつものように詳細にあります。 私のアパートの窓は南に面しています。 また、センサーはしばしば太陽の下で検出されます。 気温が外にある場合、日当たりの良い側のセンサーは最大+10を示す可能性があります。 同時に、センサーは直射日光が当たっていません(エアコンの後ろに隠れています)。 廊下を通って北側にワイヤーを引っ張りたくありませんでした。 したがって、無線技術を習得することが決定されました。



問題の声明



RF 433が受信と送信に選ばれましたが、私はエレクトロニクスとプログラミングの世界の初心者なので、あまりお金をかけず、予算の選択肢に任せることにしました。 受信機と送信機のコストは約3ドルです。



ワークフロー:MK-rf 433(送信機)-> rf 433(受信機)-Raspberry pi



マイクロコントローラーを選択する必要がありました。 Attiny85マイクロコントローラーをraspberry piでプログラムする方法に関するInstructablesに関する優れた記事があります。 私はこの記事の翻訳や、Habréに似たものには会いませんでした。 したがって、関心が示された場合、翻訳を行うことができます。



マイクロコントローラーの選択が行われました。 経験豊富なカップルが1個あたり2〜3ドルの価格で市場で購入されました。 簡単にするために、ds18b20から始めることにしました。



操作アルゴリズムは次のとおりです:MKはセンサーから温度値を読み取り、電圧を読み取り(バッテリーを使用します)、チェックサムを計算し、このデータを数回送信し、このシステム全体を数分間スリープ状態にして電力を節約します。



rf 433(受信機)+ Raspberry piは、データを待っている間、オンエアでリッスンします。



タスク完了



組み立てと接続



ブレッドボード上で、MKをプログラミングするための回路を組み立てます。







接続図は、Instructables Webサイトから取得されます。 抵抗は、手元にある1〜5Kの少し異なる値を使用できます。 個人的には4.7 KOhm以上試したことはありません。 そこで、ブレッドボード上で、図に示すように、センサーとトランスミッターをattiniに接続します。







したがって、Raspberry Piを使用したプログラミング用の接続されたMKと、接続されたセンサーとRF433トランスミッターを取得しました。 受信機をrasspbery piに接続することは残っています。 私の接続スキーム:



Raspi RF433 RX

GPIO 27(13)->データ

GND(14)-> GND

5V、Vcc(4)-> Vcc



GPIOを操作するためのWiringPIライブラリでの番号付けによるラズベリーpi接続図のピン、ブラケット上のボード上の物理的な位置。



そして、それはすべてブレッドボードに見えます:







ハードウェアを理解したので、ソフトウェアの部分に移りましょう。



必要なソフトウェアとプログラムをインストールしますAttiny85



Raspbianのインストール方法は考慮されません。 raspi-configで、SPIを有効にします。







次に、AVRDude(AVR Downloader-Uploader)をダウンロードしてインストールする必要があります。これは、AVRシリーズのAtmelマイクロコントローラーをフラッシュするために設計されたクロスプラットフォームの無料コンソールプログラムです。



sudo apt-get install bison automake autoconf flex git gcc sudo apt-get install gcc-avr binutils-avr avr-libc git clone https://github.com/kcuzner/avrdude cd avrdude/avrdude ./bootstrap && ./configure && sudo make install
      
      





GPIOを使用するには、WiringPiをダウンロードしてインストールする必要があります。



 cd ~ git clone git://git.drogon.net/wiringPi cd wiringPi ./build
      
      





すべてが正しく行われたかどうかを確認します。



 sudo gpio -g mode 22 out sudo gpio -g write 22 0 sudo avrdude -p t85 -P /dev/spidev0.0 -c linuxspi -b 10000 sudo gpio -g write 22 1
      
      





すべてが正しければ、次の結果が得られます。







この段階で、準備作業は終了しました。



割り当てられたすべてのタスクを実行するCコードを見つけることができませんでした。 さまざまなリポジトリから作品を収集する必要がありました(それだけではありません)。



このリポジトリを使用して温度を読み取りました。 電圧を決定するには、 このリポジトリを使用しました

リポジトリを使用して信号を送信しました。



githubでレイアウトしたもの。 必要なコードはblinky.c1wire.c1wire.hmanchester.cmanchester.hにあります。



すべてを収集し、Attink 85をプログラムします。



プロジェクトのファイルがある場所にMakefileを作成またはコピーします。



私たちは実施します:



 make
      
      





そして、すべてが順調で、プログラムコードにエラーがない場合、次を実行します。



 make install
      
      





リラックスして、マイクロコントローラーでのプログラムの記録を見ました。







すべてが順調で、何も気にならない場合、MKのプログラミングフェーズは完了しています。



上記のスキームによれば、Rasspberry Piがなく、バッテリー駆動のブレッドボードにすべてを収集します。 3本の単三電池のケースがありました。 これは私の最初のプロジェクトであり、ボード上の配線にあまり気にしませんでした。 ここに私が終わったものがあります:







ここで、送信機から温度データを受信します。



X10 RFプロトコルのデコードに関する優れた記事があります。 RF433経由で信号を受信するプログラムの例があります。 受信者については、この記事のコード、つまりX10RFSnifferBit.cpp基礎として採用されました。 プログラムは、特定の期間の信号、またはむしろ複数の連続した信号、いわゆるロックを待機します。 次に、必要なビット数の受信を開始します。



ロックを値に変更し、チェックサムチェックを追加して、受信した値をファイルに書き込みます。 結果の情報は、IDセンサー、バッテリー充電、温度、およびチェックサムの形式でファイルに書き込まれます。

rf433recieve.cppのように見え、受信したデータを書き込むファイルの例のように見えます。



私の場合、RF 433 RXはGPIO 2(13)に接続されています。 別のピンに接続する場合、次の行のGPIO番号を変更する必要があります。



 wiringPiISR(2, INT_EDGE_BOTH, &handleInterrupt);
      
      





プログラム( Makefile )を収集して実行します。 ルートとして実行する必要があります。



 make sudo ./rf433recieve
      
      





raspberry piで温度を取得し、受信したデータをファイルに書き込みます。



おわりに



これらすべてがアセンブルおよびプログラミングされている間に、ローカルデータベースのデータがホスティングに転送されました。 ファイルを王冠に沿って引き出し、温度、バッテリー充電データを書き込み、データベース内のホスティングにデータを送信します。 次に、過去数日間のスケジュールが作成されます。 結果は次のようになります。







すべてが組み立てられると、自宅でさまざまなアンテナを使用してデータ伝送の範囲を確認する必要がありました。

受信機では、アンテナは長さ約17 cmのツイストペアの部品ですが、送信機ではいくつかのバリエーションを試しました。 直径約1 mm、長さ34 cmの直線状で螺旋状の銅コア。 私の実験で最悪だったのは、らせん状の銅コアで、他のアンテナもほぼ同じオプションを与えていたので、ツイストペアを17 cm残しておくことにしました。受信者がまったく信号を受信しなかったか、lock-aから1つまたは2つの信号をキャッチしようとした。



今、テスト期間があり、センサーはバルコニーに置かれます(日当たりの良い側にも)。 オープンバルコニーでは、センサーは太陽から隠されていなかったため、日陰でエアコンの後ろに隠されたセンサーよりもバルコニーの換気が悪いことは明らかです。 したがって、晴れた日には、ワイヤレスセンサーがピークを示し、これらのピークから太陽活動を追跡できます。



次は? それから私はたくさんのMK Attiny85 + RF 433 TX + DHT22を試してみたかったのですが、それは別の話です...



All Articles