【ラズパイで作るスマートリモコン】テレビの音量を一定以下に保つ【騒音対策】

こんにちは、ほっさまです。

皆さんは、騒音問題について考えることはあるでしょうか。

私はマンションタイプの集合住宅に居住していて、最近はテレワークにより一日のほとんどを家の中で過ごしているため、自分自身や近隣住民が出す生活音に以前より敏感になったと感じています。家族と同居している方には、親兄弟、子供が出す生活音を気にしているという方もいると思います。

私が実家で両親と同居していた頃は、父親の部屋から漏れるテレビの音に日々イライラしていました。。。

 

生活音の中には、家電の稼働音など簡単には抑えられないものもありますが、そのほとんどは話し声やテレビ・ステレオの音量、足音やドアの開閉音といった居住者の意識によって抑えることができるものです。

しかし、自分自身が出す生活音に不快を感じるという人はほとんどいないと思います。そのため、うるさいと感じる音の基準が曖昧になり、知らず知らずのうちに、話し声やテレビの音が大きくなってしまうと考えています。

騒音問題の一番の解決策は他者から指摘されることですが、指摘されることを自ら望む人はいませんし、指摘された時点で他者に既に迷惑をかけてしまっているため、事前に防ぐに越したことはありません。

 

では、どうすれば良いか。。。

 

答えは簡単で、生活音の騒音レベルを見える化することと、自動化できる部分は自動化してしまうことです。

生活音の騒音レベルを見える化することは、スマートフォンアプリや、Raspberry PiなどのコンピュータとUSBマイクを使用したアプリケーションで簡単に行うことができます。

 

この記事では、Raspberry PiとUSBマイクを使用して、テレビ・ステレオの音量を一定以下に保つスマートリモコンを作成する方法を紹介します。

広告

 

動作確認済み環境


開発マシン: Raspberry Pi 3 MODEL B
OS: Raspbian Buster with desktop(Release date: 2019-09-26)
プログラミング言語: python3(version=3.7.3)
Pythonパッケージ: PyAudio(version=0.2.11)、pigpio(version=1.78)
「Raspberry Pi」は以下の記事をもとに、OSのインストールと環境設定されていることを前提としています。
関連記事

この記事では、Raspberry Piの購入後に実施する以下の2点について、書いています。 1. OS(Raspbian)インストール 2. 初期セットアップ この記事は以下のような方向けのものになります。 Raspberr[…]

raspberry-pi-initial-set-up
関連記事

この記事では、Raspberry Pi 3 MODEL Bを対象に、ロボット製作に適した開発環境のセットアップ手順を紹介します。 このセットアップ手順を実行することで、以下の記事で紹介したようなロボット用のプログラミングが可能になりま[…]

make-jupyter-notebook
※「2. プログラミング言語、およびユーティリティのインストール」と「3-2. OpenCV、Numpy関連パッケージ」のみで、本記事に必要な「Python 3」と「Numpy」がインストールされます。
関連記事

今回はRaspberry PiとUSBマイクを組み合わせて騒音測定器の作成方法を紹介します。 この記事では「Raspberry Pi 3B」とサンワサプライ社のUSBマイクロホン「MM-MCU01BK」を使用します。「Raspberr[…]

connect_usb_mic_to_pi
※この記事で紹介しているスクリプトで、騒音レベルの測定が可能なことを事前にご確認ください。

 

リモコンの赤外線パターンの学習


この記事では、赤外線リモコンで操作できるタイプのステレオ「YAS-108」を対象とします。HDMIやBluetoothなど複数の接続方法が選択可能なため、テレビ、PC、スマートフォンといった多くの端末を扱うことができます。


 

IOT対応の製品であればネットワーク経由で操作可能ですが、そうでない場合は、リモコンが照射する赤外線を模擬する必要があります。

赤外線を模擬するために、まずは、リモコンが照射する赤外線パターンを学習します。

赤外線パターンの学習方法は以下の記事で紹介しています。最低限として、「irrp.py」の実行時に音量アップ/ダウンのボタンを指定すれば問題ありません。

(赤外線パターンの学習方法)

関連記事

「Raspberry Pi」はLinuxOS相当のOS上でブラウザ操作やプログラミングが直接可能でありながら、汎用入出力(GPIO)ピンを標準搭載しているため「センサー系」「駆動系」との接続、制御が容易に可能なコンピュータです。 こち[…]

(実行コマンド(例))

(実行結果(例))

(学習結果(例))

 

赤外線リモコンの模擬


赤外線リモコンは、赤外線LEDをRaspberry Piで点滅させることで模擬することが可能です。そのために、赤外線LEDを含む回路作成と、制御用スクリプトの作成が必要になります。

用意するもの


