作ったもの: シグナルタワー&USB制御装置
つくったもの
Q. なぜ作ったの?
A. 面白そうだから & もったいなかったから
動画はページ末尾
経緯
昔、Amazonで勢い余ってシグナルタワーを買いました。
サーバーの稼働状態とかで光らせると面白い、というのを見ていたため。
参考: 動く!改造アホ一台 (akibabara.com)
で、買って一度光らせて放置していたのですが、先日荷物整理していた時に出てきたので、流石にもったいないなあという想いから、きちんと作ることにしました。
ケース
パトライト社の付属説明書の図面から、本体下部のネジがハマるように3Dプリントして作成。きっちりハマりましたが、ネジ止めなどしていないので引っ張るとスポっと抜けます。
それだけだと回路が収まるスペースが無いので、家にあった小物入れ(確かニトリ製)にピッタリハマる蓋を印刷して、そこにネジ止め。
もっとこだわって作りたかった気もするんですが、3Dプリント時間との兼ね合いでちょっと断念
制御回路
制御回路は以下の組み合わせです。
・シグナルタワー
・リレー基板
・マイコンボード(Arduino Micro相当)
・ACアダプタ
回路は回路図を引くのもめんどくさいほどシンプルです
制御プログラム
こちらも非常にシンプルです。
gpsnmeajp/signal_usb_arduino (github.com)
9600bps UARTで来たものの下位3bitを、シグナルタワーに割り当てているだけです。
ただし、デモ用に、一定時間経過後に適当に点滅する機能もつけているため、null byteを受信するとタイマーをリセットする機能がついています。
const int RED = 8;
const int YELLOW = 7;
const int GREEN = 6;
const int LIGHT_ON = LOW;
const int LIGHT_OFF = HIGH;
unsigned long t = 0;
void setup() {
Serial.begin(9600);
pinMode(RED, OUTPUT);
pinMode(YELLOW, OUTPUT);
pinMode(GREEN, OUTPUT);
digitalWrite(RED, LIGHT_ON);
digitalWrite(YELLOW, LIGHT_ON);
digitalWrite(GREEN, LIGHT_ON);
delay(500);
}
void light(int n) {
digitalWrite(RED, !(n & 1));
digitalWrite(YELLOW, !(n & 2));
digitalWrite(GREEN, !(n & 4));
}
void loop() {
int n = Serial.read();
//受信データの下位3bit
if (n > 0) {
light(n);
//無信号時間を更新
t = millis();
}else if (n == 0) {
//無信号時間を更新
t = millis();
}
//30秒間無信号だったらデモモードに入る
if (millis() - t > 30 * 1000) {
light(millis() >> 14);
}
}
Android側リモコンプログラム
ソースコードは以下
gpsnmeajp/signal_usb_android_usb_host (github.com)
usb-serial-for-androidを使用し、1バイト送っているだけのプログラムです。
mik3y/usb-serial-for-android: Android USB host serial driver library for CDC, FTDI, Arduino and other devices. (github.com)
Wi-FiやBluetoothなど、リモコン操作可能なものに発展できます。
ネット上の情報をもとに動作させても楽しそうです。
自分も作りたいという人向け
・amazonとかでパチモノのシグナルタワーはたくさんあるので、 本物へのこだわりがなければそれでいいと思います。(たしか3000円くらい)
・電子工作したことない人は、USBシグナルタワーが3万円くらいで売ってるのでそっちでいいと思います(制御方法は知りません)
・たまたま売ってたのが24Vだったのでそれを使いましたが、12V品を使えば5Vとかでも光ったかもしれません