CC3000WiFiモジュールピッチ変換基板の写真

2014-10-20 10.10.29
スイッチサイエンスで購入したCC3000WiFiモジュールの基板。
ヘッダピンが届いたので、明日Arduinoで使ってみる予定。
ネットで見る限りは、普通にみなさん使えているようですね。
トラブルなく使えることを期待してます。

うまく動いてくれよぉ。

NDAuty v0.3.3+1を公開しました

NDAutyはナンバーディスプレイアダプタ(アロハND3/USB/PC1)用の動作確認 兼 簡易メール/Web通知プログラムです。ND4/ND5は未確認です。

アロハUSBにおいてモニタのOFF/ON機能を使っても1週間程度でACK関係の不具合が再発するとの連絡あり。
アプリケーションを再起動すれば問題なく動作することから、アプリケーションの再起動を行う機能を実装。
本来は、根本原因を探るべきなのだが、環境がなく検証が難しいため、問題解決を優先する。
ベースがv0.3.3のためログファイルへの書き出し機能がないなど機能面は不足しているが、再起動のコードのみを追加してリリースする。
[不具合修正]
  • なし
[仕様変更]
[機能追加]
  • アプリケーションの再起動を行う機能を実装
    ツール>設定>共通>次の時刻にモニター終了・開始動作を行うの下に
    「 □モニターの終了・開始ではなくアプリケーションの再起動を行う」
    という設定を追加していますので、これにチェックを入れると再起動ができるようになります。

    NDAutyがメールの処理中であっても、設定画面を開いていても関係なく、アプリケーションが再起動されます。

    細かい仕様上の注意ですが、NDAutyを初めて起動した時刻が再起動時刻で、再起動後の時刻が指定時刻を過ぎてしまった場合に、指定時刻の直後に設定されている直後の時刻に再起動されません。
    再起動されないのは1回限りですので、現象が起こった後の時刻からは正常に再起動されます。
    また、NDAutyを起動した時刻が再起動時刻でない場合は、この現象は起こりません。
[その他]
  • なし
[ソースからコンパイルされる方へ]
  • Module1.vbのAPPLICATION_DEBAG_MODEにTrueをセットすると、デバッグ用に設定画面の右下の「OKをdisableに」が利用できるようになります。 設定項目を追加した時などにご利用ください。
    (ミスタイプでDEBAGになっていますが、過去の情報との互換性のため踏襲しています)
[既知の不具合/仕様]
  • モニタ中にUSBケーブルを抜き差しすると、モニタ中表示のままですが、実際にはナンバーディスプレイのモニタは終了しています。
    USBケーブルを抜き差しする時は、いったんモニタを停止し、USBケーブルを接続後にモニタを開始してください。
  • アロハUSBはモニタ中にUSBケーブルを抜き差した後、プログラムを終了させるとエラーが出るようですが、ND3では再現しないため未対策です。
[注意事項]
v0.3.1から、差出人メールアドレスに電話番号を入れる機能を利用できます。
携帯電話会社のメールアドレスを差出人アドレスにして、送信先メールアドレスも携帯電話会社の場合は、携帯電話事業者に「なりすまし」とみなされてメールが受信できないことがあります。
その場合は、利用者の責任において「なりすまし拒否設定」を解除するなどして対応してください。
検索サイトで「なりすまし拒否」などのキーワードで検索してください。

[ダウンロード]

ソースコード(VB.NET)(実行プログラムなし)

実行プログラム(exe)


【開発環境】
VisualStudio2010 VB.NET
x86,Releaseビルド
Windows7 Ultimate(32/64bit版)でメール送信ができることを確認しています。
アロハUSBでの動作確認は利用者の方から寄せられた情報に基づき、対応と書いています。
機種依存と思われる不具合があったらお知らせください。
実機がない場合は、対応できないことがありますので、ご容赦ください。

NDAuty v0.3.5を公開しました

NDAutyはナンバーディスプレイアダプタ(アロハND3/USB/PC1)用の動作確認 兼 簡易メール/Web通知プログラムです。ND4/ND5は未確認です。

アロハUSBにおいてv0.3.3で発生していたACK関係の不具合が再発したとの連絡があり、コードレベルで調査したが、原因は不明。
ログファイルにACK送信時刻を記録するようにして、ログファイルを調査し一体何が起こっているかの原因を探ることとしたい。
また、v0.3.4では不要なコードを削除してコードをコンパクトにしていたので、本バージョンでそれらのコードを復活してv0.3.4に近づけた。
[不具合修正]
  • なし
[仕様変更]
  • アロハUSBにおいてv0.3.3で発生していたACK関係の不具合が再発したとの連絡があったので、ログファイルにACK送信時刻を記録するようにした。
    ログファイルを調査し一体何が起こっているかの原因を探りたい。
    また、v0.3.4では不要なコードを削除してコードをコンパクトにしていたので、本バージョンでそれらのコードを復活してv0.3.4に近づけている。
