SSL Accerelometer Logger System Aparatus(冗長とか意味不明とか言ってはいけない)とは、2013年に下川が開発した加速度計測機器である。
改良を重ね涌井の研究において試運転、実用化された。
AVR、Arduino、ARMベアメタルなど開発環境の変遷を経て、巷で流行り(2015年3月現在)のRaspberryPi?に移行
ARMプロセッサとUSBなどの標準IO、GPIOピンなどコンピュータに必要なあれこれがパッケージになったもの
使用用途としては大きく分けてサーバ構築と制御系に別れるっぽい(前者のほうが主流か?)
低消費電力、高性能ながらも5000円程度と価格が手頃なのも魅力
基本的にはLinuxをインストールして使う(ベアメタルでの開発も出来るっぽい)
RPi自体のセットアップはここなどを参考にすること
その他仕様詳細などはググること
ソースコードはGitHub?上に公開している(なので好きに開発修正しちゃってください)
https://github.com/hiroaki415/SALSA
GPIOの制御にはwiringPiを利用させてもらっているので事前にインストールしておくこと(インストール方法はリンク先参照)
またgitとかもインストールしておくこと
SALSAのインストールの手順は以下の通り(要ネットワーク接続)
RPiのピンマップはここを参照
| SALSA(マスター) | センサデバイス(スレーブ) | 備考 |
| 23,GPIO11(SCKL) | SCKL | シリアルクロック |
| 21,GPIO9(MISO) | SDO(SA0) | マスター←スレーブ伝送 |
| 19,GPIO10(MOSI) | SDI(SDA) | マスター→スレーブ伝送 |
| 24,GPIO8(CE0) | CS(NS?) | チップセレクト |
| SALSA | デバイス | 備考 |
| 12,GPIO18(PCM_C) | 11,GPIO17 | 要するに11番と12番をショートさせる |
| 11,GPIO17 | 12,GPIO18(PCM_C) | 12番からは指定した周波数でパルスクロックが供給され11番はクロックの立ち上がりをシグナルとして割り込みをかける |
| SALSA | デバイス | 備考 |
| GPIO(設定ファイルで指定したピン) | LEDアノード | LEDの点滅がSALSAのステータスを表現する、別に繋げなくても動作はする |
SALSAソフトウェアは基本的にコマンドラインで操作する
起動コマンドは以下の通り(要root権限)
オプション引数は以下の4つ
設定ファイルはJSON形式によって記述する
JSONがよくわからない場合は例を参考に該当のパラメタを適宜修正すればよい(※例はLIS3DHのもの)
| ハッシュ | パラメタ |
| logger.mode | 計測モードの指定(false:オートトリがー、true:マニュアルトリガー) |
| logger.rate | 計測レート、単位はHz |
| logger.auto.trigger | オートにおけるトリガー値、単位はg/lsb(1gを最小分解能で割ったもの) |
| logger.auto.former | トリガー以前の計測バッファ、単位は秒 |
| logger.auto.latter | トリガー以後の計測バッファ、単位は秒 |
| acc.x.lsb | センサX軸下位ビットのレジスタアドレス、16進数で指定 |
| acc.x.msb | センサX軸上位ビットのレジスタアドレス、16進数で指定 |
| acc.y.lsb | センサY軸下位ビットのレジスタアドレス、16進数で指定 |
| acc.y.msb | センサY軸上位ビットのレジスタアドレス、16進数で指定 |
| acc.z.lsb | センサZ軸下位ビットのレジスタアドレス、16進数で指定 |
| acc.z.msb | センサZ軸上位ビットのレジスタアドレス、16進数で指定 |
| register | SALSA起動時にセンサに書き込むデータ、addressとdataの配列、最大10個まで |
| register[index].address | 書き込み先のレジスタアドレス、16進数で指定 |
| register[index].data | 書き込む値、16進数で指定 |
| led_pin | LEDアノードとの接続ピン番号 |
※一般的にデジタルセンサは特定のレジスタに計測開始を指示するデータを書き込まなければ動作しない、そのため"register"の設定はよく注意すること(例えばLIS3DHの場合、アドレス20(hex)にデータ7F(hex)を書き込む)、センサによってはオフセットやロー/ハイパスフィルタ機能を搭載しているものもあるので有効活用すれば計測精度の向上が望めるかもしれない
※数値パラメータの場合でもダブルクォート(i.e."100")で囲うこと、JSON形式は仕様上INT型の読み取りにも対応しているがSALSAで利用しているライブラリでは上手く行かなかったのでStringを変換させている
ハードウェア周りのテストの為にデバッグモードを用意した
デバッグモードの起動は以下の通り
デバッグモードでは対話的操作によって動作確認を行う
起動後に以下のようにコマンドを求められる
利用できるコマンドは以下の通り
SALSAではSPI通信対応の3軸加速度センサとの連携を前提にソフトウェアが設計されており、接続するセンサの選定に際してはセンサのデータシートをよく読み対応しているかどうか確認しなければならない
SALSAに接続する加速度センサは以下の要件を満たす必要がある
センサには電圧の強弱で情報を出力するアナログ式と、ビット伝送によって数値を出力するデジタル式の二つがある、SALSAではデジタルセンサを使う
デジタルセンサの通信規格には主にI2CとSPIの二つの方式がある
SPI通信の仕様はELM-Chan氏の解説を参考にされたし
SPIでは、通信時のCS信号のHigh-Low、データシフト(MSB/LSB-First)、伝送タイミングモードを設定しなければならないが、現状SALSAではCS-Low、MSB-First、伝送タイミングはMode0となっており変更が出来ない(そのうちアップデートで対応予定)
CS信号やデータシフトはクリティカルなので上の設定に対応したセンサを選定する必要があるが、筆者の経験上加速度センサはだいたいこの設定になっている
伝送タイミングに関してはMode3のデバイスが多い印象だが、Mode0でもちゃんと読み書き出来たので割とアバウトなのだと思われる
SALSAでのSPI通信による読み書きルーチンは以下の通り
上記のルーチンはたいていのセンサに対応しているが、もしかしたら違うルーチンを求められるデバイスもあるかもしれないのでセンサのデータシートをよく読むこと
また高解像度のセンサでは8bit以上の情報を8bit通信で読み取るために、上位8bitと下位8bitを分けて通信させるものが多く、SALSAではソフトウェア内部でビット演算により合成している(これももしかしたらデバイスによっては異なるかもしれないので要確認)
逆に言えば上の要件を満たしていれば加速度センサじゃなくてもいけるかもしれない
(執筆中)
市販のPC向けのUSB接続式WiFi?モジュールをセットアップすれば有線LANを接続しなくてもネットワークにつなげることが出来る
セットアップ方法はここなどを参照(普通のLinuxとたぶん同じ)
イーサネットとWLANではIPアドレスが異なることに注意すること
RaspberryPi?はOS起動時にネットワークに接続されていればNTPサーバと通信してシステムタイマの時刻を自動で同期してくれる
ただしRaspberryPi?にはRTCモジュールが内蔵しておらず、電源オフ時に時刻を保存することが出来ないため、非ネットワーク環境で起動した場合時刻が合わなくなってしまう
これを回避するためには外部接続のRTCモジュールを接続してセットアップしなければならない
セットアップ方法はここなどを参照
上記した通りSALSAソフトウェアはGitHub?上にてソースコードを公開しているので誰でも好きにコミットしてください
プログラムは動作スピードや電子回路周りとの親和性の観点から基本的にC言語で書き下されており、コンパイラはgccを想定している
外部ライブラリとしてはGPIOの操作にWiringPiを、JSONのパーサにparsonを利用している
PWMやGPIO割り込みなどARM本来のプライマリな電子回路機能を利用することで、計測時間刻みの精度を確保している(この辺は本当はシステムタイマ割り込みを使いたかったがよくわからなかったため断念)