ログイン

IoT制作チャレンジ日記 -泣き声センサー編-  ~その②~ 激闘!!天下一武道会出場の巻

 2020.11.4 ゴリラーブログ ブログ ミュージックゴリラー河田

 

約2か月ぶりですね。ミュージックゴリラー河田です。

タイトルからお察しの通り、今回は書くネタが色々とありますので早速本編に参りましょー。

 

制作チャレンジの進捗報告

前回このブログを書く頃には完成しているはずと書きましたが、、、

 

予定通り完成いたしました!!

ちゃんと製品名も付けましたよ。その名も・・・

 

「BABY DON’T CRY ~娘も泣き止ませられないこんな世の中じゃ~」

 


安室奈美恵と反町隆史ね、と気付いた方は同世代かもしれません。

 

何故製品名までわざわざ考えたか、そしてちゃんと予定通りに完成できたか。

いや、どうしても10月中に完成させないといけない理由ができたのです。

 

それは9月中旬、ようやく秋の気配が漂い始めた頃のこと。

前回のブログを読んでくれたゴリラーから、MG代表としてとあるイベントに

参加してみないかという話がきたのでした。

 

制作物天下一武道会とは

 

そのイベントというのが制作物天下一武道会なるもので、どういったイベントかと言いますと、

ヤフー大阪さんが開催している(※以下イベントページより抜粋)

本業/本職とは別にチャレンジして作った制作物・デモ機などを、惜しげもなく

「やったったで、どやっ!!」と披露していただく会です!

詳細はコチラ

 

何て面白そうなイベントなんだ!!と興味は惹かれたのですが、

自分のクオリティで出て大丈夫なのか?そもそも完成できなかったらどうしよう・・・などと

不安な面も多く、今回は見送ろうかなと気弱になっていたのですが、

そういえば今年は特に大きなことにチャレンジしてないな、とふと気付きました。

 

モノづくりに挑戦はしましたが、緊張や不安で逃げ出したくなるような、

いわゆる「現場」に今年はチャレンジしていなかったので、

一年を振り返った時に何かやり切ったという記憶を残したいという思いから、

出場を決意いたしました。

 

まさかの未完成!?

制作過程ですが、今回は前回も使用したRaspberry Pi(※以下ラズパイ)を使いました。


前回はオーディオプレイヤーに特化したVolumioというOSを入れていましたが、

今回は「Raspberry Pi OS」という標準的なOSをインストールして使いました。

 

そして前回注文していた音センサーやケーブル類も無事届いたので、

前回紹介したサイトを参考にラズパイとセンサーをGPIOで接続し、自分の録音した

ファイルが流れるコードを書きました。

※ラズパイとセンサーをGPIOで接続

 

しかしこれが全然反応しない。。

感度が悪い場合は感度調整のネジを回すと書いてあったので、感度MAXにしてみると

「うん、近くで音を立てると少しは反応してるような・・・」というレベル。

 

一応音に反応させて条件に達すると音源が再生されるというのは確認できたのですが、

これで完成としていいものだろうか。

 

そこで、MGにはゴリラーシートミーティングという自分の嬉しいを実現するための

PDCAサイクルを伝えて、困りごとなどを相談する場があるのですが、

そこで状況を伝えると異世界ゴリラーが色々と調べてくれて、

何とラズパイはデジタル入力しか受けられないので、センサーがアナログ入力のものでは

GPIO接続はできないとのこと。

 

お恥ずかしい話ですが、正直最初はこの意味すらも分からなかったのです。


一応自分でも必死で調べまして、今回自分が購入した音センサーはアナログ入力のもので

ラズパイとGPIOで繋ぐ場合、デジタルに変換しないといけないとのこと。

 

で、変換するにはa/dコンバータなる変換器とブレッドボードなどを使って

電子回路を組まないといけないと。

 

早速週末に日本橋某ショップに足を運びまして、店員さんに丁寧に説明してもらいながらパーツと

ちょうど購入した変換器の組み方が載っていた書籍があったので一緒に購入しました。

 

