目的
お風呂場や自室で歌っていたり、ノリに乗っていると
ついつい声が大きくなってしまい、
近所迷惑・家族からの注意等、
せっかく気分よく歌っているのに、
水を差されたような気分になることがあると思います。
誰かに注意される前に自分の声のボリュームを気にかけるようなものがあれば、
お互いに嫌な気分にならないのではないかと考えました。
そこで、声の大きさを取得し、ブザーで知らせてくれる工作を考えました。
※ちなみに、一応プラスチックケースで覆ってあるので、防水でもあると思います。
(さすがに怖くてシャワーを出しっぱなしにしたまま等の状態で試していませんが)
プラケースでサウンドセンサが音を拾わないのではないかと思ったので、
ささやかながら、力業で穴をあけています。
使ったもの
- Arduino Uno
- HiLetgo 0.95インチ SPI OLEDディスプレイモジュールフルカラー
- 薄型スピーカー - 0.5W
- HiLetgo 5個セット サウンドセンサーモジュール声検出声コントロールスイッチ
- ブレッドボード
- ジャンパワイヤ
回路構成
配線についてです。
薄型センサ:
7ピンとGND
サウンドセンサ:(サウンドセンサのピン ー Arduinoのピン)
- Vcc ー 5V
- GND ー GND
- out ーA0
ディスプレイモジュール:(ディスプレイモジュールのピン ー Arduinoのピン)
- GND ー GND
- Vcc ー 5V
- SCL ー 13
- SDA ー 11
- RES ー 9
- DC ー 8
- CS ー 10
言葉だけでは、把握しきれないところもあると思うので、以下に写真を載せます。
以上のような配線となっています。
プログラム
OLEDディスプレイを動かすために外部ライブラリのインストールが必要でした。
私がインストールしたライブラリとしては、
- Adafruit GFX Library
- Adafruit BusIO
- Adafruit SSD1331 OLED Driver Library for Arduino
- Fast LED_SPITFT_GFX
以上のようなものが挙げられます。
プログラムを書いているうえで、
「先に述べたライブラリをインストールしたのにエラーを吐いたよ」
となれば、エラーを見ながらさらに外部ライブラリをインストールしてください。
恐らくは「SPI通信」についてのライブラリが足りていないというものが出てくると思われます。
インストールの仕方については、
Arduino IDEのツール -> ライブラリの管理
-> 検索バーにライブラリ名等を入力
-> 目的のライブラリ欄にカーソルを当てる
-> インストールのボタンが出るので押す
以上のような手順です。
以下に実際に書き込んだプログラムを記載します。
//--------------------------------------------------------------------------------------------
// LIBRARIES
//--------------------------------------------------------------------------------------------
#include <Adafruit_GFX.h> //Graphics library for OLED
#include <Adafruit_SSD1331.h> //OLED driver
#include <SPI.h> //SPI Library for OLED
//--------------------------------------------------------------------------------------------
// DEFINES
//--------------------------------------------------------------------------------------------
#define show endWrite
#define clear() fillScreen(0)
#define sclk 13
#define mosi 11
#define cs 10
#define rst 9
#define dc 8
// Color definitions
#define BLACK 0x0000
#define BLUE 0x001F
#define RED 0xF800
#define GREEN 0x07E0
#define CYAN 0x07FF
#define MAGENTA 0xF81F
#define YELLOW 0xFFE0
#define WHITE 0xFFFF
#define BEATTIME 200
#define SPEAKER 7
//--------------------------------------------------------------------------------------------
// LIBRARY CALLS
//--------------------------------------------------------------------------------------------
//Create instance of OLED called display
Adafruit_SSD1331 display = Adafruit_SSD1331(&SPI, cs, dc, rst);
//--------------------------------------------------------------------------------------------
// GLOBAL VARIABLES
//--------------------------------------------------------------------------------------------
const int sampleWindow = 50;
unsigned int sample;
int num_Measure = 128 ;
int pinSignal = A0;
int redLed = 5;
long Sound_signal;
long sum = 0 ;
long level = 0 ;
int soundlow = 40;
int soundmedium = 500;
//--------------------------------------------------------------------------------------------
// SETUP
//--------------------------------------------------------------------------------------------
void setup() {
// put your setup code here, to run once:
pinMode (pinSignal, INPUT); // Set the signal pin as input
Serial.begin (9600);
display.begin();
display.show();
display.clear();
display.setTextSize(2);
display.setTextColor(GREEN);
display.setCursor(0,0);
display.println(" Arduino");
display.println(" Sound ");
display.println(" Meter ");
display.show();
delay(2000);
}
//--------------------------------------------------------------------------------------------
// MAIN LOOP
//--------------------------------------------------------------------------------------------
void loop() {
// Performs 128 signal readings
for ( int i = 0 ; i <num_Measure; i ++)
{
Sound_signal = analogRead (pinSignal);
sum =sum + Sound_signal;
}
//display.print(db);
//display.print(" dB");
level = sum / num_Measure;
display.setCursor(10,5);
display.setTextColor(CYAN);
display.setTextSize(1);
display.println("Sound Level: ");
display.setCursor(8,25);
display.setTextColor(WHITE);
display.setTextSize(2);
display.print(level-33);
display.setTextSize(1);
display.println(" dB");
display.setCursor(50,47);
if(level-33<soundlow)
{
display.print(" Low");
}
if(level-33>soundlow && level-33<soundmedium)
{
display.print(" Medium");
}
if(level-33>soundmedium)
{
display.print(" High");
tone(SPEAKER,523,BEATTIME);
//delay(BEATTIME);
//display.fillScreen(RED);
}
sum = 0 ; // Reset the sum
delay(200);
//display.show();
display.clear();
}
配線をし、このプログラムを書き込んだうえで、
ArduinoのVin端子GND端子に9V バッテリを接続することで動いています。
これで、持ち運びもでき、防水?もでき、
「目的」で「完成品」というタイトルで貼り付けた画像のような工作が出来上がりました。
まとめ
金なし、時間なし、でも、アイデアと実現するための多少の技術はある!
と見切り発車でやってしまったため、
百均さんのお力を借り、サウンドセンサのところに見られる穴のように力業で何とかしました。(せめてユニバーサル基板上にはんだ付けしたかった)
見栄えがしませんが、
一応、自分の声のうるささに反応して、数値を出力してくれたり、
「うるせえ!」となったら、ブザーで知らせてくれるという工作ができました!
See you next time!!!
追伸:M5系列のお恵みをいただきたく( ̄人 ̄)
投稿者の人気記事
-
neqo
さんが
2021/02/28
に
編集
をしました。
(メッセージ: 初版)
-
neqo
さんが
2021/02/28
に
編集
をしました。
ログインしてコメントを投稿する