1.概要
このコンピュータは、Raspberr Piという小型のコンピュータ(さらに言えばRaspberry Pi zero W)
の赤外線フィルタ無しのカメラモジュールを使って、コンクリート外壁を撮影して仕上げの浮きを発見するための物です。
カメラモジュールの制御のためにコンピュータとして起動する必要がありますが、Windowsは動作しないため(※1※2)、Raspberry Piの公式のOSであるRaspberry Pi OSを使っています。
Debian GNU/Linux(https://www.debian.org/)をベースにしたOSですので、細かな制御や設定等にUnixの知識が必要になります。
建設業にUnix知識が前提のシステムは無茶が過ぎるので、動作に必要な部分はなるべく物理的なボタン操作で行うように作りました。
当然自由度はかなり低くなりますが、必須動作の分は物理ボタンで行えます。
撮影に関する設定は、特定のファイルパスを設定ファイルとして読み込むように作りました。
設定ファイルを生成するプログラム自体はWindowsでもスマートフォンでも利用可能ですので使い慣れた環境で設定出来ます。
設定ファイルを置くべき特定の場所へのアクセス、撮影した写真へのアクセス、設定ファイルを生成するプログラムへのアクセス、の三者それぞれ要件が異なりますので、全てを満たすために、USB機器として接続した際に異なるモードで動くようにしました。
この説明書きは、そのシステムを通じて、それら動作モードを含めた使い方の解説やコンクリート外壁赤外線調査ソリューションを操作するための説明書です。
以下、コンクリート外壁を赤外線フィルタ無しで撮影すること、またその撮影データを使って仕上げの浮きの有無を特定する業務全般の両方をソリューションと称します。
同じく、ソリューションのために作成したこのコンピュータのソフトウェアとハードウェアの両方、加えてソフトウェアとハードウェアの組み合わせで実現される作業フローをシステムと称します。
この後の具体的な各項目の説明では、なるべくその場で簡潔に用語を解説しながらシステムについて説明しますが、後に書かれる内容が必要な項目があったり、解説するのに別項が必要だったり、特定の箇所にしか使わない用語なのに解説すると冗長すぎる用語があったりするため、分からなければとばして読んでください。
最後まで読んでも解説が無い用語は一般的な言葉ですので、辞書や検索すると上の方に出てくる解説を参照してください。
※1 Windows IoT CoreというOSが動きますが、好きにアプリケーションを入れて豊かなGUIをマウスとキーボードやタッチパネルで操作するような、皆さんが知るWindwowsではありません
※2 Windows * on
ARMが動く可能性がありますが、性能的にほぼ何も出来ない上に正式なライセンスは2023年10月現在では販売開始されていないため、ライセンス違反を承知で動かすか不安定な上に一か月毎にインストールし直しが必要なプレビュー版しか使えません
2.使い方要約
2-1.やってはいけないこと
- 電源が入っている状態で物理スイッチを操作すること
非常に電気的に弱いSBCですので、短絡すると即死します
- 蓋を開ける時に力を入れること
短いケーブルで接続したカメラモジュールを蓋に固定しているため、力をかけるとケーブルに力がかかり、良くてケーブル破損(ケーブル交換)だけ、悪いとコネクタが壊れる(カメラモジュールかRaspberry Pi
zero W本体の買い直し)になります。
2-2.各部名称
各部名称
2-3.使用方法
- 起動前に背面の物理スイッチを操作してください。
-
モード指定ピン: USB OTGモード指定
真ん中のピンと、上下どちらを短絡しているかによって、USB OTGで接続された際のふるまいが切り替わります。
毎秒数百回以上接続状態を確認していますので、接続しっ放しにしておかないといけないため、ジャンパーソケットを使って短絡してください。
各モードの説明は3-2OTGモードを参照してください。
- HeartbeatLEDに近い側
- ネットワークアダプタモード
- HeartbeatLEDから遠い側
- ストレージモード
- ジャンパ無し
- シリアルコンソールモード
-
モード指定ピンは、電源が入っている状態で切り替えると短絡して破損する可能性があるため、(OSシャットダウン中であっても)電源と接続された状態で切り替えないでください。
-
シャットダウンスイッチ: OSシャットダウン開始
Raspberry Pi zeroで稼働中のOSをシャットダウンします。
このスイッチを押すとシャットダウンを開始します。
リセットスイッチ近くのスリットから見える緑色のLEDが10回点滅してから消灯したら無事にシャットダウンが完了しています。
この状態になるまで電源を抜かないでください。
-
撮影スイッチ: 撮影開始/終了
レバー位置の操作でカメラモジュールでの撮影の開始と終了を切り替えます。
- HeartbeatLEDに近い側
- 撮影中の場合、撮影を終了します。
撮影中でない場合、撮影を開始しません。
- HeartbeatLEDから遠い側
-
撮影中の場合、撮影を続行します。
撮影中でない場合、撮影を開始します。
- Heartbeat: 稼働状況インジケーター
このLEDが点滅している間はシステムが動作中ですので、電源に接続しているケーブルを抜かないでください。
- リセットスイッチ: 電源ON/強制リセット
押すと電源リセットをかけます。
- 電源接続状態でOS起動中
- 強制リセットをかけます。
書き込み中のデータが消えたり、OSの必要なファイルが破損したりするので、絶対にやらないでください。
- 電源接続状態でOSシャットダウン済
- 電源ケーブルを抜き差しすることなくOSを起動します。
- 電源未接続状態
- 何も起こりません。
3.具体的な説明
3-1起動
電源を供給すると自動で起動シーケンス(ストレージを確認し、OSを起動する)が開始されます。
Raspberry Pi zeroには、USB micro B端子が二つありますが、不都合が無い限り、どちらからでも電源を供給出来ます。
ただし、片方は電源専用、片方は通信用ですので、基本的に以下のように使い分けてください。
- コンピュータと接続する場合(撮影データの取り出し、設定変更等)
- 通信用USB micro Bポート(miniHDMI端子に近い側)
- モバイルバッテリー等に接続する場合(通信を行わずに電源供給だけ)
- 電源専用USB micro Bポート(miniHDMI端子から遠い側)
SSHやVNC等を使った操作を社員全員に要求するのはハードルが高いので、物理的なスイッチ類で最低限の設定が可能な作りにしました。
頻繁にmicroSDカードを取り出すようなケースデザインになっていないため、データの取り出しについてはUSB On the Goでパソコンに接続して取り出す作りにしています。
メンテナンス性、Windowsの制限、Linuxの制限との兼ね合いから、USB OTG接続の際に3つのモードを切り替えて使うような作りになりました。
切り替え方法と各モードについては、以下の通りです。
- ネットワークアダプタモード
-
モード指定ピンがHeartbeatLEDに近い側の2本が短絡されていると、このモードになります。
接続したマシンのネットワークインターフェース(Windowsの場合ネットワークアダプタ)の一つとしてふるまいます。
つまり、USBのWi-Fiドングルが接続されたような状態になり、ネットワーク越しにアクセス出来るようになります。
ネットワークでつながった状態になるので、 \\cir.local\ というパスでWindows共有機能でアクセス可能になります。
データの取り出しは、本モードで行います(後述のストレージモードで無理矢理撮影データにアクセスするよりも、Windows共有機能を通じて取り出す方が早く信頼性が高いため)。
ただし、Windows側でこのモードを認識するためにはドライバが必要になります。
Windows
Updateで自動で見つけられる可能性もありますが、既に配信停止になっているため、まずはストレージモードで接続し、ドライバのインストーラを使ってインストールしてからこのモードで接続してください。
ネットワークアダプタモードで接続し、 \\cir\ もしくは\\cir.local\ にアクセスすると、以下3つのフォルダにアクセス可能になります。
- \\cir\camera_config
\\cir.local\camera_config
- 撮影パラメータファイルを配置するフォルダです。
このフォルダにあるparameters.jsonを読み込んで撮影のパラメータに使います。
- \\cir\camera_config_ui
\\cir.local\camera_config_ui
- 撮影パラメータファイルを生成するスクリプト(settings/html)を置いています。
このファイルで生成したparameters.jsonというファイルが先述のcamera_configフォルダに入っている場合、内容を読み込んで撮影時に適用します。
また、可能性は限りなく低いですが、HTMLのスクリプト言語としてJavaScriptが廃れ、ウェブブラウザが対応を廃止した場合に備えて、parameters.jsonのJSON 仕様が分かるように、設定ファイルのサンプルファイルも入れてあります。
ウェブブラウザ以外のJavaScript処理系を用いたり、JSONエディタやプレーンテキストを扱えるテキストエディタで手書きすることにより、不便さはともかく対応不可能な事態は避けられます。
書式仕様でなくパラメータ内部の仕様(最大値・最初値・初期値)を知りたい場合は、settings.htmlを参照してください。
- \\cir\photos
\\cir.local\photos
- 撮影した画像を設置するフォルダです。
保存時間短縮のために、サムネイルであるjpgファイルは極めて低画質で保存する仕様になっています。
dngファイルを現像して使ってください。
- IPアドレス
- めでたくWindowsからネットワークアダプタとして認識されても、NetBIOS名やマルチ
- ストレージモード
- モード指定ピンがHeartbeatLEDから遠い側の2本が短絡されていると、このモードになります。
リムーバブルメディア(USBメモリやカードリーダーライターでメモリーカードを接続したようなもの)としてふるまいます。
中のデータをExplorerからアクセスして取り出せます。
ただし、OTGとしてふるまうドライバソフトウェアの都合上、ここに撮影した写真を保存するのとOTGでアクセスするのを両立するのは難しいので、撮影した写真の取り出しはネットワークアダプタモードで行うようなシステム設計になっています。
- ネットワークアダプタモードに必要なドライバのインストール方法は以下の通りです。
- ストレージモードでアクセス可能なフォルダの中にあるdriverフォルダをローカルにコピーするか、driver.cabをローカルに解凍します。
- ネットワークアダプタモードで接続します。
この際、不明なデバイスとして扱われるので、次以降の手順で上記RNDIS.infを参照するように設定してください。
- デバイスマネージャーで当該デバイスを右クリック
- ドライバーの更新(P)をクリック
- コンピュータを参照してドライバーを検索(R)をクリック
- 参照ボタンをクリックし、最初の手順でローカルにコピーしたフォルダの中にあるRNDIS.infファイルを指定する
- この説明ファイルも入っています(読めている時点で改めての言及は不要ですが……)。
- ストレージモードでは配置先にアクセス出来ないので不要ですが、ネットワークアダプタモードでアクセス可能な設定ファイル生成スクリプトも入っています。
このスクリプト自体は、必要なデータは全て含まれているので、ローカルに置いておいて使っても良いです。
あくまで生成した設定ファイルがRaspberry Pi zero本体のストレージの、特に所定の位置に必要になるだけです。
- シリアルコンソールモード
-
USB-シリアルコンバーターとしてふるまいます。
TeraTermやRLoginのような、ターミナルエミュレータと呼ばれるソフトを通じて、Rasoberry Piで動いているOSを操作する通信が出来ます。
文字のみのやり取りでOSの管理を行うモードです。
管理者以外が使うことは想定していませんが、緊急時の設定変更等のために用意してあります。
4.システムの概要
このシステムは、単独でコンピュータとして動作し、以下のように動作します。
- 2つあるUSBポート(USB micro B)のうち、電源専用ポート(端に近い方)にUSBケーブルで電源を接続すると、自動で起動します。
起動後は、物理スイッチの状態を確認するプログラムが無限ループで常に確認し続けます。
スライドスイッチが撮影開始側に入っていた場合、設定ファイルを読み込み、自動で撮影を開始します。
写真の保存先ファイルシステムの使用率が90%を超えるかシャットダウン用の物理ボタン(未実装)を押すと撮影を中止し、OSがシャットダウンします。
電源を抜けば当然即座に停止しますが、Windows搭載のパソコンと同じで、様々なファイルが破損しますので、そのうち起動出来なくなるのでおやめください。
本体背面のブーツカットのようにケースの開口が広がっている箇所にあつタクトスイッチはリセットボタンになっており、電源接続状態でシャットダウンした後、電源の抜き差しを行わずに起動するために使います。
- USBポートがある面には、電源専用ポートと反対側にminiHDMIの接続端子があります。
miniHDMI端子と電源通信両用USBポートに、各種変換アダプタや端子変換ケーブル等を用いて、それぞれモニタのHDMI、USBキーボードを接続した上で電源を入れると、CUI専用のOSが動くコンピュータとして操作可能なので、そのような使い方のためにつぶさないであります。
端子変換例:
- miniHDMI端子
-
- miniHDMI-HDMIのケーブル
- miniHDMI変換アダプタ+両端フルサイズHDMIのケーブル
- 電源通信両用USB micro Bポート
-
- miniHDMI-HDMIのケーブル
- USB micro B(USB3より前専用)-Type Aのホストケーブル
- 通信も対応しているmicro Bとtype-Cの変換端子-Type-C接続のUSBハブ
- (実在かは未確認ですが)USB type-Cで接続可能なキーボード
※本来Raspberry Pi zero WにはBluetooth接続が可能ですが、諸事情によりBluetoothを無効化しているため、Bluetooth接続のキーボードは使えません。
使えたとして初回の接続設定の際に別の手段で操作する必要がありますが……
-
ややこしいですが、以下のような理由から現状の設計になっています。
赤外線フィルタ無しのカメラモジュールで撮影を行いたい
┗撮影時に指定するパラメータは、固定すると業務の度にUnix知識がある人が書き換える手間が発生するため、撮影パラメータは簡単に設定出来るようにしたい
┗簡単に設定出来るようにする手段として、以下のやり方の中から消去法で現状となった
┣物理ボタンで起動/シャットダウンに加えて撮影を制御する方法
┃┗GPIOの位置、ケース形状からボタンを複数付けるのが困難
┣スマートフォンからSSHで制御する方法
┃┗Unix知識必要とするのと大差無い
┣スマートフォンからリモートデスクトップで制御する方法
┃┗起動時にモニターをHDMIで接続しておかないといけないため不便
┣webUIで制御する方法
┃┗以下の理由からwebUIへのアクセスが困難・不便
┃ ┣Raspberry PiをWi-Fiルーターとするやり方
┃ ┃┗RaspberryPi自体が別途インターネットアクセスが可能な状態でないとスマートフォン側が勝手に接続を切ってしまう
┃ ┣Raspberry PiをWi-Fi Direct公開するやり方
┃ ┃┗RaspberryPi自体が別途インターネットアクセスが可能な状態でないとスマートフォン側が勝手に接続を切ってしまう
┃ ┣Raspberry PiをUSB OTGでネットワークアダプタとしてWindowsに接続するやり方
┃ ┃┗別途ドライバのインストールが必要なため不便(動作モードを分けることにより間接的に採用した)
┃ ┗Raspberry PiをBluetooth接続可能にし、PANプロファイルでルーターとするやり方
┃ ┗RaspberryPi自体が別途インターネットアクセスが可能な状態でないとスマートフォン側が勝手に接続を切ってしまう
┣シリアルコンソール(GPIO)で制御する方法
┃┗ケースGPIOピンをはんだ付けすると邪魔になって撮影時に不便
┣シリアルコンソール(USB OTG)で制御する方法
┃┗撮影画像の取得が困難
┣Raspberry PiをUSB OTGでリムーバブルメディアとしてWindowsに接続し、ネットワークアダプタモード(後述)無しで現状のようにするやり方
┃┗消してはいけないファイルが消されるのを防止する手段が無いため、危険
┗ネットワークアダプタモードで設定用ファイルの作成・設置を行い、ネットワークアダプタモードに必要なドライバをストレージモードで配布する方法