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

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

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

静電容量式土壌水分センサーというらしく、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に与えるデータとして編集する関数群として呼び出す仕組み。

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

NC加工をしてみる(6)

PCBEとOriminの組み合わせでも強度の取れる形でUSBコネクタやDCJACKをDCJACKを実装できるスリット型の角穴を作成することが出来た。

秋月電子の定番ジャックだ。

基板加工機での刃の切れ味からか、バリが気になった。金属ブラシを取り付けてこの後サンディングを行った。角穴の嵌合は問題なさそうだ。

そしてIoT機器試作セットは仕上がった。このあと、ケースに組み込んで改善内容について学ぶことが出来た。

NC加工をしてみる(4)

今回のお題は、市販の防水樹脂筐体に収めるある程度数を作ることを想定したモノづくりのお手伝いだ。里の加工で出来ることはしれているのだが、そこはベンチャー会社の人たちにしてみたら他に頼むことよりも出来るだけ作れるものなら最初にどこまで作れるのかは知りたいということらしい。

基板手配は、当初の課題だったが、サイズの問題などからEAGLEからKiCADに移行して新しい機能などを覚えて試作品としてOriminを用いたUSBCNCで削り出して試作評価というフェーズが簡単に崩れてしまった。良くも悪くも今までの使い方がCADというよりもアートワークを手で引いているようなPCBEだったりしていたことから制限を外して挑戦しようということでもあったのだが、試作用もう少し融通の利く環境構築も必要のようだ。

基板がとりあえず、KiCADのアートワーク状況を手コピーしてPCBEのスクリーンにプロットしていくのだがPCBEの柔軟な運用としてプロットポイントを自在に原点調整やピッチ変更が出来るのが幸いしてほどなく出来るのだが、あいにくと強度が必要なUSBコネクタやDCジャックの類の角穴などは折角モデルを使ったのが仇となっていたので丸で近似するしかなかった、作図は簡単だがはんだ付けの苦労はありそうだ。

これやArduinoの基板をスペーサーで保持するのだが、その設置用の穴開けが課題になりそうだということは先週のトライアルで分かった。穴あけ位置を指示する樹脂製のテンプレートを作成してそれ越しに穴あけをすることにした。これを作るのは今回は3Dプリンターで少し垂直のガイド性もつくようにした。

結局Arduino以外も含めて全体のテンプレートが丁度3Dプリンターで作れそうなので穴のサイズごとに色指示のシールを貼って効率が上がるようにしてみた。
Arduino UNOには使えないコーナーピンが一か所あり、設計上は3mmのビスを使うことになっているのだが実際にあたってしまいネジ締めが出来なかったりもしているので、ここは2.6mmのネジを一か所だけ使うようにした。そんなこともあったれして実はバタバタとしたNCデータの流用だった。転写する段階で読み間違えたりしてサイズ位置が合わなかったこともあったので、もう少しレビューを落ち着いてしたほうが良さそうだった。問題のUNOのマウントには樹脂製のスペーサーを使わないと背面のパターンも当たってショートしそうな感じもしたので手持ちのジュラコンのパーツを見つけ出してくみ上げてみた。

明日、全体試験をしてもらって来週はいよいよ顧客先で稼働評価試験となるらしい。

NC加工をしてみる(3)

あまりこだわったことがない、基板加工にも今回は、取り付け位置の制限などから外形加工をする必要があったのだが、使ったP板CADはKiCADにしたところ、基板加工機CIP100に付属してきたOriminでは対応できないことが分かり、急遽今まで使っていたPCBEで加工データの位置を取り込んで穴加工とその配線を通すという形になった。昔でいうところのアートワークを引いている感じだ。

作りたい基板サイズは45×105ほどなのでCIP100(Max 160×100)としては二枚取りが出来そうなあんばいなので外枠の一部は今回基板の縁に添わせる形で刃物の摩耗も防ぐことにした。取り付ける部品を押える目的のインシュロックを通す必要もあって角穴データは溝切の一環で外形データと通すことが出来たのだが、基板自体は四角にしかすることが出来ず一部を切り込んだ形にはできないことが判明した。対策は簡単に切り落とせそうな角穴をその位置近くに置くという代替案だ。KiCADで通らなかったデータにはDCジャックのランドパターンもあったようだが、これは少し大きめのパッドで逃げることにした。

