感染対策に最適!便利なIoTグッズ作ってみた【IoT電子工作ラズベリーパイ】


今回の出演者

元役者ITエンジニア

新卒ITエンジニア

IoTエンジニア
ITサプリについて
この記事は動画『ITサプリ』で配信している内容をもとにテキスト配信しています。ITサプリは未経験からIT業界へ転職したい方に向けて情報配信をしているYouTubeチャンネルです。IT業界ではたらく上で役立つ知識を発信していますので動画でもお楽しみください。

てもし
今回は『IoTグッズを作ろう!』ということで、IoTエンジニアのかおりんさんにお越しいただきました。
1.IoTグッズのイメージを決めよう

てもし
一体作るものは何かと言いますと、ティッシュカバー。これをIoT化してみたいと思います。

しろ
『日用品のIoT化』は良いですよね。

てもし
ですね。どんな機能をつけるかというと、ティッシュカバーにCO2濃度センサーをつけて、3段階のアラートを鳴らせるようにしていきたいと思います。今では飲食店などにも『CO2濃度センサー』というものがあると思いますし、このご時世にぴったりなものを作りたいと。

しろ
といっても、作るのは結構大変そうだと思いますが……?

てもし
ですので、今日はかおりんさんに丸投げで、パパッと作っていっていただこうと思います!(笑)
2.IoTグッズ制作の準備

かおりん
では、用意するものをご紹介しますね。まず『Raspberry Pi (ARMプロセッサを搭載したシングルボードコンピュータ)』という、小さいパソコンみたいなもの。


かおりん
次に、CO2の濃度を測るセンサーですね。


しろ
結構小さいですね。

かおりん
そして、先ほどのセンサーとRaspberry Piを繋ぐためのケーブルですね。どこに何をさしたか分かりやすいように、カラフルにしています。


てもし
なるほど。

かおりん
あとは、音を鳴らすためのスピーカーと、電源を供給するためのモバイルバッテリー。それから設置するためのティッシュボックスですね。



3.センサーとRaspberry Piを接続しよう

かおりん
では実際に作っていきます。まず、センサーとRaspberry Piを接続します。
センサーの裏に「ここはこうですよ」という情報が貼ってありますので、それに合わせてケーブルのピンをさします。同様に、Raspberry Piにも「ここは電源ですよ」とか「ここはこれですよ」という決まり事がありますので、それに合わせてつないでいきます。



てもし
そのケーブルは、色によって何か変わるとかではなくて全部同じなのでしょうか?

かおりん
はい。全部同じで、ただケーブルの色が違うだけです。
今回は電源に分かりやすく赤を、グラウンド(GND・グランドとも呼ばれ、電気をスムーズに流すために、必要な回路動作を決める基準となるもの)には、紫のように少し濃い色のケーブルをつけていきます。


かおりん
こちらはシリアル通信(電気通信において伝送路上を一度に1ビットずつ、逐次的にデータを送ること)という形で接続しますので、センサー裏面の『TX』『RX』と書いてあるところにもピンをさしてまいります。


かおりん
続いて、Raspberry Pi側の右から2番目が電源の接続部になるので、こちらに赤いケーブルをさします。その横がグラウンドですので、そちらにもケーブルをさします。



てもし
「ここが電源」と基盤にしっかり書いてあるのですか?

かおりん
書いていないですね(泣)
「Raspberry Pi ピンアサイン」と調べていただいて、確認していただければと思います。続いて『TX』『RX』ですね。確か、TXが上でRXが下だったかな……



かおりん
このような感じで、センサーとRaspberry Piの接続というのは、こちらでひとまず終了となります。あとはスピーカーを差し込みまして、箱に設置していこうと思います。



しろ
あ、電源つきましたね。

かおりん
ですね。やはり、電源が入りますとセンサーにも電源が供給されますので、センサーのLEDが光っています。
4.ティッシュケースに設置しよう


かおりん
ケース底部に設置したRaspberry Piの上からティッシュを乗せまして、フタを閉じます。

てもし
もう分からないですね。

かおりん
こちらでティッシュケースへの設置は終了となります。

しろ
早技ですね(笑)
5.音声を録音しよう

かおりん
次は、パソコンを使って音声を録音ですね。では録音していきましょう。

てもし
アラート音の録音ですね。ここは、しろさんに音声を入れてもらいましょうか。

