レビューメディア「ジグソー」

Galileoで地震計を作る【完成】

intel Galileoは、パソコンとは違います。
なにかしらの装置に組み込み、それらを制御するための、コンピューターボードです。

 

Arduinoという規格に対応しており、取り扱いに高度な専門知識は不要です。
入門書等で基礎知識さえ学べば、誰でも電子工作デビューできます。

 

実際に、Galileoを使って地震計を開発しました。


■地震計のデモ動画(無線無し版)



■地震計のデモ動画(無線あり版)




開封~センサを動かすまでのハイライトもどうぞ。

 

 

 



地震計開発

  機能検討
 

  製作

    加速度センサを動かす

    ADXL345 Q&A

    7セグに数字を表示

    震度の算出(4/1追加)

    ログを取る

    時間を取得する

    時刻を合わせる

    巨大7セグの製作
            機能の統合
    小改良(4月17日追加)

 

  製作 - 2地点同時観測  (4月4日ごろ追加)

    材料の追加

    XBeeシールドの組み立て
    送信受信テスト
    センサユニットの製作
    完成

 

Galileoを解剖(基本的な使い方など)

Galileo豆知識

道具を揃える

参考資料・サイト

 

私の電子工作の共通コンセプトは、買ったら高い物、一般人には売ってくれないもの、市販品ではクオリティが微妙なものを、安く作る。
凝りすぎて、買ったほうが安かった、なんてことも普通ですが(滝汗)

 

 

さて、今回地震計を作ろうと思ったのは、

 地震計は買うと最低でも数十万円~と高価なこと、
 自宅周辺の交通振動がひどいこと、

 軟弱地盤で地震の揺れが大きい(ような気がする)こと

といった理由からです。

地震計に欲しい機能をまとめました。

・揺れ測定
・震度の表示
液晶モニタなどに表示するのは、技術的に難しいので、7セグというLED表示機を使います。

・ログに記録

・時刻の取得
・時刻の同期

秒単位まで、時刻を正確にあわせます。

 

簡単に無線通信できる装置がありますので、2地点同時観測にもチャレンジします。

追加機能

・サブユニット(子機)

・無線通信

・親機へ観測データの送信

・受信した観測データの記録

 

■加速度センサを動かす
まずは加速度センサがないことには、何も始まりません。
ハードでは、GROVEシステムという、Arduino用のキットを利用します。
GROVEシステムは、センサを本体から分離して設置するのに都合がいいうえ、設計がしっかりしていて、価格も手ごろです。

センサを動かす方法はWireライブラリ(I2C通信するためのライブラリ)を使って、

レジスタに設定を書き込む → 動作開始命令を書き込む → 結果出力のレジスタを繰り返し読む

の3ステップ。

 

GROVEの製品ページからライブラリをダウンロード・解凍し、ADXL345.cppと、ADXL345.hを、C:\Arduino1.5.3\libraries\ADXL345 (Cドライブ直下にGalileo IDEを解凍した場合)
へコピーする。
ADXL345_demo_codeフォルダ内の、ADXL345_demo_code.ino を、Galileo IDEで開く。

マイコンボードへ書き込むボタンをクリック。
Galileo IDEのシリアルモニタボタンをクリック

画像のように、センサーからの生データと、Gに変換したデータがどんどん表示されます。
サンプルプログラムの小改造だけで、本番のプログラムに使えそうです。

 


Qサンプルは、どのようなモードで動いていますか
A加速度レンジ2G、10bit resolution、リフレッシュレート100Hzで動いているようです。
動作モードの変更は、ADXL345.cppの各パラメータを変更することで可能です。

(C++で記述されてますので、そちらの知識が必要です。)

 

Qセンサから取り出した結果は、どのような単位ですか
A+-2g 10bit resolutionというモードのTypが256LSB/g、つまり1gのとき、256という値がセンサから得られます。

感度いっぱいに振れると512ですね。

他のモードの場合は、データシート(仕様 → SENSITIVITY → Sensitivity at X OUT , Y OUT , Z OUT)をご覧ください。

 

Qセンサの値をgに直すにはどうするのですか

A上のQの値(+-2g 10bit resolutionなら256)の逆数を、センサからの値に掛けてください。

 

Q65000とか、64000とか、時々とんでもない値が返ってきますが
Aマイナス方向にGがかかったときの値です。

本家Arduinoでは発生しません。

10bit resolutionモードの場合、65535からセンサから得られた値を引けば、正常な値に戻ります。(ただし符号は消えます)


Q静止しているのに、出力が0にならないのですが
AADXL345は、静止状態でも重力を検出します。

 

 


まず、7セグを制御するプログラムを制作します。
7セグは市販のものを使用しました。

 

7セグとGalileoのピンを1対1で繋いでもいいですが、それでは貴重なポートを浪費してしまいます。
74HC595というICを利用して、Galileoから3本のピンで制御できるようにします。

使用した7セグ

回路図


電源は、

 ・Galileoから3.3Vをもってくる

   GalileoのIOREFジャンパを、3.3Vにしてください

 ・Galileoから5Vをもってくる

   7セグに繋がる電流制限抵抗を1~2KΩくらいに変更してください

 ・外部電源にする

   電池やACアダプタを使用し、Galileoとは別に、電源を確保する方法。

   GNDをGalileoと接続してください

の3つが簡単です。

 