本番の基板とパターンと部品配置だけを似せた状態でのデバッグということになる。試作動作完了となれば、基板発注という展開になる。

NC加工をしてみる(2)

微妙な配置にあるのは、今回作成したリレー制御基板の穴加工位置についたガイドである。適当にリブをつけて強度を持たせようとしているのだが、矢印をエンボスにしてあるのは、ターゲットの基板の角に寄せるためのマークである。

ABSもしくはポリカーボネートで明日作成する予定だが、下にはエポキシ基板も当てようかと思っている。実際にはシャコ万力で押さえてハンドドリルまたはボール盤であけることになりそうだ。

位置精度が必要なものは、あとArduino UNOのマウント部分もあり、同様なガイドを作成する予定だ。下の穴あけを依頼すると加工費用だけで材料の25倍以上の費用となるらしい。工賃は馬鹿にならないし、実際に先日配置の指示だけを紙に出して貼りつけて穴あけを試みたのはNGだった。少なくともオートポンチを施工すべきだったようだ。

精度を出すのが難しいことは確かにその通りなので専用冶具を3Dプリンタや基板加工機で作成するのは今風なのかもしれない。

NC加工をしてみる(1)

実用的なNC加工を直接試みようとすると現実的には、素材の固定やサイズなどの制限がありまた工夫が必要となります。里にあるNC加工装置は、オリジナルマインド社のQT100とCIP100あとはsmartDiysのFaboolLaserMiniです。

今回IoT装置となるものは、配電ボックスなどに用いられるタカチのケースなのですが、搭載部品となるArduinoや専用シールド基板などを内部のベース板に取り付けるための穴加工が必要となります。ほかにもいくつか取り付けるパーツはあるのですが、精度が必要なのは前述のものたちです。樹脂でできているベース板なのですが裏側にリブがあったりして実寸の穴位置加工図面を貼り付けてボール盤でトライしてもらいましたが、うまくいかないというのが経緯です。

この板自体は安いものですが、本来は現地でブレーカーなどを止付けたりするもので精度の必要な穴位置が要求されたりはしないものなのでしょう。一応メーカーサイトには加工受付のリンクもありましたので、クライアントの意向もあって見積もり問い合わせをしてみました。ざっくり追加の穴加工16箇所と材料込みで一枚の場合には7000円なりということで中間マージンもあるのでしょうが、さすがにクライアントさんの要望範囲ではなさそうなので丁重にメーカーさんにはお断りを入れつつ、数量的には100台くらいの加工までをしなければならないので再度見積もりはお願いしました。

精度の必要な穴加工を実現するための冶具作りをNCで行うのが現実的かと思われましたのでガラエポ基板かアルミ板を加工してブロック単位でゲージを作り、さらに必要であれば垂直精度を助けるためのガイドパーツを3Dプリンターで作ろうというのが今回のNC加工トライアルとなります。大きなサイズのNCフライスがあればよいのですが、あいにくと160×100がサイズ制限となるので精度の必要な基板取り付け部分などのブロック単位で冶具を作ることにしました。

この週末は、その報告ができるかと思います。

Arduinoプラットホーム活用の形?

先日作成した、ショットタイマーの操作アプリの依頼を受けて地元学生に開発アルバイトとして展開している。高専学生のバイトとしては、手頃で勉強にもなるということで、見込みは開発時間は10時間凡そ2日で出来ると踏んで依頼元には見積をしてゴーサインが来たのだった。監修のオーバーヘッドと里の利用費用も加算している。とはいえ破格な汎用に使える今どきの携帯アプリはweb apiで作るとマルチプラットフォームに対応が済むらしい。

1日目は、仕様と開発環境のすりあわせを調査がてらしてもらった。ランチ交え始めたのだったが検討を進めてもらうと実は生憎と作ってあったショットタイマーに付けていたBT2.1世代のモジュールに対応するのは難しいらしくBLEに移行する必要があるらしい。旬のIoT環境で様々な物に対応していくのはそうした事なのだろう。Androidに限れば出来るらしいのだが。

