2020/06/07

車載冷凍庫で簡易低温環境試験

 作ったものを投入してスイッチを入れると、温度に関連する不具合が観察できる不思議な箱を作っている。

 何らかのシステムの出来を確認するとき、極端な温度環境下の挙動を調べておくことで防げるトラブルは結構多い。それは半田の品質だったり、受動部品の定数だったり、ハードウェア設定に起因するソフトウェアの挙動だったりする。急冷スプレーでもいいのだけど、再現性のある試験環境とは言い難い。

 本格的なサイクル試験は環境試験装置の出番なので、以下の確認だけを目的とする。

 コールドスタート試験、不良個体のスクリーニング。
 温度センサの動作確認。
 クロック回りの回路の定数調整
 低温におけるプロセッサの内蔵OSC周波数などの観察

 DIY的な手法でいろいろ検討した結果、低価格でマイナス10度以下の環境を作ることに絞ると車載冷凍庫というカテゴリが残った。
 ペルチェ式は冷却効率が悪いため除外した。

 現在入手できる低価格な車載冷凍庫のスペックはおおむねマイナス20度までの冷却能力、1℃刻みの操作パネルという共通点がある。コンプレッサー式なので小型とはいえA3対応の大型プリンタ程度の場所を占有する。加温機能が付くと値段が数倍になるので、なんらかの熱源を検討するといいかもしれない。 
 小さめの圧力鍋なら余裕で入るので、簡易熱真空試験装置にも転用できそう。


 動作音はとても静かだが、冷却中はコンプレッサの振動があるため、設置場所によってはゴム足などをつけて防振したほうが良い。
 12V系ということもあり、普通にオフグリッド生活で重宝しそう。 最近マキタから、似たような冷却能力でバッテリ駆動もできるパーフェクト製品が出てきた。

USB配線を引き込む
まず軽く試運転するために、USBポートを庫内に引き込んだ。 延長ケーブルの中間は銅箔テープとし、蓋が閉まるようにした。 この冷凍庫は周囲の壁に冷却パイプがぐるぐる巻いてあり、壁面に触れているものは庫内温度よりも冷やされることになる。 結露対策として、銅箔テープの上からカプトンテープを張り付ける。 

                             


試運転
 とりあえず制御回路には手を加えず、試験を行ってみた。
庫内には乾燥剤(電子乾燥式)とUSBハブ、各種試験機器を設置する。 被検体はオンボードに気圧/温度センサを搭載したマイコン基板。
除湿のため一晩おき、朝から冷却を開始した。昼に最低温度設定に到達したあと、冷却を止めて自然に温度が上昇するまで放置する。



 冷却が働き始めた後のランプレートは1℃/分程度だった。半日程度かけて段階的に温度を下げていったのが下のグラフとなる。温度制御は指定温度前後±2~3℃の変動がみられた。 運転を停止するとだいたい6時間で室温の8割まで戻る。


 被検体は庫内に接しているわけではないため、特に最低温度では設定温度より冷えにくくなる。冷却面に張り付けたり、断熱材で中蓋を作ってはめ込み、庫内の容積を減らしたりして、より冷えやすい環境を作るとよさそうだ。

 正確な温度設定が目的でないなら、無改造でも問題はなさそうだ。一応センサを騙して運転を連続させる方法は見つけたので、マイナス20度以下も作れそうではあるものの、今は付加回路の安全系統を作りこんでいるところ。

2020/05/30

Arduino CLIの導入

Arduinoのコマンドライン環境 arduino-cli を触ってみる。

屋外設置のRaspberry pi3A+に導入し、接続した独自ボードに書き込みができる環境を構築してみた。 結論から言うと、一度コンフィグが済んでしまえば、コンパイル、アップロードはとても快適。 

手順を調べた時の環境 (2020年4月)
実行環境 :  Raspberrypi 3A+ , Raspberry pi 3B, RaspberryPi4B(4GB)
OSはRaspbian Burster(v7)で共通

バイナリ: arduino-cli_0.10.0_Linux-ARMv7.tar.gz
SSHターミナル:MovaXterm (Windows10)
ボード: Arduino Uno,  Arduino互換機 (Sanguinoベース)

最初の工程は大まかに4つ (2020年5月現在)