早速プログラミング・・・と行きたいところですが、Galileo IDEにはshiftOutという、74HC595を使う上で重要な関数が実装されてません。
幸い、shiftOutは簡単に作れるということで、改良したソースは以下の通り。

 

     #define SCKK 13
     #define RCKK 10
    #define SII 11
    //ピン名称は、ライブラリ内の変数と衝突するため、末尾の文字を追加してあります。

 

    void setup() {
        pinMode(SCKK, OUTPUT);  //クロック
        pinMode(RCKK, OUTPUT);  //ラッチ
        pinMode(SII, OUTPUT);     //データ

        int i;

 

        digitalWrite(RCKK, LOW) ;
        //---------------------shiftOut代替部分--------------------------------------------
        //0=63 , 1=6 , 2=91 , 3=79 , 4=102 , 5=109 , 6=125 ,

        //7=7 , 8=127 , 9=111 ,ドット=128をプラスする
        byte val = 109+128;
        for (i = 0; i < 8; i++) {
            digitalWrite(SII, !!(val & (1 << (7 - i))));
            digitalWrite(SCKK, HIGH);
            digitalWrite(SCKK, LOW);
          }
        //---------------------shiftOut代替部分 終--------------------------------------------

 

    digitalWrite(RCKK, HIGH) ; //ラッチピンをHIGHにすると点灯する
    }

    void loop() {
    }

 

Galileoに転送し、変数valに設定した値(サンプルソースでは5とドット)が表示されれば成功です。(エラーが出る場合、全角スペースが入ってないかチェックしてください。)

これでGalileoで7セグを動かす方法が分かりました。

 

■7セグ表示法の補足■

・7セグの各セグメントと、

・表示したい数字と、

・送信する2進数データと、

・プログラム内で扱う時の10進数(HEX)表現

の対応表を、まずご覧ください。

3と表示したい場合、A,B,C,D,Gのセグメントを光らせます。

対応表から、74HC595に送信するデータは0b01001111(頭の0bは、2進数であるとう意味)ですが、

プログラム内では10進数で表現した、79をvalに代入します。

 

ドットも一緒に点灯したい場合、79+128=207をvalに代入します。

ドットだけなら、128です。

何も表示させたくない場合は、0をvalに代入します。

 

 

センサからの値は震度ではなく、g(ジー)という単位です。
表示板に表示できるよう、震度に変換します。

 

■負方向Gの処理

GalileoでGROVE標準のライブラリを扱うと、負方向Gがうまく変換されず、とんでもない値になって帰ってきます。

これを補正するには、Q&Aの通り、65535から異常値を引くだけです。

(XYZ軸、それぞれ別々に計算してください)

 

■加速度へ変換

これもQ&Aで少し触れましたが、

まず、1を1gのときのセンサからの値で割ります。

今回は8g 10bit resolutionで動作させているとき、64LSB/gという値が出力されますから、

 

    1 ÷ 64 = 0.0015625

 

となります。

これを、センサからの値に掛けると加速度gが得られます。

センサから2という値が得られた場合、

 

    2 × 0.0015625 = 0.03125

 

となります。

これで、加速度gに変換できました。

 

■合成加速度の計算

XYZ 3方向の加速度を合成する必要があります。

小野測器さんの資料より、計算式は、

となるそうです。

プログラムでルートやべき乗(二乗)の計算どうやるのか・・・!?

幸い、それらを計算するための関数が用意されています。

 

    べき乗の計算・・・・pow(x,2.0);

            ルートの計算・・・・sqrt(g);

 

スケッチにまとめると、

 

    x = pow(x, 2.0);         //二乗の計算
    y = pow(y, 2.0);
    z = pow(z, 2.0);

    float G;
    G = x + y + z;
    G = sqrt(G);     //ルートの計算

 

となります。

 

 

■重力加速度を除去

震度の判定に影響を与える、重力を結果から取り除く必要があります。

今回は上記で計算した値から、単純に0.98を引きました。

 

     G -= 0.98;

 

■galに変換する

震度の算出にはgではなく、galが使われているそうなので、早速変換します。

Gに重力加速度980.665を掛けるだけです。

 

               G = G * 980.665;

 

■震度に置き換える

気象庁の計測震度の算出方法ページ表1をそのままプログラム化します。

震度5,6時の強弱の判定ですが、下側1/3が弱、上側2/3を強と適当に分けました。

(対数なので1/2ではなく、1/3ごとに分けました。数学的に正しいかは分かりません^^;)

 

    int SI=0; //Seismic intensity = 震度
    int strong=0; //震度強フラグ


    if(G <= (float)0.8)SI=0;
    else if((float)0.8 <= G and G <= (float)2.5)SI=1;
    else if((float)2.5 <= G and G <= (float)8.0)SI=2;
    else if((float)8.0 <= G and G <= (float)25)SI=3;
    else if((float)25 <= G and G <= (float)80)SI=4;
    else if((float)80 <= G and G <= (float)103)SI=5;
    else if((float)103 <= G and G <= (float)250){
       SI=5;
       strong=1;
    }
    else if((float)250 <= G and G <= (float)300)SI=6;
    else if((float)300 <= G and G <= (float)400){
       SI=6;
       strong=1;
    }
    else if((float)400 <= G)SI=7;

 

 

 

Galileoでログを残す方法は沢山あります。

あまり凝ったことをやると、トラブルのときに大変なので、単純にSDカードに書き出します。

 

GalileoでSDカードを利用するには、スケッチにSDIOライブラリをインポートして直接読み書きする以外に、Linuxの力を借りることが出来ます。

今回はLinuxの力を借りました。

 

 

■Linuxの準備■

GalileオンボードのLinuxでは何かと手間がかかるので、

SDカードにLinuxをインストールして、それを利用します。

 

インストールはとても簡単で、

 1.こちらから、LINUX IMAGE FOR SD for Intel Galileoをダウンロード。

 2.ダウンロードしたイメージを解凍

 3.空のSDカードにコピペ

