2023.04.03本記事はプロモーションが含まれています。こんにちは、ENGかぴです。Arduino環境ではアナログ入力をAD変換する標準ライブラリが実装されています。土壌センサーの電圧出力をアナログピンに入力してAD変換値を読むことで土壌の水分量を確認することができます。土壌センサーはSEN0114(DFROBOT製:秋月電子で購入)を使用しています。SHIELDを使ってSDカードに土壌の状態を保存して動作確認を行いました。UNO(以下Arduinoとします。Arduinoのライブラリを使用して動作確認したことをまとめています。関連リンク土壌センサーの情報を取得するSEN0114は土壌の抵抗分で発生する電圧を出力するセンサーです。水分量が多いほど土壌の抵抗分が少なくなり電気を通しやすくなることを利用したものです。下記リンクにセンサーの情報とスケッチ例が説明されています。Sensor-DFROBOTArduino用に出力調整されているためライブラリで読み取った値から土壌の状態を確認することができます。}アナログデータはノイズの影響などで実際の値から少し上下することがあるため数回読み込んだデータを平均化して使用します。電圧値の取得はanalogRead()関数を使用します。引数にアナログピンの番号を指定します。AD変換値が戻り値にセットされるので変数に格納します。例では100ms毎にデータを取得して最新のデータから8個分のデータを使用して平均値を算出しています。平均化する際に>>3で3回右にシフトしていますが8で割るのと同じ結果になります。マイコンが計算する際にビットシフトで計算すると計算時間を減らすことができます。演算器を持たないマイコンを使用する場合においては効果的な方法です。土壌センサーとしての用途を考えると短期間で土壌の水分がしないため計測の頻度を減らして平均化しない構成でも問題ないと思います。PR:技術系の通信教育講座ならJTEX動作検証SEN0114の計測値について動作確認を行いました。waterと記載されています。SEN0114を2つのプローブ間を次のパターンで満たして計測値の確認を行います。プローブ間を指で触れるプローブを水の中に入れる(上記の写真の通り)プローブ間をショートするこれらのパターンの結果をシリアルモニタで確認します。プローブ間を指で触れた場合は150程度の値となっています。プローブを水の中に入れた場合は750付近の値になっています。プローブ間をショートした場合は880付近の値になっています。水につけた場合でも750程度の値になることが分かりました。プローブ間をショートすると880付近の値になりますが土壌に使用する場合ショートする可能性は限りなく低いことから750付近が最大値と考えて問題なさそうです。750付近の値を取っていた場合、植物の根腐れやカビが生えてしまうなど別の原因になりそうです。個人的な主観になりますが半田こて用のスポンジを硬めに絞ったものを巻き付けても700付近の値になっていたため700で管理しても問題ないように感じました。Arduinoの5Vはダイオード分だけ電圧が低下し4.84V程度になるためアナログ値から電圧値に変換する際は注意が必要です。SEN0114のGNDとArduinoのGNDが共通としてSEN0114の電源を外部から5V印加した場合は値が高めに出てしまいます。メーカの配線例を見ると電源をArduinoから5Vを取っているためAD変換値をそのまま読んでも問題ありません。}}SDカードに土壌の水分量の履歴を保存するためタイマで管理しています。土壌は直射日光が当たらない限り乾燥しにくいため頻繁にタイムアップするような構成にする必要はありません。SDカードの操作については下記記事にまとめています。ArduinoのライブラリでSDカードにデータを保存するSDカードに履歴を保存することで観葉植物の土壌の様子が分かるため水やりの最適なタイミングを掴むことができます。面倒見が良すぎがあまり根腐れさせてしまうことに悩む可能性の軽減につながることが期待できます。UNOに挿入して動作確認を行います。SHILDはUNOのピンを延長しているだけなので配線上同じになります。アイキャッチの観葉植物に水を与えてから計測を開始します。電源を入れると土壌の水分量の測定を開始し、1分毎に計測値をシリアルモニタ表示とSDカードに保存します。動作確認の結果30分程度放置して動作確認を行いました。シリアルモニタの表示と同様のデータがSDカードに保存されていることが確認できました。土壌の水分量は短期間では乾かないことから計測頻度を落としてもよさそうです。最適な水やりのタイミングを考えるのは楽しいですが、いつも感覚で水をあげてしまう大雑把な私にはこのくらいの検証で十分だと感じました。以下のソースコードはコンパイルして動作確認をしております。コメントなど細かな部分で間違っていたりやライブラリの更新などにより動作しなくなったりする可能性があります。参考としてお使いいただければと思います。}}関連リンクArduinoのライブラリを使って動作確認を行ったことを下記リンクにまとめています。XIAOで学べるソフト開発と標準ライブラリの使い方ESP32-WROOM-32Eで学べるソフト開発と標準ライブラリの使い方PR:無料トライアル実施中【PC専用】AIスライド資料作成ツールの利用:イルシル最後まで、読んでいただきありがとうございました。組み込みエンジニアPICマイコン(PIC16F1827)でCMP割り込みを追加するPIC16F1827はコンパレータ機能を持っており基準電圧に対して入力電圧が高いか低いかを判断した結果を出力することができます。IDEのプラグインであるMCCでCMP割り込みを実装して動作確認を行いました。組み込みエンジニアPICマイコン(PIC12F675)のタイマーの管理の仕方の一例マイコンのソフトを開発しているとタイマーを多く使います。DOから任意の期間信号を出力したり、DIに一定期間入力されている信号の判定したいときタイマーを使います。PIC12F675を使ったタイマーの管理の一例をまとめました。XIAOのシリアル通信で音声を再生する音声合成ICであるATP3012(アクエスト)はシリアル通信で送信した文字列を音声データに変換して出力することができます。XIAOのシリアル通信を使って任意の音声を出力させて動作確認したことをまとめています。組み込みエンジニアテスターの計測範囲の切り替えと測定誤差について考えるエナジーハーベストのように微小な電流を扱う場合テスターの内部抵抗やレンジの切り替えによって正確に電流計測できないことや測定方法によっては誤差が大きくなったことから電流計と電圧計の配線方法の違いによる測定誤差についてまとめました。XIAO31ESP32-WROOM-32E37TWELITE(トワイライト)26PIC16F182731PIC12F67522ノウハウ(体験談)36趣味と生活29その他6タグオペアンププロフィールENGかぴ当ブログの運営者のENGカピです。組み込みエンジニアとして10年以上の経験を活かしてセンサーモジュール等の動作確認したことをまとめています。広告、アフィリエイト収益で当ブログを運営させていただいております。defined.")}))})()タイトルとURLをコピーしました。