道具 温度センサー ds18b20 を Arduino に接続します。 Arduino および DS18B20 デジタル温度センサー

温度センサー ds18b20 を Arduino に接続します。 Arduino および DS18B20 デジタル温度センサー

このチュートリアルでは、DS18B20 温度センサーと Arduino UNO を使用して温度計を作成します。 DS18B20センサーは 良い選択肢とのプロジェクトにいるとき、 高い正確性良い反応が必要です。 DS18B20 を接続し、16x2 LCD ディスプレイに温度データを表示する方法を説明します。

DS18B20センサーの概要

DS18B20 センサーは、1 線式バスを介して Arduino と通信します。 定義上、Arduino との通信に必要なデータ ライン (およびグランド) は 1 つだけです。

各 DS18B20 には、複数の DS18B20 が同じ単線バス上で動作できるようにする固有の 64 ビット シリアル コードまたはアドレスがあります。 したがって、マイクロプロセッサを使用すると、分散された複数の DS18B20 の管理が簡素化されます。 広いエリア。 この機能の用途には、環境モニタリング、建物や機械装置の温度制御システムなどがあります。

DS18B20の特徴

  • マイクロコントローラーとセンサー間の通信に必要な単線インターフェースは 1 つだけです。
  • 必要な外部部品は 4.7 kΩ 抵抗 1 つだけです。
  • データラインから直接電力を供給でき、3.0 ~ 5.5 V の電圧が必要です。
  • 各デバイスには固有の 64 ビット シリアル コードが内蔵 ROM に保存されています。
  • -55°C ~ +125°C (-67°F ~ +257°F) の温度を測定できます。
  • 精度は-10°C~+85°Cの範囲で±0.5°C。

このプロジェクトでは、防水型の温度プローブの形をした DS18B20 を使用します。 防水センサーを使用すると可能性が広がります。温度センサーは、水、薬品、お茶、コーヒーなどの液体の温度を測定できるようになります。

コンポーネントの要件

体温計の機器要件は非常に標準的なもので、次のものが必要です。

  • 液晶ディスプレイ 16x2
  • 温度センサー DS18B20
  • ジャンパー線
  • 抵抗器1K
  • ブレッドボード

接続図

下図に従って接続してください。

センサーとArduinoを接続する

  • VCC -> Arduino 5V、および VCC からデータへの 4.7K 抵抗
  • データ -> ピン 7 Arduino
  • GND -> GND Arduino

LCDとArduino UNOの接続

  • ピン 1 -> GND
  • ピン 2 -> VCC
  • ピン 3 -> Arduino ピン 3
  • ピン 4 -> Arduino ピン 33
  • ピン5 -> GND
  • ピン6 -> Arduinoピン31
  • ピン 7-10 -> GND
  • ピン 11 -> Arduino ピン 22
  • ピン 12 -> Arduino ピン 24
  • ピン 13 -> Arduino ピン 26
  • ピン 14 -> Arduino ピン 28
  • ピン 15 -> 220 オーム抵抗を介した VCC
  • ピン16 -> GND

コントラストを制御するには、上に示すようにポテンショメータを LCD のピン 3 に接続します。

このプロジェクトは最大 125°C の温度で動作します。温度の読み取り値に差異がある場合は、DS18B20 に接続されている抵抗への接続を再確認してください。 上記のすべてを接続したら、プログラミングに進むことができます。

温度計のソースコード

ダウンロードの前に ソースコード Arduino 環境でこのコードを実行するには、2 つのライブラリをセットアップする必要があります。

  • 最初のライブラリは OneWire() と呼ばれます。
  • 2 番目のライブラリは DallasTemperature() と呼ばれます。

両方のライブラリをダウンロードした後、ファイルをフォルダーに移動します Arduino ライブラリデフォルト。 次に、センサーが正しく接続されていることを再確認した後、コードをコピーしてアップロードします。

