2012年1月16日月曜日

超音波センサモジュールが3種類入荷!

デジット
http://blog.digit-parts.com/archives/51763698.html
シリアル出力超音波センサモジュール「DYP-ME007TX」¥1,890-
簡単にArduinoやAVR等のマイコンとUARTシリアル接続が可能です。検出は50ms毎に行われデータはOUTピンより自動的に出力されます。
PWM出力超音波センサモジュール「DYP-ME007V2」¥1,890-
ArduinoやAVR等のマイコンのI/Oポートに接続してトリガをかける事で簡単にEchoBack時間を測定できます。温度補償回路付きです。
PWM出力超音波センサモジュール「SRF04」¥1,890-
ArduinoやAVR等のマイコンのI/Oポートに接続してトリガをかける事で簡単にEchoBack時間を測定できます。

ロボカップジュニア用としては使いずらいかな。

『ロボロボ杯』開催だよ

ロボカップジュニア・サッカーの大会(非公式)
『ロボロボ杯』が開催されます。
平成24年2月5日(日)
牧志駅前ほしぞら公民館

実質、沖縄ブロックのオープンの練習会のようです。
沖縄でロボカップジュニア・サッカーを
やっている子たち集まれ!
杯ですから優勝したら優勝カップがもらえます。
2人チーム、1人チームオッケイ
対戦相手の仕上がり具合やコンビの連携を実戦で
体感出来ます。
機体とプログラムの仕上がり具合確認にうってつけです。
沖縄大会のプレイベントとして定着するといいな。
もしかしたら参加費が何百円か出るかもしれない
けどそれ以上の収穫があるようにしてほしい。

e-GadgetやTJ3で方位センサーHMC6352を使う方法3

e-GadgetやTJ3で方位センサーHMC6352を使う方法3

TeamReverseの徒然さんのところに
http://teamreverse.blog3.fc2.com/blog-entry-79.html
e-GadgetやTJ3でHMC6352を使う方法が書かれています。
C-StyleのD_I2C.cのget_dir関数の中身を少々書き換えると書いてあります。
購入したので試してみます。

用意するもの
e-GadgetやTJ3
C-Style(最新のC-Styleをご用意下さい。)
HMC6352モジュール  1個 1,764円(税込)(前回の設定保存したもの)
http://strawberry-linux.com/catalog/items?code=12106
基板に文字が書かれた所だけ4ピンのヘッダを半田付けする。もう一つは余る。

D_I2C.cという名のファイルの中にコンパスセンサーからデータを取ってくる
プログラムが書かれているのでこのファイルの中身をHMC6352用に書き換えます。
書き換えは、自己責任で。
Daisen>C-Styleなんとか>EG-Core>V3.09みたいなフォルダとか
Daisen>C-Styleなんとか>TJ3>V3.09みたいなフォルダとかから
D_I2C.cという名のファイルを捜します。
まずD_I2C.cという名のファイルをどこかにコピーしておきます。
ファイルのバックアップを取っておいて間違えてもすぐに戻せるようにします。
ファイルをメモ帳で開きます。
get_dirと書かれている場所を探します。
e-Gadget用のC-StyleにもTJ3用のC-Styleにも全く同じ記述がありました。

//------------------------------------------------------------------------------
// dno:0(dir), 1(pitch), 2(roll)
UINT get_dir(BYTE dno)
{
U_UINT d;
BYTE adrs = DIR_ADRS;
BYTE n = 0;

d.W = 999;
gI2C_Buf[n++] = 0x20 + dno * 2; // Register 0x20:AZIMUTH(MSB-LSB), 0x22:PITCH(MSB-LSB), 0x24:ROLL(MSB-LSB)
if (i2c_send(adrs, n) == false) return(d.W);
if (i2c_recv(adrs, 2) == false) return(d.W);
n = 0;
d.H = gI2C_Buf[n++];
d.L = gI2C_Buf[n++];
if (0 < dno){
d.W += 90;
}
return(d.W);
}
//------------------------------------------------------------------------------
ホームページを参考にD_I2C.cという名のファイルの該当する部分を書き換えました。

//------------------------------------------------------------------------------
// dno:0(dir), 1(pitch), 2(roll)
UINT get_dir(BYTE dno)
{
U_UINT d;
BYTE adrs = 0x42; // HMC6352のI2Cアドレス(デフォルト)は0x42
BYTE n = 0;

d.W = 999;
if (i2c_recv(adrs, 2) == false) return(d.W);
n = 0;
d.H = gI2C_Buf[n++];
d.L = gI2C_Buf[n++];
if (0 < dno){
d.W += 90;
}
d.W /= 10; // HMC6352は,0~3600(0.1度単位)で送ってくるので,10で割って360度にする
return(d.W);
}
//------------------------------------------------------------------------------