[機能追加]
  • なし
[その他]
  • なし
[ソースからコンパイルされる方へ]
  • Module1.vbのAPPLICATION_DEBAG_MODEにTrueをセットすると、デバッグ用に設定画面の右下の「OKをdisableに」が利用できるようになります。 設定項目を追加した時などにご利用ください。
  • v0.3.4からForm1に「テスト」ボタンを配置しました。 テストをクリックすると、専用画面が開き模擬着信が利用できます。 従来Form1の左下に配置していた「テスト着信」のボタンは無くなっています。
[既知の不具合/仕様]
  • モニタ中にUSBケーブルを抜き差しすると、モニタ中表示のままですが、実際にはナンバーディスプレイのモニタは終了しています。
    USBケーブルを抜き差しする時は、いったんモニタを停止し、USBケーブルを接続後にモニタを開始してください。
  • アロハUSBはモニタ中にUSBケーブルを抜き差した後、プログラムを終了させるとエラーが出るようですが、ND3では再現しないため未対策です。
[注意事項]
v0.3.1から、差出人メールアドレスに電話番号を入れる機能を利用できます。
携帯電話会社のメールアドレスを差出人アドレスにして、送信先メールアドレスも携帯電話会社の場合は、携帯電話事業者に「なりすまし」とみなされてメールが受信できないことがあります。
その場合は、利用者の責任において「なりすまし拒否設定」を解除するなどして対応してください。
検索サイトで「なりすまし拒否」などのキーワードで検索してください。

[ダウンロード]

ソースコード(VB.NET)(実行プログラムなし)

実行プログラム(exe)


【開発環境】
VisualStudio2010 VB.NET
x86,Releaseビルド
Windows7 Ultimate(32/64bit版)でメール送信ができることを確認しています。
アロハUSBでの動作確認は利用者の方から寄せられた情報に基づき、対応と書いています。
機種依存と思われる不具合があったらお知らせください。
実機がない場合は、対応できないことがありますので、ご容赦ください。

NDAuty v0.3.4を公開しました

NDAuty v0.3.4を公開しました。
NDAutyはナンバーディスプレイアダプタ(アロハND3/USB/PC1)用の動作確認 兼 簡易メール/Web通知プログラムです。

[不具合修正]
  • v0.3.3で追加した「次の時刻にモニター終了・開始動作を行う」を利用した時、モニターを停止して開始する際に画面上のログがクリアされるのでクリアしないようにした。
    なお、手動で停止・開始ボタンをクリックした時は画面上のログはクリアされます。
    (*)今回のv0.3.4からログファイルへの保存機能を追加しており、ファイルに保存したログは「ログクリア」ボタンをクリックしてもクリアされません。
[仕様変更]
[機能追加]
  • 開発者向け:「テスト」ボタンをクリックすると着信をシミュレーションするウィンドウを表示して動作確認ができるようにしました。
  • 設定>録音>に
    簡易録音機能を追加しました。
    ナンバーディスプレイアダプタは音声情報を直接取得できないので、
    電話回線から音声信号を取り出すのに「電話回線用通話録音アダプタ」などを使ってPCに音声を取り込む必要があります。
    もし、PCに音声入力端子がなければ「USBオーディオ変換装置」などが必要です。
    録音ファイルはwav形式のファイルになります。mp3形式で保存するには「午後のこ~だ」も必要です。

    開発環境で使ったものは以下の通りです。
    • 電話回線用通話録音アダプタ:ミヨシ MCO電話回線用通話録音アダプタ 6極2芯 tra-l62wh(Amazonで税込¥1,545)
    • USBオーディオ変換装置:iBUFFALO BSHSAU01BK(Amazonで税込¥1,218)
    (*)録音ファイルをメールで送信する機能はv0.3.4では未実装
  • 設定>着信時動作>に
    「サウンドを再生する」を追加。着信があったら指定したサウンドを再生します(*1)
  • 設定>着信時動作>に
    「画像を表示する」を追加。着信があったら指定した画像を表示します(*1)
  • 設定>共通>起動>に
    「着信着信を受信したら本アプリケーションを一番上に表示」を追加。
  • 設定>共通>全般>に
    「ログ情報をファイルに保存」を追加。
    ndauty.logというファイルにログ情報を保存することができます。
(*1)拡張子の既定値は設定していますが、実際には拡張子の制限はないのでサウンド・画像に関わらず指定ができます。
ファイルの再生はシステムに登録されているアプリケーションによって実行されます。

[その他]
  • 細かい見た目の調整、言葉の微調整をしています