// コードは #include で始まります #含む #含む #define ONE_WIRE_BUS 7 OneWire oneWire(ONE_WIRE_BUS); ダラス温度センサー(&oneWire); float tempC = 0; 浮動小数点 tempF = 0; 液晶 lcd(12,11,5,4,3,2); void setup() ( sensors.begin(); lcd.begin(16,2); lcd.clear(); pinMode(3, OUTPUT); nanoWrite(3, 0); Serial.begin(9600); ) void ループ() (センサー.requestTemperatures(); tempC = sensors.getTempCByIndex(0); tempF = sensors.toFahrenheit(tempC); 遅延(1000); Serial.println(tempC); lcd.setCursor(0,0); lcd. print("C: "); lcd.print("度"); lcd.setCursor("度");

次のようになります。

このセンサーでは100℃までの温度を測定することができました! 彼はとても反応が良いです。

プロジェクトを作成したら、センサーを温水と冷水に浸してデバイスをテストします。

方法を考えてみましょう Arduinoのヘルプ DS18B20 または DS18S20 デジタル温度センサーから測定値を読み取ります。 現在、ダラスの m/s DS18B20 は、最も一般的で手頃な価格のデジタル温度センサーです。 プロトコルに従って動作します。 センサー データシート:

DS18B20 センサーと Arduino の接続図を以下に示します。 4.7 kOhm (5 kOhm) のプルアップ抵抗が DQ (データ) ピンと Vdd センサー電源の間に接続されています。

実用的なスケッチを以下に示します。 OneWire ライブラリが必要です 最新バージョンダウンロードできます。

ライブラリをインストールすると、メニューに実際のサンプルが表示され、使用できるようになります。

#include "OneWire.h" // OneWire DS18S20、DS18B20、DS1822 温度の例 // // http://www.pjrc.com/teensy/td_libs_OneWire.html // // DallasTemperature ライブラリはこの作業をすべて実行できます。 ! // http://milesburton.com/Dallas_Temperature_Control_Library OneWire ds(10); // ピン 10 (4.7K の抵抗が必要) void setup(void) ( Serial.begin(9600); ) void loop(void) ( byte i; byte present = 0; byte type_s; byte data; byte addr; float 摂氏、華氏; if (!ds.search(addr)) ( Serial.println("これ以上アドレスはありません。"); Serial.println(); ds.reset_search(); late(250); return; ) シリアル。 print("ROM ="); for(i = 0; i< 8; i++) { Serial.write(" "); Serial.print(addr[i], HEX); } if (OneWire::crc8(addr, 7) != addr) { Serial.println("CRC is not valid!"); return; } Serial.println(); // the first ROM byte indicates which chip switch (addr) { case 0x10: Serial.println(" Chip = DS18S20"); // or old DS1820 type_s = 1; break; case 0x28: Serial.println(" Chip = DS18B20"); type_s = 0; break; case 0x22: Serial.println(" Chip = DS1822"); type_s = 0; break; default: Serial.println("Device is not a DS18x20 family device."); return; } ds.reset(); ds.select(addr); ds.write(0x44, 1); // start conversion, with parasite power on at the end delay(1000); // maybe 750ms is enough, maybe not // we might do a ds.depower() here, but the reset will take care of it. present = ds.reset(); ds.select(addr); ds.write(0xBE); // Read Scratchpad Serial.print(" Data = "); Serial.print(present, HEX); Serial.print(" "); for (i = 0; i < 9; i++) { // we need 9 bytes data[i] = ds.read(); Serial.print(data[i], HEX); Serial.print(" "); } Serial.print(" CRC="); Serial.print(OneWire::crc8(data, 8), HEX); Serial.println(); // Convert the data to actual temperature // because the result is a 16 bit signed integer, it should // be stored to an "int16_t" type, which is always 16 bits // even when compiled on a 32 bit processor. int16_t raw = (data << 8) | data; if (type_s) { raw = raw << 3; // 9 bit resolution default if (data == 0x10) { // "count remain" gives full 12 bit resolution raw = (raw & 0xFFF0) + 12 - data; } } else { byte cfg = (data & 0x60); // at lower res, the low bits are undefined, so let"s zero them if (cfg == 0x00) raw = raw & ~7; // 9 bit resolution, 93.75 ms else if (cfg == 0x20) raw = raw & ~3; // 10 bit res, 187.5 ms else if (cfg == 0x40) raw = raw & ~1; // 11 bit res, 375 ms //// default is 12 bit resolution, 750 ms conversion time } celsius = (float)raw / 16.0; fahrenheit = celsius * 1.8 + 32.0; Serial.print(" Temperature = "); Serial.print(celsius); Serial.print(" Celsius, "); Serial.print(fahrenheit); Serial.println(" Fahrenheit"); }

