マインドストームRCXを使いたい
こんにちは。ベッドの下に大量のLEGOを隠しているハリボーです。
私はLEGOマインドストームの3世代すべてを持っています。
最新版のEV3、ひとつ前のNXT、一番古いRCXの3種類です。
左からEV3、NXT、RCXです。
これらは主にヤフオクで大量に安価で手に入れたため、それぞれのパーツはかなり不揃いです。
極端にパーツ数が多いのが、RCX光センサです。
このパーツを使ってみたいのですが、以前書いた記事にもある通り、RCXの専用ソフトウェアは私のPCで環境構築ができません。
というわけで、汎用性の高いマイコンのArduinoを使ってRCX光センサをムリヤリ動かしてみることにします。
RCX光センサを無理やり動かす
今回動かすのはこちらの光センサです。
見た目はLEGOブロックにケーブルがくっついた形状です。
RCXの難点として、ケーブルの被膜がすぐにボロボロになります。
まあ、今回はハサミで切り裂いてしまうので関係ありませんが。
これを試しにArduinoのAnalogReadで読んでみます。どんな値が返ってくるでしょうか。
一本をGND、もう一本をアナログ0番ピンに接続しています。
書き込んだのはこちらのプログラム。
void setup() {
Serial.begin(9600);
}
void loop() {
int val = analogRead(0);
Serial.println(val);
delay(100);
}
そして測定した結果がこちらです。
残念ながらまったく反応していません。
ノイズが入っているだけです。
サンプルタイムを変えたり別のピンにしても変わりません。
先人の知恵を借りて動作させてみる
こちらの記事を参考にさせていただきました。
https://www.instructables.com/id/Hacking-the-Lego-Mindstorms-RCX-With-an-Arduino/:embed:cite
参考文献を基に新しく作成したプログラムはこちら。
void setup(){
Serial.begin(9600);
}
void loop(){
pinMode(A0,OUTPUT);
digitalWrite(A0, HIGH);
delay(50);
pinMode(A0, INPUT);
int value=analogRead(A0);
Serial.println(value);
delay (250);
}
「digitalWrite」のタイミングでLEDが光ります。
測定結果はこちらのグラフです。
物体を近づけたときに値が変わりました!
これで距離を測定することが可能になりました。
ただし、1cm程度まで物体を近づけないとノイズに隠れて認識は難しかったです。
フィルタや回路をもうちょっと頑張れば測定距離や精度は向上しそうです。
今回はここまで。
最新のマインドストームEV3ではこんなこともできます。