たったこれだけ♪

 

 

■保存先の準備■

Logを保存するためのディレクトリを用意します。

(ディレクトリ:Windows版のフォルダのこと)

 1.パソコンと、GalileoのUARTを、スイッチサイエンスのコンソールアダプタで接続。

 2.Galileoの電源を入れ、起動するのを待つ(1分程度)

 3.rootとタイプし、Enter

 4.次の順番でコマンドを打つ(コマンドを入力したら、そのつどEnterしてください)

 

         cd /

         mkdir GLog

 

ファイルは自動的に作成されるので、ディレクトリの作成だけで十分です。

 

 

■スケッチにする■

ファイルに文字列を書き出すコマンドは次の通り。

 

  echo "書き出したい文字列" >> /GLog/testLog.txt

 

WinSCP(FTPクライアントのようなソフト)でtestLog.txtファイルをパソコンにコピーし、メモ帳で開くと、

書き出したい文字列 の部分に書き込んだ文字列が表示されるはずです。

では、このコマンドをスケッチ化します。

 

        system("echo \"書き出したい文字列\" >> /GLog/testLog.txt");

 

これでエラーは出ませんが、永遠に ”書き出したい文字列” しか出力することしかできません。

したがって、変数の値を出力できるように改良します。

 

   void setup(){

    int i=0;

    while(i <= 5){
      char msg[128] = "echo testData";
      char buff[5];
      sprintf(buff,"%d",i);
      strncat(msg,buff,50);
      strncat(msg," >> /GLog/testLog.txt",50);
      Serial.println(msg);

      system(msg);

      i++;

    }

         }

        void loop(){

        }

 

急にソースのボリュームが増えました。

C/C++言語では、文字の連結や変数型の変換が簡単にできないので、こうなります。

PHPで記述すると、Whileの中身を、

   $msg = "echo " . "書き込みたい文字列" . " >> /GLog/testLog.txt" ;

と、たった1行にまとめられるのですが。

 

testDataという文字列の後ろに、カウンタiの値を連結した文字列を、ファイルに出力しています。

testLog.txtをパソコンで開くと、

 

    testData0

    testData1

    testData2

    testData3

    testData4

 

となっている。はず。

ここまでできれば、ひとまずOK。

 

 

 

ログには時刻も欠かせませんので、取得と書き出しの方法をマスターしましょう。

といっても、Linuxのお世話になれば超簡単。

 

    system("date >> /GLog/testLog.txt");

 

これだと、文字列末尾で改行され記録上具合が悪いので、trコマンドで末尾の改行コードを削除します。

 

    system("date | tr -d \"\n\" >> /GLog/testLog.txt");

 

※この方法で取得できるのは、世界標準時です。

OSにローカルタイムを設定する方法が今のところ不明なので。

 

 

 
せっかく時刻取得はできても、時間が狂っていては意味がありません。
OSと、Lanポートと、時刻あわせといえば・・・タイムサーバーと同期!

 

intel標準のパッケージには、時刻あわせのソフトntpdateが含まれていません。

有志の方がビルドしたものを公開してくださっておりますので、そちらを利用させていただきます。

 

ところてんの活動記録 さん

 

 

■netdateインストールまで■

/lib/libpthread.so.0 というファイルをバックアップしておく。
同ファイルを削除。
(名前変更ではだめです。)

Galileoにシリアルコンソール(又はSSH)からログインします。

下記のコマンドを順に実行。

 

    wget http://storage.tokor.org/pub/galileo/packages/opkg.conf -O /etc/opkg/opkg.conf

    opkg update

            opkg upgrade

            opkg install ntpdate

 

/lib/libpthread.so.0  を元に戻す。

 

■時刻を合わせる■

プログラム内で、次のように記述するだけ!

 

    system("ntpdate URL");

 

なお、URLには、好みのタイムサーバーのURLに書き換えてください。

タイムサーバーで検索すると沢山出てきます。

 

スケッチが動かない、強制終了する等する場合があります。

簡単な対処法は、RTC用の電池を接続し、ntpdateの動くLinuxイメージから同期、改めて本番用Linuxイメージに戻します。

(この場合、本番運用中に再同期ができなくなりますが><)

 

■簡単な仕様の決定■

必要な機能は、数字の表示のほか、震度5、6の強弱表示

文字の大きさは、1セグメントあたり、LED4個分のサイズ。

(とは言いましたが、かなり適当に決めました。)

 

74HC595では、直列のLED4個は駆動できませんので、トランジスタを間に挟み、スイッチングします。

 

ここでひとつ、大問題が発生します。

LEDは内部抵抗にばらつきがあります。(LEDだけに限った話ではないですが。)

なにも対策せず並列に接続すると、

  抵抗の最も小さいLEDに電流が集中→破壊

  次に流れやすいLEDに集中→破壊・・・

と連鎖します。

(すぐに壊れなくても確実に寿命は縮まります。電流制限抵抗はこの問題に対しては無意味です。)

 

そこで、全てのセグメントの電流を一挙に制限できる、カレントミラー回路を組みます。

 

接続ケーブルは、古いLANケーブルを使います。

ツイストペアになっていて、ノイズ対策にもなるだろう・・・という目論見です。

 

74HC595では、強弱表示の片割れ分のポートが不足します。

LANケーブルで1本線が余るので、それをGalileoに直結することで、解決します。

 

■材料■
LED(LP-LE3BR)・・・44個。Vf1.8-2.0v。エルパラで購入。

LED拡散キャップ・・・44個。秋月電子で購入


ユニバーサル基板・・・9.5x7.4cm 4枚。大判のもの1枚のほうが工作は楽です。


