Androidのメモとか

ポキオの日記です。今日も遅延してない。

Arduinoと3Dプリンタで4灯式信号機を作る

スポンサードリンク

父は減速現示が好き。

ポキオ Arduino NeoPixel 4灯式信号機

4歳息子「信号機がほしい」

息子が日本信号の鉄道用信号機のガチャガチャを見てから、信号機がほしいと言って聞かないわけです。

まぁ、無いなら作ればいい。ということで、今回は4灯式信号機を作ってみます。

www.tomytec.co.jp

イメージはこんな感じ。進行、減速、注意、停止の現示が可能な信号機を作ります。

3Dプリンタでそれっぽい信号をつくる

なにはともあれ、信号っぽいガワを作っていきます。

ポキオ Arduino NeoPixel 4灯式信号機

Fusion 360で、信号機本体にひさしをくっつけて、それっぽくしていきます。今回は、めんどくさいので信号機の裏側や支柱などは作らないでおきます。

光源はNeoPixel

今回使用する光源はNeoPixelのLEDテープを使います。

ポキオ Arduino NeoPixel 4灯式信号機

普通のLEDを使ってもいいんですが、抵抗を挟んだりするのが面倒なのと、配線も複雑になるので、今回はこのNeoPixel系のLEDテープを使います。これだと、GND、電源、信号線の3つだけ繋げば動作させる事ができます。

全部合体させるよー

こんな感じです。

ポキオ Arduino NeoPixel 4灯式信号機

LEDテープはLED4つ分のところでハサミで切って使用しています。GND・電源・信号の線をArduinoのピンに接続していきますが、信号の線は5Vピンに近いA0ピンにさしています。

NeoPixelの特徴でもあるんですが、色をRGBで指定するため、赤は良いとしても、黄色と青(緑)色は現物を見ながら調整しています。

// 黄色
255, 128, 0

// 青色
64, 255, 0

一旦は上記のようなRGB値にしています。

光らせた様子はこちら

光を拡散させたかったので、透明のフィラメントでレンズを作り、LED部分を覆っています。

ポキオ Arduino NeoPixel 4灯式信号機

いい感じいい感じ。

ポキオ Arduino NeoPixel 4灯式信号機

信号機を綿棒の箱に輪ゴムでくっつけて、早速息子氏に遊ばせてみました。2.5秒ごとに信号が節操なく変わるようにプログラミングしてしまったので、若干ビジーかなと思ったんですが、息子的には代わる代わる信号が変わって面白そうな様子でした。

4歳息子「中継信号機と踏切がほしい」

ひとしきり遊んだあとに、息子氏が「中継信号機と踏切も」と言い出したので、おいおいそちらも着手しようと思います(笑)

コードはこちら

#include <Adafruit_NeoPixel.h>

Adafruit_NeoPixel pixels = Adafruit_NeoPixel(4, A0, NEO_GRB + NEO_KHZ800);

void setup() {
  pixels.begin();
}

void loop() {
  for(int i = 0; i < 4; i++){
    switchSignal(i);
    delay(2500);
  }
}

// 0:停止 1:注意 2:減速 3:進行
void switchSignal(int i){
  long light1[4] = {pixels.Color(0, 0, 0),pixels.Color(0, 0, 0),pixels.Color(255, 128, 0),pixels.Color(0, 0, 0)};
  long light2[4] = {pixels.Color(255, 0, 0),pixels.Color(0, 0, 0),pixels.Color(0, 0, 0),pixels.Color(0, 0, 0)};
  long light3[4] = {pixels.Color(0, 0, 0),pixels.Color(255, 128, 0),pixels.Color(0, 0, 0),pixels.Color(0, 0, 0)};
  long light4[4] = {pixels.Color(0, 0, 0),pixels.Color(0, 0, 0),pixels.Color(64, 255, 0),pixels.Color(64, 255, 0)};

  pixels.setPixelColor(0, light4[i]);
  pixels.setPixelColor(1, light3[i]);
  pixels.setPixelColor(2, light2[i]);
  pixels.setPixelColor(3, light1[i]);
  pixels.show();
}

「Androidのメモとか」は、Amazon.co.jpを宣伝しリンクすることによってサイトが紹介料を獲得できる手段を提供することを目的に設定されたアフィリエイト宣伝プログラムである、Amazonアソシエイト・プログラムの参加者です。

このブログは個人的なメモ書きであったり、考えを書く場所であります。執筆者の所属する団体や企業のコメントや意向とは無関係であります。また、このブログは必ずしも正しいことが書かれているとは限らず、誤字脱字や意図せず誤った情報を載せる場合がありえます。それが原因で読者が不利益を被ったとしても、執筆者はいかなる責任も負いません。ありがとうございます。