[ソースからコンパイルされる方へ]
  • Module1.vbのAPPLICATION_DEBAG_MODEにTrueをセットすると、デバッグ用に設定画面の右下の「OKをdisableに」が利用できるようになります。 設定項目を追加した時などにご利用ください。
  • v0.3.4からForm1に「テスト」ボタンを配置しました。 テストをクリックすると、専用画面が開き模擬着信が利用できます。 従来Form1の左下に配置していた「テスト着信」のボタンは無くなっています。
[既知の不具合/仕様]
  • モニタ中にUSBケーブルを抜き差しすると、モニタ中表示のままですが、実際にはナンバーディスプレイのモニタは終了しています。
    USBケーブルを抜き差しする時は、いったんモニタを停止し、USBケーブルを接続後にモニタを開始してください。
  • アロハUSBはモニタ中にUSBケーブルを抜き差した後、プログラムを終了させるとエラーが出るようですが、ND3では再現しないため未対策です。
[注意事項]
v0.3.1から、差出人メールアドレスに電話番号を入れる機能を利用できます。
携帯電話会社のメールアドレスを差出人アドレスにして、送信先メールアドレスも携帯電話会社の場合は、携帯電話事業者に「なりすまし」とみなされてメールが受信できないことがあります。
その場合は、利用者の責任において「なりすまし拒否設定」を解除するなどして対応してください。
検索サイトで「なりすまし拒否」などのキーワードで検索してください。

[ダウンロード]

ソースコード(VB.NET)(実行プログラムなし)

実行プログラム(exe)


【開発環境】
VisualStudio2010 VB.NET
x86,Releaseビルド
Windows7 Ultimate(32/64bit版)でメール送信ができることを確認しています。
アロハUSBでの動作確認は利用者の方から寄せられた情報に基づき、対応と書いています。
機種依存と思われる不具合があったらお知らせください。
実機がない場合は、対応できないことがありますので、ご容赦ください。

NDAuty v0.3.3を公開しました

NDAuty v0.3.3を公開しました。
NDAutyはナンバーディスプレイアダプタ(アロハND3/USB/PC1)用の動作確認 兼 簡易メール/Web通知プログラムです。

[不具合修正]
  • NDAutyを24時間以上モニター稼働すると以下の不具合が発生する。
    • ACKが送られず、着信時にメールが2通届く
    • 着信メールの遅延配送が徐々に長くなる
    指定時刻にモニターを終了・開始する機能を追加した。
    ツール>設定>初期設定>「次の時刻にモニター終了・開始動作を行う」にチェック
    時刻は、24時間制で記述する。
    (例)8:00,20:00
    複数時刻を記述する場合は半角カンマで区切る。

    モニターの停止・開始で改善することから、現時点ではシリアルポート関係モジュールの不具合と予想していますが、断言はできません。
[仕様変更]
[機能追加]
[その他]
[ソースからコンパイルされる方へ]
  • Module1.vbのAPPLICATION_DEBAG_MODEにTrueをセットすると、デバッグ用に模擬着信ができます。Form1の左下に「テスト着信」のボタンが表示されます。
[既知の不具合/仕様]
  • モニタ中にUSBケーブルを抜き差しすると、モニタ中表示のままですが、実際にはナンバーディスプレイのモニタは終了しています。
    USBケーブルを抜き差しする時は、いったんモニタを停止し、USBケーブルを接続後にモニタを開始してください。
  • アロハUSBはモニタ中にUSBケーブルを抜き差した後、プログラムを終了させるとエラーが出るようですが、ND3では再現しないため未対策です。
[注意事項]
v0.3.1から、差出人メールアドレスに電話番号を入れる機能を利用できようになった。
携帯電話会社のメールアドレスを差出人アドレスにして、送信先メールアドレスも携帯電話会社の場合は、携帯電話事業者に「なりすまし」とみなされてメールが受信できないことがあります。
その場合は、利用者の責任において「なりすまし拒否設定」を解除するなどして対応してください。
検索サイトで「なりすまし拒否」などのキーワードで検索してください。

[ダウンロード]
バイナリとソースは以下のものをダウンロードしてください。

WordPressのメディアライブラリはexeをアップロードできないのでzipで固めています。

ソースコード(VB.NET)

実行プログラム(exe)


【開発環境】
VisualStudio2010 VB.NET
x86,Releaseビルド
Windows7 Ultimate(32/64bit版)でメール送信ができることを確認しています。
アロハUSBでの動作確認は利用者の方から寄せられた情報に基づき、対応と書いています。
機種依存と思われる不具合があったらお知らせください。
実機がない場合は、対応できない場合がありますのでご容赦ください。

N008 ArduinoでTFTカラーLCDディスプレイモジュール(SainSmart ST7735)を使う

N***の記事は、購入したデバイスの動作確認を掲載しています。接続は簡単なので、特別な事情がない限り、配線図はないです。

