【スマホアプリコンテスト】アルコールチェック管理アプリ

こんにちは、宮内です。
昨年開催されたスマホアプリコンテストに参加し、開発部門で優秀賞をいただきました。
今回は、コンテストに向けて開発したサービスを紹介します。

アルコールチェック管理アプリ「Al-call(アルコール)」

開発のきっかけ

2022年10月より義務化を予定していた、アルコール検知器を使用したアルコールチェック に向けて、スマホアプリとIoT(ラズパイ)を活用し、アルコールチェックのデータ登録を自動化するサービスを開発しました。
昨年のIoTコンテストの開発で得られた知見を活かしたいという思いから、今年もラズパイを活用することにしました。

)世界的な半導体不足によりアルコール検知器が十分に供給できていないため、義務化は無期限で延期されています

サービス概要

サービスの概要図は以下の通りです。
使用する機器やクラウドサービスについては後ほど説明します。

アルコールチェックのデータ登録を自動的に行うには、チェックを実施した人をシステム側で特定する必要があります。
そこで、IoTコンテストでも使用したAWSの画像分析サービスを活用し、顔認証で人物特定をすることにしました。
スマホアプリで行うユーザ登録の際に顔情報も登録し、IoTアプリのアルコールチェックで顔認証を実施できるようにしました。

Al-call システム概要図

アプリの実装

スマホアプリ

今回のアプリ開発では、Flutterを使用してスマホアプリの開発を行いました。FlutterではDartという開発言語を使用します。
DartはJavaScriptを元にした言語なので、Web系の開発経験がある方であれば開発しやすいと思います。
インターネット上に多くの情報が載っているだけでなく、画面開発を簡単にできる様々なパッケージが公開されているため、画面の実装で困ることはほとんどありませんでした。

Stack Overflow 質問割合の推移
IT系ナレッジコミュニティ「Stack Overflow」におけるモバイルアプリ開発言語の質問数の割合。
2018年以降、Flutterの割合が急激に伸びていることがわかります。

IoTアプリ

ラズパイに実装するアルコールチェック用のアプリは Python で開発を行いました。
Pythonを使用するに至った理由は以下の通りです。

  • IoTコンテストにて、ラズパイとAWSを連携する処理をPythonで作った実績があった。
  • タッチアプリケーション開発のためのPython用パッケージ “Kivy(キビー)" を使ってみたかった。(ラズパイにも対応!)

Kivyを使用することで画面開発と機能開発を分けることができたため、1人でも効率的に開発を進めることができました。

PythonとKivyを使った画面開発のイメージ

共通部分(バックエンド)

アプリのバックエンド(認証機能、DBなど)は、Firebaseを利用しました。
こちらはFlutterとの相性が良いこと、Python用のAPIが充実していることが決め手となりました。

Firebase 機能
Firebaseの代表的な機能

アルコール検知器

ラズパイでアルコールチェックを行うため、ラズパイに接続できる多様なセンサーを使用して、アルコール検知器も自作で作ってみることにしました。

アルコールチェックで使用したセンサー

アルコール検知器を作成するにあたり、次の機能を持つセンサーが必要だと考えました。

  • 呼気中のアルコール量(○.○○mg/L)を計測できること(アルコールの有無では不十分)
  • 呼気が吹き込まれているかどうか検知できること(呼気を吹き込まないで、アルコール検出無しと結果を出すのはNG)

今回開発したアプリでは、次の2つのセンサーを活用しました。

アルコールセンサー(MQ-3)

呼気中のアルコール量の計測については、アルコールセンサー(MQ-3)を使用しました。
MQ-3はセンサー周囲のアルコール検知や、アルコール量の計測ができるセンサーになります。
データシートやサンプルプログラムを読み込んで、何とか計測用のプログラムを作成しました。

アルコールセンサー MQ-3
アルコールセンサー(MQ-3)

二酸化炭素センサー(CCS811)

次に呼気の吹きかけ検知については、二酸化炭素センサー(CCS811)を使用しました。
CCS811は、センサー周囲の二酸化炭素濃度を計測するセンサーになります。
呼気の吹き込みにより、アルコール検知器内部の二酸化炭素濃度が上昇するため、二酸化炭素濃度の上昇(検出値の急激な上昇)を呼気の吹き込み検知の仕組みに利用しました。

二酸化炭素センサー CCS811
二酸化炭素センサー(CCS811)

完成したサービス

手作り感が満載の見た目ですが、プロト版としては個人的に満足のいく出来となりました。
吹込み口にはペットボトル用のストローキャップを取り付けて、ストローを付けられるようにしました。
背面のクリアケースはブレッドボードや配線の収納、Webカメラの固定のために貼り付けています。

Al-call 完成品

自作アルコール検知器の中はこんな感じになっています。
アルコール検知器の底にネットを貼り付けて空気を通せるようにし、ラズパイ用のファンを使用して中の空気を換気できるようにしました。

Al-call 自作アルコールチェッカー

アルコールチェックを行うと、アプリ側で照会ができます。
システムで使用するデータは、全てCloud Firestoreで管理しています。

アプリ 照会機能
チェック履歴のデータをタップすると、チェックデータの詳細がダイアログで表示される

コンテストに参加して

今回のコンテストの取り組みを通してアプリ開発やセンサー活用のナレッジが多く得られました。
開発が思うように進まないこともありましたが、試行錯誤の繰り返しが私自身のスキルアップにつながったため、非常に意義のあるコンテスト参加だったと感じています。

今後はWebアプリの対応や、プッシュ通知の導入、他システム連携のためのCSVファイル出力等に取り組んでみたいと思います。