上書き保存をしてメモ帳を閉じます。
これでe-GadgetやTJ3のC-Styleで方位センサーHMC6352(前回の設定保存したもの)を
使える様になりました。
C-Styleをバージョンアップすると消えるので、また探し出して書き換えて下さい。
バックアップを取るのを忘れずに。

ストロベリー・リナックスの緑のコンパスモジュールも
スパークファンの赤のコンパスモジュールも電源や信号線の繋ぎ方の並びが独自のもので
それぞれ違っています。間違えないようにe-GadgetやTJ3の本体の記述と
コンパスモジュールの記述を何度も確認して同じ名前のものを結線して下さい。
e-Gadgetのコネクタとハーネスが抜き差しが楽で便利です。
出来るだけ高いところに付けた方が良いとのことなので伸ばせるように20㎝以上の
ハーネスが良いでしょう。
どのように固定するかと底面に防磁が必要か等々各自腕の見せ所ですね。
思った以上に感度良好です。
C-Styleのセンサーモニタでも使えます。
サンプルプログラムの中にコンパスモジュール用もあったので読み込んで
ビルドしてダウンロードしてみました。動きます。
後はこれを活かすプログラムを各自作るだけです。
センサーがひとつ増えるごとにやるべき事は、倍になります。
みんな、がんばれ。

おわりと思ったらまだつづく
Arduinoなしでも出来る様にしたよ。4回目をみて下さい。

e-GadgetやTJ3で方位センサーHMC6352を使う方法2

e-GadgetやTJ3で方位センサーHMC6352を使う方法2

準備する物
Arduino基板
Arduino IDE
HMC6352モジュール  1個 1,764円(税込)
http://strawberry-linux.com/catalog/items?code=12106
基板に文字が書かれた所だけ4ピンのヘッダを半田付けする。
もう一つは余る。

建築発明工作ゼミ2008
Arduino デジタルコンパス/HMC6352
http://kousaku-kousaku.blogspot.com/2008/08/arduinohmc6352.html
を参考にして
ArduinoIDEをインストールして、次にArduino基板とHMC6352モジュール
をケーブルでつなぎます。繋ぎ方を間違えないようにすること。
HMC6352モジュールは電源のプラスマイナスを間違えるとすぐに壊れる
ようです。
ArduinoIDEにスケッチをそのままコピーして貼り付けます。
シリアルモニターを使って読み取り値を出力するようです。

//------------------------------------------------
//I2C通信ライブラリを取り込む
#include

//デジタルコンパスモジュールのアドレス設定
int compassAddress = 0x42 >> 1; //=0x21
//読み込み値(角度)の変数を用意
int reading = 0;

void setup() {
//I2C通信開始
Wire.begin();
//角度表示のためのシリアル通信開始
//Serial.begin(9600);

//Continuous Modeに設定する
Wire.beginTransmission(compassAddress);
//RAM書き込み用コマンド
Wire.send('G');
//書き込み先指定
Wire.send(0x74);
//モード設定
Wire.send(0x72);
//通信終了
Wire.endTransmission();
//処理時間
delayMicroseconds(70);
}

void loop() {
//デバイスに2バイト分のデータを要求する
Wire.requestFrom(compassAddress, 2);
//要求したデータが2バイト分来たら
if(Wire.available()>1){
//1バイト分のデータの読み込み
reading = Wire.receive();
//読み込んだデータを8ビット左シフトしておく
reading = reading << 8;
//次の1バイト分のデータを読み込み
//一つ目のデータと合成(2バイト)
reading += Wire.receive();
//2バイト分のデータを10で割る
reading /= 10;
Serial.println(reading);
}
//処理のために少し待つ(20Hz)
delay(50);
}
//------------------------------------------------
アップロードしてシリアルモニターボタンを押しましたが
シリアルモニターには何も表示されません。
おかしいなとGoogleと
Serial.begin(9600) がコメントアウトされてしまって
いるので何も表示されませんとありました。
http://www.senionetworks.jp/bbs/viewtopic.php?f=7&t=92&start=0
そこでスケッチ中の
//Serial.begin(9600); 
の//を削除しました。
Serial.begin(9600);
シリアルモニターを閉じます。
もう一度アップロードしてシリアルモニターボタンを押すと
シリアルモニターに値が表示されました。
第一段階クリアです。
コンパスモジュールをぐるぐる回すと面白いように値が変わります。
シリアルモニターを閉じます。

さて、次です。コンパスモジュールの設定を保存するために
Wire.send(0x72);
//通信終了
の間に次の2行を書き加えます。
//設定保存書き込み用コマンド
Wire.send('L');
書き加えました。
Wire.send(0x72);
//設定保存書き込み用コマンド
Wire.send('L');
//通信終了
あとひとつおまじないをしておきます。
処理にどれだけ時間がかかるか判らないので
//処理時間
delayMicroseconds(70);
という2行を
//処理時間
delayMicroseconds(100);
に書き換えました。
もう一度アップロードしてシリアルモニターボタンを押すと
シリアルモニターに値が表示されました。
第二段階クリアです。
シリアルモニターを閉じます。