サインスマート(SainSmart) 1.8″ TFT カラー LCD ディスプレイ モジュール SPI インタフェース & MicroSD 付き for Arduino UNO MEGA R3
(2014/09/07時点¥ 1590 税込)
電源は3.3V/5VともOKでした。
TFTカラーLCDディスプレイモジュールとはSPI接続です。

参考にした記事

サンプルスケッチは、ArduinoIDEのメニューから次のコードを利用。
ファイル>スケッチの例>TFT>Arduino>TFTDisplayText

作者の方々に感謝いたします。

ST7735とArduinoの接続ピン情報
ST7735 Arduino UNO
------------------------
VCC    POWER 5V or 3.3V
GND    POWER GND
SCL    D13
SDA    D11
DC     D09
RES    D08
CS     D10
------------------

ST7735 Arduino MEGA
------------------------
VCC    POWER 5V or 3.3V
GND    POWER GND
SCL    D52
SDA    D51
DC     D09
RES    D08
CS     D10
------------------
組み立てた様子
2014-09-09 08.51.31
ジャンパーピンの「オス-メス」を持っていないので、「オス-オス」「メス-メス」を接続して「オス-メス」を作りました。
少々配線が長いですが、ジャンパーピン7本だけで接続ができます。
この本数で接続して使えるのは楽です。
SPI接続は初めてでしたので、ピン情報を調査しました。
SPI接続のピン情報は以下のサイトを参考にしました。

液晶画面には1から順番に999999まで表示し、また1に戻って表示するようにしました。
intは16ビット長でしたので、longにしてプログラムを書いています。


実行直後の画面
2014-09-09 09.31.55
背景色が真っ白になるので、ディスプレイ表面の保護シートにかかれている「7」の数字がよく見えます。これって何なんだろう。



スケッチ
/*
  Arduino TFT text example
  
  This example demonstrates how to draw text on the 
  TFT with an Arduino. The Arduino reads the value 
  of an analog sensor attached to pin A0, and writes 
  the value to the LCD screen, updating every
  quarter second.
  
  This example code is in the public domain

  Created 15 April 2013 by Scott Fitzgerald
 
  http://arduino.cc/en/Tutorial/TFTDisplayText


(2014/09/09 append CXY-LABO)
Reference
http://arduino.cc/en/Reference/SPI

Pin connection

ST7735 Arduino UNO
------------------------
VCC    POWER 5V or 3.3V
GND    POWER GND
SCL    D13
SDA    D11
DC     D09
RES    D08
CS     D10
------------------

ST7735 Arduino MEGA
------------------------
VCC    POWER 5V or 3.3V
GND    POWER GND
SCL    D52
SDA    D51
DC     D09
RES    D08
CS     D10
------------------
*/

#include <TFT.h>  // Arduino LCD library
#include <SPI.h>

// pin definition for the Uno
#define cs   10
#define dc   9
#define rst  8  

// pin definition for the Leonardo
//#define cs   7
//#define dc   0
//#define rst  1 

// create an instance of the library
TFT TFTscreen = TFT(cs, dc, rst);

// number length to print to the screen
#define DISP_LEN (6+1)

// char array to print to the screen
char sensorPrintout[DISP_LEN];

void setup() {
  // Put this line at the beginning of every sketch that uses the GLCD:
  TFTscreen.begin();

  // clear the screen with a black background
  TFTscreen.background(0, 0, 0);
  
  // write the static text to the screen
  // set the font color to white
  TFTscreen.stroke(255,125,255);
  // set the font size
  TFTscreen.setTextSize(2);
  // write the text to the top left corner of the screen
  TFTscreen.text("Sensor Value :\n ",0,0);
  // ste the font size very large for the loop
  TFTscreen.setTextSize(4);

//SPI.setClockDivider(1);
}

long i=1;
long loop_end =pow(10,DISP_LEN-1)-1;
char fmt_buf[10];  // prepare enough buffer
void loop() {
  i++;
  if(i>loop_end){i=1;}
  sprintf(fmt_buf,"%%0%dld",DISP_LEN-1);  // if you wand to print ' ' padding, remove 0
  sprintf(sensorPrintout,fmt_buf,i);  // i is long then format is %##ld

  //String sensorVal = String(i);
  // convert the reading to a char array
  //sensorVal.toCharArray(sensorPrintout, DISP_LEN);

  // set the font color
  TFTscreen.stroke(255,255,255);
  // print the sensor value
  TFTscreen.text(sensorPrintout, 0, 20);
  // wait for a moment
  //delay(250);
  // erase the text you just wrote
  TFTscreen.stroke(0,0,0);
  TFTscreen.text(sensorPrintout, 0, 20);
}



