ズッキーニの味噌煮込みBlog版

コンピュータのこと、食べ物のこと、なんでもないこと、とんでもないこと。

Arduinoで試作中

2014年07月03日 10時32分44秒 | Weblog
Arduinoを買ったという投稿をしたのが去年のいまごろだったらしい。gooからの去年の投稿を知らせるメールで気が付いた。まぁ、ちょっと気の利いたサービスだね。(^^)

そのArduinoと試作で格闘している。つまり本格的に使い始めたわけだ。

ひょんなことから環境値(温度やら湿度やら日照やら二酸化炭素やらやらやら^^;)を取得してクラウド(当然だがその先はAIでありレコメンドの世界だ)に送り込むためのセンサユニットの開発に取り組むことになり、マイコンボードとしてたまたま手元にあったArduinoを使うことにしたんだ。

ほかにNECエレ(いまはルネサスになっている)の78Kボードも2枚ほどあったし、クラウドにデータを送るのにネットワーク機能が必要だという点では、使ったことはないがRaspberry Piという選択肢は当然あった。しかし78Kにはつないですぐに使えそうなネットワークモジュールが見つけられなかった。あるのかも知れないが、根性がTinyなので諦めた。Raspberry Piは小さなLinuxマシンなのでネットワークは大得意だろうが、「センサを扱うマイコンボード」というイメージに合わなくて敬遠した。コードを書いた経験がないので、早めにまずは結果を出すという今回の目的には合わなかったし。

Arduinoなら、イーサネットシールドという拡張ボードを「親亀の背中に子亀を乗せる」格好で取り付けてやればネットワーク対応ができるようだ。試作用のブレッドボードやら直接つないで手軽に試せるホビー用の格安なセンサもたくさん出回っているので取りあえず動くものを安く上げられそうだ。先人の書いたソースコードも多数公開されていて、詰まったときに助けになると思ったし。

我が組み込み系開発の師、お昼寝さんのアドバイスももらいながら、まぁいろいろとあって試作は楽しく進んでいる。発注元が資金調達に成功すれば、商品化の話もあって楽しみだ。

ところでその先人の書いたソースコードが、なかなかアレだ。

理由がわからないのでArduino開発言語の仕様なのかと疑ったが、やたらとグローバル変数が多い。というか関数内にローカル変数を持った例がほとんどない。というか関数を自分で定義した例がそう多くない。というか関数が引数を渡せることも値を返せることも知らないんじゃないかと疑わせるケースばかりだ。ききき、キミらいったい…。

たぶん、最初のころにコードを書いた人にはハード寄り(つまりソフトからちょっと遠い)の人が多かったのではないかと推測する。タイミングとか正/負論理とかバイアスとかのことはお得意でも、ソフトの世界が長年苦労して身に付けてきた「困らないコードの書き方」にはご縁がなかったのではないだろうか。そしてそれを参考にした人たちが、ほとんどそのままのコードをまた公開する。だからテーマがおなじならどのサンプルを見てもグローバル変数の嵐であり、なぜか理由のわからないポートの空読みが必ず入っていたりする。

グローバル変数は絶対必要なものにしか使わない。まとまった処理は必ず関数に括りだし、適切な引数を与え戻り値を使う。ハードのクセに対応したと思われるロジックは独立させてコメントを付けるか、原因を解明して根本的な対策を打つ。たとえば電源投入時や基準電圧を変更した直後のアナログポートの値が不正になるのはハードのクセなので、何度か確かめて1回だけ空読みをすればいいと確証を取った。

この過程が実に勉強になっている。仕事が早く進んだのもありがたいが、スキルが上がってきたことも喜ばしい。

毎日楽しく仕事をしている。