2SC1815・・・トランジスタ。23個。カレントミラー用12個は、hfeが揃うよう選別すると良い。

抵抗・・・47Ω12本、5.1kΩ22本。120Ω1本、750Ω1本。一番安いカーボン抵抗でOK。

LM317・・・メーカー不問。可変電圧3端子レギュレータ。定格1.5A。

XC6202P502TB・・・5V 3端子レギュレータ。

          別のレギュレータを使う場合、セラミックコンデンサを

          その製品指定のものに変更してください。

          交換を怠った場合、最悪火を噴きます。

          たとえば、NJM7805に交換する場合、データシートより

          ESR0.03Ω以上のコンデンサを使用する必要があります。

                             秋月電子で販売している村田製作所 RDEF11H104Z0P1C01B

          というコンデンサは、0.07Ω程度あるので、スペック上は使えます。

          が、ちょっとギリギリすぎて怖いです。

 

 

0.1pF積層セラミックコンデンサ・・・3個。普通のセラミックコンデンサでも可。

電解コンデンサ10uF・・・2個。(uFのuは、マイクロの代替表現です)
工作用紙2枚・・・フレームや、文字盤に。
アクリルパネル・・・濃いめのブラックスモークを使うと、仕上がりが美しくなります。
16ピンICソケット・・・ICを基板に直付けは、後で後悔します。

 

76HC595・・・メーカー不問。間違って表面実装タイプを買わないように。


耐熱電線・・・より線でも、単線でも、お好きなほうを。

       ホームセンターで売っている安い電線は、ハンダ付けの熱に耐えられません。


スズメッキ線・・・基板上の配線をする針金。細めのものが加工が楽。
廃LANケーブル・・・7セグと本体の接続に。
接着剤・・・木工ボンドは水分で紙が反ります。スティックのりが意外といい。


ハンダ・・・電子工作用のものを。

 

CRD 15mA・・・1本。定電流ダイオードのこと。

ACアダプタ・・・12v。主電源に。容量は2Aあれば十分だと思います。

CRその他コピー用紙等

 

■回路■

 

 

■製作工程■
文字盤の製作
文字盤のデザインは、市販の7セグのデータシートを、お絵かきソフトでトレース。

文字盤を印刷し、アクリル板のサイズに切った工作用紙に貼り付けます。
文字を切り抜きます。

表面をポスターカラーで黒く塗り、裏からコピー用紙を貼ります

コピー用紙より、ゴミ袋のほうが光量が落ちなくていい感じに。

強弱部は黒い部分だけ貼り付けました。(文字の部分はそのまま。)

 

基板側ベースボードの加工
基板側の工作用紙も、文字盤同様穴あけします。
穴の大きさは、LEDが通り抜けるサイズで十分です。

型紙の文字だけ切り抜き、シャーペン等で文字の形を、ボール紙に転写します。

 

 

LED取り付け
ユニバーサル基板をベースボードの裏に貼り付け、LEDをハンダ付けし、余分なリード線を切る。
(基板の位置をシャーペン等でマーキングしておくと、基板が外れたときに楽です)

LEDから切り取ったリード線を用い、LEDを4個ずつ直列に接続します。

途中、あまりに基板が剥がれてくるので、ネジ止め。

 

制御基板の製作
制御基板には、電源、74HC595、カレントミラー回路、スイッチング回路を実装します。

まず、スペースを食うトランジスタとICソケットを並べて、別のパーツを乗せるスペースと、後の配線のしやすさやを考慮して、配置を検討します。

 

配置が決まったら、背の低い部品や、後からでは取り付けずらくなる部品からハンダ付けします。
※画像の基板は、レイアウトに失敗してます。公開の図面と若干設計が異なりますが、図面のほうが正しいです。

 

 

補強等
ベースボード側に、セグメントの区切り兼、補強兼、スペーサーを取り付けます。
10mmx20mmに折り曲げた工作用紙を貼り付けるだけなので、作業自体は簡単です。

 

 

配線をする
部品の取り付けが終わったら、裏の配線をします。
いかにメッキ線だけで配線するかが腕の見せ所ですが、だんだん面倒になって、
ジャンパ線だらけに。。。(写真は作業途中のもの)

 

点灯テスト
1回目・・・・点かない\(^o^)/

単純な設計ミスを発見、夜なべして修正。

修正すると汚くなりますね・・・。

 

テスト2回目、動いた!

 

 

仕上げ
まず、アクリル板と文字盤を張り合わせます。
7セグに電源をいれ、位置の微調整をしたら、セロテープで仮止め。
補強のときと同じ要領で固定し、今一度テスト。

 

ちょっと暗いですが、ひとまずこれで十分でしょう!

文字盤のコピー用紙を、白いビニール袋にしたところ、明るくなりました。

レビュー冒頭の動画でごらんいただけます。

 

 

必要な機能は全て揃ったので、いよいよ統合して完成系に仕上げます。

処理の流れをフローチャートにしました。

このままでは、7セグの表示がコロコロ変化し、処理も無駄が出ます。

そこで、7セグ表示判定部分を、以下のように改良します。

 

 ・一定震度以上で点灯

 ・最大震度の表示を、一定時間保持する

 ・ゆれが収まって一定時間経過したら、表示を消す

 

こちらもフローチャートを作りました。

点線で囲まれた箇所は、関数としてひとつにまとめた部分です。

赤と緑の線は、プログラムとして無駄な処理になっている部分です。

実用上問題がなかったので、そのままにしています。

 

 

