
Arduinoでダイセン電子工業のモータードライバを動かす実験です。
結果から言うとうまくいきませんでした。
このモータードライバは6つのモーターを駆動でき、小型のモーターであれば十二分に動かせるパワーもあります。
価格も高くなくコストパフォーマンスに優れたボードだと思います。
ロボカップジュニア(サッカー)ではおなじみのボードで、うちの子供も使っています。
I2Cでコントロールできるので、Arduinoから簡単に動かせると考えました。
ダイセン電子工業のサイト
http://www.daisendenshi.com/detail/ddkit_0601.html
【接続】
- Arduinoの5VとGNDをモータードライバのI2C端子の5VとGNDへ接続。
- Arduinoのアナログ4pinをSDAへ接続、アナログ5pinをSCLへ接続、各々3KΩの抵抗を介してプルアップ。
【スケッチ(プログラム)】
プログラムは上記のURLからダウンロードできるマニュアルを参考に作成しました。
#include <Wire.h>
#define TJ3M_ADDR 0x14
int ret;
byte b[6];
void setup()
{
Wire.begin();
delay(100);
}
void loop()
{
Wire.beginTransmission(TJ3M_ADDR);
b[0] = 50;
b[1] = 50;
b[2] = 0;
b[3] = 0;
b[4] = 0;
b[5] = 0;
Wire.send(b, 6);
ret=Wire.endTransmission();
delay(100);
}
結果は冒頭の通りうまくいかなかったのですが、ごく稀に(10回に1回ぐらい?)動くこともありますので、タイミングの問題でしょうかね?よくわかりません。
なお、ArduinoのI2Cは100KHzで動いているようです。モータードライバのマニュアルによれば100KHzでも大丈夫なようです。
ArduinoのI2Cの使い方としては温度センサのLM73ではうまく動いたので、問題はないと思うのですが。

今日と明日の天気予報を表示する装置を作ってみました。
フルカラーLEDの色で天気をあらわします。(天気は赤、雨は暗い青など)
.
.
.
といっても、PCにつなぐ必要があります。PCでインターネットから天気予報の情報を取得する、なんちゃって装置です。
+GAINER(オーム社)の記事を参考にしました。
天気の情報は↓からXMLを取得します。
http://weather.livedoor.com/weather_hacks/
マイコンはトランジスタ技術2008年8月号の付録基盤のNECエレクトロニクス社製78K0マイコンを使用しています。このマイコンはアナログ入力ポートが無いのが痛いですね。。。
マイコン側ではPCから受け取った情報を元にPWMでフルカラーLEDの色を制御します。
このマイコンはLEDを駆動できるパワーが無いのでバッファをかませています。(左上のICです。)
PC側のプログラムはJAVAで組みました。XMLのパーサーはSAXを使用しています。
マイコンとの通信にはRXTXcommを使っています。
Core i7は4つのコアに加えてHyper-Threading(以下、HT)で8スレッド動かせますが、Pentium4の時はコンピュータ将棋にはHTはあまり有効でないとの噂もありましたので、調べてみました。
同じPCで4スレッドと8スレッドで自己対局させたところ、125勝99敗(勝率:55.0%)で8スレッドの方が勝ちました。少なくともK-ShogiではCore i7のHTは有効なようです。
ただし、今回は1台のPCで自己対局しましたが、他PCとの対局では、4コアだとTurbo Boostが効くということもあるかもしれません。
また、4スレッドの場合はSetThreadAffinityMaskで1つおきにコアを使用していますが、私の環境(XP 32bit)では問題なさそうですが、一般的にこのやり方で正しいのか、今ひとつ自信がありません。
GA将!!!さんのブログに、Core2の32bitから64bitの速度向上率が25%というレポートを見て、これは試さねばと思い、試してみました。
ついでにインラインアセンブラを使っていたところは、かずさんに教えていただいた__rdtscの利用と、ロックのところはアセンブラに外出しして、64bit対応作業が完了しました。
前回と同じ局面の探索にかかった時間です。(ただし、K-Shogiのバージョンが少し違うので前回の時間とは比較できません)
環境 |
プログラムの bit数 |
時間 |
Core2 Extreme QX6700(2.66GHz) 2GB WindowsXP 32bit |
32bit |
27.9秒 |
Core2 Extreme QX6700(2.66GHz) 2GB Windows7RC 64bit |
32bit |
29.4秒 |
Core2 Extreme QX6700(2.66GHz) 2GB Windows7RC 64bit |
64bit |
28.0秒 |
Windows7RC での32bit→64bitの速度向上率は約5%という前評判どおりの結果でした。。。残念。
しかもXP 32bitの方が速いので、しばらくはXP 32bit環境で十分という結論になってしまいました。
Windows7 RCがダウンロードできるようになったので、ためしに64bit版をインストールしてみました。マシンのスペックは以下のとおり。2004年・2005年の選手権の時のマシンです。久しぶりに起動させました。懐かしい。
- CPU : Athlon64 3400+ (2.2GHz)
- MEM : 1GB
問題なくインストールできましたが、解像度が1024×768以下しか選べない。グラフィックカードが認識されていないようです。グラフィックカードはGeForceFX5200が載っています。NVIDIAのサイトからWindows7用のベータドライバをダウンロードしてインストールしてみると「対象の機器がありません」のようなメッセージで終了してしまいます。NVIDIAのサイトをよく読んでみると、GeForceFX5200は対象外の模様。しからばと、使用していない別のマシンからATI(現AMD)の9200SEというカードを抜いてきました。念のため、AMDのサイトでドライバの対応状況を確認すると、またもや9200SEは対象外。仕方がないので、GeForceFX5200のまま1024×768で使用していました。ふと思いついて、WindowsUpdateをしてみると、GeForceFX5200のドライバがありました!
VisualStudio2008をインストールして、64ビットの開発環境を整えました。
K-Shogiのプロジェクトをビルドしてみると、やはり、インラインアセンブラのところでエラーが出ました。その他にもエラーやワーニングが多数出ています。
インラインアセンブラはマルチスレッドのためのロックに使用しているのと、RTSC命令でクロック数を測るのに使用しています。今回はとりあえず動かしたかったので、RTSC関係は削除、ロックは今回のCPUが1コアなので、ばっさりコメントアウトしました。
その他のエラーとしてはVC6から持ってきたプロジェクトだからかOnTimerイベントの引数があっていないようでエラーになっていましたので、正しい形に修正。他にsize_tをintやUINTに変換しているというワーニングが大量に出ていますが、とりあえず問題なさそうなので無視し、ビルドができました。ふぅ。
早速、動かして見ると実行時エラー。デバッグモードで動かすと、定跡の格納領域が足りていないことが判明。構造体にポインタを格納しているので、32bitから64bitになって必要な領域が増えているのが原因でした。(しかし落ちるのはまずいですね。)
これで一応動くようになりました。気になる速度ですが、ある局面の探索で、
- 32bit 34.6秒 NPS:101,647 (64bit環境で実行)
- 64bit 30.7秒 NPS:114,548
となり、うわさどおり1割程度速くなっています。
ただし、今回の環境はAthlon64ですが、Core2では64bitの速度向上が悪いとのうわさですので、Athlonほどには速くならないと思われます。
Core i7は64bitはどうなのでしょうね?