組み込みソフトウェア開発の技術を習得するのに、実際にモノを動かしながらプログラミングできる電子工作は有用と思います。簡単な課題から現実のシステムを模した難しい課題まで、様々なレベルに対応できますし、要件定義、設計、実装、テストと様々な開発フェーズのソフトウェアエンジニアリングを体験することができます。
なので、ここでは信号機の制御を題材にした電子工作を通じてソフトウェア開発の雰囲気を体験したいと思います。電子工作に主眼を置くのではなく、ステートマシンを活用した組み込みソフトウェア設計などのソフトウェア開発がテーマになります。
ハードウェア
押しボタン式横断歩道を模した電子工作のハードウェアを考えます。
材料
- マイコンはArduino UNOを利用します。
- 車用信号灯として、赤、黄、緑のLEDを用います。
- 歩行者用信号灯として赤、緑のLEDを用います。
- 押しボタンは、タクトスイッチを用います。
- 「しばらくお待ちください」ランプは白のLEDを用います。
- 配線は、ブレッドボードを利用します。
LED
LEDの回路イメージは以下の用になります。とてもシンプルです。
デジタル出力がHIGHになればLEDが点灯します。プログラムの抜粋は以下のようになります。
void setup() {
pinMode(D2, OUTPUT);
digitalWrite(D2, HIGH);
}
タクトスイッチ
タクトスイッチの回路イメージは以下のようになります。とてもシンプルです。
スイッチにはプルアップ抵抗またはプルダウン抵抗を配線しますが、今回は点線のように内部プルアップ抵抗を使用して、LEDのように抵抗は配線しません。
内部プルアップ抵抗を使用する場合のプログラムの抜粋は以下のようになります。プルアップですので、ボタンを押していないときはHIGH、ボタンを押すとLOWになります。回路イメージでHIGHとLOWを確認してみましょう。
void setup() {
pinMode(D2, OUTPUT);
pinMode(D8, INPUT_PULLUP);
}
void loop() {
digitalWrite(D2, digitalRead(D8));
}
おわりに
車用信号灯、歩行者用信号灯、歩行者用押しボタンの回路イメージは以下のようになります。
実際に配線したものは以下のような感じです。なんとなく押しボタン式横断歩道に見えませんか。
電子工作に主眼を置くのではなく、ステートマシンを活用した組み込みソフトウェア設計を中心としたソフトウェア開発がテーマになります。電子工作で稚拙なところがあると思いますが、ご容赦ください。