前の記事: N007 デジタル・コンパスモジュールGY-271(HMC5883L)
この記事: N008 TFTカラーLCDディスプレイモジュール(SainSmart ST7735)
次の記事: 未定

N007 Arduinoでデジタル・コンパスモジュールGY-271(HMC5883L)を使う

N***の記事は、購入したデバイスの動作確認を掲載しています。接続は簡単なので、特別な事情がない限り、配線図はないです。

デジタル・コンパスモジュール(HMC5883L)はAmazonで購入
HMC5883L 使用 3軸 デジタル・コンパス モジュール (3-5V 動作)
(2014/09/09時点¥ 540 税込)
電源は3.3V/5VともOKでした。
GY-271(HMC5883L)のI2C addressは0x1Eでした。

HMC5883Lセンサーモジュール(購入品)
2014-09-08 19.02.27
チップは基板実装済みだけど、基板に端子を半田付けしないといけない。

HMC5883Lセンサーモジュール(端子をはんだ付け)
2014-09-08 19.09.14


参考にしたソフトウェア

動作確認の際に利用させていただいたサイトとサンプルスケッチ

サンプルスケッチをArduino IDE 1.0.5-r2でコンパイルすると、関数名を変更しなさいと指摘されたので、以下のように変更した。
  1. Wire.receive()をWire.read()に名称変更
  2. Wire.send()をWire.write()に名称変更

作者の方々に感謝いたします。

GY-271(HMC5883L)とArduinoの接続ピン情報
GY-271 Arduino UNO
------------------
VCC   POWER 5V or 3.3V
GND   POWER GND
SCL   A5(SCL)
SDA   A4(SDA)
DRDY  -
------------------

GY-271 Arduino MEGA
------------------
VCC   POWER 5V or 3.3V
GND   POWER GND
SCL   D21(SCL)
SDA   D20(SDA)
DRDY  -
------------------
組み立てた様子
2014-09-08 19.37.47

サンプルを動作させた時のコンソール画面
スクリーンショット 2014-09-08 19.38.12
3種類の数値が表示されているので動作OKです。
動作確認だけですので、数値の細かい意味は理解していません、実際に使う際に考えます。


スケッチ
/*
An Arduino code example for interfacing with the HMC5883

by: Jordan McConnell
 SparkFun Electronics
 created on: 6/30/11
 license: OSHW 1.0, http://freedomdefined.org/OSHW

Analog input 4 I2C SDA
Analog input 5 I2C SCL
*/

#include <Wire.h> //I2C Arduino Library

#define address 0x1E //0011110b, I2C 7bit address of HMC5883

void setup(){
  //Initialize Serial and I2C communications
  Serial.begin(9600);
  Wire.begin();
  
  //Put the HMC5883 IC into the correct operating mode
  Wire.beginTransmission(address); //open communication with HMC5883
  Wire.write(0x02); //select mode register
  Wire.write(0x00); //continuous measurement mode
  Wire.endTransmission();
}

void loop(){
  
  int x,y,z; //triple axis data

  //Tell the HMC5883 where to begin reading data
  Wire.beginTransmission(address);
  Wire.write(0x03); //select register 3, X MSB register
  Wire.endTransmission();
  
 
 //Read data from each axis, 2 registers per axis
  Wire.requestFrom(address, 6);
  if(6<=Wire.available()){
    x = Wire.read()<<8; //X msb
    x |= Wire.read(); //X lsb
    z = Wire.read()<<8; //Z msb
    z |= Wire.read(); //Z lsb
    y = Wire.read()<<8; //Y msb
    y |= Wire.read(); //Y lsb
  }
  
  //Print out values of each axis
  Serial.print("x: ");
  Serial.print(x);
  Serial.print("  y: ");
  Serial.print(y);
  Serial.print("  z: ");
  Serial.println(z);
  
  delay(250);
}


前の記事: N006 加速度センサーモジュールGY-521(MPU-6050)
この記事: N007 デジタル・コンパスモジュールGY-271(HMC5883L)
次の記事: N008 TFTカラーLCDディスプレイモジュール(SainSmart ST7735)

N006 Arduinoで加速度センサーモジュールGY-521(MPU-6050)を使う

N***の記事は、購入したデバイスの動作確認を掲載しています。接続は簡単なので、特別な事情がない限り、配線図はないです。

Amazonで以下の商品を購入
MPU-6050 使用 3軸ジャイロスコープ・3軸加速度センサー モジュール
(2014/09/09時点 ¥430税込)
電源は3.3V/5VともOKでした。
I2C addressは0x68でした。

MPU-6050センサーモジュール(購入品)
2014-09-08 18.57.51
チップは基板実装済みだけど、基板に端子を半田付けしないといけない。

MPU-6050センサーモジュール(端子をはんだ付け)
2014-09-08 18.22.35


参考にしたソフトウェア