■動作確認LED追加
Galileoは動いているけど、スケッチが停止という状況がちょくちょく発生しましたが、
スケッチの動作確認はセンサをコツコツたたいて、震度表示板に表示が出るか試すしかありませんでした。
そこで、LEDを追加しました。

接続は、
  デジタル12ピンに、LEDアノード、
  LEDカソードに、電流制限抵抗1kΩを挟み、デジタル14ピン(GND)
という、いわゆるLチカと同じ配線。

スケッチは、点灯しっぱなしでは、暴走・永久ループ等のトラブルと切り分けできないので、
一定間隔で点滅するようにしました。
点滅が停止している=スケッチ停止 ということですね。

    #define PW_LED 12 //動作確認LED
    int LED_i = 0;

           // ~途中省略~

 

    void setup() {

        // ~途中省略~

         if(LED_i <= 8){
            digitalWrite(PW_LED, LOW);
            LED_i++ ;
        }
        else{
            digitalWrite(PW_LED, HIGH);
            LED_i = 0;
        }

    }


■冷却の強化
シールドを装着した状態で、スケッチが異常終了する現象が頻発。
CPU温度を調査したところ、75度を超えていました。
うちわで扇ぐだけでもスーっと温度は下がりましたが、夏を見据えきちんと対策することにしました。

まずは、小型のヒートシンクを放熱用両面テープで貼り付け。


この状態で65度まで冷えましたが、まだちょっと怖いので、ファンも追加しました。
まずは家具の補強なんかで使う金具を、ファンに取り付けます。

地震計のケースへ直接貼り付けると、ファンの振動で加速度センサが正しく動かないので、
水入りのペットボトルに協力両面テープ貼り付けました。
あとは電源(12V)を接続すれば出来上がり♪

これでだいたい42度まで冷え、スケッチの異常停止の頻度はかなり減りました。


・Arduino Uno R3

子機用マイコンボードに。

・Seeed Studio XBee シールド 2台

ArduionにXBeeを搭載するためのシールド。

・XBee(ZB) 2台

簡単に無線通信できるモジュール

・XBee USBインターフェースボードキット AE-XBEE-USB

パソコンからXBeeの設定を行うためのアダプタ。

シリアルコンソールを使えば、パソコンでデータ受信や子機の操作も行えます。

コネクタ類のハンダ付けが必要です。

・ADXL345センサボード

下のセンサモジュールを、Arduinoで使えるように基板化したもの。
回路図などは後ほど紹介します。

・5V スイッチングアダプタ

子機の電源に。

 

ArduinoにXBeeを接続するのに、必ずしもXBeeシールドは必要ありません。

しかしそこで障害になるのは、I/O電圧の違い。

 

ArduinoのI/O電圧は5v、XBeeは3.3vなので、双方を直結するとXBeeが破壊されます。

そこで登場するのが、XBeeシールド。

I/O電圧の違いを吸収する回路を搭載しており、XBeeをぽん付けできるようになります。

 

さて、Seeed StduioのXBeeシールドは、端子類がハンダ付けされてませんから、自力で組み立てなければいけません。

このとき大事なコツが2点あります。

 

・組み立てる順番を考える

電子工作初心者がよく犯す間違いのひとつですが、

多くの人が、背の高い部品、ごっついから取り付け始めてしまいます。

そうすると、指が入らない、ハンダゴテが入らない等で、小さい部品を取り付けできなくなります。

 

取り付け順の基本は、背の低いものや、別の部品の影になって作業しずらくなる部品から作業する!

今回のXBeeシールドの場合は、画像の順番で取り付けると綺麗に仕上がります。

(1番XBeeコネクタ、2番シリアルポート選択ジャンパ、3番Arduinoコネクタ)

なお、ICSPコネクタはほぼ使用しないくせに、着脱が非常に硬くシールドを損傷する可能性があるため、取り付けはオススメしません。

 

・ピンヘッダの角度をよく調整する

これも初心者がよくやるミスです。

ピンヘッダを取り付ける際、完全に垂直になっていないというもの。

赤い線のように、わずかに傾いて付けてしまったとします。これをArduinoに取り付けようとしたら・・・

入りません。
ピンヘッダの傾きは、2ピン3ピンなら、なんとか修正できます。

しかし、ベタパターンに繋がっていたり、ピンが多いと、もはや初心者が修正するのは不可能です。
(※ベタパターンとは、非常に面積の大きい配線のこと。熱が逃げてしまいハンダが解けない。GNDでよく使う。)

 

ピンヘッダを取り付けるときのコツ

・ブレッドボードやユニバーサル基板等に差し込んで仮止めする

・1ピンだけ仮止めし、仮止め部をハンダコテで溶かしながら、垂直を調整する

・2番目と同様に、現物あわせしながら位置調整する

※Arduinoの場合、デジタルピンの位置が若干ずれているため、1番目の方法は使えません。

※現物合わせしながらの場合、深く差し込んではいけません。ハンダ付けしてないところが抜けなくなります。

 差し込んだまま全端子ハンダ付けするという方法もありますが。

 

というわけで、出来上がりました。

ハードウェアシリアルを使用する場合は、ジャンパを画像のとおり設定してください。

このままだと、スケッチの転送ができなくなるので、そのつど外してください。


 

設定といっても、通信相手を教えることと、ボーレートを早くする程度で動きます。
※コーディネータと呼ばれる親機は、もう一点設定が必要です。

あらかじめXBeeのメーカーから、XCTU6をダウンロードし、インストールしておきます。

■設定方法
XBeeをUSBインターフェースボードに装着し、PCに接続する。
XCTUを起動し、検索ボタンをクリック。


XBeeが接続されているポートを選択し、NEXTをクリック。


Add select deviceをクリック。


