互換土壌水分センサーの問題と修正

園芸の水やりの自動化などに使える土壌水分センサーは幾つか紹介されているが、接点むき出しでいるものでは心許なかったのです。

電極がカバーされたものが見つかったので今回購入して実験確認しました。

静電容量式土壌水分センサーというらしく、DIYの王道であるSwitchScienceで扱われているDFRobot社のものが有名なようです。これは最近の互換品として中華市場で売られている良く似たものでした。

水分センサーにはこれらの二つのタイプがあり、産業用に利用されているもののタイプ毎の比較などをされているサイトもありました。最初に示した抵抗式のものはコンパレータを用いて閾値の設定からの上下をデジタル値で出力するものでしたが、静電容量式の物は、水分量の変化をアナログ電圧で出力してマイコン側で判定する使い方です。こちらのほうが汎用性がありそうです。

実際に評価してみると、水分検知してからの反応がとても遅くて回路図の時定数である1秒を越えて二分程度かかるという結果がでました。参考までに抵抗式の物も図りますとすぐに反応します。何か間違っているようでした。

オリジナルと思われるDFRobot社には回路図が公開されていたので、それをベースに互換品の中身を追いかけてみました。

アナログ電圧を出力する回路において、抵抗のアース側のランドが基板全体の中での浮島になっていることが分かり時定数としてはADC回路側の入力インピーダンスが高くなっていたことから反応が遅くなっていたことが分かりました。マイコン側が計測用に内部での選択スイッチを接続するときに初めて回路として充電が始まるという形になっていたようです。

計測さえ続ければ遅いなりに実測値は近づいていくというものでしたが二分程度を要しての計測はもはやセンサーとは言えないものでした。写真はワイヤリングペンで問題の箇所を修正したものです。

Arduinoで学ぶ組み込みハンズオン合宿をしてきました(1)

先週末11/24と11/25は、依頼された組み込みハンズオン合宿の講師をしてきました。開催場所は茨城県神栖市の旅館を借りてのものでした。オープンソース活用などを進めておられた知己が地元の母校(波崎工業高校)の後輩たちもターゲットにして開催する刺激を与えることを目的として企画されましたが、実際には若手抜きでの開催となり準備推進といった様相となりました
先日開発したスポーツ用の12秒タイマーの実装例などの解説を中心にしてカスタマイズや、センサー・アクチュエータを活用できるところまで参加された方々のIDE環境のセットアップから二日間で漕ぎつけるというものでした。ほかにも教育研究されている宇都宮大学の先生や波崎工業高校の先生のお話も交えての内容で縦軸が私の担当するハンズオンの合宿でした。

地域の工業高校生の参加勧誘に向けては、社会連携などの活動としてのお話しにつなげていく中でのものでしたので準備に手間取り実際の生徒さんたちの都合には十分な宣伝期間などが不足して、社会人の方たちの参加のみに限定されましたが教える側としてのトライアルとしては寧ろIT環境になれない方たちも含めてのものとしての挑戦でもありました。

最初に、自身の邂逅となるマイコン遭遇となる組み込み人生について自己紹介をかねての経歴説明の中でマイコン開発の進め方にどう携わってきたのかを話して開発環境への取り組みが35年ほど遡る時代背景での高級言語Cのマイコン実装実現での経験について話をして、現代にいたるまでの話をつなぎました。これには今日のハンズオンへの伏線を隠していました。同様な内容は先月開催されたヒューマンネットワーク高専の全国交流会でのプレゼンと被ります

手元に皆さんが使えるようにしたのは中華製のArduino互換基板です。今回参加された方々はUbuntu, Windows, MacOSと様々なタイプのマシンを持ち込まれていたのでIDEのインストールを通じて最近のライセンス問題やArduino自身の出自や、Arduinoプロジェクトの御家騒動、USB変換チップの模造品問題などについても触れて今回のものに搭載されているものが中華国家が推進しているCH340が搭載されていることに触れて、識者の方にも経験のあるUSBケーブルが動作しなくなったある時期の時代背景についても触れて実態について紹介しました。こうした技術上の現代史を知らないまま、これからの時代を生きていくうえでは重要な点と理解しています。

折角の機会なのでマイコンの構造を解き明かしつつ内部の構成についても解説を加えるという回りくどい教え方でもありました。

Arduinoのベースとなるマイコンの基本を知ってもらう意味で機械語の動作が目視でみたりすることが出来るマイコン黎明期に登場したAlnair/IMSAIなどのレプリカマシンであるLegacy8080(科学少年出版)を持ち込みマイコンとしての動作の概念であるメモリ、バスライン、デバイスの仕組みについて解説して自身が開発して成果を上げてきた話とシンクロしながら説明をして、組み込みの基本となるリセットからのマイコン動作も含めてデモすることで実際にマイコンをステップ動作させることで理解した雰囲気に導きました。

Arduinoの良いところはプロトタイピングのために徹底した抽象化が図られていて本当の意味で知らなければならない細かい所作については理解しなくても使い込んでいくことが出来ることでもあるのですが、そうした隠ぺいした部分について詳細な理解までは別にして気にする程度に説明することで実際のモノづくりに必要なことを実装例を通じて示していきました。