しろ
3段階だから、3つ音声をとるということですよね? 何にしましょう、1つ目のセリフ考えてください。

てもし
何にしましょうか……ウィスパーのような囁き声とか? あまり意味なさそうですが(笑)

しろ
逆に「あれ、今何か話したよ?」みたいな感じになるかもしれませんよ。

てもし
なるほど。「何か聞こえたぞ?」となるアラート音ですか。
では、1つ目はウィスパーボイスで何かを言ってもらって、2つ目は普通に「そろそろ換気しませんか?」と言う感じでどうでしょう。それで、3つ目は「換気しやがれコノヤロウ」とか、怒鳴り散らすような感じで。

しろ
なるほど、結構怒る感じでね(笑)

てもし
はい、そんな感じで収録していきましょう。

かおりん
まず1つ目ですね。

しろ
(小さな声で)「そろそろ換気しませんか?」
……これ、聞こえていますか? 要らなくないですか?

てもし
OKでしょう!(笑)
次、2つ目ですね。これは普通にお願いします。

しろ
「そろそろ換気しませんか?」

てもし
良いですね、可愛いじゃないですか。

しろ
これ、自分の声っていうのが恥ずかしいですね。

てもし
3つ目は「換気しろ、コノヤロウ」と怒鳴る感じで。

しろ
「はやく換気しやがれ、バカヤロウ!」
……これ、大丈夫? これで良いですか?

てもし
良いですね! こんなアラート鳴ったら、少し腹立ちますけど(笑)
さて。こんな感じで収録した音声を「Raspberry Piに移していく」ということで、かおりんさん、次の工程をお願いします。
6.音声をRaspberry Piに送ろう

かおりん
では、先ほど収録した音声を、パソコンからRaspberry Piに送っていく、ということをやっていきたいと思います。
まずはファイル名を『case1』『case2』『case3』に変更します。


かおりん
音声を移す前に、拡張子(ファイルの種類を識別するために、ファイル名の末尾に付けられる文字列)の形式を、inputの値として適したものに変更していきます。元のデータから、変換したいものを「この拡張子に変更するよ」ということを記載することができます。


かおりん
このように、ファイルを3つとも、wavという拡張子に変更していきます。



かおりん
ファイルの拡張子が変更できていることが確認できましたら、このファイルをネットワークでつながっているRaspberry Piに直接送っていきます。その際、scpコマンド(ファイルをコピーする際に使用する、Linuxのコマンド)で「このファイルをRaspberry Piのディレクトリに入れて」ということを記載します。


てもし
Linuxではお決まりですね。

しろ
これで、送信できている感じでしょうか?


かおりん
はい、送れました。これで名前を変えつつ、残りの2つも送ってまいります。


かおりん
移せたことを一応確認しますと、Raspberry Piのコンソール内の『case』というフォルダにcase1~3のデータが入っているのが確認できました。


てもし
これで、しろの音声データがRaspberry Piに引っ越すことができました。
7.プログラミングをしよう

かおりん
次はプログラミングですね。センサーで実際に受け取った値をケース分けして、対応した音声を流すということを書いていきたいと思います。
先ほど接続したセンサーの値を受け取るのに、とても便利なライブラリがPythonにありますので、まずはライブラリのインポートをおこないます。

てもし
なるほど。プログラミングにはPythonを使用されるのですね?

かおりん
はい、Pythonを使います。
センサー内のライブラリ名がmh_z19ですので「import mh_z19」と入力します。続いて「import subprocess」と入力しますが、こちらはスピーカーから音を出すときに使用するライブラリですね。
そのために、CASE1・2・3という形で、センサーのアラートを鳴らす『条件の値』を決めていきます。


てもし
濃度が「これぐらい高まったら鳴るよ」のような値を決めていく、ということですね。

かおりん
900くらいで「換気しませんか」とささやきまして、1000超えたところで通常に「換気してください」と。1500を超えたら怒る、ということで値を設定しました。


かおりん
続いて「センサーからCO2の濃度を受け取る」というコードを書いていきましょう。CO2の値を取得できるメソッドというものがありまして、そちらの変数にCO2を入力してまいります。


かおりん
次に、先ほどインポートしました『subprocess』で決めた『条件の値』と比較して音が鳴るように、コマンドを叩くような形で「shell=True」といった記述をしてまいります。3つとも似たような文章になるので、複写しつつ値を記述します。



