コメを噛め

コメを噛め

rerofumi の電子工作メモ

hatena bookmark

作るだけ作って記録していなかったので纏めてレポート。
物体の傾きをセンスし、それを PC で読み取るということをやりたかったので加速度センサーを用いる。というかこっちの方が発端で、加速度センサー(やその他諸々のセンサー)の値を PC に読み込むためにはどうしたら良いかと考え、その結果 PIC に手を出したというのが正しい。

加速度センサーは名の通り加速度を感知するもので、振動の感知などにも用いられる。が、通常静止状態であっても物体には常に 1G の重力加速度がかかっており、黙っていてもどっちか方向に重力の 1G が数値として表れる。つまり、静止状態において加速度ベクトルが現れる方向が重力的に真下であると判断でき、結果センサーの地面に対する傾きがセンスできる。
傾きを知るだけだったら二軸の加速度センサーでも良いしそっちの方が安いのだけれども、二軸だと水平の時上向きに水平なのか下向きに水平なのかが得られないので(あたりまえか)三軸が欲しいのですよ。

で、手頃なところで買ってきたのが「浅草ギ研」三軸加速度センサー
ちょいとお高めだけれども、アンプ内蔵で 5V 電源繋いで即基準電圧 5V の出力が得られるといった便利アイテム。アナログ回路無しで PIC に直結して A/D で読めるのです。


こんな感じで実験基板の上で A/D 読み取り実験。赤い基板が加速度センサー。
PIC デバイスの A/D コンバーターを普通に使うだけ。


上手いこといったので、PIC12F683 を使ってコンパクトに纏めてみる。
緑色の基板はストロベリーリナックスから買った USB-RS232C変換モジュール。今回は USB から電源を取り、センサーの状態を TTLレベルの RS232C として PC に送り出す。
なので回路はシンプル。


PIC 部分。


配線も簡素。
なので今回は回路図も省略。

soft_serial.asm
PIC 上のプログラムソース(PIC12F683)
A/D 部分は 10bit で得られる値を 8回計測して足し込み、疑似 13bit としている。それを 3bit 左へシフトし、16bit を計測値として扱っている。それを X Y Z で 3つ。
PIC12F683 には USART などないので、タイミングを数えながら I/O ピンを自力で ON/OFF してシリアル通信を行う。スタートビット、ストップビットを含め 10回ぱたぱたしてやると 1byte のデータが送れる。
タイミングは PIC12F683 の内蔵OSC 8MHz に合わせてあるので注意。
シリアル通信は割り込みを用いておこなうのがスマートなんだろうけど、タイミング的に問題もないので「計測→転送→計測→転送→…」とモノシリックなフローでごまかしている。
転送プロトコルは “XhhYhhZhh”(hhは16ビットバイナリ) といった感じ。PCから見ると定期的に 9byte が送られてくるので XYZ といった文字をヘッダーとして適当に扱う。

センサーの変化値が 5V 供給時 2.5V を 0G として 700mV/G で変動するらしい。だから 16bit で 8000h あたりで 0G、5400h あたりで 1G とかになる。実計測から 1G の絶対値を取るしかないのだけれども、 単純に傾き角度だけが知りたい場合は 3値のベクトルがあれば良くスカラー値はあまり関係ないので困らない。
—–

Leave a Reply