これまでのレッスンで、すでに DHT11 温度および湿度センサー、およびサーミスターを使用しました。 今回は、もう 1 つの人気のある温度センサー DS18B20 について考えてみましょう。 このデバイスを使用すると、-55°C ~ +125°C の範囲の温度を ±0.5°C の精度で測定できます (-10°C ~ +85°C の温度の場合)。 DS18B20 は 3.3 ボルトまたは 5 ボルトから電力を供給できます。 センサー自体は、さまざまなハウジングに組み込まれている超小型回路です。センサー、プルアップ抵抗、コネクタが配置された既製のモジュールも人気があります。
もう 1 つのオプションは、ワイヤー付きの密閉された鋼鉄カプセル内のセンサーです。

1. DS18B20-ROCモジュールをArduinoに接続する

このチュートリアルでは、RobotClass で開発された温度センサー モジュールを使用します。 これをArduino Unoコントローラーに接続してみます。 DHT11 と同様に、DS18B20 センサーは単線バス (1 線) を使用してコントローラーとデータを交換します。 したがって、センサーをArduinoに接続するために必要なワイヤは3本だけです。 回路図 レイアウトの外観
注記。モジュールではなく別個の超小型回路を使用する場合は、4.7 KOhm の抵抗を介して超小型回路の OUT ピンを電源接点に接続する必要があります。 上記のモジュールでは、この抵抗はすでに取り付けられています。

2. DS18B20センサーからデータを受信するプログラム

センサーから温度測定値を毎秒読み取り、COM ポートに出力するプログラムを作成しましょう。 #含む OneWire ds(2); void setup() ( Serial.begin(9600); ) void loop() ( byte i; byte data; byte addr; float celsius; // センサーアドレスを検索 if (!ds.search(addr)) ( ds.reset_search ( ); late(250); return; ds.select(addr); // 温度測定のコマンド ds.write(0xBE); // センサーの内部メモリから温度測定値を読み取ります (i = 0; i< 9; i++) { data[i] = ds.read(); } int16_t raw = (data << 8) | data; // датчик может быть настроен на разную точность, выясняем её byte cfg = (data & 0x60); if (cfg == 0x00) raw = raw & ~7; // точность 9-разрядов, 93,75 мс else if (cfg == 0x20) raw = raw & ~3; // точность 10-разрядов, 187,5 мс else if (cfg == 0x40) raw = raw & ~1; // точность 11-разрядов, 375 мс // преобразование показаний датчика в градусы Цельсия celsius = (float)raw / 16.0; Serial.print("t="); Serial.println(celsius); } Процедура на первый взгляд может показать совершенно непонятной. На самом деле, все эти 0xBE, 0x44 и т.п. взяты из спецификации к датчику. Для удобства мы можем всю процедуру вычисления выделить в отдельную функцию или даже в отдельный модуль. Загружаем программу на Ардуино и запускаем монитор COM-порта. В окне терминала мы должны увидеть данные о температуре, обновляющиеся раз в секунду: t=23.15 t=23.47 t=23.32 Вот и всё, датчик работает!

結論

温度センサーを使用して、アパートや温室に簡単な自動換気システムを構築できます。 温度が特定の値に達したかどうかを確認し、リレーを使用してファンをオンにする条件演算子をプログラムに追加するだけで十分です。 私たちも同じように働きました

DS18B20 はデジタル温度センサーです。 センサーの使い方はとても簡単です。