動作確認の際に利用させていただいたソフトウェア
加速度+ジャイロのGY-521(MPU-6050)を使ってみた
作者の方々に感謝いたします。

GY-521(MPU-6050)とArduinoの接続ピン情報
GY-521 Arduino UNO
------------------
VCC   POWER 5V or 3.3V
GND   POWER GND
SCL   A5(SCL)
SDA   A4(SDA)
XDA   -
XCL   -
AD0   -
INT   D2
------------------

GY-521 Arduino MEGA
------------------
VCC   POWER 5V or 3.3V
GND   POWER GND
SCL   D21(SCL)
SDA   D20(SDA)
XDA   -
XCL   -
AD0   -
INT   D2
------------------
組み立てた様子
2014-09-08 18.54.32

サンプルを動作させた時のコンソール画面
スクリーンショット 2014-09-08 18.51.20
温度と9種類の情報が表示されているので動作OKです。
115200bpsで接続すると文字化けしまくったので9600bpsにしています。
対応策もあるようですが、今回はモジュールの動作テストだけですので、9600bpsでよしとします。


スケッチ
// MPU-6050 Accelerometer + Gyro
  #include <Wire.h>

  #define MPU6050_ACCEL_XOUT_H       0x3B   // R
  #define MPU6050_WHO_AM_I           0x75   // R
  #define MPU6050_PWR_MGMT_1         0x6B   // R/W
  #define MPU6050_I2C_ADDRESS 0x68

typedef union accel_t_gyro_union{
  struct{
    uint8_t x_accel_h;
    uint8_t x_accel_l;
    uint8_t y_accel_h;
    uint8_t y_accel_l;
    uint8_t z_accel_h;
    uint8_t z_accel_l;
    uint8_t t_h;
    uint8_t t_l;
    uint8_t x_gyro_h;
    uint8_t x_gyro_l;
    uint8_t y_gyro_h;
    uint8_t y_gyro_l;
    uint8_t z_gyro_h;
    uint8_t z_gyro_l;
  }
  reg;
  struct{
    int16_t x_accel;
    int16_t y_accel;
    int16_t z_accel;
    int16_t temperature;
    int16_t x_gyro;
    int16_t y_gyro;
    int16_t z_gyro;
  }
  value;
};

void setup(){
  Wire.begin();
  int error;
  uint8_t c;
  Serial.begin(9600);
  Serial.print("InvenSense MPU-6050");
  Serial.print("June 2012");
  error = MPU6050_read (MPU6050_WHO_AM_I, &c, 1);
  Serial.print("WHO_AM_I : ");
  Serial.print(c,HEX);
  Serial.print(", error = ");
  Serial.println(error,DEC);
  error = MPU6050_read (MPU6050_PWR_MGMT_1, &c, 1);
  Serial.print("PWR_MGMT_1 : ");
  Serial.print(c,HEX);
  Serial.print(", error = ");
  Serial.println(error,DEC);
  MPU6050_write_reg (MPU6050_PWR_MGMT_1, 0);
}

  void loop(){
  int error;
  float dT;
  accel_t_gyro_union accel_t_gyro;
  error = MPU6050_read (MPU6050_ACCEL_XOUT_H, (uint8_t *) &accel_t_gyro, sizeof(accel_t_gyro));
  Serial.print(error,DEC);
  Serial.print("\t");

    uint8_t swap;
#define SWAP(x,y) swap = x; x = y; y = swap
  SWAP (accel_t_gyro.reg.x_accel_h, accel_t_gyro.reg.x_accel_l);
  SWAP (accel_t_gyro.reg.y_accel_h, accel_t_gyro.reg.y_accel_l);
  SWAP (accel_t_gyro.reg.z_accel_h, accel_t_gyro.reg.z_accel_l);
  SWAP (accel_t_gyro.reg.t_h, accel_t_gyro.reg.t_l);
  SWAP (accel_t_gyro.reg.x_gyro_h, accel_t_gyro.reg.x_gyro_l);
  SWAP (accel_t_gyro.reg.y_gyro_h, accel_t_gyro.reg.y_gyro_l);
  SWAP (accel_t_gyro.reg.z_gyro_h, accel_t_gyro.reg.z_gyro_l);

  dT = ( (float) accel_t_gyro.value.temperature + 12412.0) / 340.0;
  Serial.print(dT, 1);
  Serial.print("\t");

  float acc_x = accel_t_gyro.value.x_accel / 16384.0; //FS_SEL_0 16,384 LSB / g
  float acc_y = accel_t_gyro.value.y_accel / 16384.0;
  float acc_z = accel_t_gyro.value.z_accel / 16384.0;

  Serial.print(acc_x, 2);
  Serial.print("\t");
  Serial.print(acc_y, 2);
  Serial.print("\t");
  Serial.print(acc_z, 2);
  Serial.print("\t");

  float acc_angle_x = atan2(acc_x, acc_z) * 360 / 2.0 / PI;
  float acc_angle_y = atan2(acc_y, acc_z) * 360 / 2.0 / PI;
  float acc_angle_z = atan2(acc_x, acc_y) * 360 / 2.0 / PI;

  Serial.print(acc_angle_x, 2);
  Serial.print("\t");
  Serial.print(acc_angle_y, 2);
  Serial.print("\t");
  Serial.print(acc_angle_z, 2);
  Serial.print("\t");

  float gyro_x = accel_t_gyro.value.x_gyro / 131.0;  //FS_SEL_0 131 LSB / (°/s)
  float gyro_y = accel_t_gyro.value.y_gyro / 131.0;
  float gyro_z = accel_t_gyro.value.z_gyro / 131.0;

  Serial.print(gyro_x, 2);
  Serial.print("\t");
  Serial.print(gyro_y, 2);
  Serial.print("\t");
  Serial.print(gyro_z, 2);
  Serial.println("");
}