てもし
それぞれのケースで決めた『条件の値』ごとに、やることを決めていく、ということですね。

かおりん
コンソール上で叩いた時にCO2の濃度を知りたいので、確認ができるように一応、デバッグ用として『print』というコマンドも入力していきます。


てもし
こうすることで、現状の濃度が数値で見ることができる、ということですね。

かおりん
値が取れているか、の確認はしたいですからね。プログラムとしては、こちらで以上です。

てもし
では、プログラミングまで終わりましたので、動作確認も忘れずに。

かおりん
あっ、定期実行する設定のプログラミングを忘れておりました! Linuxおなじみcron(ジョブ・スクリプトなどを自動実行するためのデーモンプロセス)を使用して『new cron』として記述しまして、1分ごとに実行するという設定をいたしました。



てもし
1分ごとに濃度計をチェックして、その時の値に応じた「アラートを鳴らして、設定した『条件の値』以下だった場合はアラートが鳴らない、ということでしょうか?

かおりん
そうですね。

てもし
なるほど。かなり仕組みを理解できました。
8.動作確認をしよう

てもし
ではここから動作チェックを行います!

しろ
どうなるかな?

かおりん
今実行したところ、濃度が855ぐらいでしたので、軽く息を吹きかけたらアラートがなるかと思います。

てもし
(息を吹きかけ) ……これで実行をお願いします。
「そろそろ換気しませんか?」

しろ
普通の声ですね。

てもし
これは1000を超えたということで、濃度が少し高くなってしまいましたね。
ウィスパーボイスが聞きたいのですが(笑)

しろ
そうですね。
「はやく換気しやがれ、バカヤロウ!」


てもし
怒られてしまいました(笑)
今怒られてしまったので、換気しないといけませんね。

かおりん
かなり値が上がっていますね。箱を開けて、少し換気しましょうか。

てもし
良いですね。
「はやく換気しやがれ、バカヤロウ!」

てもし
ずっと怒っているので、まるで機嫌の悪いティッシュケースみたいですね(笑)

しろ
今のところ、動作確認はうまくいっていますね。

かおりん
数値が下がってきたので、もう少しでcase2になりそうです。
「そろそろ換気しませんか?」

てもし
まあまあ機嫌が良くなってきましたね。数値も1150くらいということで、そろそろ怒らずにウィスパーボイスでささやいてくれるかな、と思うのですが。

しろ
確か、ささやき声は900以上1000以下でしたよね?

かおりん
かなりレアですね(笑)

てもし
ウィスパーボイスの設定範囲が狭いことと、ささやき声のため聞こえにくい、ということでレアボイスになりました。ここまでで一通りの動作確認をしまして、実際に測定したCO2濃度の上下で音が鳴ることが確認できました。CO2濃度を測れるIoTのティッシュケース、完成です!

しろ
素晴らしい!

てもし
こうやって、パパッと作っていただけましたし、音は別としても、この機能があるIoT機器はあると便利だなと思いますね。今のご時世「そろそろ換気しないと」というのが分かるだけでも便利ですし、自宅で自作できるのも楽しいです。
前回、やりがいなどのお話を聞かせていただきましたが、気持ちがすごく分かった気がしました!
まとめ
今回は『IoTグッズを作ろう!』ということで、ティッシュケースをIoT化した『CO2濃度センサー』を作成し、動作確認するまでの流れを紹介・解説してきました。
センサーやRaspberry Pi本体を接続するピンは、裏面やピンの近くに記載が有るものと無いものがあるとのことでした。接続する際は「ピンアサイン」と検索して、どのピンが何に対応しているかを確認する必要があるようです。
音声をアラート音として使用するには、ファイル名や拡張子の変更や、プログラミングを行う必要があるそうです。プログラミングにはPythonを使用するとのことで、アラートの条件の値や、定期実行する記述などを行うことで濃度を計測し、設定した値の場合にアラートが鳴る、という設定ができるそうです。
換気のタイミングが分かるだけでも便利なアイテムですが、自宅で自作も可能のようです。興味のある方は、試してみてはいかがでしょうか?
未経験からでもITエンジニアになることは可能です。セラクでは未経験からでも約1.5か月の研修を通じて活躍しているエンジニアが多数在籍します。
少しでもご興味を持っていただけたら、ぜひ、セラクにご応募ください。まずは面談でのお話をすることも可能です。お気軽にご相談ください。