登録されたXBeeの、赤い枠の中をクリック。


親機のみ、update firemewareボタンをクリック。


親機のみ、左はXB24-ZBを、中央はZigBee Cordinator ATを、右は一番上のNewestを選択し、Finishをクリック。


DHにXBee裏の8桁の文字列のうち、上のものを、
DLには同下の文字列を入力、
ボーレートは通信エラーが発生しなければ、115200を選択し、鉛筆ボタンをクリック。
うまく通信できない場合は、ボーレートを遅くしてください。
設置場所に高低さがあると、著しく感度が落ちます。


以上yでXBeeの設定は終了です。
なお、XBeeの設定中は、通信相手の装置の電源は切っておかないと、設定が行えません。

まずは、Galileo(子機)→PC(親機)の送信テストを行いました。
Galileoは、Sirialポート1から、なにか適当な文字列をひたすら送り続けるスケッチを書き込んでおきます。
パソコンにXBeeを接続し、TeratermやPuttyといったターミナルソフトを、XBeeのポートに設定すると、文字列がどんどん表示されます。


では、本番同様に、Arduino(子機)→Galileo(親機)の通信テストをしましょう。
Arduinoからは、加速度センサの値をひたすら送信し続け、
Galileoはそのままパソコン側に出力するスケッチを製作しました。
(スケッチの中身は、非常に長くなるため省きました)

送信側は非常に簡単なプログラムですが、
受信側は、バッファが溢れないように、実行速度を極力落とさないように、確実に、データを受け取るような処理を書くのが至難の業です。

スキルのある方は、スケッチとしてではなく、Linuxのプログラムを製作したほうがいいでしょう。




Arduinoの加速度センサはひとつしか買ってません。
ARM版の地震計に使用した、ADXL345モジュールをGalileoへ接続できるよう、基板を製作しました。

■レベルシフタの問題
ADXL345のIO電圧は3.3V。
Galileoは5Vと3.3Vの切り替え式。
XBeeシールドは5V。

IO電圧が異なるので、その差を吸収する、レベルシフタ回路を挟まないといけません。
専用ICから、簡易なものまでいくつも方法がありますが、安い部品と小さい実装面積で実現できる、下記の方法をとりました。

■FETによるレベルシフト回路
I2Cの仕様書にも載っている方法ですが、手元にあったFETは・・・

め、めちゃくちゃ小さい:(;゙゚'ω゚'):
でも頑張ってハンダ付けしました。

このFET、2N7002という型番で、秋月で40個200円。
これから試作する場合は、DIPタイプ(従来の長い足つき)のFETが扱いやすいです。

というわけで、基板の回路図を起こしました。

3.3vと、5v、GNDはGalileoから引っ張ってきてください。
SDA・SCLコネクタをさらに増設すれば、I2C機器をさらに沢山繋ぐことができます。




それぞれの機能が動くようになったので、組み合わせれば完成です!
親機と子機を、それぞれゆれを測定したい場所に設置すれば、各地点の観測を開始できます。
実際の運用状態では、ファンで念のため冷却してます。
ではログも見てみましょう。


子機のログは、一行に複数の観測値が書き込まれてますが、これを処理していると劇的に遅くなるので良しとしました。
データの切れ目を判断しやすくするため、子機のデータにはスタートビットと、ストップビットを追加しました。
Galileoが遅いのではなく、スケッチの実行速度を抑えてあるのが原因かと思います・・・多分(;・∀・)



Galileoを買ったはいいけど、マニュアルが付いてない。
ネットの資料は(今のところ)英語のみ。
じゃあどうするの!ということで、開発開始までの手順をまとめました。

 

 

■必須のもの
・intel Galileo
・USB-microB USBケーブル
・intel Galileo Arduino SW(開発ソフトの圧縮したもの)
・パソコン
・シールドやセンサ、モーター等のパーツ

・空のmicroSDカード

容量500MB以上のもの。

 

 

■あると便利なもの

・USB-microB USBケーブル

下記のコンソールアダプタとPCを接続するために必要。

 

・USB-コンソールアダプタ for Galileo

汎用USB-シリアルコンバーター等を改造して使用してもかまいません。

 

・有線LAN環境

 

 

■手順
Intel Galileo Arduino SWをダウンロード
下記のURLからダウンロードできます
https://communities.intel.com/docs/DOC-22226
Windows用、MAC用、Linux用2種類の、計4種類用意されています。

 

 

Intel Galileo Arduino SWの解凍
Zipで圧縮されていますので、任意の場所に解凍してください。

(解凍先はCドライブ直下を推奨。)


一部解凍ソフトでは、解凍に失敗します。(Lhaplusでは失敗。7Zipでは成功しました。)
Windows用バージョン1.5.3のもので、解凍後のフォルダサイズが254MB(266,691,142バイト)となっていない場合は、解凍に失敗している可能性があります。

 

USB-コンソールアダプタ for Galileoのドライバをインストール
下記のチップメーカーページからダウンロード可能です。
http://www.ftdichip.com/Drivers/VCP.htm

 

zipファイルを解凍後、CDM v2.xx.xx WHQL Certified.exeというファイルを実行すると、インストールが始まります。

 

 

電源を入れる前の注意

2点とても大事な注意事項があります。

 

・主電源が切れているときに、USBケーブルだけ刺さっている状況を作らない

 Galileo本体が壊れる場合があります。

・イヤホンジャックにスピーカー、イヤホン類は繋がない

 シリアル通信用のジャックであって、音声信号の回路は接続されていません。

 もしイヤホン、スピーカー、マイク等すると、壊れます。

 

 

電源を入れる
シリアルコンソールアダプタ、LANケーブル、シールドを接続しておく。

