Altair EmbedとArduinoで電子工作(その3)温度センサーの値を取得
今回は、温度センサー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番ピン接続しました。
Arduino Libraryのインスト―ル
こちらも説明書を元にArduino IDEのライブラリマネージャを使用して、OneWireとDallasTemperatureのライブラリをインストールします。
サンプルのスケッチをArduino IDEで実行すると、温度を取得できていることがわかります。
Embedでの実装
実装したモデルはこちらです。
TemperatureSensorのCompound Blockで温度の取得を定義しています。
External DefinitionブロックとSetup、Loopの2つのCompound Blockで構成されています。
スケッチの冒頭部、void setup()、void loop()に対応しています。
void setup()が実行時に一度だけ実行され、その後void loop()の処理が繰り返し実行されます。
冒頭部の記述
まずは、冒頭部の記述です。External Definitionブロックを使用します。
External Definitionに冒頭部をスケッチからコピーペーストします。ここで、#includeの拡張子を.hから.cppに変更してください。
また、Library Modulesで今回使用しているOneWireとDallas Temperatureの2つを選択してください。
void Setup()
SetupのCompound Block内にExternal Functionブロックを配置し、void Setup()の内容を貼り付けます。
SetupのCompound BlockをCtrl + 右クリックでプロパティを表示し、Enable Executionにチェックを入れます。
すると、ブロックの左に黄緑丸のポートが表示されます。
これに$firstPassと記述したvariableブロックを接続します。
$firstPassはEmbedの予約語で実行時に一度だけ信号が出力されます。
これにより、Setupの処理が実行時に一度だけ行われるようになります。
void Loop()
LoopのCompound Block内にExternal FunctionブロックとExternal Readブロック配置し、void Loop()の内容を1行ずつそれぞれに貼り付けます。
sensors.requestTemperatures()は温度測定を開始するコマンドで取得値はありませんので、External Functionブロックに貼り付けます。
sensors.getTempCByIndex(SENSOR_INDEX)は温度を取得するコマンドですので、External Readブロックに貼り付けます。
LoopのCompound BlockをCtrl + 右クリックでプロパティを表示し、Local Time StepとCodegen as backgroundにチェックを入れます。これで、Loop内の処理がBackgroundで行われるようになります。Codegen as backgroundを使用するには、Local Time Stepの指定が必要になるので、全体動作と同じ10Hz=0.1secとしておきます。
コード生成
TemperatureSensorのCompoud Blockからコード生成を行い、出力された.elfをTarget Interfaceブロックで読み込んで、このブロックからの出力をプロットに接続します。
温度取得の実行
シミュレーション、ターゲットともSample Rateを10Hzに設定して、Real Timeモードで実行します。
室温が約13℃でセンサーを手で触ると16℃くらいまで上昇しました。このようにセンサーの温度を取得できていることがわかります。
今回は、Arduinoのライブラリを使用して、温度センサーDS18B20の温度をEmbedに取り込む方法を紹介しました。Arduinoのライブラリはたくさん公開されておりますので、これらをEmbed上でもご活用いただけます。
Comments
-
Very nice to see this tutorial Ikeda San !
0