1 最新バイナリを任意のディレクトリに設置。バイナリはPathを通しておく
        RaspianだとLinux ARM 32bitでよいはず(そのうち64bitバージョンになりそう)

2 初期設定
       作業フォルダの設置
        Configファイルの初期化(ホームディレクトリに.arduino15が生成される)
                 $arduino-cli config init    
3 ボード関連のインストール 
       ボードインデックスの初期化
            $arduino-cli core update-index
        (確認)インストール可能なボード定義一覧のリスト表示
                 $arduino-cli core search
        ボード定義のインストール (リスト表示したIDを指定)例えば、
                $arduino-cli core install arduino:avr
        (確認)インストール済みボード定義の表示
                $arduino-cli core list
4 コンパイル、アップロードのテスト
        スケッチの作成(test という名のディレクトリ、.inoファイルの生成)
             $arduino-cli sketch new  test
        コンパイル(Ardiono UNO向け)
                成功するとアップロード用のバイナリがスケッチディレクトリに生成される
            $arduino-cli compile -b Arduino:avr:uno test
        アップロードのテスト (UNOをttyUSB0に繋いでいるとする)
                $arduino-cli upload -p /dev/ttyUSB0 -b arduino:avr:uno test
         
        (コンパイルできたら)何もしないスケッチなので、blink等をtest.inoに記述してみる
                                あとはライブラリをインストールするなど etc...
    
(任意) サードパーティのボード定義の追加、環境設定
        .arduino15内のarduino-cli.ymlの編集
              スケッチ設置場所の指定(デフォルトはホームディレクトリのArduinoフォルダ)
            (任意)additional urlsへ ボード定義の追加
             その後のインストール作業などは手順3以降の手続きを踏襲
     
  最初はコンパイルやアップロードのボード指定、ポート指定などがとっつきにくいが、随所でヘルプ(-h)を確認しながら慣れるしかない。コンパイルとアップロード回りはたくさんのオプションが存在する。
 ターゲットが固定であるなら、board attachでスケッチとボード、ポートを紐付けておくと楽。

     ボード定義には、名前のほかに、オプションで動作周波数やマイコン型番をリスト選択できるものがある。boardコマンドで確認してみよう。
    あらかじめarduino:avrをインストール済みであれば、MegaやPro miniがそれにあたる。
インストール済みのボード一覧を表示
            $arduino-cli board listall (インストールではなくリストオール)
ボードの詳細を確認(Arduino pro miniの場合)
            $ arduino-cli board details arduino:avr:pro
            Board name:     Arduino Pro or Pro Mini
            Required tools: arduino:avr-gcc                   7.3.0-atmel3.6.1-arduino5
                            arduino:avrdude                   6.3.0-arduino17
                            arduino:arduinoOTA                1.3.0
            Option:         Processor                         cpu
                            ATmega328P (5V, 16 MHz)         ✔ cpu=16MHzatmega328
                            ATmega328P (3.3V, 8 MHz)          cpu=8MHzatmega328
                            ATmega168 (5V, 16 MHz)            cpu=16MHzatmega168
                            ATmega168 (3.3V, 8 MHz)           cpu=8MHzatmega168
オプションとして、動作周波数の設定とマイコン型番の組み合わせが確認できる。
コンパイルやアップロード時に指定するときは以下のようにcpu=を追記する。
            $arduino-cli compile -b arduino:avr:pro:cpu=8MHzatmega328  test

その後、Ubuntu20.04をインストールしたRaspberry pi4でも64ビットバイナリで同じように構築できた。    
CUIの良いところは、非力な環境でも使えること。Pi zeroやPocketBeagleでも実行できるので、SSH接続で書き換えられる超ミニマムな開発環境となった。Arduinoレベルでも開発環境の整備って大変なので、VMイメージやddしたSDカードイメージとして管理できるのは楽。

PocketBeagleを組み込んだボード 
性能はPi Zeroとだいたい同じだがCortex-A8。アーキテクチャがオープンなのと、I/O用サブコアが混載されているので弄り甲斐がある

2020/04/06