(SDカードを使用する場合は、それも装着しておく。)

DCアダプタを繋ぎ、電源を入れる。

USBケーブルを接続する。

 

Galileoのドライバインストール

Windowsの、スタート → プログラムとファイルの検索 に、devmgmt.mscと入力。

表示された検索結果から、devmgmt.msc をクリック。

「不明のデバイス」を右クリック → 「ドライバのインストール」をクリック

「コンピューターを参照して・・・」をクリック

「参照」ボタンをクリックし、C:\arduino-1.5.3\hardware\arduino\x86\tools\linux-cdc-acm.infを選択、「次へ」をクリック。

あとは画面の指示に従ってください。

(赤いセキュリティ警告の画面が表示された場合、かまわずインストールを続行してください。)

 

Galileo IDEの使い方

Intel Galileo Arduino SWを解凍した時に出来たフォルダを開く。

(arduino-X.X.Xという名前になってます。Xはバージョンの数字が入ります)

arduino.exeを実行する。

 

最もよく使うのは、「検討」「マイコンボードに書き込む」「シリアルモニタ」の3つです。

下の黒い領域は、エラー等のメッセージが表示されます。

 

ツール→自動整形 は、インデントがグチャグチャになってきたとき、自動で整えてくれる便利な機能です。


編集→コメント化・復帰 は、複数行をまとめてコメント化するときに重宝します。

 

 

 



地震計開発中にぶつかったトラブルや、これは便利という事柄をまとめました。

レビュー内で紹介した内容とかぶってるものもあります。

ミニリファレンスとしてご利用ください。

 

■ShiftOut関数が無い
簡単なコードですので、Arduino IDEのライブラリを参考に自作してください。
(2014/3/26現在)

 

■GPIOは遅い
Galileo開発ボードのGPIOは、I2C-GPIO変換チップを使って実装していますが、
I2Cの処理に時間がかかり、230Hz程度しか速度が出ません。

(普通のマイコンは数MHz~数十MHzで通信可能)

 ※2番、3番ピンは高速化できるそうです。(はにゃさん情報)

 

■電源のON/OFF
スケッチ書き込み用のUSBケーブルが接続された状態で、
電源が切れた状況を作ってはいけません。
最悪、Galileoが壊れます。
面倒ではありますが、そのつど、USBケーブルをはずしてから、電源を切る、という操作を行いましょう。

 

■USBバスパワーで使えるか?
Galileoはバスパワーで動作しません。
必ず付属のDCアダプタを使用してください。

 

■RTC(リアルタイムクロック)
systemコマンドでLinuxのdateを実行するか、
Galileo IDEにて、C++のtime関数を使用してください。

 

■UARTポートの文字化け
Windowsデフォルトの設定は9600bpiですが、これだと文字化けします。
デバイスマネージャにて、115200bpiに変更してください。
それでもダメな場合、ビット反転している可能性がありますので、何らかの変換回路を挟む必要があります。

 

■イヤホンジャック
Galileoに実装されているイヤホンジャックには、シリアルポートであり、サウンド出力は繋がっていません。

イヤホン、スピーカー、マイク等を繋ぐと壊れます。

 

■Rebootボタンは正常に機能しない
今のところ正常に再起動しません。
(2014/3/26現在)

 

■CPUの発熱
室温17度で、CPUは65度前後になります。
場合によっては、ファンや、ヒートシンクの取り付けの検討を。

 

■SSHでの接続プロトコル
SFTPには未対応です。
SCPで接続してください。

 

■スケッチが消える!?

オンボードのLinuxでは、電源を入れなおすと消えます。
SDカードから起動したLinuxは電源を入れなおしても、残ります。

 

■ディストリビューションはPoky Linux
PokyLinuxとは、Yocto Projectという組み込み用Linuxのリリースしたもの。
組み込み用ですので、イメージは非常にコンパクト。

 

■ネットワークの設定
ネットワーク設定がどこで変更できるかわかりません。
IPが毎日コロコロ変わるので、DHCPをOFFにして固定IPを割り振りたいところですが、、、、。

 

