おそらく誰もがArduinoのことを聞いたことがあるでしょう。 このプラットフォームで遊んで、Bluetooth温度計を作成することにしました。その測定値は、Bluetoothモジュールを搭載した携帯電話またはコンピューターで表示できます。
動作原理
Arduinoは、(SoftwareSerialライブラリーを使用して)ソフトエミュレートされるUARTを介してBluetooth経由で接続されます。 これにより、ハードウェアポートが解放され、ケーブルとBluetoothを介して同時にデータを読み取ることができます。 温度センサーもArduinoに接続されています。
温度センサーからの読み取り値が読み取られ、Bluetoothとケーブルを介してコンピューターに送信されます(必要な場合)。 Bluetoothを搭載し、btsppプロトコルをサポートするデバイスは、Arduino Bluetoothモジュールからデータを受信します。 そして、このデータに基づくアプリケーションソフトウェアは、グラフを作成したり、統計を保持したり、単に画面に現在の温度を表示したりできます。
鉄
robocraft.ruで購入:
ORduino Nano(ATmega168)-500ルーブル
BluetoothモジュールHC-05-330ルーブル
LM335アナログ温度センサー-40ルーブル
私が買ったラジオ市場で:
1 2.2kΩ抵抗器、3.3 Vおよび5.5 Vスタビライザー、それらのコンデンサー〜30摩擦
LM335センサーはアナログです。そのため、センサーからの電圧を計算するには、供給電圧を知る必要があります。 0.01 Vでも電圧を間違えた場合、センサーはすでに1度の誤差を与え、設定された電圧値が実際の電圧と異なるほど誤差が大きくなります。 センサー自体に1度の誤差があることは言うまでもありません。 高度に安定化された電源が必要です。 そして、ここでの最良の結果は、電圧調整器を介してArduinoに接続された通常のバッテリー(より正確には、ガルバニ電池のバッテリー)によって示されます(Nanoでは、このスタビライザーはありません)。 しかし、回路は60〜70 mAを消費します。 バッテリーの場合、これは少し多くなります(Kronは約1時間または30分で植えられますが、テストに適しています)。 また、ネットワーク電源はそのような安定した電圧を生成しません。 脈動のため、センサーの測定値は強くジャンプします。
この状況から抜け出す最も簡単な方法は、デジタル温度センサーを使用することです。 たとえば、1-Wire DS18B20センサー。
ソフトウェア
HC-05 Bluetoothモジュールは9600の速度(38400と主張)で私にやってきたことに注意してください。 幸いなことに、ATコマンドで変更できます。 ATコマンドモードでモジュールを使用するには、220オームの抵抗を介してPIO11を+5 Vに接続した後、簡単なスケッチを使用できます。
#include <SoftwareSerial.h> SoftwareSerial mySerial(2, 3); // rx tx void setup() { Serial.begin(9600); mySerial.begin(9600); } void loop() { if (mySerial.available()) { int c = mySerial.read(); // software- Serial.write(c); // hardware- } if (Serial.available()) { int c = Serial.read(); // hardware- mySerial.write(c); // software- } }
温度センサーとBluetoothを使用するためのスケッチも複雑ではありません。 データは、バイナリ形式でパケットで送信されます。 各パッケージはで始まります
0xDEAD
#include <SoftwareSerial.h> SoftwareSerial mySerial(2, 3); const double opVoltage = 4.98; // ( ) const byte tmpPin = 0; // , void setup() { Serial.begin(9600); mySerial.begin(9600); pinMode(13, OUTPUT); } void loop() { double vl = (analogRead(tmpPin)*opVoltage)/1024; // int tempK = vl*100; // int tempC = tempK - 273; // byte packet[] = {0xDE, 0xAD, tempC >> 8, tempC & 0xFF }; // // Serial.write(packet, 4); // mySerial.write(packet, 4); // - // - digitalWrite(13, HIGH); delay(500); digitalWrite(13, LOW); delay(1500); }
電話機のMIDletはJ2MEで記述されています(それ以外は同じMIDletです )。さらに、jsr82がサポートされているすべての電話機で動作するという事実もあります。 しかし、「クロスプラットフォーム」J2MEについて知っていれば、少なくとも動作するはずです:)
Bluetoothモジュールのアドレスがミッドレットに示されていることに注意してください。
MidletのソースとArduinoのスケッチはここにあります
スキーム
BluetoothはピンD2およびD3に接続します。
温度センサーからの電圧はピンA0で除去されます。
おわりに
温度計は家庭または屋外として使用できますが、その場合にのみ、デバイス全体を過酷な環境から保護する必要があります。 また、ワイヤーの下の壁に穴を開けないでください。
携帯電話用のクライアントを作成して、インターネットにアクセスしたり、SMSを送信したりすることもできます。 また、GSM / GPRSシールドとATコマンドは必要ありません。 Bluetoothを搭載した携帯電話だけですが、それは別の話です...
便利なリンク
BluetoothモジュールHC-05
アナログ温度センサー-LM335
1-Wire温度センサーDS18S20
ソースコード