// MPU6050_read
int MPU6050_read(int start, uint8_t *buffer, int size){
  int i, n, error;
  Wire.beginTransmission(MPU6050_I2C_ADDRESS);
  n = Wire.write(start);
  if (n != 1)
    return (-10);
  n = Wire.endTransmission(false);   // hold the I2C-bus
  if (n != 0)
    return (n);
  // Third parameter is true: relase I2C-bus after data is read.
  Wire.requestFrom(MPU6050_I2C_ADDRESS, size, true);
  i = 0;
  while(Wire.available() && i<size){
    buffer[i++]=Wire.read();
  }
  if ( i != size)
    return (-11);
  return (0);  // return : no error
}

// MPU6050_write
int MPU6050_write(int start, const uint8_t *pData, int size){
  int n, error;
  Wire.beginTransmission(MPU6050_I2C_ADDRESS);
  n = Wire.write(start);        // write the start address
  if (n != 1)
    return (-20);
  n = Wire.write(pData, size);  // write data bytes
  if (n != size)
    return (-21);
  error = Wire.endTransmission(true); // release the I2C-bus
  if (error != 0)
    return (error);
  return (0);         // return : no error
}

// MPU6050_write_reg
int MPU6050_write_reg(int reg, uint8_t data){
  int error;
  error = MPU6050_write(reg, &data, 1);
  return (error);
}


前の記事: N005 照度計測モジュール(BH1750FVI)
この記事: N006 加速度センサーモジュールGY-521(MPU-6050)
次の記事: N007 デジタル・コンパスモジュールGY-271(HMC5883L)

N005 Arduinoで照度計測モジュール(BH1750FVI)を使う

N***の記事は、購入したデバイスの動作確認を掲載しています。接続は簡単なので、特別な事情がない限り、配線図はないです。

照度計測モジュール(BH1750FVI)はAmazonで2014/08/19に購入したもの
照度計測モジュール(BH1750FVI)
(2014/09/07時点では在庫なし、2014/08/19時点 2個入りで¥1280税込)
モジュール上には”GY-30″と記載がありましたので、モジュールとしてはGY-30と呼ぶようです。
GY-30のI2C addressは固定なのかなぁ、と思って調べてみました。
こんな情報がありました。
BH1750 Digital Light Sensor
ステップ 3: Connectionのところに、
about ADDR Pin , I prepare a Library " I will talk about in the next step " , You can select the address of your breakout , Even 0x23 , or 0X5C , this action depend on the ADDR Pin status , if connecting to Gnd , the address will be 0x23 , else if ADDR Connecting to Vcc The address will be 0X5C  .
とあります。
ADDRをVccに接続するとI2C addressは0x5Cになるそうです。実験したところ、確かにアドレスは変わっていました。
測定範囲:1–65535 lx相当、分解能:0.5,1,4 lx(モード切替)だそうです。
(*)モード切替の方法もBH1750 Digital Light Sensorのサイトに載っています。
電源は3.3V/5VともOKでした。


参考にしたソフトウェア

動作確認の際に利用させていただいたソフトウェア
Measurement of illuminance with a BH1750FVI Breakout Board (GY-30) and an Arduino Uno
作者の方々に感謝いたします。

GY-30(BH1750FVI breakout board)とArduinoの接続ピン情報
GY-30 Arduino UNO
------------------
GND   POWER GND
VCC   POWER 5V or 3.3V
ADD   OPEN or connecting to GND:0x23, connecting to Vcc:0x5C
SDA   A4(SDA)
SCL   A5(SCL)
------------------