・Raspberry Pi本体 × 1個
・ブレッドボード × 1個
赤外線LED素子 × 1個 ※940nm
・ジャンパワイヤ(+側、オスーメス) × 1本
・ジャンパワイヤ(-側、オスーメス) × 1本
・ジャンパワイヤ(-側、オスーオス) × 1本
・抵抗器 × 1個 ※100Ω


 

配線方法


  1. 「Raspberry Pi」のGPIOピン(g12)を、抵抗器(100Ω)を挟んで、「赤外線LED素子」のプラス側に接続する。
  2. 「Raspberry Pi」のグラウンド(GND)を、「赤外線LED素子」のマイナス側に接続する。
「赤外線LED素子」は、基本的に足が長い方がプラス側、短い方がマイナス側になります。
GPIOピンは12番を使用していますが、任意に変更可能です。ただし、後ほど紹介するPythonスクリプトで指定するピン番号は使用したピン番号に対応させる必要があります。
この記事で使用する「赤外線LED素子」は定格電流が不明であったため、一般的な50mAと想定して抵抗値は100Ωとしています。
定格電流が判明している場合は、「Raspberry Pi」の出力電圧を3.3Vとして、定格電流以下の電流となるように抵抗値を選択する必要があります。
(設計図)
infrared_led_circuit
(実際の配線イメージ)
infrared_led_circuit_image

 

(Raspberry Pi 3のピン配置)

GPIO

※UART、I2C、SPI用のピンも使用可能です。

広告

 

プログラミング


①irrp.pyの改修

こちらのサイトからダウンロードした「IR Record and Playback」(irrp_py.zip)の499行目の後に1秒のスリープ処理を追加する

(追加する処理)

改修しない状態でも「赤外線LED素子」が点滅することは確認できましたが、照射間隔が狭すぎるためか、ステレオ側が信号を処理できず何も反応を示しませんでした。

 

②irrp.pyで赤外線リモコンを模擬

irrp.pyでは、学習済みの赤外線パターンを使用して、赤外線リモコンを模擬することが可能です。

(実行コマンド)

(引数オプション)

オプション名 説明 詳細
-p プレイバックモードで実行 指定したボタンを模擬するモードで実行する
-g{GPIO Number} GPIOピンの番号を指定 赤外線LED素子を接続したGPIOピン番号を指定する
-f {RECORD_FILE_NAME} 出力ファイル名を指定 {RECORD_FILE_NAME}に保存された赤外線パターンを使用する(Json形式)
なし 模擬するボタン名を指定 任意の名前で複数個のボタンを指定できる

(模擬結果の確認)

指定したボタンに応じて、テレビやステレオの音量が増減することを確認する。

「赤外線LED素子」の頭頂部が赤外線受信機の方向を向いていない場合は、上手く信号を受信できない場合があります。
距離としては、2~3m離れていても問題ないことを確認できています。
「赤外線LED素子」の向きや位置を変えても改善しない場合は、「赤外線LED素子」や配線方法に問題がある可能性があります。赤外線が照射できているか否かは、irrp.py実行時にスマートフォンのカメラアプリを通して見ることで確認できます。
(「赤外線LED素子」が点灯イメージ)
infrared_led_blinking

 

テレビ・ステレオの音量を一定以下に保つスマートリモコンの作成


irrp.pyのプレイバックモードと、以前作成した騒音測定器を組み合わせてスマートリモコン化します。

①irrp.pyのプレイバックモードで使用する処理の関数化

関数名 概要 入力 出力
get_infrared_records 学習済みの赤外線パターンの読み込み 赤外線パターンが記録されているファイル名 赤外線パターン(辞書型)
carrier ー(irrp.pyからそのまま移植したもののため不明)
emit_infrared 指定したボタン名に対応する赤外線を照射する ①button: 模擬するボタン名
②records: 赤外線パターン(辞書型)
なし(赤外線パターンの照射)

 

②騒音測定器とのマージ

main関数の冒頭でget_infrared_records関数を、メインループ内で一定値以上の騒音レベルを検出した際にemit_infrared関数を呼び出し、音量ダウンボタンの赤外線を照射することで、スマートリモコンは完成です。

・コマンドライン引数には、USBマイクのPyAudioにおける識別番号を指定します。
・58行目で、「YAS-108」の赤外線パターンが記録されているファイルを読み込みます。
・89-91行目で、5秒ごとの平均値が60dB以上となった場合に、音量ダウンボタンの赤外線を照射します。
(実行コマンド)

(実行結果)
広告

(「騒音測定器」での計測結果)

スマートフォンアプリによる計測結果でも、70dB付近から60dB付近に騒音レベルが減少していることが確認できます。

record_noise_level

広告