実際に作ったスポーツタイマーは12秒計測を行う大型のLEDでフラッシングを脈動するような形で色や照度を変えつつ表示計測して任意に停止したり巻き戻したり進めたりという実現したものの説明を先に行いました。これで参加される方がこれから説明しようとするものについての動作上の理解をしてもらうことが出来ました。

具体的な動作例を示すことで、その中身のソースコードを説明していくことで必要な記述が何を示していくのかについての関心が増します。

150個のLEDピースが連結されたNeoPixelというデバイスが三本の線で接続されていることを示しつつ、信号線の定義をソース上で行うこと、実際の基板の上での読み方や複数のピンが存在する中で使える二つのタイプのピンAnalogの入力にもつかえるピン、デジタルの入出力に使えるピンなとの機能についての説明や配置上の自由などにふれ、これから制御しようとしているLEDのシリアルテープ構造のもの自体が一つずつにマイコンが搭載されていて3色のLEDの色情報と輝度情報を持っていることを教えます。セグメント構造、色の制御、時間経過での色と照度変化のための構造定義とロジックについてから前後しますが、ArduinoのプログラムにはMainが存在せずにSetupとLoopしかないことを説明して、普通のブログラミングであればMainから終了すると終わってしまうのが、Setupが最初に一度だけ呼ばれてから、Loop関数は繰り返し呼ばれてしまう構造であることを伝えて、ようやくソフトの制御の流れについての読み方を説明していくことを伝えます。スポーツタイマーではBluetoothの端末からのコマンドで動作することを示していたことは示していましたが、あえてシリアルインタフェースは使わずにソフトシリアルを使っていることを理由も含めて説明していくことで深みに嵌めていきました。

7セグメントの構造の1.5桁構成の表示機で制御するためのLED構造が数珠つなぎで一番Arduinoに近いものからアドレスが降られていることを伝えて制御したいセグメントを定義するスタートとエンドの番号を定義していく箇所。

そのセグメントが0から12までどの様に点灯するのかということを定義したデータ配列。

三色のバランスを段々変えていき、緑から始まって、徐々に赤くなっていく色の変化を定義した配列。

一秒刻みで毎回ハッキリと輝度を上げて表示しつつ経過時間で薄くなっていくための輝度調整の計算ロジック。

以上開発した関数を組み合わせて、ある経過時間での残り時間を、その時の秒数と、その時の輝度と色で150個のLEDに与えるデータとして編集する関数群として呼び出す仕組み。

最後に一気にそのデータを瞬間的に高速に払い出すための関数。

思い立ったら組み込みの里で実験しよう

赤外線リモコン開発に挑戦中

日曜日にはバイトがないというN君は、思い立って土曜日に組み込みの里に連絡を入れて、作業をしたい旨を伝えてきた。赤外線リモコンの開発をしたいということを伝えて使いたい設備はオシロだと伝えていた。

日曜の来訪に備えて、たぶん使うことになるロジックアナライザ(ロジアナと略す)を使えるようにまずは、使用ソフトをインストールしていたマシンのWindows更新を進めておき、また必要なロジアナのドライバーも更新してすぐに使えるようにしておいた。

使うはずの赤外線受光部と赤外線LEDも用意しておいた。

昼過ぎにやってきたN君だったが、オシロとロジアナを使えるようにしてみせて、まずはざっくり波形をアナログのオシロで見て確認してからサンプリング時間などの設定をするように伝えてロジアナで実際に見てもらった。トリガのかけ方と表示範囲の設定や取り込みメモリ容量の設定などを伝えたのだが、実際には使い方を次々と発掘してCSV にデータを吸い上げて解析を進めていたようだった。やるねぇ高専生・・・。

現在は、アパート生活をしている専攻科生のN君だが、部屋のインフラとしてスイッチなどが無くてリモコンだらけなのだという。これを解決するソリューションとしてArduinoで学習リモコンを作ってカスタム仕様のスイッチを付けたいというのが彼の発想だったらしい。

持ってきたリモコンのうち、一つはニトリの掃除ロボットのリモコンでこれだけは、赤外線ではなくて2.4Gの無線制御だった。これについてはいろいろと調べていたようだが結局スタートキーだけをハードハックしてArduinoからスタートが制御できるようにするというのが彼の判断だった。

ニトリのリモコンの開封が一つのハードルだつたがなんとか達成して、里のワイヤストリッパーも堪能してもらい分解に必要な手業としての低温半田による組成変性で半田を溶かすということも体験理解してもらって分解に成功してリューターも使ってもらい線の引き出しに成功した。

赤外線の信号の動作確認がロジアナで取れるようになったので、まずは部品選定を進めなければならないスイッチハックの制御について実験をしていたようだ。彼の理解は、フォトカプラだったが実際にスペックを確認して無理そうだと理解したようだ。提案したのはトランジスタ、FET、最後はリレーだった。2SC1815と2N7000と3Vのリレーだった。実際にはFETはほとんど学んだだけで使ったことはないらしい。実際に馬力をあげて次々と確認していき、結局リレーに落ち着いたらしい。

とりあえず、こうした部品がすぐに手当て出来るのも、里のオープンラボの所以である。ホームセンターや秋葉に行かずともそろって実験が出来るのだ。

アイデアと腕さえあれば、彼のように次々と挑戦して新たな道具と対峙してキャッチアップして自分の思索を深めていくことが出来ますよ。

彼のデバッグは、まだ続くようです。里で見かけることがあれば声援してあげてください。