GY-30 Arduino MEGA
------------------
GND   POWER GND
VCC   POWER 5V or 3.3V
ADD   OPEN or connecting to GND:0x23, connecting to Vcc:0x5C
SDA   D20(SDA)
SCL   D21(SCL)
------------------
組み立てた様子
2014-09-07 22.37.53 ピン端子は半田済みでしたので何もしなくてよかった。楽なのはいいのですが、1か所だけ半田が隣にくっつきそうな点だけ、いまひとつ。まあいいか。

サンプルを動作させた時のコンソール画面
スクリーンショット 2014-09-07 22.35.52
照度がlxで表示されているので動作OKです。
センサー表面を手で覆ったり、部屋の照明を消すと数値が著しく小さくなったのでよしとします。

スケッチ
#include <Wire.h>

int BH1750_address = 0x23; // i2c Addresse(OPEN or connecting to GND) 
//int BH1750_address = 0x5c; // i2c Addresse(connecting to Vcc)
byte buff[2];

void setup(){
  
  Wire.begin();
  BH1750_Init(BH1750_address);
  
  delay(200);
  Serial.begin(9600);
  Serial.println("Starte Beleuchtungsstaerkemessung - blog.simtronyx.de");
}

void loop(){
  
  float valf=0;

  if(BH1750_Read(BH1750_address)==2){
    
    valf=((buff[0]<<8)|buff[1])/1.2;
    
    if(valf<0)Serial.print("> 65535");
    else Serial.print((int)valf,DEC); 
    
    Serial.println(" lx"); 
  }
  delay(1000);
}

void BH1750_Init(int address){
  
  Wire.beginTransmission(address);
  Wire.write(0x10); // 1 [lux] aufloesung
  Wire.endTransmission();
}

byte BH1750_Read(int address){
  
  byte i=0;
  Wire.beginTransmission(address);
  Wire.requestFrom(address, 2);
  while(Wire.available()){
    buff[i] = Wire.read(); 
    i++;
  }
  Wire.endTransmission();  
  return i;
}


前の記事: N004 超音波距離センサーモジュール(SainSmart HC-SR04)
この記事: N005 照度計測モジュール(BH1750FVI)
次の記事: N006 加速度センサーモジュールGY-521(MPU-6050)

N004 Arduinoで超音波距離センサーモジュール(SainSmart HC-SR04)を使う

N***の記事は、購入したデバイスの動作確認を掲載しています。接続は簡単なので、特別な事情がない限り、配線図はないです。

今日は、超音波距離センサーモジュールの動作確認をする。

超音波距離センサーモジュールはAmazonで購入
サインスマート(SainSmart)HC-SR04 超音波距離センサーモジュール
(2014/09/07時点 ¥380税込)

私が買ったものは水晶発振器が「ある」バージョンでした。数量は4個にしてamazonから発送してもらいました。

ソフトウェアダウンロード

動作確認の際に利用させていただいたソフトウェア
Arduino/Arduinoの勉強はじめました
作者の方々に感謝いたします。

HC-SR04とArduinoの接続ピン情報
HC-SR04 Arduino
-------------------
Gnd     POWER GND
Vcc     POWER 5V
Trig    D8
Echo    D9
------------------
組み立てた様子
2014-09-07 21.28.56

サンプルを動作させた時のコンソール画面
スクリーンショット 2014-09-07 21.30.06
距離cmが表示されているので動作OKです。
距離計算の状況は20℃なので正しくありませんが、障害物の位置を変えると距離cmが変わるのでよしとします。 機会があれば、気温を温度センサーから取得して、距離センサーを再評価したいと思います。
小さいな音がするという記事を読んだので、耳を澄ましました。
う~む、確かに「相当」小さな音が何か聞こえます。しかし、具体的な音はわかりませんでした。
年齢による聴力の衰えでしょう。

スケッチ
/*
 HC-SR04 Ping distance sensor]
 VCC to arduino 5v GND to arduino GND
 Echo to Arduino pin 9 Trig to Arduino pin 8
 More info at: http://goo.gl/kJ8Gl
 */

#define trigPin 8
#define echoPin 9

void setup() {
  Serial.begin (9600);
  pinMode(trigPin, OUTPUT);
  pinMode(echoPin, INPUT);
}

void loop() {
  int duration, distance;
  digitalWrite(trigPin, HIGH);
  delayMicroseconds(1000);
  digitalWrite(trigPin, LOW);
  duration = pulseIn(echoPin, HIGH);
  distance = (duration/2) / 29.1;
  if (distance >= 200 || distance <= 0){
    Serial.println("Out of range");
  }
  else {
    Serial.print(distance);
    Serial.println(" cm");
  }
  delay(500);
}


前の記事: N003 気圧センサーモジュール(SainSmart BMP085)
この記事: N004 超音波距離センサーモジュール(SainSmart HC-SR04)
次の記事: N005 照度計測モジュール(BH1750FVI)