帰宅後、見様見真似でケーブルを繋いでみるのですが、本当にこれで合ってるのか・・・?


電子回路は一つ間違うとラズパイが故障してしまう、という脅しめいた文章を

度々目にしてきたので、なかなか思い切って踏み込めません。

で、接続ができたとしてコードの書き方が全くわからないという壁に。

 

今回はPython言語で変換や電圧の部分やらをコードで書いてやらないといけないのですが、

もう何のこっちゃ!

 

同じプログラムでも、普段の業務のWeb系システムとは全く異なるもので、

肝心な部分の処理の書き方を調べても、これでいけるのか?と確証が得られないものばかりで、

結局のところ辿り着いた結論は別の方法を探す!

 

そういうわけで、ちゃんと購入した音センサーの公式(?)サイトを見てみると、

ちゃんとラズパイとの接続方法が載っているではないか!

 

ベースHAT for Raspberry Pieなるものを買えば、煩わしい接続やコードの問題も

解決できそうな希望の兆しが!

しかし、この時点で天下一武道会まで後1週間を切っており、Amazon等では在庫なし。

 

最後の賭けだと思い、仕事終わりにまた日本橋に駆け込んだところ、

ベースHAT for Raspberry Pieを販売している店を発見!!

心の中でとはいえガッツポーズが出たのはいつぶりだっただろう。

 

すぐさま購入して、帰宅後接続してみました。

ラズパイとの接続はそのままはめるだけ、超簡単!

 

※センサーとベースHAT for Raspberry Pieを接続

 

そして、使い方のコードもサイトで丁寧に説明してくれていました。

最初からこれを買って使えば良かった。。。遠回りして時間とお金を浪費してしまいました。

いや、これも決して無駄では無かったと言いたい。

 

気を取り直して、コードを自分の使いたい設定に合わせて書き直して動作確認してみたところ、

「あっ!」と声を上げると、ちゃんと数値が上がり反応している!

 

ちなみにですが、書いたコードはこんな感じです。

 

import math
import sys
import time
from grove.adc import ADC
import subprocess

from mutagen.mp3 import MP3

import glob
import random

def get_music():
     musicFiles = [r.split('/')[-1] for r in glob.glob('/home/pi/Music/babyMusic/*.mp3')]
     musicName = random.choice(musicFiles)
     return musicName

def play_music(musicName):
     musicFile = '/home/pi/Music/babyMusic/' + musicName
     audio = MP3(musicFile)
     print (audio.info.length)

     # 動画を再生する
     command = 'omxplayer ' +  musicFile
     proc = subprocess.Popen(command,shell=True,stdin=subprocess.PIPE)

     time.sleep(audio.info.length)
     #time.sleep(10)
     #-------------------------------------

     #終了処理
     proc.stdin.write("q")


class GroveLoudnessSensor:

   def __init__(self, channel):
     self.channel = channel
     self.adc = ADC()

   @property
   def value(self):
     return self.adc.read(self.channel)

Grove = GroveLoudnessSensor


def main():
  if len(sys.argv) < 2:
      print('Usage: {} adc_channel'.format(sys.argv[0]))
      sys.exit(1)

  sensor = GroveLoudnessSensor(int(sys.argv[1]))

  music_flg = 0
  fix_music_flg_ZERO = 0
  music_threshold = 2

  print('Detecting loud...')
  while True:
     value = sensor.value
     print("Loud value {}, Loud Detected.".format(value))
     time.sleep(.5)
        if value > 100:
                   music_flg+=1
        else:
                   music_flg = fix_music_flg_ZERO

        if music_flg > music_threshold:
                   musicName = get_music();
                   play_music(musicName);
                   music_flg = fix_music_flg_ZERO

if __name__ == '__main__':
    main()


ざっと説明しますと、0.5秒ごとにセンサーで音の数値を計測していて、

これが100の数値を3回以上続けて上回ると、指定のパスのフォルダにある拡張子が

mp3のファイルをランダムで再生する、という仕組みになるように書いています。

 

※100を3回以上続けて超えたのでファイルが再生されている

 

