Indicator de nivel sonor cu 12 LED-uri
Proiect: Vizualizator de sunet cu 12 LED-uri și Arduino
Acest proiect este ideal pentru cei care vor să combine sunetul cu efecte vizuale simple, dar de impact. Vom construi un sistem care folosește 12 LED-uri individuale ce se aprind progresiv în funcție de intensitatea sunetului captat de un modul microfon.
Pe măsură ce sunetul din jur devine mai puternic, Arduino aprinde tot mai multe LED-uri, obținând un efect asemănător cu cel al unui egalizator audio. Sensibilitatea poate fi reglată ușor cu ajutorul unui potențiometru, astfel încât proiectul să funcționeze bine atât într-o cameră liniștită, cât și într-un mediu mai zgomotos.
Componente necesare
Placă Arduino Uno (sau alt microcontroller compatibil)
Modul microfon (cu ieșire analogică)
Potențiometru (10kΩ recomandat)
12 LED-uri (culori la alegere)
12 rezistori de 220Ω
Fire de legătură (jumper wires)
Breadboard
Conexiuni
Modul microfon
VCC → 5V Arduino
GND → GND Arduino
OUT → A0
Potențiometru
Un pin exterior → 5V
Celălalt pin exterior → GND
Pinul din mijloc → A1
LED-uri
Cele 12 LED-uri sunt conectate pe pinii digitali 2–13, fiecare printr-un rezistor de 220Ω către GND:
LED 1 → D2
LED 2 → D3
LED 3 → D4
LED 4 → D5
LED 5 → D6
LED 6 → D7
LED 7 → D8
LED 8 → D9
LED 9 → D10
LED 10 → D11
LED 11 → D12
LED 12 → D13
Anodul LED-ului se leagă la pinul Arduino, iar catodul prin rezistor la GND.
Cum funcționează proiectul
Arduino citește semnalul analogic de la modulul microfon și îl filtrează pentru a reduce fluctuațiile bruște. Valoarea rezultată este comparată cu pragul setat de potențiometru, apoi este mapată pe un interval de la 0 la 12.
În funcție de acest nivel, LED-urile se aprind sau se sting progresiv, oferind un efect vizual fluent și plăcut.
Cod:
#define MIC_PIN A0
#define POT_PIN A1
int greenLeds[3] = {2, 3, 4};
int yellowLeds[3] = {5, 6, 7};
int redLeds[3] = {8, 9, 10};
int blueLeds[3] = {11, 12, 13};
int micValue, potValue;
int currentLevel = 0;
void setup() {
Serial.begin(9600);
for (int i = 0; i < 3; i++) {
pinMode(greenLeds[i], OUTPUT);
pinMode(yellowLeds[i], OUTPUT);
pinMode(redLeds[i], OUTPUT);
pinMode(blueLeds[i], OUTPUT);
}
}
int readMicFiltered() {
long sum = 0;
for (int i = 0; i < 100; i++) {
sum += analogRead(MIC_PIN);
}
return sum / 100;
}
void setBarGraph(int targetLevel) {
int leds[12] = {2,3,4,5,6,7,8,9,10,11,12,13};
while (currentLevel < targetLevel) {
digitalWrite(leds[currentLevel], HIGH);
currentLevel++;
delay(50);
}
while (currentLevel > targetLevel) {
currentLevel--;
digitalWrite(leds[currentLevel], LOW);
delay(50);
}
}
void loop() {
micValue = readMicFiltered();
potValue = analogRead(POT_PIN);
int level = map(micValue, 0, potValue, 0, 12);
level = constrain(level, 0, 12);
setBarGraph(level);
}
