【Raspberry Pi】アルコールセンサー(MQ-3)を使った、飲酒運転防止システム

【ラズパイ】アルコールセンサー

こんにちは! けい(Twitter)です。

今回は、アルコールセンサーを使って、飲酒運転を防止するシステムを作ってみました。
といっても、簡単にできるものなので、ぜひトライしてみてください。

用意するもの

ラズパイ本体

created by Rinker
Raspberry Pi
¥9,751 (2024/03/14 09:22:47時点 Amazon調べ-詳細)

ラズパイであれば、どのタイプのものでも大丈夫です。

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

Calloy MQ-3 センサー モジュール DC 5V アルコールガス 検出器 アルコールガスセンサーモジュール 2個
Calloy

私はこちらの商品を購入しました。問題なく動作しています。

抵抗10kΩ

今回使用するアルコールセンサーからのDoutが5V出力なので、ラズパイに入力する電圧を下げるために、抵抗を使用します。

その他

センサーとラズパイと繋げるためのジャンパー線や、ブレッドボードなども用意します。

created by Rinker
Sintron
¥343 (2023/05/26 13:50:35時点 Amazon調べ-詳細)

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

見た目

見た目からして「The アルコールセンサー」という形をしていますね。

裏側にピンの名前や、半固定抵抗が実装されています。

ピン

上の裏側の画像の、右側から順に説明していきます。

ピンの名前ピンの機能
VCC5Vの電源供給
GNDグラウンド
DODigital Out デジタル出力 (LOW:アルコール検出、HIGH:アルコール非検出)
AOAnalog Out アナログ出力

上の4つのピンで、VCCとGNDを繋げると、センサーが動作します。

ラズパイなどでセンサーからの出力値を取得したい時にDOかAOのピンを繋げます。

感度特性

アナログ出力を用いる場合は、MQ-3センサーの感度特性を見る必要があります。

こちらのデータシートより、感度特性の曲線が得られます。

このグラフを元にアルコールの量(mg/L)を求めることができます。

しかし、今回はアルコールを検出できればいいので、デジタル出力を用います。
なので、難しい計算は必要ありません。

興味がある人はアナログ出力からの量を測定する計算にトライしてみて下さい。

回路図

MQ-3の(VCC・GND・DO)のピンを用います。

デジタル出力は5Vで、ラズパイのデジタル入力は3.3Vなので、デジタル出力の電圧を下げる必要があります。

そのためにDOとGNDの間に抵抗を繋げることで、電圧を下げることができます。

上の画像のMQ-3はピンが3本しかありませんが、AOピンだけ除いたという状態で考えて下さい。

抵抗は回りくどくなっていますが、DOとGNDの間に繋げればオーケーです。
私は10kΩの抵抗を使用しました。それで3.3V以内になりました。

飲酒運転防止プログラム

  • アルコールセンサーからの出力を取得
  • アルコールを検知したら、音声ファイルを実行

という流れで飲酒運転を防止するプログラムを作成します。

音声ファイルの用意

文字から音声ファイルを作ってくれるopen jtalkというサイトを使います。

open jtalkのサイトで、好きな文字を入力してください。

コピペ用

アルコールを検知しました。運転は控えて下さいね

wavファイルがダウンロードされると思うので、「alcohol.wav」というファイル名で保存し、ラズパイにファイルを送ります。

pythonプログラム

次のプログラムを「alcohol_read.py」という名前で保存します。

from time import sleep
import subprocess
import pigpio

MP3_PATH = 'alcohol.wav'

GPIO_IN = 5
pi = pigpio.pi()
pi.set_mode(GPIO_IN, pigpio.INPUT)
pi.set_pull_up_down(GPIO_IN, pigpio.PUD_DOWN)

try:
    while True:
        DATA = pi.read(GPIO_IN)
        print(DATA)
        sleep(1)
        if DATA == 0:
            args = ['omxplayer', MP3_PATH]
            process = subprocess.Popen(args)
            sleep(10)
            args = ['kill', str(process.pid)]
            subprocess.Popen(args)
except KeyboardInterrupt:
    pass
finally:
    pi.stop()
    print('PROGRAM END')

音声ファイルを再生するプログラムについては、以前の記事で解説しているので、そちらを参考にしてみて下さい。

使い方

上のプログラムを「alcohol_read.py」という名前で任意のディレクトリに保存します。

次に、先ほど作成したwavファイルを同じディレクトリ内に保存します。

準備ができましたら、ターミナルを開いて次のコマンドを実行します。

$ sudo pigpiod

これはラズパイでpigpioライブラリを使うのに必要なコマンドです。

次に先ほどプログラムを保存した任意のディレクトリにcdコマンドで移動します。

任意のディレクトリに移動したら、pythonプログラムを次のコマンドで実行します。

$ python3 alcohol_read.py

実際に動作させてみる

ティッシュにアルコールを染み込ませて、MQ-3の前で動かしてみました。

音が少し小さいですが、しっかり動作していることが分かります。