3軸加速度センサー(KXM52-1050モジュール)をForCy-USBに接続してLEDアレーにX,Y軸の傾きを表示
PICに飽きてAVRでプログラムの思考中に出会ったForCyで作った物です。
秋月の3軸加速度センサーのX,Y軸のアナログ出力をAVRのA/Dで取り込んで表示してます。水平状態なので真ん中辺りにLEDドットがいます。
基板全体を+−30°左右前後に傾けると持ち上げた方向にドットが移動します。基板のI/OコネクタはLEDアレーの表示に使われているのでセンサーからは直接配線して有ります。
 画像1

ForCy-USB基板を外した画像です。I/Oの接続中継コネクタはユニバーサル基板をカットしてブレットボード用にピン幅を広げて有ります。これが一番のアイデアかも知れません。
センサーの電源はUSBからもらっているので電源は必要ありません。

画像2

コネクタのアップ映像です。下側は見えませんが片面基板なので1列のピンを無理やりハンダ付けして有ります。

画像3

ForCYのプログラムです。興味の有る方はForCyで検索して見て下さい。記述は簡素なのですが奥はかなり深いです。まだ入り口に立った所です。
#
/*
    A/D 変換の使いかた(3軸加速度センサー)
    I/O PORT C4,C5に3軸加速度センサー(KXM52-1050)をつなぐ。X,Y軸LEDアレー表示
    2007/10/29 adc-KXM52-8.txt
            05 一応完成 改良点は有り
            06 感度上昇と応答を早く OK

//  ポート定義 -----------------------------------------
    0x23 ;PINB      //ポートB入力
    0x24 ;DDRB      //ポートB方向
    0x25 ;PORTB     //ポートBデータ
    0x26 ;PINC      //ポートC入力
    0x27 ;DDRC      //ポートC方向
    0x28 ;PORTC     //ポートCデータ
    0x29 ;PIND      //ポートD入力
    0x2A ;DDRD      //ポートD方向
    0x2B ;PORTD     //ポートDデータ

    0x7e ;DIDR0     //使用するADCビットを1 アナログデジタル切替
    0x7c ;ADMUX     //下位3bitでADCを選択 チャンネル選択
    0x7a ;ADCSRA    //クロック選択とADC起動
    0x79 ;ADCH      //変換データ上位
    0x78 ;ADCL      //変換データ下位
//------------------------------------------------------
*/
    clk + { clk == break } do . //待ち
:wait
    0 { ++ } for ..     //ディレー
:dely
    0xff 0x24 =sfr      // ポートB を出力
    0x0f 0x27 =sfr      // ポートC 下位4bit を出力
    0xfa 0x2a =sfr      // ポートD 上位4bit を出力
:init
    0xcf 0x27 =sfr      // ポートC4,5入力 その他出力に設定
    0xcf 0x28 =sfr      // C4,C5以外をプルアップ
    0x30 0x7e =sfr      // ADC4,5 を使用
:ADC_Init
    0x44 0x7c =sfr      // ADC4 を選択
    0x87 0x7a =sfr      // ADC を起動
:ADC_4
    0x45 0x7c =sfr      // ADC5 を選択
    0x87 0x7a =sfr      // ADC を起動
:ADC_5
    0xc7 0x7a =sfr      // ADC 変換開始
:ADC_Start
    0x78 sfr 0x79 sfr 8 << |    // 変換結果を得る
:ADC_Read
    0 0x7a =sfr
    0 0x7e =sfr
:ADC_End
    ;x ;y
    ADC_Init                            //A/D初期化
    ADC_4                               //4cH A/D変換読込み X軸
    ADC_Start                           //A/D変換スタート
    100 dely                            //A/D値安定時間
//  ADC_Read 43 * 10 / 1050 - 270 / =x  //LEDバーの表示位置計算
    ADC_Read 43 * 10 / 1800 - 100 / =x  //LEDバーの表示位置計算
    "X=" %s x %d                        //Xデータシリアル送信 Y軸
    ADC_5                               //5cH A/D変換読込み
    ADC_Start
    100 dely
//  ADC_Read 43 * 10 / 1050 - 270 / =y  //LEDバーの表示位置計算
    ADC_Read 43 * 10 / 1800 - 100 / =y  //LEDバーの表示位置計算
    " Y=" %s y %d "\r\n" %s             //Yデータシリアル送信
:ADC_read
    1 y << 0x25 =sfr    //表示出力
    7 x - =x
    1 x << ~
    dup 0x28 =sfr       // ポートC 下位4bit を出力
    0x2b =sfr           // ポートD 上位4bit を出力
:LED
    init                //I/O初期化
    ADC_Init            //A/D初期化
    {
        ADC_read        //A/D読込み表示
        LED             //LED表示
//      200 wait        //200ms待ち
        100 wait        //100ms待ち
        ADC_Init        //A/D初期化
        1 wait          //待ち
        @c? break       //コンソールよりブレークチェック
    } do
    ADC_End
:main
\

プログラムはここまでです。
XY軸のデータは4800bpsでハイパーターミナルに100ms毎に送信しています。
3次元の地震計などが出来るかも知れません。