Arduino-geluidsensor met LED-indicatoren en LCD voor realtime geluidsniveaumonitoring
Onderdelen en benodigdheden
- Arduino UNO
- Solderloos breadboard (volledige grootte)
- 9V-batterij (optioneel)
- 9V naar DC-jack connector (optioneel)
- Man/Man jumper wires
- Man/Vrouw jumper wires
- Adafruit Standaard LCD - 16x2 Wit op Blauw (met I2C-backpack)
- Geluidsensormodule KY-038
- 5 mm LED: Geel (2 stuks)
- 5 mm LED: Groen (4 stuks)
- 5 mm LED: Rood (2 stuks)
- 5 mm LED: Wit (4 stuks)
- 5 mm LED: Blauw (4 stuks)
- Weerstand 100 Ω (8 stuks, voor wit en blauw LEDs)
- Weerstand 220 Ω (4 stuks, voor rood en geel LEDs)
- Weerstand 330 Ω (4 stuks, voor groene LEDs)
Apps en online diensten
- Arduino IDE
Over dit project
Dit project meet het geluidsniveau dat door speakers wordt geproduceerd. Het is het resultaat van nieuwsgierige en saaie uren.
Ik gebruikte een KY-038 microphone geluidsensormodule om waarden op te vangen via de seriële monitor. Deze waarden exporteerde ik naar een spreadsheet, sorteerde ze oplopend en selecteerde de meest voorkomende of gewenste waarden per bereik (laag, midden, hoog).
- Laag bereik → Geele LEDs
- Midden bereik → Groene LEDs
- Hoog bereik → Rode LEDs
De LEDs gaan aan zodra de sensor de bijbehorende waarde detecteert. Daarnaast is er een optionele LCD voor realtime weergave van de waardes.
De code is een uitbreiding van eerdere experimenten, gecombineerd met fragmenten uit diverse bronnen. Ik liep tegen een probleem aan: op de LCD bleven soms cijfers van eerdere waarden staan (bijv. 619 werd 6194 omdat de vorige waarde 1234 was). Dit is opgelost door een spatie na de waarde te printen.
De benodigde .cpp en .h bestanden voor de LCD zijn te downloaden via de projectpagina.

Google Drive link naar bestanden

Code
SoundSensorLEDwData (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-pinnen op breadboard + Arduino PWM-pinnen
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; // DO-pin van KY-038 op digitale pin 2
int sensorValue = A0; // AO-pin van KY-038 op analoog A0
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);
// sensorValue is analoog input, geen pinMode nodig
}
void loop() {
int sensorValue = analogRead(A0);
int sensorData = digitalRead(soundSensor);
if (sensorData == HIGH) {
if (!LEDStatus) {
LEDStatus = true;
Serial.println(sensorValue);
LCDi2C.setCursor(0, 0);
LCDi2C.print("SoundLevel Data:");
LCDi2C.setCursor(0, 1);
LCDi2C.print(sensorValue);
LCDi2C.print(" "); // voorkomt overblijvende cijfers
}
// Drempelwaarden (aangepast aan gemeten data)
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 {
LEDStatus = false;
digitalWrite(LED1, LOW);
digitalWrite(LED2, LOW);
digitalWrite(LED3, LOW);
digitalWrite(LED4, LOW);
digitalWrite(LED5, LOW);
digitalWrite(LED6, LOW);
digitalWrite(LED7, LOW);
digitalWrite(LED8, LOW);
}
}
Schema
Volg de draden van begin tot eind.
Productieproces
- Sensordata integreren in een Raspberry Pi: Een praktische gids
- Lijnvolgsensor met Raspberry Pi – Simpele KY-033 deur/lijndetector
- Een robuuste temperatuur- en sensor-API bouwen op Raspberry Pi met de GY-91-module
- Arch Systems & Flex partner om manufacturing data te transformeren met geavanceerde analytics
- Würth Electronics onthult WSEN-ITDS: een compacte, laag-vermogen 3-as MEMS-versnellingsmeter voor industriële IoT
- BASELABS lanceert Dynamic Grid: Raw-data sensorfusie voor geavanceerd automotive-modellering
- Robotische Grijper Met Huid-achtige Zachte Tactiele Sensor Voor Precisiehantering
- Accurate WiFi RSSI Tracking Voor ISS Sensoren
- De Kracht van Visuele Data in het IoT-ecosysteem Ontketenen
- Zes sleutelprincipes voor high-impact sensor-gedreven IoT-applicaties bouwen
- Revolutionaire Materialen Drijven Next-Gen LED Datacommunicatie