#author("2026-07-10T16:48:00+09:00","","") #contents *SALSAとは [#ee8f5c6c] ~SSL Accerelometer Logger System Aparatus(冗長とか意味不明とか言ってはいけない)とは、2013年に[[下川]]が開発した加速度計測機器である。 ~改良を重ね[[涌井]]の研究において試運転、実用化された。 ~AVR、Arduino、ARMベアメタルなど開発環境の変遷を経て、巷で流行り(2015年3月現在)のRaspberryPiに移行 [[f8betznet]] https://hedgedoc.envs.net/s/fgshmPxzb https://notes.fabiomanganiello.com/s/igi8E90ezM https://knowhow.brainbot.com/s/r47KMJP7C *簡易仕様(ver0.1RPi現在) [#k075c3b8] -地震観測を目的としたオートトリガーモード、実験向けのマニュアルトリガーモードの二つの動作モードを実装 -設定ファイルのロード機能を実装、プログラムの書き換え無しにユーザーが想定した動作になるよう汎用性を持たせた -↑にともないSPIデバイス(デジタルセンサとか)の選定もある程度汎用的に使えるようにした -水濡れ、高温、衝撃、強磁場、誤飲、その他厳禁 *あったらいいな的な機能 [#tbb520b7] -メールでデータ転送 -FTPでデータ転送 -DropBoxにデータ転送 -とにかくリモートで自動的にデータ転送 -高精度なNTPサーバとクライアント機能とか -別スレッドでFFTとかもやっちゃう -%%ついでに俺の研究とか論文執筆までやってくれちゃう%% *開発履歴 [#sc30e8c7] -BMA180 --ver1.0:試験的に開発、センサから読み取ったデータをCOMアウトするだけ、センサ及びその接続回路のデバッグに便利なのでSALSAにも移植 --ver2.0:SDカードとの連携、RTCなどを仮実装、2.0となってるけど只の中間アップデート --ver3.0:周期割り込みをシステムタイマから汎用タイマに変更、とりあえずフル計測出来るようにして福島で試運転 -SALSA --ver4.0:プロジェクト名をSALSAに変更、計測精度向上のためセンサを変更しそれに伴い仕様変更、トリガーモード、設定ファイルロード機能を実装 --ver4.1:独立型ウォッチドッグタイマを仮実装 -SALSA(RPi) --ver0.1:今までを何もかも忘れてRaspberryPi用に開発しなおし、基本的なコンセプトや名称だけを引き継いだ *RaspberryPiとは [#i380ccdb] ~ARMプロセッサとUSBなどの標準IO、GPIOピンなどコンピュータに必要なあれこれがパッケージになったもの ~使用用途としては大きく分けてサーバ構築と制御系に別れるっぽい(前者のほうが主流か?) ~低消費電力、高性能ながらも5000円程度と価格が手頃なのも魅力 ~基本的にはLinuxをインストールして使う(ベアメタルでの開発も出来るっぽい) ~RPi自体のセットアップは[[ここ>http://usicolog.nomaki.jp/engineering/raspberryPi/raspberryPi.html]]などを参考にすること ~その他仕様詳細などはググること *SALSAソフトウェアのセットアップ [#yc34f407] ~ソースコードはGitHub上に公開している(なので好きに開発修正しちゃってください) ~https://github.com/hiroaki415/SALSA ~GPIOの制御には[[wiringPi>http://wiringpi.com/download-and-install/]]を利用させてもらっているので事前にインストールしておくこと(インストール方法はリンク先参照) ~またgitとかもインストールしておくこと -$ sudo apt-get install git ~SALSAのインストールの手順は以下の通り(要ネットワーク接続) -$ git clone https://github.com/hiroaki415/SALSA.git -$ cd SALSA/ -$ git submodule update --init -$ make -$ make install *GPIO接続表 [#ibd7651c] ~RPiのピンマップは[[ここ>http://pi.gadgetoid.com/pinout]]を参照 -SPI接続 |''SALSA(マスター)''|''センサデバイス(スレーブ)''|''備考''| |23,GPIO11(SCKL)|SCKL|シリアルクロック| |21,GPIO9(MISO)|SDO(SA0)|マスター←スレーブ伝送| |19,GPIO10(MOSI)|SDI(SDA)|マスター→スレーブ伝送| |24,GPIO8(CE0)|CS(NS?)|チップセレクト| -GPIO割り込み |''SALSA''|''デバイス''|''備考''| |12,GPIO18(PCM_C)|11,GPIO17|要するに11番と12番をショートさせる| |11,GPIO17|12,GPIO18(PCM_C)|12番からは指定した周波数でパルスクロックが供給され11番はクロックの立ち上がりをシグナルとして割り込みをかける| -その他 |''SALSA''|''デバイス''|''備考''| |GPIO(設定ファイルで指定したピン)|LEDアノード|LEDの点滅がSALSAのステータスを表現する、別に繋げなくても動作はする| *使用手順 [#b1bc5367] ~SALSAソフトウェアは基本的にコマンドラインで操作する ~起動コマンドは以下の通り(要root権限) -$ sudo salsa [OPTIONS] [-l SETTING_FILE_TO_LOAD] ~オプション引数は以下の4つ -- s 通常起動 -- d デバッグモード、下記を参照 -- h ヘルプ -- l <FILE> 設定ファイルの指定、"-l"の直後の引数で指定したファイルパスを設定ファイルとして読み込む、指定がなければカレントディレクトリにおける"settings.json"を探す *設定ファイル [#f6236e85] ~設定ファイルはJSON形式によって記述する ~JSONがよくわからない場合は[[例>https://github.com/hiroaki415/SALSA/blob/master/settings.json]]を参考に該当のパラメタを適宜修正すればよい(※例は[[LIS3DH>http://akizukidenshi.com/catalog/g/gK-06791/]]のもの) -設定パラメタ一覧 |''ハッシュ''|''パラメタ''| |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)を書き込む>http://akizukidenshi.com/download/ds/akizuki/AE-LIS3DH.pdf]])、センサによってはオフセットやロー/ハイパスフィルタ機能を搭載しているものもあるので有効活用すれば計測精度の向上が望めるかもしれない ~※数値パラメータの場合でもダブルクォート(i.e."100")で囲うこと、JSON形式は仕様上INT型の読み取りにも対応しているがSALSAで利用しているライブラリでは上手く行かなかったのでStringを変換させている *デバッグモード [#y00f2d0a] ~ハードウェア周りのテストの為にデバッグモードを用意した ~デバッグモードの起動は以下の通り - $sudo salsa -d [-l SETTING_FILE] ~デバッグモードでは対話的操作によって動作確認を行う ~起動後に以下のようにコマンドを求められる - debug@SALSA >>> [COMMANDS] ~利用できるコマンドは以下の通り --read SPI通信による読み取り、コマンド入力後に読み取りたいアドレスを聞かれるので16進数で入力する --write SPI通信による書き込み、コマンド入力後に書き込みたいアドレスおよび入力データを聞かれるので16進数で入力する --collect 三軸加速度の読み取り、センサのアドレス設定が上手くいってないと読み取れない --led 設定ファイル上で指定したLEDピンのHIGH-LOWを切り替える、コマンド入力後ピンのHIGH-LOWを聞かれるので数字で入力する(0:オフ、1:オン) --toggle LEDピンのオンオフをトグルする --help ヘルプメッセージが出る --exit デバッグモードを終了する *SPI通信とデジタルセンサ [#c7486102] ~SALSAではSPI通信対応の3軸加速度センサとの連携を前提にソフトウェアが設計されており、接続するセンサの選定に際してはセンサのデータシートをよく読み対応しているかどうか確認しなければならない ~SALSAに接続する加速度センサは以下の要件を満たす必要がある -デジタルセンサである ~センサには電圧の強弱で情報を出力するアナログ式と、ビット伝送によって数値を出力するデジタル式の二つがある、SALSAではデジタルセンサを使う -SPI通信に対応している ~デジタルセンサの通信規格には主にI2CとSPIの二つの方式がある ~SPI通信の仕様は[[ELM-Chan氏の解説>http://elm-chan.org/docs/spi.html]]を参考にされたし ~SPIでは、通信時のCS信号のHigh-Low、データシフト(MSB/LSB-First)、伝送タイミングモードを設定しなければならないが、現状SALSAではCS-Low、MSB-First、伝送タイミングはMode0となっており変更が出来ない(そのうちアップデートで対応予定) ~CS信号やデータシフトはクリティカルなので上の設定に対応したセンサを選定する必要があるが、筆者の経験上加速度センサはだいたいこの設定になっている ~伝送タイミングに関してはMode3のデバイスが多い印象だが、Mode0でもちゃんと読み書き出来たので割とアバウトなのだと思われる -8bitごとの通信であり9〜16bit解像度である ~SALSAでのSPI通信による読み書きルーチンは以下の通り --アドレス8bit及び入力データ8bit(読み取りの場合はダミーデータ)の用意 --読み取りの場合はアドレスの先頭ビットを1にする(本当はこの操作もデバイスによると思われるが、筆者の経験上たいていのデバイスでReadコマンドがMSB-Highである、SPIの仕様なのだろうか) --CSをLowにして通信開始 --アドレスおよび入力データを伝送 --読み取りの場合はデバイスから8bit(=1Byte)の情報が返ってくる --CSをHighにして通信終了 ~上記のルーチンはたいていのセンサに対応しているが、もしかしたら違うルーチンを求められるデバイスもあるかもしれないのでセンサのデータシートをよく読むこと ~また高解像度のセンサでは8bit以上の情報を8bit通信で読み取るために、上位8bitと下位8bitを分けて通信させるものが多く、SALSAではソフトウェア内部でビット演算により合成している(これももしかしたらデバイスによっては異なるかもしれないので要確認) ~ ~逆に言えば上の要件を満たしていれば加速度センサじゃなくてもいけるかもしれない *動作説明 [#e5940869] ~(執筆中) *TIPS [#gc31dc84] -WiFi ~市販のPC向けのUSB接続式WiFiモジュールをセットアップすれば有線LANを接続しなくてもネットワークにつなげることが出来る ~セットアップ方法は[[ここ>http://yamaryu0508.hatenablog.com/entry/2014/08/15/001312]]などを参照(普通のLinuxとたぶん同じ) ~イーサネットとWLANではIPアドレスが異なることに注意すること -リアルタイムクロック ~RaspberryPiはOS起動時にネットワークに接続されていればNTPサーバと通信してシステムタイマの時刻を自動で同期してくれる ~ただしRaspberryPiにはRTCモジュールが内蔵しておらず、電源オフ時に時刻を保存することが出来ないため、非ネットワーク環境で起動した場合時刻が合わなくなってしまう ~これを回避するためには外部接続のRTCモジュールを接続してセットアップしなければならない ~セットアップ方法は[[ここ>http://news.mynavi.jp/articles/2014/08/21/raspberry-pi4/002.html]]などを参照 *開発者向け [#j0bfb098] ~上記した通りSALSAソフトウェアはGitHub上にてソースコードを公開しているので誰でも好きにコミットしてください ~プログラムは動作スピードや電子回路周りとの親和性の観点から基本的にC言語で書き下されており、コンパイラはgccを想定している ~外部ライブラリとしてはGPIOの操作に[[WiringPi>http://wiringpi.com/]]を、JSONのパーサに[[parson>http://kgabis.github.io/parson/]]を利用している ~PWMやGPIO割り込みなどARM本来のプライマリな電子回路機能を利用することで、計測時間刻みの精度を確保している(この辺は本当はシステムタイマ割り込みを使いたかったがよくわからなかったため断念)