第一に、それはデジタルであること、第二に、有用な信号を受信する接点が 1 つしかないことです。 つまり、膨大な数のこれらのセンサーを 1 つの Arduino に同時に接続できます。 ピンは十分すぎるほどあります。 それだけでなく、Arduino の 1 つのピンに複数のセンサーを接続することもできます。 しかし、まず最初に。

DS18B20 にはさまざまなフォーム ファクタがあります。 したがって、どちらを使用するかはあなた次第です。 8 ピン SO (150 ミル)、8 ピン µSOP、および 3 ピン TO-92 の 3 つのオプションが利用可能です。 eBay や Aliexpress をサーフィンすると、中国が防水ケースに入ったバージョンの TO-92 を提供していることがわかります。 つまり、そのような奇跡を水に浸したり、雨の中で使用したりしても安全です。 等々。 これらのセンサーは 3 つの出力ピン (黒 - GND、赤 - Vdd、白 - データ) で製造されています。

DS18B20 センサーのさまざまなフォーム ファクターを以下の図に示します。

防水ケースに入ったモデル DS18B20:


DS18B20は使いやすいです。 データ接点を介して電力を供給できます (この場合、接続には 3 つの接点のうち 2 つだけを使用します)。 このセンサーは 3.0V ~ 5.5V の電圧範囲で動作し、-55°C ~ +125°C (-67°F ~ +257°F) の温度を ±0.5°C (-10°C) の精度で測定します。 )最大+85°C)。

もう 1 つの優れた機能: 最大 127 個のセンサーを並列接続できます。 それぞれから個別に温度測定値を読み取ります。 どのプロジェクトでこれが必要になるかは完全には明らかではありませんが、2 つのセンサーを接続して冷蔵庫と冷凍庫の温度を制御できます。 同時に、Arduino 上の多数のピンを解放したままにすることになります... 一般に、これは素晴らしい機能です。

ArduinoとDS18B20を使って温度を制御するために必要なもの

ソフトウェア

  • 当然、Arduino IDE が必要です。
  • OneWire ライブラリ。Arduino と DS18B20 センサーの操作を大幅に容易にします。
  • スケッチ...

スケッチをArduinoにアップロードする

以下のスケッチは、OneWire ライブラリの例カテゴリにあります。 「ファイル」-「例」-「OneWire」に移動し、例「DS18x20_Temperature」を選択します。 プログラムコードを以下に示します。

この例では、OneWire ライブラリを使用して、接続されているすべての DS28B20 温度センサーからデータを収集し (複数のセンサーの接続方法については記事の最後で説明します)、それらを Arduino IDE シリアル モニター ウィンドウに表示します。

[シリアル モニター] ウィンドウに次のような内容が表示されます。

ROM = 28 88 84 82 5 0 0 6A

これ以上のアドレスはありません。

ROM = 28 88 84 82 5 0 0 6A

データ = 1 56 1 4B 46 7F FF A 10 D1 CRC=D1

温度 = 摂氏 21.37 度、華氏 70.47 度

これ以上のアドレスはありません。

ROM = 28 88 84 82 5 0 0 6A

データ = 1 56 1 4B 46 7F FF A 10 D1 CRC=D1

温度 = 摂氏 21.37 度、華氏 70.47 度

これ以上のアドレスはありません。

正しいピンを入力していることを確認してください。

10 行目に「OneWire ds(2);」と書かれています。 センサーからのデータ接点を接続するピンを設定します。

この例ではピン 2 を使用しますが、OneWire の例のデフォルトのピンは 10 です。これを使用することもできます。

#include <OneWire.h>

// OneWire DS18S20、DS18B20、DS1822 ライブラリの使用例

OneWire ds(2); // ピン 10 (4.7 kOhm の抵抗が必要)

