みなさんのお子さんは信号機好きですか?(笑)
うちのともしくんは、信号機がとても大好きです!
いつも、トミカの信号機で遊んでいるのですが、

つい最近、ともしくんがこんなこと↓を言い出しまして・・・

本物の交差点みたいに、連動してる信号機で遊びたい!
でも、そんなの売ってないし・・・じゃあ、マイコン買って作ってみようか!
ってことで、作ってみました^^
Part1(本ページ)では、“ブレッドボード上でPC接続で動く信号機”を紹介します。
作りたい信号機のイメージ
こんな感じの、典型的な十字路交差点の信号機を作ろうと思います。
パターンA:東西の道路が通行(青)、南北の道路が停止(赤)
パターンB:東西の道路が停止(赤)、南北の道路が通行(青)
パターンAとBを交互に繰り返します。


使用したマイコン
マイコンは、ELEGOOのArduino UNO R3スターターキットを購入しました。


信号機以外にも何か作りたくなるかも?と思ってこのセットにしたのですが、他のパーツは不要、と言う方は↓の初心者スターターキットでもいいと思います。


ArduinoのIDE(統合開発環境)は以下ページから取得できます。
>>https://www.arduino.cc/en/software/
日本語化は、ArduinoIDEの「File -> Preferences」 を選択し、Languageを日本語に変更すればOKです。
スターターキットには色々な部品が入っていますが、今回は信号機を作るので、使用する部品は以下になります。
(すべてスターターキットに含まれています。)
- Arduino本体
- USBケーブル
- ブレッドボード
- ジャンパー線×11本
- 抵抗(10kΩ)×10個
- LED(赤)×4個
- LED(黄)×2個
- LED(青)×4個
電子回路
まずは、ブレッドボード上で回路を組んで信号を作ってみます。


抵抗に向きはありませんが、LEDには向きがあるので注意してください。
足が長い方が+側(アノード)、足が短い方が-側(カソード)です。
実際の回路はこんな感じです。
LEDと抵抗とジャンパー線が、ぎゅうぎゅうに並んでいます(笑)


