工業製造
産業用モノのインターネット | 工業材料 | 機器のメンテナンスと修理 | 産業プログラミング |
home  MfgRobots >> 工業製造 >  >> Manufacturing Technology >> 製造プロセス

Arduinoサウンドセンサーでリアルタイム音量監視─LEDインジケーターとLCD表示付き

必要な部品と用品

部品数量備考
Arduino UNO1
フルサイズ ブレッドボード1
9V電池1任意
9V-バレルジャック コネクタ1任意
オス-オス ジャンパーワイヤー1式
オス-メス ジャンパーワイヤー1式
LCD 16x2(I2Cバックパック付き)1Adafruit等、白文字/青背景
サウンドセンサーモジュール KY-0381
5mm LED 黄色2低音量表示用
5mm LED 緑4中音量表示用
5mm LED 赤2高音量表示用
5mm LED 白4
5mm LED 青4
抵抗 100Ω8白・青LED用
抵抗 220Ω4赤・黄LED用
抵抗 330Ω4緑LED用

使用するアプリ

プロジェクト概要

スピーカーから出力される音量レベルを監視するプロジェクトです。好奇心と暇つぶしから生まれました。

KY-038マイクサウンドセンサーモジュールで値を取得し、シリアルモニタで確認→スプレッドシートに転記→昇順ソート→頻出値や好みの値を閾値として設定しました。

LCD(任意)でリアルタイムに数値表示も可能です。既存コードを組み合わせて改良しました。

遭遇した問題: LCD表示で前回値の桁が残る現象(例:前回1234、今回619なのに「6194」と表示)。スペース出力で対処しました。

Arduinoコード

#include "Arduino.h"
#include "LiquidCrystal_PCF8574.h"

#define LCD_ADDRESS 0x27
#define LCD_ROWS 2
#define LCD_COLUMNS 16
#define SCROLL_DELAY 150
#define BACKLIGHT 255

LiquidCrystal_PCF8574 LCDi2C;

// LEDピン割り当て(ブレッドボード上の位置=Arduinoピン)
int LED1 = 3;  int LED2 = 4;  int LED3 = 5;  int LED4 = 6;
int LED5 = 7;  int LED6 = 8;  int LED7 = 9;  int LED8 = 10;

int soundSensor = 2;      // KY-038のDOピン接続先
int sensorValue = A0;     // KY-038のAOピン接続先(アナログ入力)
boolean LEDStatus = false;

void setup() {
  Serial.begin(9600);
  LCDi2C.begin(LCD_COLUMNS, LCD_ROWS, LCD_ADDRESS, BACKLIGHT);
  
  pinMode(soundSensor, INPUT);
  pinMode(LED1, OUTPUT); pinMode(LED2, OUTPUT);
  pinMode(LED3, OUTPUT); pinMode(LED4, OUTPUT);
  pinMode(LED5, OUTPUT); pinMode(LED6, OUTPUT);
  pinMode(LED7, OUTPUT); pinMode(LED8, OUTPUT);
}

void loop() {
  int sensorValue = analogRead(A0);   // アナログ値読取
  int SensorData = digitalRead(soundSensor); // デジタル値読取

  if (SensorData == HIGH) {  // 音検知時
    if (!LEDStatus) {
      LEDStatus = true;
      Serial.println(sensorValue);
      
      // LCD表示(桁残り防止でスペース追加)
      LCDi2C.setCursor(0, 0);
      LCDi2C.print("SoundLevel Data:");
      LCDi2C.setCursor(0, 1);
      LCDi2C.print(sensorValue);
      LCDi2C.print(" ");
    }

    // 閾値ごとのLED制御(値は実測値から決定)
    if (sensorValue >= 750) { digitalWrite(LED8, HIGH); } else { LEDStatus = false; digitalWrite(LED8, LOW); }
    if (sensorValue >= 735) { digitalWrite(LED7, HIGH); } else { LEDStatus = false; digitalWrite(LED7, LOW); }
    if (sensorValue >= 725) { digitalWrite(LED6, HIGH); } else { LEDStatus = false; digitalWrite(LED6, LOW); }
    if (sensorValue >= 720) { digitalWrite(LED5, HIGH); } else { LEDStatus = false; digitalWrite(LED5, LOW); }
    if (sensorValue >= 715) { digitalWrite(LED4, HIGH); } else { LEDStatus = false; digitalWrite(LED4, LOW); }
    if (sensorValue >= 700) { digitalWrite(LED3, HIGH); } else { LEDStatus = false; digitalWrite(LED3, LOW); }
    if (sensorValue >= 675) { digitalWrite(LED2, HIGH); } else { LEDStatus = false; digitalWrite(LED2, LOW); }
    if (sensorValue >= 650) { digitalWrite(LED1, HIGH); } else { LEDStatus = false; digitalWrite(LED1, LOW); }
  } else {
    // 音検知なし:全LED消灯
    LEDStatus = false;
    for (int i = 1; i <= 8; i++) {
      digitalWrite(i + 2, LOW); // LED1=D3 ... LED8=D10
    }
  }
}

注:元コードの一部論理(LEDStatusの扱い等)を整理し、可読性を高めています。閾値は環境に合わせて調整してください。

回路図

配線は画像の通り端から端へ接続してください。

Arduinoサウンドセンサーでリアルタイム音量監視─LEDインジケーターとLCD表示付き

参考リンク

製造プロセス

  1. センサーデータをRaspberry Piに統合:実践ガイド
  2. Raspberry Piでライントラッキングセンサー – シンプルなKY-033ドア/ライン検出器
  3. GY-91モジュールでRaspberry Pi上に堅牢な温度・センサーAPIを構築
  4. Arch SystemsとFlex、高度分析で製造データ変革へ提携
  5. Würth Elektronik、産業IoT向け超小型低消費電力3軸MEMS加速度センサ「WSEN-ITDS」発表
  6. BASELABS、Dynamic Grid発表─生データセンサーフューションで高度自動車モデリングを実現
  7. 皮膚型ソフト触覚センサー搭載ロボットグリッパーで精密把持を実現
  8. ISSセンサー向け高精度WiFi RSSIトラッキング
  9. IoTエコシステムにおける視覚データの力を解き放つ
  10. 高インパクトなセンサー駆動IoTアプリケーション構築の6つの核心原則
  11. 革新的材料が次世代LEDデータ通信を駆動