今回、イベントの実演用で早く反応させる為にフラグが立つ条件を早めていますが、

本来は200を5回以上超えるくらいがちょうどいいかなと思います。

 

そしてもちろん実際に我がBABYにも試してみました。

何度か使ってみての結果ですが、その効果は・・・

 

まずまずでした。

 

ぐずり始めには効果があるのですが、残念ながら本泣きした場合には

あまり効果が見られませんでした。

 

おもしろかったのが、効き目がある音とそうでない音があるというところ。

反町隆史のPOISON泣き止む説というのは有名ですが、我が子はあまりお気に召さず、

瑛人の香水の方が好みのようでした。笑

 

そんなこんなでバタバタながらもどうにか完成ということで、

準備が間に合い、本番当日を迎えるのでありました。

 

決戦当日

今回で3回目を迎えるこちらのイベント、いつもはグランフロント梅田で

行われていたみたいなのですが、今回はやはりコロナ禍ということで

リモートでのオンライン開催となりました。

 

流れとしては、それぞれ出場者が自分の製品について90秒でLTを行います。

その後、一人一部屋Zoomで割り振られ、実演ブースのような感じで見学者がそれぞれの

部屋を自由に訪れて、質問などもできるようになっていました。

 

LTと実演ブースそれぞれで見学者に評価をしてもらい、最終的に上位3名と特別賞に該当した人が

表彰され、賞品もいただけるというのが大まかな流れです。

 

まずLTですが、全11組で自分は5番手でしたが、かなり緊張しました。

バンドをやっていた頃に、アウェーのイベントに出たときの感覚にすごく似ているなと

何だか懐かしい緊張感でもありました。

 

自分のLTはどうだったかと言うと、発表中にタイマーを見失ってしまい少し90秒を越えてしまったり

甘噛みしたりはありましたが、言いたいことはちゃんと伝えられたと思います。

 

そして次にブースですが、これが思った以上にやりにくい!

顔出ししてくれて会話をしてくださる方もいたのですが、ほぼほぼ皆さん顔写さず喋らずなもので、

とりあえず実演してみるのですが、リアクションがわからない!

ずっとこんなことをやっているYoutuberってすごいなぁと少し感心してしまいました。

 

こんな拡張機能があったらいいんじゃない?とか自分では思い浮かばないような意見が聞けたり、

着眼点が良いとありがたいお褒めの言葉もいただけたので、それは素直に嬉しかったです。

 

あとボスゴリラーがLTを見てくれていて応援してくれたり、パイセンゴリラー達がブースに

来てくれた時には、ライブ中客席に身内を見つけたような、ほっとする安堵感がありました。


一緒にブースに居てくれたスタッフさんのおかげもあり、何とかブースの一時間を乗り切り、

いよいよ結果発表へ!!

 

 

残念ながら入賞はありませんでした。悔しい!!

もしかしたら3位くらいならありえるかも、などと淡い期待を寄せていた自分を少し恥じました。

 

この悔しさは最近味わってなかったな、と終わってから勝負魂に火がつきまして、

また来年も参加してリベンジしたいなと考えておりますので、出場することがあれば

気が早いですが、皆様応援の程、よろしくお願い申し上げます。<(_ _)>



怒涛の1か月でしたが、結果はどうあれやはり挑戦して良かったです。

今回ブログが長くなるので2回に分けようかとも考えたのですが、実はまさにこのブログを

書いている前日にイベントを終えたばかりで、今の気持ちが冷めやらぬ内に心境を書き残して

置こうと一気に書きました。

 

こんなコロナ禍ですが、何かやってみようと思えばやれることはたくさんあります。

ミュージックゴリラーはこれからも挑戦と作品を作り続けていきます。

 

そう全てはその後の最高の1杯の為に。。

 

 

イベント後のゴリラービール、信じられないくらい美味しかった!

 

長文最後まで読んでいただきありがとうございました。

 

 

© 2020 Mountain Gorilla Co., Ltd. 

プライバシーポリシー

%d人のブロガーが「いいね」をつけました。