Jednoduchý VU metr

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.

Další podobné články

Electronic TiltMaze

Cílem tohoto projektu je vytvoření jednoduchého ovládacího systému, který umožňuje naklápění dvou servomotorů pomocí analogového joysticku. Platforma řízená servomotory může simulovat pohyb například v ose X a Y — tedy naklánění doleva/doprava a dopředu/dozadu. Tento systém může sloužit jako základ pro různé aplikace:

- Manuální ovládání kamery nebo senzoru (např. na pohyblivé konstrukci nebo robotovi)
- Interaktivní ovládací panel pro školní projekty nebo herní ovladač

Elektrický ping-pong

Cílem projektu bylo vytvořit jednoduchou digitální verzi klasické hry ping-pong pomocí mikrokontroleru Arduino a základních elektronických komponent. Slouží k interaktivní výuce programování a rozvíjí logické myšlení a umožňuje hráčům ovládat pálky a sledovat pohyb míčku na displeji. Hra demonstruje propojení hardwaru a softwaru, což z ní činí zábavný a vzdělávací projekt.