2009年04月19日

2009年04月19日: Arduino でプラレールのストップレール制御

 「Arduino でプラレールのストップレール制御」、なんとかメドが立ちました。

Arduino-ストップレール1 全景。タミヤのユニバーサルプレート上に組んでいる。ストップレールはアングルと軸受けパーツで位置を決めてはめこんである。サーボモータとブレッドボードは両面テープで固定。Arduino Duemilanove はネジ止め。5mmピッチのボードに無理やり合わせているので、微妙に斜めになっている。
Arduino-ストップレール2 Arduino 周りの配線。デジタルアウトの2・3をそれぞれ青・赤のLEDに接続。手元にあったフルカラーLED(OSTA-5131A、秋月)を流用している。電流制限の抵抗は1kΩ。サーボモータ(RB-001、共立)は、+5V, GND, 信号線=デジタルアウト9を接続。ワイヤーの色がわかりにくくてすみません。
Arduino-ストップレール3 ストップレールとサーボモータの接続部分。単に針金で結んでいるだけ。ストップレール側は無改造ではどうもうまくいかず、レバーに小さい穴をあけた(タミヤの0.8mmドリル+ピンバイス)。針金はクリップを伸ばしたもの。昔Macでフロッピーが出てこなくなったときによく使ったアレですね。
Arduino-ストップレール4 停止中。サーボの角度はモータの位置や針金の長さに依存するので、現物合わせになる。今回は、停止=135、進行=30でうまく動いた。
Arduino-ストップレール5 進行!(信号はやっぱり緑の方がいいかな…)

 テスト用に、「リセットすると『赤=停止』になり、10秒たつと『青=進行』に変わる」というロジックを組んでみた。

// Servo_test // 2009.4.19. Toshi Nagata // Servo: digital-9 // LED1: common cathode (longest, pin 3), GND; blue (pin 2), D2 with 1k ohm // LED2: common cathode, GND; red (pin 4), D3 with 1k ohm #include <Servo.h> Servo myservo; void red() { digitalWrite(3, HIGH); digitalWrite(2, LOW); myservo.write(135); } void blue() { digitalWrite(3, LOW); digitalWrite(2, HIGH); myservo.write(30); } void setup() { pinMode(2, OUTPUT); pinMode(3, OUTPUT); myservo.attach(9); red(); delay(10000); blue(); } void loop() { }

 ヒメが Arduino のリセットボタンを押したくてしょうがないみたいだったが、頼むからちょっと待ってくれ。今度やるときにはちゃんと触れるようにするから。

 距離センサを使って電車が来たのを検出しようと思っていたのだが、よく使われているGP2Y0A21YKではどうもうまくいかない。このセンサは、もっと大きな物体(人間とか)が50〜60cm の距離に来たのを検出するためのもので、プラレールの電車みたいな小さいものを10cm以下の距離で検出するには向いてない。CdS センサをレールに貼付けて、室内光の遮断を検出するのがいいのかな。

 あと、電源をなんとかしたい。一応単独で動作するロジックを組んでいるのに、電源供給だけのために USB でパソコンにつなぐという間抜けなことになっている。ACアダプタでもいいのだが、やっぱり電池がいい。電源は 6V あればいいのだが、充電池を使うことを想定すると、5本以上直列にすることになる。かさばるなあ。なんとかならんもんかな。

Posted at 2009年04月19日 23:37:59
email.png