■ローカルタイム設定
ローカルタイム設定の変更も、どこでできるかわからない(´・ω・')

 

■Galileo IDEでの謎のコンパイルエラー!?
コピペしたソース等で、見かけ上問題ないソースでコンパイルエラーが出ることがあります。
たいてい、大文字スペースが入っていることが原因です。

 

■コメント化・復帰機能の挙動

編集→コメント化・復帰では、選択した範囲のコードを、まとめてコメントにしたり、解除したりできます。

//より前にスペースが入っていると、その行はコメントとして認識しない。

しかし、ツール→自動整形(オートインデント)は、コメント行も自動的にインデントする。

どちらもわりと頻繁に使う機能なので、何とかして欲しいところ。

 

■ハードウェアシリアルは3ポート使用可能

Arduino UNO系のハードウェアシリアルは1系統。

Arduino Mega系は4系統。

ではGalileoはというと、3系統分のコードが検証を通過。

Serial無印がスケッチ書き込みポート、Serial1か2がUART、残りがピンフレーム側?

 

 

■その他使用したもの

レビュー内では紹介仕切れなかった物品です。

 

赤外線温度計・・・CPUの温度監視に

ジャンパワイヤ各種・・・安全な配線のために

ワニ口クリップ・・・電源装置の仮供給に。

 

カーボン抵抗各種・・・47、330、510、780、1k、2.1k、5.4k、10kあたりを使用しました。

          (本番回路には含まれてないものもありま。)

          100本入り100円~150円。ばら売りは1本5円とか10円とか。

          今回の工作に、金属皮膜抵抗等の高級品は不要です。

           (1本15円とか、20円とか、200円とかと、やや高価)

 

 

 

 

 

 

 



■必要な道具■
ハンダゴテ・・・20~30wのものを。大は小を兼ねません。

       安物はコテ先温度がとんでもない温度になるものがあります。

       最低でも、セラミックヒーターの、定価3000円位のものは使っていただきたい。

       私の愛用のものはこれ。


ラジオペンチ・・・安物はかみ合わせがいい加減なので、よく見て買ってください。
ニッパー・・・こちらも、安物はかみ合わせがいい加減なので、よく見て買ってください。
ピンセット・・・精密ピンセットと、普通のピンセット2本あると便利。100均ので可。


ハンダ吸い取り線・・・余計なハンダを吸い取る道具。消耗品。
テスター・・・必須だけど、よっぽど高級品でないと精度極悪なので、表示は参考程度に。

 

■あったら便利な工具道具■
ワイヤストリッパー・・・電線の芯を傷つけず、皮をむける。
ハンダ吸い取り器・・・吸い取り線より便利。

ルーペ・・・・・・・・・・・・・細かい箇所のハンダ付けの状態を確認したりします。

           写真用ルーペがあると便利ですが、最近お店で見ないですね。

 

 

■Galileo関係

intel 開発環境、Linuxなどダウンロードページ
元のリンク先が閉鎖になったので、ダウンロードセンターのURLに差し替えました。

スイッチサイエンス製シリアルコンソールドライバダウンロードページ

ところてんの活動記録 

Galileo用Linuxの情報が豊富。他にも電子工作の情報が沢山。

ntpdateやloglotateは、こちらで公開のものを利用させていただきました。

 

 

■シールド、加速度センサ関係

アナログデバイゼス製品ページ

日本語データシートをダウンロードできます

SeeedStudio GROVE 3軸加速度センサ ADXL345製品ページ

ライブラリをダウンロードできます

 

 

■7セグ、74HC595とそのプログラム関係

きむ茶工房ガレージハウス

Galileoとの配線、HC595の使い方など

ブログズミ

shiftOutの自作の参考に

RankA.com DIY LED

大量のLEDを駆動する、カレントミラーの回路が参考になります。

 

 

■電子工作全般

http://www15.plala.or.jp/gundog/

電子工作コーナーの、LM317の抵抗値一覧が便利。

他にも貴重なデータ・ツールが沢山。

 

 

 

■製図ソフト

水魚堂の回路図エディタ

 

 

 

■地震関係

小野測器

合成加速度の計算式を参考にさせていただきました。

共和電業

gとgalなどの違いが解説されています。

モノシリ

振動単位の相互変換ツールが便利です。

気象庁

地震波形の処理や、震度換算表等の資料です。

Wikipedia 気象庁震度階級

 

 

■書籍

Arduinoをはじめよう 第2版(オーライリージャパン)

トランジスタ技術 2014年2月号(CQ出版)

 ※72ページ図6と、73ページ、図10は、セグメントの記号の位置が誤ってます。

  2014/3/29現在、出版社からの訂正情報は出てません。

トランジスタ技術 2014年3月号(CQ出版)

 

 

敬称略

試作機製作にあたり、参考にさせていただいた資料、ホームページの関係者様に、お礼申し上げます。

 

 

 

 

最後にお決まりの・・・

コメント (12)

  • タコシーさん

    2014/03/29

    製作に、かなり時間が掛かったと思います
    お疲れ様でした

    地震計は、時期的にマッチするアイテムですよね
    でも共和電業の名前が出てきたので、まだ会社があったんだと
    記憶を掘り起こしました....
  • いぐなっちさん

    2014/03/29

    タコシーさん

    ありがとうございます♪

    どの程度正確かという問題はありますが、なかなか役立ってくれそうです。
    静止状態での重力速度の値は、0.97galと、気象庁発表のもの(0.99gal)にかなり近い値が出てます。
    (サンプルプログラムそのままだと、0.99ドンピシャで出ます。)

    共和電業…そういえば、学生時代にひずみセンサをもらったのを思い出しましたが、それが共和電業製でした。
    押入れにまだ入ってると思います。
  • 蒼-aoi-さん

    2014/03/30

    レビューお疲れ様です!
    加速度センサって、なかなか面白い素材ですよね!
    というか、この表示板、大きくてカッコいい!しかも完成度が高い!
    地震は怖いので反応して欲しくはないですが、実際に動作している(テストではなく)ところも見てみたいという矛盾を感じております(汗

    昔、雑誌付録マイコンで、ColdFire搭載で加速度センサとLANが搭載してあって、あれで一気に地震の観測点が増えた気がします。
    もちろん私も買いましたが、参戦はしてません。
他9件のコメントを表示

ZIGSOWにログインするとコメントやこのアイテムを持っているユーザー全員に質問できます。

YouTube の動画を挿入

YouTube の URL または動画の ID を入力してください

動画の ID が取得できません。ID もしくは URL を正しく入力してください。

ニコニコ動画の動画を挿入

ニコニコ動画の URL または動画の ID を入力してください

動画の ID が取得できません。ID もしくは URL を正しく入力してください。

ZIGSOWリンク挿入

検索対象とキーワードを入力してください

    外部リンクを挿入

    リンク先の URL とタイトルを入力してください

    URL を正しく入力してください。

    画像を挿入(最大サイズ6MB)

    画像を選択してください

    ファイルサイズが6MBを超えています

    別の画像を追加

    ほかのユーザーのレビュー

    ZIGSOW にログイン

    ZIGSOW会員登録(無料)はこちらから