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:

Jednoduchý VU metr

Jednoduchý VU metr

Jednoduchý VU metr

Jednoduchý VU metr

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.

FB gp tw

Další podobné články