今回は自分で作ってみる、ということで、チャレンジとしていくつか課題をあげてみたいと思います。前回までに作成したプログラムをベースに、いろいろな機能を追加してみましょう!今回はチャレンジ課題としていますので、特に回答は用意していません。正解はなく、思った通りに動作すればそれが正解ですので、ぜひチャレンジしてみてください。このシリーズで作成したプログラムは、プログラミング経験がないと難しかったかもしれません。私のプログラミング能力はかなり低いので、それが影響して余計に難しくなっているかもしれませんが...このシリーズを通して、電子工作にトライしてみて、プログラムを動作させてみたら、ぜひ以下のチャレンジ課題をやってみてください。中には実装が難しいものもあります。難しいものほど、動いた時は嬉しいですし、いろいろな経験が身につきます。動かない、どうしたらよいかわからない、というようでしたら、お問い合わせフォームで問い合わせいただければと思います。何かサポートできると思います。表示パターンを変える「晴のち曇」や「晴時々曇」などのLED点滅パターンでの表現方法は、今回実装した以外にもいろいろとあると思います。自分の好きなパターンに変えたりしてみてください。パターンの変え方は、$basic_pat配列(PHP)、basicPatリスト(Python)に格納している点滅パターンを変えたり、またパターンを増やしたりして、実際のLED点滅パターンを生成するところを変えたりすると変更できそうですよね。情報取得時にLEDを全部点灯させる指定時刻になったり、スイッチを押すとWebから情報を再取得するようにしています。現在はデバッグ用に取得したことをターミナルに表示していますが、本運用した場合、ターミナル画面は表示しませんので、情報取得したのかよくわかりませんよね。そこで、情報を再取得する際、LEDを数秒間、全点灯するとよいと思います。Piの電気仕様上も問題ありません。全点灯する処理を関数にして呼び出す方式がいいと思います。鉄道運行状況は時間が経ったら表示を消す鉄道運行状況の情報は、情報自体の寿命が短いです。30分前に取得した時に「正常運転」だとしても、今現在、何かの理由で遅延が発生しているかもしれません。そこで、鉄道運行状況の情報は、例えば15分ぐらい経過したら消灯する、という処理を追加するのもよいと思います。天気予報と鉄道運行状況の不明文字列をログに残す天気予報や鉄道運行状況の文字列は、文字列比較の判定をしています。天気予報はいろいろ種類がありますし、鉄道運行状況も今後文字列表記が変わるかもしれません。現在のプログラムでは、判別できない文字列に対しては、LEDが消灯したままになります。消灯」であれば、「晴時々曇」の正常表示とわかります。消灯」であれば、何かがおかしいです。晴れの場合は、晴れのLEDが点灯したままになるはずです。そこで、このように異常表示になった場合は、取得文字列が判別できなかった、ということですので、異常表示の際に、その時に取得した文字列をファイルにログに残す、という機能を追加してみましょう。ポイントは2つあります。ひとつはLEDの店頭異常をプログラムでどのように判定するかという点、もうひとつは文字列をファイルに残す点です。ファイルの残すには、PHP/Pythonで文字列のファイルへの書き出し方法を調べればすぐにできそうですよね。LEDの点灯が異常かどうかの判定はどうすればいいでしょうか。この辺りが考えどころになります。スイッチ長押しでアプリを終了させるこれはちょっと難易度が高くなると思います。前回までに完成させたプログラムはfor文で指定回数繰り返していましたが、実際に運用する場合はwhile文で無限に繰り返すことになります。そのようなプログラムを終了させるには、Control+Cなどでプログラムを強制終了させることになります。強制終了させると、タイミングによってはLEDがついたままになったりしますので、精神衛生上もよくないです。そこで、スイッチが一定時間以上押されたらプログラムを終了させる、という処理を追加してみましょう。スイッチが一定時間以上押される、というのはどのように判定すればよいか、ちょっと難しそうですよね。スイッチを普通に押した時は情報更新する必要があります。そのため、スイッチを普通に押した場合と長押しした場合を区別する必要があるのですが、どのように実装すればいいでしょうか。ヒントとしては、LEDの点滅パターンの最小時間は0.25秒です。0.25秒ごとにスイッチの状態を判定します。スイッチを普通に押した時には情報更新、スイッチを1秒以上押した時はプログラム終了とする場合、以下のような判定ができれはよさそうです。・ある時刻にスイッチ状態を確認したところON、その0.25秒後にスイッチ状態を確認したところOFFの場合は、情報更新。・これを繰り返して、スイッチONの状態が5回確認できた場合、プログラム終了するスイッチがONの状態が、0.25秒間隔で何回続いたかを確認すれば、スイッチ普通押しと長尾しの区別ができると思います。人感センサーというものがあります。焦電型赤外線(人感)センサーモジュールこのセンサーは3本の端子が出てきますが、1本をグラウンド、1本を3.3Vに接続すると、人の動きを検知した場合、残りの1本の電圧が3.3Vになります。PiのGPIOピンの1本を入力ピンにして、このセンサーの検知ピンを接続すれば、電圧の状態で人がいるかどうかの判定ができます。このセンサーは基板についている半固定抵抗を調整すると、人を検知した場合、どの程度の時間、検知ピンを3.3Vにするか、設定できます。(ただ調整は勘です)ということは、このセンサーの検知ピンを見て、3.3VであればLEDで情報表示、0VであればLEDを消灯すれば、人がいるときにLEDを点灯することができます。LEDの消費電力は少ないので、人がいないときに消灯する必要もないかもしれませんが...雷を表示する夏の天気予報では雷の予報がよく見られます。雷も表示するようにしてみましょう。ハードウエアは、雷表示用のLEDを追加します。ソフトウエアの方ですが、雷は雷っぽく点滅させるのがよいと思います。プログラムで設定した基本点滅パターンとは別にパターンを用意するのがいいと思います。明るいLEDを高速で点滅すると、光過敏性発作を引き起こす可能性もゼロではありませんので、LEDを点滅させる場合は早くても1秒間に3回程度に抑えるようにします。他にもいろいろ考えてみましょう!上の例はまだまだ一部だと思います。