依頼元に確認メッセージを入れて開発に使用したArduinoUNO+BT2.0からの移行提案をプランをいくつか示して問い合わせを入れた。ほどなく回答が届き対応機種を減らしたくないという大本の要望に基づいてBLEへの移行となった。

既に開発段階で採用しかけたものが最近流行りのESP32だったのでこれもしくは他のモジュールにするかは納期と完成度次第ということでアプリ開発アルバイトを進めるために、先ずはベースの環境をIoT Expressに戻して当時課題だったメインデバイスのテープLEDの駆動とピン割り付けなどの変更をした。

テープLED自体は、割り込み制御でイケる感じだった。途中で投げていた環境だったが回路図と皆さんのネット情報には解離があり、少し嵌まったが問題なく解決した。実装としてはもう少し互換性を保つ方法もあるのではないかと思うがいたしかたない。

Arduino Leonardoの再生処置

組み込みの里を始めたころに導入しあったArduino Leonardoだったがラッチアップでも起こしたかのようなふくらみがチップ表面にあってたぶん何かノイズで壊したような経緯があったのだろう。先日Arduino UNO r3についていたATMEGA16AUの故障問題があって張替に挑戦したのだがQFNのリードレスパッケージでは挑戦しても報われなかった。

Arduino Leonardoでは周辺チップの取り込みがなされていてUSBも話せる豪華なチップが乗っている。幸いにもQFPのリードが周囲に出ているタイプなのでチップを張り替えることにした。取り外しにもちいるのは、低温で溶けるタイプの鉛フリー半田LEOなどを使って周辺リードを全て半田で満たしてしまうというやり方だ。ただし、今回のケースではチップ固定するための接着剤が付いていたようで加熱して糊が柔らかくなるのに時間が必要だった。

外した後はフラックスリムーバーで綺麗にしてから交換チップを仮止めするのだが、なかなか位置決めが難しい。4方向のリード位置がOKとなったら1か所のみはんだ付けして固定してから再度確認して良ければ、全体に一気にはんだ付けをして、吸い取り電線で余分な半田を取り去るやり方で進める。

拡大鏡を使って半田付け箇所を確認していき問題がなさそうなので、Fuse設定などを書きこみファームも更新しましたが、最終的にUSB側を挿入してもWindowsが認識しないので、今度はテスターでチップのピンと対応する周辺やランドとの接触を確認して導通試験を試みましたが問題は見つからず。

はてと確認に利用したUSBケーブルを使って携帯とPCを接続しても無反応で携帯のみ充電が開始されました。そう、確認に用いたケーブルの間違いでした。疲れましたが、これを機に充電ケーブルにはマークを付けることにしました。

ローカライズされた中華Arduinoの世界

先日、ArduinoUNOベースで急遽製作納品することになった案件があり当初はAitendoからESP32ベースのIOTExpressを利用する予定だったのだが、ワイヤレス対応の問題から逆にBTユニットとUNOという組み合わせで対応したのだった。偶々、知人から寄贈いただいていた訪問客対応用のUNOがあったのでこれを流用して対応したのだったが、二個新たに購入することにした。

本来は、正規ルートで購入すべきなのだが怖いもの見たさでAliexpress経由で純正互換と見えるもの(CH340Gなどを利用していない)を購入手配してみた。

届いたものは、こちらです。

堂々とホログラムまで入れて中国製造の印刷も入ってます。価格は1500円弱

スイッチサイエンスさんから購入した正規品は、同社のベースに固定してありますが、来たものは個別に進化を遂げていて単体でプラスチックのベースが付いていました。実装した部品のリードなどが当たることもなくなり優しい設計となっていますね。

中国でモノづくりが爆発している中で潮流として活用されているものがArduinoのプラットホームでもあるのでしょう。箱にはwww.arduino.org.cnというサイトが記されていますが本家とは離れて唯我独尊といったたたずまいです。もう何が何だか・・・

二枚購入したのですが、1枚には16Uのファームが正しく書き込まれていなかったようで認識しなかったので、AVRISPとATMEL Studioを用いてファームの更新を行いました。双方とも使えるようになりました。