RCX光センサをArduinoで動かしてみる【LEGOマインドストームRCX】

RCX光センサをArduinoで動かしてみる【LEGOマインドストームRCX】

RCXを使いたい

こんにちは。

ベッドの下に大量のLEGOを隠しているハリボーです。

私はLEGOマインドストームの3世代すべてを持っています。

最新版のEV3、ひとつ前のNXT、一番古いRCXの3種類です。

左からEV3、NXT、RCXです。

これらは主にヤフオクで大量に安価で手に入れたため、それぞれのパーツはかなり不揃いです。

極端にパーツ数が多いのが、RCX光センサです。

このパーツを使ってみたいのですが、以前書いた記事にもある通り、RCXの専用ソフトウェアは私のPCで環境構築ができません。

というわけで、汎用性の高いマイコンのArduinoを使ってRCX光センサをムリヤリ動かしてみることにします。

RCX光センサとは

今回動かすのはこちらの光センサです。

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ではこんなこともできます。

自動でルービックキューブを揃えるロボットを作ってみた【LEGO EV3×MATLAB】

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です