父は減速現示が好き。
4歳息子「信号機がほしい」
息子が日本信号の鉄道用信号機のガチャガチャを見てから、信号機がほしいと言って聞かないわけです。
まぁ、無いなら作ればいい。ということで、今回は4灯式信号機を作ってみます。
イメージはこんな感じ。進行、減速、注意、停止の現示が可能な信号機を作ります。
3Dプリンタでそれっぽい信号をつくる
なにはともあれ、信号っぽいガワを作っていきます。
Fusion 360で、信号機本体にひさしをくっつけて、それっぽくしていきます。今回は、めんどくさいので信号機の裏側や支柱などは作らないでおきます。
光源はNeoPixel
今回使用する光源はNeoPixelのLEDテープを使います。
普通のLEDを使ってもいいんですが、抵抗を挟んだりするのが面倒なのと、配線も複雑になるので、今回はこのNeoPixel系のLEDテープを使います。これだと、GND、電源、信号線の3つだけ繋げば動作させる事ができます。
全部合体させるよー
こんな感じです。
LEDテープはLED4つ分のところでハサミで切って使用しています。GND・電源・信号の線をArduinoのピンに接続していきますが、信号の線は5Vピンに近いA0ピンにさしています。
NeoPixelの特徴でもあるんですが、色をRGBで指定するため、赤は良いとしても、黄色と青(緑)色は現物を見ながら調整しています。
// 黄色 255, 128, 0 // 青色 64, 255, 0
一旦は上記のようなRGB値にしています。
光らせた様子はこちら
光を拡散させたかったので、透明のフィラメントでレンズを作り、LED部分を覆っています。
いい感じいい感じ。
信号機を綿棒の箱に輪ゴムでくっつけて、早速息子氏に遊ばせてみました。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(); }