屋外受信局の設備更新



 屋外にRaspberrypi2を設置してから、もう4年が経過していた。そんなに負荷をかけてないからか、SSHで定期的にメンテしていたけどSDカード不良になることもなくSDR鯖として動いてくれた。
 いままでの屋外BOXは入れ物の選択、構造、気象対策については問題なかったといえるけれど、小さくてコネクタも増設できず、ちょこっと試したい装置を取り付けるにしても取り回しが悪かった。なので今回は箱を大型化し、不満点の解消に努めた。

  • 設置性やコネクタ回りのハンドリングを改善
  • イーサネットHUBを設置
  • 外部装置への電源分配機能
  • 余ったスペースにボードコンピュータを設置

ボックス回り

AC100Vラインは屋外用の防水延長ケーブルをそのまま箱に導くので、延長コードの先が防水容器になった形。
 コンセント部はキャップ構造になっており、やや小さい外形でボックスに穴加工すれば、押し込むことで容易には引っこ抜けない構造になる。
 内部のACタップの配線を固定したあとで、ボックスとコンセント部の隙間はシリコンコーキングで充填する。

タカチのBOXは内部のベースプレートも一緒に購入して、ここに穴をあけてタイラップで様々な部品を固定することにする。
 内部の部品、ケーブルの設置基準は、簡単にベースプレートを取り外せること。(防水性にかかわる部品を除く)

縦置きとなるので、ケーブルは直下から取り出す。
 下部のどこかにベントホールを設けておく。 完全密閉状態だとプラケースということもあり、一度侵入した湿気が逃げられず、気温変化の激しい日に内部が結露して故障する。
 穴の場所は重力で水が抜けるような位置かつ、暴風雨で雨水が逆流しないような構造が良い。 ベースプレートの裏側などはおすすめ。設置場所によっては虫などの侵入を許すこともあり気を遣う。

足は屋外用マグネットベースにしたので、仮置きでもある程度固定できるようになった。

 電源回り

 ACアダプタまでは既製品の組み合わせで固めた。内部は短い延長コードと、USB電源付きの小型コンセントタップを設置。
 限られた容積を有効活用できるような配置にする。



 コンセントタップの5V電源は小型イーサネットハブとRaspiに供給する。24Vは外部用電源として疑似PoE基板につなぐ。
 屋外設置で真っ先にダメになりやすいのは電源部だったので、交換しやすくしておくことが重要。

 ネットワーク回り

単純に今まで屋外に這わせていたLANケーブルを接続し、内蔵したハブ経由で分配するようにした。ハブは5Vで動作するモバイル用のものを選定。発熱や電磁波放射は抑えたいので100Mbpsで妥協している。

ケーブル回り

 ちゃんとした防水コネクタもあるけれど、ペアで1ポート1万円程度はする。ケーブル側も径や防水性能について細かな確認検討が必要なのでちょっと手に余る。
 高級コネクタであってもなくても、設置場所を考えてなくて他所から水が伝わって腐食する事例、自己融着テープの巻き方ひとつで水の侵入を許してしまったりする事例がある。自然との闘いは知識と想像力、設計における継続的なトライ&エラーになる。

 今回は取り回しやすさ優先で行くので、ケーブル内外は短いLANケーブルを作成し、ケーブルグランドで防水処置とする。外に出たコネクタは、接続先のケーブルと中継アダプタで接続し、その後自己収縮チューブなどで防水処理する。 IP監視カメラの施工でよく使われる方式。
 今回はケーブルが通る程度の太さのケーブルグランドを使うので、通したあとでコネクタをカシメる必要がある。 取り回しや仕上がりを気にしないなら、コネクタごと通る大きめの穴を開け、防水粘土で埋めるほうが楽かもしれない。

 Raspi回り

防湿処理風景

今回はRaspi3Aを選択。 3Bでもよいのだが、あえてUSBハブにすることでUSB端子のレイアウトに自由度が増す。 基板の取り付け方向と垂直にコネクタを出す基板を作ろうかな…。
 Raspi2には発熱が少ないという利点があった。3は外気温15℃でCPU温度が35℃台と普段から高め。ギリギリ許容範囲だろうけれど、4は待機電流が大きすぎるのでヒートシンクと強制空冷が必須になるだろう。
 発熱は悪いことばかりではない。3月末に着雪があり、ちょっとした降雪試験になった。特に問題は起きなかったけれど、降雪中のCPU温度は20℃以下に下がっていた。
 着雪はある程度熱源があればすぐ落雪するので、積もった雪が凍って箱にダメージとなるのをある程度防いでくれる。


固定部を作り直した クロスダイポール