リモコン信号機 (プロトタイプ) [Arduino]
リモートコントロールでプラレールを操作するというアイデアはすでに製品化されています。
リモレール
http://www.kuwatec.co.jp/remorail/index.html
リモポイント
http://www.kuwatec.co.jp/remopoint/index.html
ミスターモーターマン商品紹介
http://www.b-brave.co.jp/m_shoukai.html
いずれも、そこそこ高価。できれば自作したいということで考えてみました。
自分でもできそうなことは、サーボモータで、ストップレールを操作すること。
今回は東芝テレビのリモコンの青ボタンでGO、赤ボタンでSTOPをしてみたいと思います。
<使ったパーツ>
ATTINY45V-DIP8
http://www.microfan.jp/shop/8_20.html
GWSサーボ PICO/STD/F(フタバ)
http://akizukidenshi.com/catalog/g/gM-01905/
赤外線リモコン受信モジュール PL-IRM2161-C438 (2個入)
http://akizukidenshi.com/catalog/g/gI-03292/
超高輝度5mm赤色LED[7cd60度]OSHR5161A-QR(10個入)
http://akizukidenshi.com/catalog/g/gI-01318/
超高輝度5mm青色LED[5cd60度]OSUB5161A-PQ(10個入)
http://akizukidenshi.com/catalog/g/gI-01322/
スケッチが ATtiny 13A には収まらなかったので、ATtiny 45V (8MHz駆動) を使いました。
リモコン受信モジュールは2.4Vから使えるものです。
<動作の様子>
再生できない場合、ダウンロードは🎥こちら
これを、ストップレールと組み合わせれば、リモート信号機にできるかな?
リモレール
http://www.kuwatec.co.jp/remorail/index.html
リモポイント
http://www.kuwatec.co.jp/remopoint/index.html
ミスターモーターマン商品紹介
http://www.b-brave.co.jp/m_shoukai.html
いずれも、そこそこ高価。できれば自作したいということで考えてみました。
自分でもできそうなことは、サーボモータで、ストップレールを操作すること。
今回は東芝テレビのリモコンの青ボタンでGO、赤ボタンでSTOPをしてみたいと思います。
<使ったパーツ>
ATTINY45V-DIP8
http://www.microfan.jp/shop/8_20.html
GWSサーボ PICO/STD/F(フタバ)
http://akizukidenshi.com/catalog/g/gM-01905/
赤外線リモコン受信モジュール PL-IRM2161-C438 (2個入)
http://akizukidenshi.com/catalog/g/gI-03292/
超高輝度5mm赤色LED[7cd60度]OSHR5161A-QR(10個入)
http://akizukidenshi.com/catalog/g/gI-01318/
超高輝度5mm青色LED[5cd60度]OSUB5161A-PQ(10個入)
http://akizukidenshi.com/catalog/g/gI-01322/
スケッチが ATtiny 13A には収まらなかったので、ATtiny 45V (8MHz駆動) を使いました。
リモコン受信モジュールは2.4Vから使えるものです。
// プラレール リモコン操作計画
#define LED_B 0 // LED (Blue)
#define LED_R 1 // LED (Red)
#define SERVO 2 // サーボモーター
#define IR_IN 4 // IR Receiver
void setup() {
pinMode( IR_IN , INPUT );
pinMode( LED_B, OUTPUT );
pinMode( LED_R, OUTPUT );
pinMode( SERVO, OUTPUT );
setSignal(true);
}
void loop() {
unsigned long irData;
while( digitalRead( IR_IN ) == HIGH ); // 赤外線を感知するまで待つ(信号としてはLOWになるまで待つ)
irData = getIrNec();
if( irData == 0x8C73BF40 ) setSignal(true); // 青信号でGO
if( irData == 0x8B74BF40 ) setSignal(false); // 赤信号でSTOP
}
void setSignal(boolean s) {
digitalWrite( LED_B, s );
digitalWrite( LED_R, !s );
for( unsigned int i=0; i<50; i++ ) {
digitalWrite( SERVO, HIGH );
delayMicroseconds( s ? 1000 : 2000 );
digitalWrite( SERVO, LOW );
delayMicroseconds( s ? 19000 : 18000 );
}
}
unsigned long getIrNec() {
unsigned long irData = 0x00000000, irOff;
while( digitalRead( IR_IN ) == HIGH ); // 赤外線を感知するまで待つ(信号としてはLOWになるまで待つ)
while( digitalRead( IR_IN ) == LOW ); // リーダ部をやりすごす
for( unsigned int dig = 0; dig < 32; dig++ ) { // データを32桁読み込む
irOff = pulseIn( IR_IN, HIGH ); // 赤外線消灯時間(信号としてはHIGHの時間)
if( irOff > 10000 ) return 0UL; // 信号途絶なら終了
if( irOff > 1000 ) irData |= 1UL << dig; // Data=1 とき
}
// ストップビットを確認しないかわりに、データビットの確認
if( (byte)((irData>>16)^(irData>>24)) != 0xff ) return 0UL;
return irData;
}
<動作の様子>
再生できない場合、ダウンロードは🎥こちら
これを、ストップレールと組み合わせれば、リモート信号機にできるかな?
プラレール ストップレール(2本入・車止め2個付) R-08
- 出版社/メーカー: タカラトミー
- メディア: おもちゃ&ホビー
2012-09-21 23:27
nice!(0)
コメント(2)
トラックバック(0)
リモコン信号機 (プロトタイプ) [Arduino]
のスケッチに出てくる
delayMicroseconds( s ? 1000 : 2000 );
の「?」と「:」は
なにを意味しているのですか。
by ハギワラ (2022-08-08 23:16)
条件演算子の三項演算子です。
s が true なら 1000、そうでなければ2000という感じです。
if文で書けばいいのですが、三項演算子だと行数が少なくなるので気に入ってます。
by お名前(必須) (2022-08-15 12:13)