プログラム(スケッチ)
プログラムはこんな感じ。長い・・・
分かりやすさ優先で、コメント多め&かなりべた書きな感じのコードになっています。
// Crossroad Signal
// 十字路交差点の車両信号・歩行者信号のプログラム
// Define Pins
// 車両信号機1
#define CAR_SIG1_R 12 // 赤
#define CAR_SIG1_Y 11 // 黄
#define CAR_SIG1_B 10 // 青
// 歩行者信号機1
#define PED_SIG1_R 9 // 赤
#define PED_SIG1_B 8 // 青
// 車両信号機2
#define CAR_SIG2_R 6 // 赤
#define CAR_SIG2_Y 5 // 黄
#define CAR_SIG2_B 4 // 青
// 歩行者信号機2
#define PED_SIG2_R 3 // 赤
#define PED_SIG2_B 2 // 青
// 全信号消灯
void all_low(){
// 車両信号機1 消灯
digitalWrite(CAR_SIG1_B, LOW);
digitalWrite(CAR_SIG1_Y, LOW);
digitalWrite(CAR_SIG1_R, LOW);
// 歩行者信号機1 消灯
digitalWrite(PED_SIG1_B, LOW);
digitalWrite(PED_SIG1_R, LOW);
// 車両信号機2 消灯
digitalWrite(CAR_SIG2_B, LOW);
digitalWrite(CAR_SIG2_Y, LOW);
digitalWrite(CAR_SIG2_R, LOW);
// 歩行者信号機2 消灯
digitalWrite(PED_SIG2_B, LOW);
digitalWrite(PED_SIG2_R, LOW);
}
void setup() {
// 車両信号機1 初期化
pinMode(CAR_SIG1_B, OUTPUT);
pinMode(CAR_SIG1_Y, OUTPUT);
pinMode(CAR_SIG1_R, OUTPUT);
// 歩行者信号機1 初期化
pinMode(PED_SIG1_B, OUTPUT);
pinMode(PED_SIG1_R, OUTPUT);
// 車両信号機2 初期化
pinMode(CAR_SIG2_B, OUTPUT);
pinMode(CAR_SIG2_Y, OUTPUT);
pinMode(CAR_SIG2_R, OUTPUT);
// 歩行者信号機2 初期化
pinMode(PED_SIG2_B, OUTPUT);
pinMode(PED_SIG2_R, OUTPUT);
// 全信号 消灯
all_low();
}
void loop() {
//====== 道路1通行(青)-道路2停止(赤) ======//
// 車両信号機1 青 点灯
digitalWrite(CAR_SIG1_B,HIGH);
// 歩行者信号機1 青 点灯
digitalWrite(PED_SIG1_B,HIGH);
// 車両信号機2 赤 点灯
digitalWrite(CAR_SIG2_R,HIGH);
// 歩行者信号機2 赤 点灯
digitalWrite(PED_SIG2_R,HIGH);
delay(10000);
//====== 道路1停止(黄)-道路2停止(赤) ======//
// 車両信号機1 青 消灯
digitalWrite(CAR_SIG1_B,LOW);
// 車両信号機1 黄 点灯
digitalWrite(CAR_SIG1_Y,HIGH);
// 歩行者信号機1 青 点滅
for( int i=0 ; i<6; i++){
digitalWrite(PED_SIG1_B,HIGH);
delay(500);
digitalWrite(PED_SIG1_B,LOW);
delay(500);
}
// 車両信号機2 赤 点灯維持
// 歩行者信号機2 赤 点灯維持
//====== 道路1停止(赤)-道路2停止(赤) ======//
// 車両信号機1 黄 消灯
digitalWrite(CAR_SIG1_Y,LOW);
// 車両信号機1 赤 点灯
digitalWrite(CAR_SIG1_R,HIGH);
// 歩行者信号機1 青 消灯維持
// 歩行者信号機1 赤 点灯
digitalWrite(PED_SIG1_R,HIGH);
// 車両信号機2 赤 点灯維持
// 歩行者信号機2 赤 点灯維持
// 信号切替待ち
delay(3000);
//====== 道路1停止(赤)-道路2通行(青) ======//
// 車両信号機1 赤 点灯維持
// 歩行者信号機1 赤 点灯維持
// 車両信号機2 赤 消灯
digitalWrite(CAR_SIG2_R,LOW);
// 車両信号機2 青 点灯
digitalWrite(CAR_SIG2_B,HIGH);
// 歩行者信号機2 赤 消灯
digitalWrite(PED_SIG2_R,LOW);
// 歩行者信号機2 青 点灯
digitalWrite(PED_SIG2_B,HIGH);
delay(10000);
//====== 道路1停止(赤)-道路2停止(黄) ======//
// 車両信号機1 赤 点灯維持
// 歩行者信号機1 赤 点灯維持
// 車両信号機2 青 消灯
digitalWrite(CAR_SIG2_B,LOW);
// 車両信号機2 黄 点灯
digitalWrite(CAR_SIG2_Y,HIGH);
// 歩行者信号機2 青 点滅
for(int i=0; i<6; i++) {
digitalWrite(PED_SIG2_B,HIGH);
delay(500);
digitalWrite(PED_SIG2_B,LOW);
delay(500);
}
//====== 道路1停止(赤)-道路2停止(赤) ======//
// 車両信号機1 赤 点灯維持
// 歩行者信号機1 赤 点灯維持
// 車両信号機2 黄 消灯
digitalWrite(CAR_SIG2_Y,LOW);
// 車両信号機2 赤 点灯
digitalWrite(CAR_SIG2_R,HIGH);
// 歩行者信号機2 青 消灯維持
// 歩行者信号機2 赤 点灯
digitalWrite(PED_SIG2_R,HIGH);
// 信号切替待ち
delay(3000);
//====== 全信号 消灯 ======//
all_low();
}
動かしてみよう!
作った回路をPCに接続して、プログラムを実行してみます。
いい感じに信号が動きました!
達成感ありますね✨無駄に、じーっと見てしまいます。(笑)
おわりに
今回は、ともしくんの「本物の交差点みたいに、連動してる信号機で遊びたい!」を叶えるべく、マイコンArduinoを使用した信号機作り(part1)を紹介しました。
元エンジニアの性なのか、息子のためと言いつつ、思いのほかワクワク楽しんでいる自分がいることに驚きました(笑)
電子工作はプログラミングを学べますし、論理的思考力・創造力・問題解決能力などなど、たくさんの力が身に付くので、ものづくりが大好きなお子さんには特におすすめしたい遊びです。



ママが勤めてた会社でも、業務外の活動で電子工作やってたよね?
電子工作は、エンジニアに必要な力がすごく鍛えられる遊びなんだね!!
トミカで遊べるような信号機にするには、↓が残っていますが、Part2以降でまたご紹介したいと思います^^
①PC駆動から、電池駆動に変更する
②ブレッドボードの回路から、本物っぽい信号機の形に変更する
(②が重い・・・)
コメント