Altair EmbedとArduinoで電子工作(その3)温度センサーの値を取得

Kosuke_IKEDA
Kosuke_IKEDA
Altair Employee

今回は、温度センサーDS18B20の信号をArduinoデバイス経由でAltair Embedに取り込んでグラフを描画します。照度センサーとの違いは、ArduinoのLibraryを使用していることです。Libraryを使用することで、照度センサーのような0~1の値などではなく、温度を直接取得することができます。

今回は、下記で購入したものを使用します。実行するためのArduino IDEのサンプルスケッチがついてきますので、同じ処理をEmbedで実装してみます。

https://osoyoo.com/2017/05/27/ds18b20-temperature-sensor/


配線

DS18B20の説明書を元に、以下のように左から順にGND、5V、デジタル3番ピン接続しました。

image


Arduino Libraryのインスト―ル

こちらも説明書を元にArduino IDEのライブラリマネージャを使用して、OneWireとDallasTemperatureのライブラリをインストールします。

image

image

サンプルのスケッチをArduino IDEで実行すると、温度を取得できていることがわかります。

image


Embedでの実装

実装したモデルはこちらです。

TemperatureSensorのCompound Blockで温度の取得を定義しています。

image

External DefinitionブロックとSetup、Loopの2つのCompound Blockで構成されています。

image

スケッチの冒頭部、void setup()、void loop()に対応しています。

void setup()が実行時に一度だけ実行され、その後void loop()の処理が繰り返し実行されます。

image


冒頭部の記述

まずは、冒頭部の記述です。External Definitionブロックを使用します。

image

External Definitionに冒頭部をスケッチからコピーペーストします。ここで、#includeの拡張子を.hから.cppに変更してください。

また、Library Modulesで今回使用しているOneWireとDallas Temperatureの2つを選択してください。

image


void Setup()

SetupのCompound Block内にExternal Functionブロックを配置し、void Setup()の内容を貼り付けます。

image

SetupのCompound BlockをCtrl + 右クリックでプロパティを表示し、Enable Executionにチェックを入れます。

すると、ブロックの左に黄緑丸のポートが表示されます。

これに$firstPassと記述したvariableブロックを接続します。

$firstPassはEmbedの予約語で実行時に一度だけ信号が出力されます。

これにより、Setupの処理が実行時に一度だけ行われるようになります。

image


void Loop()

LoopのCompound Block内にExternal FunctionブロックとExternal Readブロック配置し、void Loop()の内容を1行ずつそれぞれに貼り付けます。

sensors.requestTemperatures()は温度測定を開始するコマンドで取得値はありませんので、External Functionブロックに貼り付けます。

sensors.getTempCByIndex(SENSOR_INDEX)は温度を取得するコマンドですので、External Readブロックに貼り付けます。

image

LoopのCompound BlockをCtrl + 右クリックでプロパティを表示し、Local Time StepとCodegen as backgroundにチェックを入れます。これで、Loop内の処理がBackgroundで行われるようになります。Codegen as backgroundを使用するには、Local Time Stepの指定が必要になるので、全体動作と同じ10Hz=0.1secとしておきます。

image 


コード生成

TemperatureSensorのCompoud Blockからコード生成を行い、出力された.elfをTarget Interfaceブロックで読み込んで、このブロックからの出力をプロットに接続します。

image


温度取得の実行

シミュレーション、ターゲットともSample Rateを10Hzに設定して、Real Timeモードで実行します。

室温が約13℃でセンサーを手で触ると16℃くらいまで上昇しました。このようにセンサーの温度を取得できていることがわかります。


今回は、Arduinoのライブラリを使用して、温度センサーDS18B20の温度をEmbedに取り込む方法を紹介しました。Arduinoのライブラリはたくさん公開されておりますので、これらをEmbed上でもご活用いただけます。

Comments