組み込みソフトウェア開発の技術を習得するのに、実際にモノを動かしながらプログラミングできる電子工作は有用と思います。簡単な課題から現実のシステムを模した難しい課題まで、様々なレベルに対応できますし、要件定義、設計、実装、テストと様々な開発フェーズのソフトウェアエンジニアリングを体験することができます。
なので、ここでは信号機の制御を題材にした電子工作を通じてソフトウェア開発の雰囲気を体験したいと思います。電子工作に主眼を置くのではなく、ステートマシンを活用した組み込みソフトウェア設計などのソフトウェア開発がテーマになります。
要求仕様
図のような押しボタン式横断歩道を考えます。なお、信号の青は実際には緑色で点灯します。
- 初期状態は、車用信号機は青、歩行者用信号機は赤に点灯しています。
- 歩行者が、横断歩道の歩行者用ボタンを押すと「しばらくお待ちください」ランプが点灯し、車道信号機と歩道信号機が一連の動作を開始します。
- 車用信号機の動作は以下の通りです。
- 歩行者用ボタンが押されるのを待ちます。
- ボタンが押されてから10秒後に青から黄に点灯を切り替えます。
- 5秒後に黄から赤に点灯を切り替えます。
- 歩行者用信号機が青点滅から赤に点灯を切り替えてから1秒後に、赤から青に点灯を切り替えます。
- 歩行者用信号機の動作は以下の通りです。
- 歩行者用ボタンを押されると、白(しばらくお待ちくださいランプ)が点灯します。
- 車用信号機が黄から赤に点灯を切り替えてから1秒後に、赤から青に点灯を切り替えます。
- 赤から青に点灯が切り替わると、白(しばらくお待ちくださいランプ)を消灯します。
- 5秒後に青から青点滅に点灯を切り替えます。
- 青点滅では0.5秒間隔で、青を5回点灯します。
- 青点滅で青を5回点灯したら、青から赤に点灯を切り替えます。
おわりに
何となく押しボタン式横断歩道の信号機の動作をイメージできたでしょうか。
今回は現実によく認知されているシステムでしたので、簡単な箇条書きを用いて、要求仕様としてシステムの振る舞いを記述しました。
要求仕様の前段階には要求があります。信号機の要求仕様に疑問点があれば、その背景にある要求を考えてみるとよいかもしれません。
要求と要求仕様を書くにも技術が必要です。詳細は、別の機会に触れたいと思います。