neqoのアイコン画像
neqo 2021年02月28日作成 (2021年02月28日更新)
製作品 製作品 閲覧数 836
neqo 2021年02月28日作成 (2021年02月28日更新) 製作品 製作品 閲覧数 836

うっせぇうっせぇうっせぇわ(ご近所迷惑警報装置)

うっせぇうっせぇうっせぇわ(ご近所迷惑警報装置)

目的

お風呂場や自室で歌っていたり、ノリに乗っていると
ついつい声が大きくなってしまい、
近所迷惑・家族からの注意等、
せっかく気分よく歌っているのに、
水を差されたような気分になることがあると思います。

誰かに注意される前に自分の声のボリュームを気にかけるようなものがあれば、
お互いに嫌な気分にならないのではないかと考えました。

そこで、声の大きさを取得し、ブザーで知らせてくれる工作を考えました。

※ちなみに、一応プラスチックケースで覆ってあるので、防水でもあると思います。
(さすがに怖くてシャワーを出しっぱなしにしたまま等の状態で試していませんが)
 プラケースでサウンドセンサが音を拾わないのではないかと思ったので、
 ささやかながら、力業で穴をあけています。

完成品

使ったもの

回路構成

配線についてです。

薄型センサ:

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系列のお恵みをいただきたく( ̄人 ̄)

ログインしてコメントを投稿する