void setup(void) (

シリアル.begin(9600);

ボイドループ(ボイド) (

存在するバイト = 0;

摂氏、華氏をフロートします。

if (!ds.search(addr)) (

Serial.println("これ以上アドレスはありません。");

Serial.println();

ds.reset_search();

Serial.print("ROM =);

Serial.write(" ");

Serial.print(addr[i], HEX);

if (OneWire::crc8(addr, 7) != addr) (

Serial.println("CRC が無効です!");

Serial.println();

// 最初のバイトはチップを識別します

Serial.println("チップ = DS18S20"); // 以前の DS1820

Serial.println("チップ = DS18B20");

Serial.println("チップ = DS1822");

Serial.println("デバイスは DS18x20 ファミリのデバイスではありません。");

ds.select(addr);

遅延(1000); // 750 では十分でない場合もある

// ここで ds.depower() を使用することもできますが、それはリセットで処理されます

現在 = ds.reset();

ds.select(addr);

Serial.print(" データ = ");

Serial.print(現在、16 進数);

Serial.print(" ");

データ[i] = ds.read();

Serial.print(data[i], HEX);

Serial.print(" ");

Serial.print(" CRC=");

Serial.print(OneWire::crc8(data, 8), HEX);

Serial.println();

// これを実際の温度に変換します

// 結果は 16 ビット整数なので、次の場所に格納する必要があります。

// データ型「int16_t」の変数、常に 16 ビットに等しい、

// 32 ビット プロセッサでコンパイルしたとしても

int16_t raw = (データ

if (データ == 0x10) (

raw = (raw & 0xFFF0) + 12 - データ;

バイト cfg = (データ & 0x60);

// 小さな値の場合、小さなビットは定義されていないので、ゼロにリセットしましょう

if (cfg == 0x00) raw = raw & ~7; // 解像度 9 ビット、93.75 ミリ秒

else if (cfg == 0x20) raw = raw & ~3; // 解像度 10 ビット、187.5 ミリ秒

else if (cfg == 0x40) raw = raw & ~1; // 解像度 11 ビット、375 ミリ秒

//// デフォルトの解像度は 12 ビット、変換時間は 750 ミリ秒です

摂氏 = (浮動小数点数)生 / 16.0;

華氏 = 摂氏 * 1.8 + 32.0;

Serial.print(" 温度 = ");

Serial.print(摂氏);

Serial.print(" 摂氏, ");

Serial.print(華氏);

Serial.println("華氏");

複数の DS18B20 センサーを Arduino に接続するにはどうすればよいですか?

複数の DS18B20 デジタル温度センサーを並列接続できます。 同時に、OneWire ライブラリを使用すると、すべてのセンサーから同時にデータを読み取ることができます。

センサーを接続する 2 つの方法を以下に説明します。

センサーの数が多い (10 個以上) 場合は、より低い抵抗値 (たとえば、1.6 KOhm 以下) の抵抗器を使用する必要があります。

さらに、10 個を超えるセンサーを並列に接続すると、問題 (読み取りエラー) が発生する可能性があります。 したがって、Arduino のデータ ピンと各センサーのデータ ピンの間に 100 ~ 120 オームの追加抵抗を取り付けることをお勧めします。

2 つのセンサーが接続されている前のスケッチの結果は、次のようになります。

ROM = 28 88 84 82 5 0 0 6A

データ = 1 51 1 4B 46 7F FF F 10 FE CRC=FE

温度 = 摂氏 21.06 度、華氏 69.91 度

ROM = 28 DA CA 27 5 0 0 49

データ = 1 4E 1 4B 46 7F FF 2 10 D9 CRC=D9

温度 = 摂氏 20.87 度、華氏 69.57 度

これ以上のアドレスはありません。

適切なセンサーの選択

複数のセンサーを並行して使用している場合、どのセンサーからデータを取得しているかを知ることができれば便利です。 どうやってするの?

シリアルナンバー

センサーはデジタルであるため、各センサーには個別のシリアル番号があり、これを使用して特定のセンサーを識別できます。 すべてがシンプルなようです。 しかし...センサーを識別するためにこれらのシリアル番号を使用する前に、まずこれらのシリアル番号を識別する必要がありますよね?

上記の例から、スケッチが 64 ビットのシリアル番号、つまり「ROM」値の形式でデータを提供していることがわかります。 例えば:

上の例では、28 88 84 82 5 0 0 6A または 28 DA CA 27 5 0 0 49。

多数のセンサー (10 個以上) を同時に使用する場合は、DS18B20 センサーのデータ ピンと Arduino のデータ ピンの間に 100 ~ 120 オームの抵抗を追加する必要があることを忘れないでください (各センサーごとに!)。

以下は、3 つの接点を使用した複数のセンサーの並列接続の図です。


以下にコメントや質問を残して、個人的な経験を共有してください。 ディスカッションの中で新しいアイデアやプロジェクトが生まれることもよくあります。

農場でもっと役立つものに移る時期が来ました。 そうですね、例えばデジタル温度計とか作ってみましょう。 さらに、Arduino を使用すると、「コントローラー以前の時代」ほど難しくはありません。 当時、電子体温計は、12 個の超小型回路、まだ校正が必要なアナログ センサー、およびいくつかの出力電圧用の変圧器電源で構成される複雑な構造でした。 さて、そして、これらすべてを収集することを計画しているアマチュア無線家には適切なトレーニングが必要です。 これで、すべてがはるかに簡単になりました。

ブルジョア企業「ダラス半導体」のデジタル温度センサー DS18B20 を紹介します。

-55 ~ +120 ℃の範囲で正確な (小数点以下の桁まで) 温度測定を行うための完全に機能するデバイス。 さらに、役立つことを記憶するための「脳」(記憶細胞)もいくつかあります。 しかし、今のところは使用しません。 写真からもわかるように、いくつかのバリエーションが用意されています。 最も一般的で便利なのは、「TO-92」と表示されているものです。

センサーには 3 つのピンしかなく、そのうちの 2 つは 5V の電源電圧が供給され、中央のピンはデータ送信用です。 センサーのすべての制御 (センサーへのコマンドの送信、測定温度の読み取り) は 1 つの導体を介して行われます。そのため、この技術全体と伝送プロトコルは「1-Wire」または「One-Wire」と呼ばれます。

理論にとらわれすぎないように、センサーを使用して温度を測定するプロセスについて簡単に説明します。

各データ送信または受信セッションは、初期化コマンドで始まります。 繰り返しますが、Arduina と温度計の間の通信の詳細には立ち入りません。見知らぬ人が私たちのためにこれをしてくれました (心の中で彼らに感謝します)。 彼女に「初期化」という 1 つのコマンドを与えるだけで、彼女は何をする必要があるかを理解します。

次に、初期化後、制御コマンドの発行を開始します。 ここで、理論的には、1 つの制御配線上に「1-Wire」ファミリーの複数のデバイスが存在できることに注意してください。 さらに、温度センサーだけではありません。 したがって、それぞれに固有のシリアル番号でアクセスすることが可能です。 ただし、ワイヤー上にセンサーが 1 つあるため、原理的に他のものに頼ることはできません。 したがって、これらのプレリュードはコマンド (「0xCC」バイトによって送信される) によってスキップされます。 言い忘れましたが、ここと以下では 2 進数 (バイト) の 16 進表記が使用されています。

受信者を決定したら、「温度を測定」(「0x44」)というコマンドを送信します。 この後、センサーが動作するまで約 1 秒間センサーを放置する必要があります。

この間、「ds」は温度を測定し、結果を 2 バイトに書き込みます。その結果を抽出して人間の形に戻す必要があります。 いつものように、通信セッションを初期化することから始めます。 その後、再度コマンド「リセットアドレス送信」(「0xSS」)を送信します。 そしてすぐに、測定結果 (「0xBE」) を受け入れる準備ができたことを通知します。

この後、Arduino は結果とともに 2 バイト (またはお好みの 2 バイトの数値) を順番に受け取ります。 これらの結果が何であるか、そしてそれを理解しやすい形にするにはどうすればよいかを見てみましょう。

繰り返しになりますが、忙しすぎないように、自分にとって何が重要かを決めてみましょう。 つまり、下位バイトと一部の上位バイトには、小数点第 4 位まで正確な温度測定の結果が含まれます (私たちにとってそのような精度は必要ありません)。 温度の符号 (「+」または「-」) は、上位バイトの最上位ビットの値によって決まります。

しかし、言葉は十分です - デザインを始める時が来ました。 DS18B20 と Arduino の接続図は単純であるだけでなく、単に単純です。

センサーの電源ピンは対応する Arduino ピンに接続され、データ出力はデジタル出力「10」に接続されます。 さらに、データ出力は 3 ~ 5 キロオームの抵抗 (いわゆる「プルアップ」抵抗) を介して +5 ボルトのバスに接続されています。 デジタル出力「10」は出力と入力の両方として機能しますが、LED を使用した前の例のように設定する必要がないことに注意してください。 「1-Wire」ライブラリの開発者は、慎重に私たちを汚い仕事から解放してくれました。 これも彼らのおかげです!

一般的に、次のような結果になりました。

はい! 完全に忘れた! 「1-Wire」ライブラリはArduino IDEの基本パッケージには含まれていないため、たとえばここからダウンロードする必要があります。 アーカイブを解凍し、Arduino IDE がインストールされているフォルダーにある \libraries ディレクトリにライブラリのあるフォルダーを配置しましょう。 次回開発環境を起動するときに、ライブラリが使用できるようになります。 ここで見つけることができます:

ただし、「サンプル」のスケッチは使用しません。派手なものがたくさんあります。 このスケッチを Arduino IDE にコピーすることをお勧めします。

#含む

OneWire ds(10); //

void setup(void) (
シリアル.begin(9600); //結果を出力するためにシリアルポートを設定します
}

void ループ() (
バイトデータ。 // 2バイトの配列を宣言します
ds.reset(); // センサーを初期化します
ds.write(0xCC); // 特定のセンサーへのアドレス指定をスキップします (センサーはあります)
ds.write(0x44); // 温度を測定するコマンドを与える
遅延(1000); // 温度が測定されるまで 1 秒待ちます

ds.reset(); // センサーを再度初期化します
ds.write(0xCC); // アドレス指定を再度スキップします
ds.write(0xBE); // 温度を読み取るコマンドを与える
データ = ds.read(); // 低い値を読み取る
データ = ds.read(); // および上位バイト
int Temp = (データ<< 8) + data; // преобразуем считанную информацию
温度 = 温度 >> 4; // 目的のビューに移動します。
Serial.println(一時); // 結果をシリアルポートに出力します。

ここで何がわかるか... まず、「OneWire」ライブラリがスケッチに接続されています。 センサーが Arduino のピン「10」に接続されていることを示します。次に、シリアル ポートが測定結果を出力するように設定されます。 以上で準備作業は完了し、測定を開始します。 温度測定結果を書き込む(予約と名前)2バイトを用意します。 次に、上で説明したようにコマンドを発行し、最後に温度を含む 2 バイトを受け取ります。 次に、読み取られた情報が変換され、余分な小数点以下の桁が削除され、小数点を含まない全体の温度値が取得されます。 この情報はシリアル ポート経由で出力されます。 どこで彼女に会えますか? そして、これが次のとおりです。

したがって、このスケッチを Arduino にアップロードし、「シリアル ポート モニター」を開いて、測定された温度を毎秒観察します。

万歳! 効いてるよ! センサーから受信した 2 バイトを整数の温度数値に変換するプロセスについては詳しく説明しません。これは別の大きな記事で取り上げます。 結果の数値は整数型の Temp 変数であるとだけ言っておきます。 つまり、正の値と負の値の両方を取ることができます。 寒い中でのデバイスの動作をチェックしてみましょう。

まあ、マイナスの温度も表示されます。 サイン付きでもすぐに。 将来、さまざまなインジケーターに温度を表示するときは、プログラムのこの機能を覚えておく必要があります。 そして、プラスの温度サインの追加の指示を提供します。 ただし、それについては次の記事で詳しく説明します。



サイトの新着情報

>

最も人気のある