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

OVLÁDÁNÍ LED NEBO ZÁSUVKY S MODULEM CC1101 433.92Mhz

Po prvních pokusech s moduly CC1101 433.92Mhz jsem se po čase rozhodl si vyzkoušet napsat program na jednoduché ovládání led diody tak aby jeden modul pravidelně vysílal hodnoty které se na druhém modulu vyhodnotí a tento pak bude pravidelně blikat led diodou. Po tomto programu a jeho odzkoušení jsem se rozhodl si napsat další program na zjištění číselných hodnot tlačítek na dálkovém ovladači pro bezdrátové zásuvky 433Mhz, a tyto pak ovládat dalším napsaným programem na zapínání a vypínání zásuvky. Pro ovládání jsem použil Arduino Nano které jsem pro testování osadil do Arduino IO shieldu, pro komunikaci mezi Arduino a modulem CC1101 jsem použit 8 – kanálový obousměrný převodník logických úrovní (5V – 3.3V) a pro napájení celé sestavy jsem použil vyrobený napájecí zdroj s výstupním napětím 8V pro napájení  Arduino Nano,  5V a 3.3V pro napájení převodníku a modulu CC1101. Uvedené přípravky rozšiřují zapojení uveřejněná v [1].