• 公開日:2021年09月07日
  • | 更新日:2022年11月30日

うそ発見器作ってみた 第4話 絶望の時期

こんにちは!ヒロです。

第3話までは基本的なハードウェアの動作確認をしました。
第3話「ハード製作の崩壊と困難」

今回は、『ソフトウェア』について話していきます。仕様書を基にソフトウェアを完成させていきたいと思います。ここでは、製品機能の全体的なフローチャート及び、割り込みを使用して“汗の量を取得”,“心拍数の取得”のフローチャート作成について話していきます。その中でも特に “汗の量を取得”,“心拍数の取得”について絶望を感じました。

全体的なフローチャート

今回のフローチャート作りでは、第2話「製作実習の仕様書とは?」の仕様書内にあるフローチャートを参考にコードを完成させていきます。
今回の製品機能の全体のフローチャート(メインルーチン)は図12になります。これをベースにプログラミングしていました。しかし、全然動かない…なんでだ????悩みに悩んでも自分ひとりの力では解決できなかったため、先輩に助けを求めました。

先輩の助言は、「そもそもフローチャートとは、フローチャートを見ただけでコードが書けるレベルまで落とし込むこと」という事でした。

私が書いたフローチャートは概念的なものでうわべだけのものだったのです。

図12 メインルーチン

図12 メインルーチン

 

脱 うわべだけのフローチャート

ここから、具体的に今回使用する割り込みのフローチャートも考えていきたいと思います。割り込みのフローチャートを以下に示し、各フローチャートの流れを説明します。

タイマー割り込みルーチン

図13では、30秒経ったら心拍数や汗の量(電圧値)の最大値と最小値の差分を各変数に格納するルーチンで、下記の流れになっています。
・30秒ごとに心拍センサで取得したパルス数を変数heart_pulseに格納
・汗センサで取得した汗の量(電圧値)の最大値と最小値の差分を変数sweat_valに格納
・その他変数を初期化

図13 タイマー割り込みルーチン

図13 タイマー割り込みルーチン

 

ADC割り込みルーチン

図14では、汗の量の最大値と最小値を導き出すルーチンで、下記の流れとなっています。
・100 msごとに汗の量(電圧値)の値を変数MaxADCVal とMinADCValに格納
・格納する際は、汗センサ取得値と現状変数値を比較し、常に最大・最小値が格納される

図14 ADC割り込みルーチン

図14 ADC割り込みルーチン

 

GPIO割り込みルーチン

図15では、拍動の回数を測定するルーチンで、下記の流れとなっています。
・心拍センサにデジタル信号が入力されたときに変数pulseに1を足す
・心拍センサの接続ピン(P1.2)をクリア

図15 GPIO割り込みルーチン

図15 GPIO割り込みルーチン

 

このように、フローチャートを見て何も考えなくても、コードが書けるレベルまで落とし込むことによってプログラミングができ、希望する動作をさせることができました。

まとめ

大学時代にフローチャートの意味は勉強して理解はしていましたが、実際にコードを記述する際にはフローチャートを書かずにプログラミングをしていました。したがって、フローチャートからコードにする作業にはあまり慣れていなく、四苦八苦していました。

また、今回の大きな山場としてどうやって図13-15の割り込みを図12のメインルーチンに組み込んでいけばよいのか???………初めての作業となれない作業とが重なり、今自分のやっていることが正しいのかを判断できなくなりました。そして訳が分からなくなる結果となり、絶望する期間が5日間続きました………これはやばい…さすがにこのままではいけない!と思い、一つ一つフローチャート・コードが正しいのかを先輩方に確認しながら進めていきました。

ここで、そもそも自分で考えたすべてのフローチャートが間違っていないのか、割り込みの考え方が正しいのかをWebサイトで内容調べることや、サンプルコードを活用するなどを行いました。そして、サブルーチンごとにプロジェクトを作りプログラミングする事によって、今何が分からないのかを明確にすることができました。これにより、デバック作業を容易にできるだけでなく作業の効率化につなげることができました。

この経験から、いきなり大きなタスクからはじめて分からないと嘆いて時間を無駄にするのではなく、何が分からないのかをはっきりさせて、小さなタスクに分けていくことが重要であることを学びました。また、自分ができる事から少しずつ取り組むことの大切さを改めて気づきました。これらの学びや気づきは、今後の仕事でも必要なスキルであるんだなと思いました。

今回学んだこと

・何事も小さなタスクに分けてから取り組むこと
・いちからコードを記述するのではなく、サンプルコードの活用
・割り込みの活用方法

次回は、いよいよ最終回で第5話 製作実習を終えてです。これまでの集大成として完成品動作から製作実習発表時について話していきたいと思います。

第5話を読む

 

うそ発見器作ってみたシリーズ一覧

第1話「タイムリミットと製作物の立案」
第2話「製作実習の仕様書とは?」
第3話「ハード製作の崩壊と困難」
第4話「絶望の時期」
第5話「製作実習を終えて」