Někteří z nás pamatují ještě dobu, kdy na starých magnetofonech byly ručičkové a později LED měřiče amplitudy zvuku.
Protože se mi po nich stýská, jeden takový digitální jsem si vyrobil ze svého Arduina Uno.
Má velmi jednoduchou konstrukci. Diody jsou připojeny ve dvou řadách (stereo) k digitálním pinům, Levý kanál přes D2-D6 a pravý kanál přes D8-D12 přes rezistory 220R nebo 330R a uzemněny společnou zemí. Kolik diod, tolik rezistorů.
K analogovým pinům A0 a A1 je přes rozdvojku připojen výstup z předzesilovače mobilního telefonu, mp3, nebo jiného zdroje zvuku který je pomocí funkce „map“, namapován na pět diod. Zem mobilního telefonu je spojena s GND Arduina. Jednotlivé dvojice LED diod pak reagují na určité rozsahy hodnot na analogových pinech A0 a A1 pro každý kanál zvlášť Na netu jsem viděl VU metr pro Arduino napsaný dvěma způsoby. Navrhl jsem třetí způsob který přikládám k tomuto dokumentu. VU metr reaguje na hudbu docela rychle a věřím, že případné zájemce určitě potěší.
Zde jsou fotografie:
A zde je zdrojový kód:
#define L LOW //zkrácení příkazu LOW
#define H HIGH //zkrácení příkazi HIGH
void setup() {
//inicializace
//Serial.begin (9600); //zahájení sériové komunikace
pinMode (2, OUTPUT);
pinMode (3, OUTPUT);
pinMode (4, OUTPUT);
pinMode (5, OUTPUT);
pinMode (6, OUTPUT);
pinMode (8, OUTPUT);
pinMode (9, OUTPUT);
pinMode (10, OUTPUT);
pinMode (11, OUTPUT);
pinMode (12, OUTPUT);
}
void mer() { //procedura pro měřění
int voltageL;
int voltageR;
int inputL = analogRead(A0); //čtení portu
int inputR = analogRead(A1); //čtení portu
// násobič citlivosti
voltageL = map (inputL, 0, 3, 0, 5);
voltageR = map (inputR, 0, 3, 0, 5);
//Serial.print(voltageL); //výstup na UART
//Serial.print(voltageR); //výstup na UART
//Serial.print('n'); //nový řádek
// put your setup code here, to run once:
if ((voltageL > 0) and (voltageL < 10)) { //then
digitalWrite(2, H);
digitalWrite(3, L);
digitalWrite(4, L);
digitalWrite(5, L);
digitalWrite(6, L);
}
if ((voltageR > 0) and (voltageR < 10)) { //then
digitalWrite(8, H);
digitalWrite(9, L);
digitalWrite(10, L);
digitalWrite(11, L);
digitalWrite(12, L);
}
if ((voltageL > 10) and (voltageL < 15)) { //then
digitalWrite(2, H);
digitalWrite(3, H);
digitalWrite(4, L);
digitalWrite(5, L);
digitalWrite(6, L);
}
if ((voltageR > 10) and (voltageR < 15)) { //then
digitalWrite(8, H);
digitalWrite(9, H);
digitalWrite(10, L);
digitalWrite(11, L);
digitalWrite(12, L);
}
if ((voltageL > 15) and (voltageL < 20)) { //then
digitalWrite(2, H);
digitalWrite(3, H);
digitalWrite(4, H);
digitalWrite(5, L);
digitalWrite(6, L);
}
if ((voltageR > 15) and (voltageR < 20)) { //then
digitalWrite(8, H);
digitalWrite(9, H);
digitalWrite(10, H);
digitalWrite(11, L);
digitalWrite(12, L);
}
if ((voltageL > 20) and (voltageL < 25)) { //then
digitalWrite(2, H);
digitalWrite(3, H);
digitalWrite(4, H);
digitalWrite(5, H);
digitalWrite(6, L);
}
if ((voltageR > 20) and (voltageR < 25)) { //then
digitalWrite(8, H);
digitalWrite(9, H);
digitalWrite(10, H);
digitalWrite(11, H);
digitalWrite(12, L);
}
if ((voltageL > 25) and (voltageL < 30)) { //then
digitalWrite(2, H);
digitalWrite(3, H);
digitalWrite(4, H);
digitalWrite(5, H);
digitalWrite(6, H);
}
if ((voltageR > 25) and (voltageR < 30)) { //then
digitalWrite(8, H);
digitalWrite(9, H);
digitalWrite(10, H);
digitalWrite(11, H);
digitalWrite(12, H);
}
}
void loop() {
// put your main code here, to run repeatedly:
mer();
}
Při tvorbě zařízení jsem vyšel z tohoto návodu.