次に設定が保存されたかを確認するために
スケッチの
//Continuous Modeに設定する
Wire.beginTransmission(compassAddress);
//RAM書き込み用コマンド
Wire.send('G');
//書き込み先指定
Wire.send(0x74);
//モード設定
Wire.send(0x72);
//設定保存書き込み用コマンド
Wire.send('L');
//通信終了
Wire.endTransmission();
//処理時間
delayMicroseconds(100);
を削除します。

void setup() {
//I2C通信開始
Wire.begin();
//角度表示のためのシリアル通信開始
Serial.begin(9600);
}
以下省略
となります。
これをもう一度アップロードして、終わったら
いったんArduino基板をUSBから抜いてみます。
電源が切れたのでコンパスモジュールは、リセットされた
はずです。
USBにもう一度つないでシリアルモニターボタンを押すと
シリアルモニターに値が表示されました。
設定は保存されていました。
第三段階クリアです。
Arduinoでの作業はここまでです。

アドバイスがありましたので追記します。
ストロベリーリナックスの緑基板には、I2C信号線のプルアップ
抵抗が有りませんので自分で外付けします。
私は、付けなくても正しく動作しましたがいつも同じ結果になる
とは限りません。通信が出来ない場合は、プルアップ抵抗を付けてみて下さい。
Arduino基板に接続する場合は、一時的なのでブレッドボードを
使ってプルアップ抵抗を付けてみて下さい。

TJ3やe-Gadgetは、本体側で10kΩの抵抗でプルアップされています。
私は、これで十分かと思ったのですが、20㎝もケーブルを延ばすと
ノイズを拾ったりして動作が不安定になることもあるようです。
特にモーターやモータードライバー等が影響するのかな。
その時は、小さな穴あき基板を使ってI2C信号線のプルアップ抵抗を
配線します。緑基板も丸ピンICソケットに取り付けるようにしたら
いいかもしれません。
緑基板の電源に10μFの積層セラミック・コンデンサを付けるのも
良いかもしれません。
I2Cとは?(アイ・スクエアド・シー)
http://www.maroon.dti.ne.jp/koten-kairo/works/dsPIC/i2c1.html
プルアップ抵抗の決め方
http://www.picfun.com/midi2c02.html
追記終わり。

つづく
Arduinoなしでも出来る様にしたよ。4回目をみて下さい。

2012年1月10日火曜日

2012年ジャパンオープンローカルルールが発表されました。

ローカルルールが発表されました。親子でご覧下さい。
2012年ジャパンオープンローカルルールについて
http://rcjjsoccer.blogspot.com/
2012サッカーAローカルルール
https://docs.google.com/open?id=0B1qQdbK99P6rY2EwZDFmY2ItNjY4YS00YTQyLWE2NDEtNTM5MDdjY2U3NzU3
サッカーAライトウェイトの制限重量は1250g
昇圧回路今回まで使えます。

2012年1月4日水曜日

TJ3BのマイクロコントローラがPIC18F2620に変更

TJ3B用C-Style Ver.111207(自己解凍形式)PIC18F2620専用
いつのまにかTJ3BのマイクロコントローラがPIC18F2620に変更になったようです。
入手性の問題でしょうか。
C-Styleも別モノが必要になりました。

パララックス社の超音波距離センサーが¥2,500だ!

あのPING))) Ultrasonic Distance Sensorが秋月電子通商から新発売
パララックス社超音波距離センサーモジュール
1セット ¥2,500(税込)

PING))) Ultrasonic Distance Sensor
超音波距離センサは、非接触で正確に約2cm~3mの範囲で距離を測定できます。
1本の信号線により、ピン数の少ない色々なマイコンから制御することが可能です。
このセンサは、マイコン等からのパルスを信号線に入力することで超音波を発信し、その反射波が出力パルスとして信号線に出力されます。
反射波パルスの長さ、時間から距離を算出します。
仕様
・動作電源電圧:5V
・消費電流:30mA
・測定距離範囲:2cm~3m
・パルス入力:正論理TTLパルス 5μs
・パルス出力:正論理TTLパルス 115μs~18.5ms(距離に依存します)
・寸法:22x46x16mm

ダイセンの半額以下だ、これは買いです。
でも・・・よく見ると
秋月電子
リビジョンがAでコピーライトが2005年、QCシールが貼られていない。
ダイセン
リビジョンがBでコピーライトが2010年、QCシールが貼られている。水晶発振器を使っている?。
ダイセンのほうが最新の改良品かあ。
秋月電子は海外の在庫品の大量放出品かなあ。
全く同じに動くんだろうなあ。去年まで普通につかっていたんだろうなあ、どうしよう。