Selbstgebautes VU-Meter - AZ-Delivery

VU zelfgemaakte meter

 

Hallo en welkom op een nieuwe en opwindende blog. Vandaag we doorgaan op de lage frequentie wereld en we zijn eigen meter opgericht VU. Voor iedereen die niet weet het meetinstrument van de 79e bekend meer, behalve 1 meter, VU (vu staat voor Engelse begrippen volume-eenheden dus in mogelijk "volume-eenheden") modulatie een mes, dus wordt dat een meetinstrument in de beoordeling van de signaalsterkte in de audio engineering. Trouwens, de signaalsterkte van de FBI audiosignal wordt gemeten in z 'n elektrische ontgelden.

We moeten in staat zijn op te bouwen de volgende hardware onderdelen uit de winkel de VU rond meter:


Zodat we kunnen meten een audio signaal met onze Arduino, moeten we eerst een zekere preconsiderations. Het belangrijkste argument van de audiosignal is een willekeurige wisselspanning in kHz schommels van gebied dat rond de nul. Meting van dit signaal geen digitale ingang is daarom geschikt. Ook een analoge ingang De onze Microcontroller van voor het meten van de muziek van lage frequentie signaal geschikt is zonder externe Beschaltung slechts ten dele kunnen meten, omdat deze waarden alleen positieve spanning op het gebied van 0 tot 5 volt met een resolutie van 10 bits. Om de ik in deze show het volgende met de oscilloscoop opgenomen geluid naar NF oscillaties en van deze leugen ook afsluiten met een luidspreker.

Ligatie NF: signaal op de toespraak van de luis ingang, ongefilterde

Ligatie NF: signaal op de toespraak van de luis ingang, ongefilterde

 

Daarom is het proces in de eerste stap van onze analoog signaal muziek met behulp van een klein oppositie circuit externe koeler in geen geval op het opgeheven met een offset van 2.5 volt positieve spanning in het gebied. De zero gang in de negatieve sfeer vermeden is daarom:

 

Kan het NF een signaal met gelijkspanning gecompenseerd.Kan het NF een signaal met gelijkspanning gecompenseerd.

 

 

We erin slagen met dit plan in het circuit te zien van 10 KOhm Wiederständen 10whew volt en 63 van elektrolytische condensator kathode die in de richting van onze microcontroller. Als we eerst de VU nu meter zoals op het volgende beeld volledig te zien:

 

VU bouw Steckplatine meter

 

Belangrijker is dat 64 Panel onder leiding wist zijn de elektriciteitsvoorziening door de voedingsmodule MB102 en NIET Door het Arduino Nano, omdat in het bedrijf een tot 2.5 worden gebruikt door de U64 leidde paneel in de punt. De huidige zouden worden, als dit moest worden geleverd door de Arduino, om af te breken, zonder uitzondering, de spanning, spanning of schade toegebracht aan de toezichthouder voor de Nano. Ook de Dimensionierung van het net moet worden gekozen deel daarvan op de hoogte.

 

# include <Adafruit_NeoPixel.H>

//Which pin op de Arduino is verbonden met de neopixel?
Een sieraad //on of Gemma stellen wij voor om als wij overgaan op 1:
# define LED_PIN     13
//How veel van ares neopixel aan het Arduino?
# define LED_COUNT  64

//Neopixel helderheid 0, (min) en 255 (max.)
# define HELDERHEID 100

Onze strip //declare neopixel object:
Adafruit_NeoPixel Strippen(LED_COUNT, LED_PIN, NEO_GRB + NEO_KHZ800);
1 //argument = aantal pixel neopixel van in strip
2 = //argument Arduino pincode (vruchtensap ares geldig)
3 = //argument type pixel vlaggen, ace bij elkaar optellen nodig:
800 bitstream //neo_khz800 kHz (vruchtensap neopixel producten w / WS2812 LEDs)
//NEO_KHZ400 400 kHz (classic "v1" (v2) FLORA van pixel WS2811 bestuurders)
//Pixel NEO_GRB ares voorzien van bitstream GBR (vruchtensap neopixel producten)
//Pixel NEO_RGB ares bitstream voorzien van RGB (v1 FLORA van pixel, v2)
//Pixel NEO_RGBW ares voorzien van bitstream RGBW (RGBW neopixel producten)

# define analogPinLeft A5 //Left audiokanaal, verbonden met pin analoog A5

int val_left_old = 0;  //variable voor het opslaan van de afgelezen waarde uit het kanaal over
int Base_Left = 0;   //0 bases

Leegte Valstrik()
{   Strippen.beginnen();           Strip //neopixel initialiseren object (verplicht)   Strippen.show();            Gymnastiek //do uit het vizier van de pixel zo snel mogelijk   Strippen.setBrightness(HELDERHEID); //Set tot ongeveer 1/5 helderheid (max. = 255)   Base_Left = analogRead(analogPinLeft);   Base_Left += analogRead(analogPinLeft);   Base_Left += analogRead(analogPinLeft);   Base_Left += analogRead(analogPinLeft);   Base_Left = Base_Left / 4;   colorWipe(Strippen.Kleur(255, 0, 0), 5); //Red   colorWipe(Strippen.Kleur(255, 255, 0), 5); //yellow   colorWipe(Strippen.Kleur(0, 255, 0), 5); //Green   rainbowFade2White(1, 1, 1);
}

Leegte Lus()
{   Left_VU_Meter(64, 100);   Vertraging(40);
}

Leegte Left_VU_Meter(byte Level_Max_Pixels, int Gevoeligheid)
{   int val_left = 0;   val_left = analogRead(analogPinLeft);  De input //read pin   val_left += analogRead(analogPinLeft);  De input //read pin   val_left += analogRead(analogPinLeft);  De input //read pin   val_left += analogRead(analogPinLeft);  De input //read pin   val_left = val_left / 4;   int Signal_Strength = val_left - Base_Left;   Als (Signal_Strength < 0) {     Signal_Strength = - Signal_Strength;   }   byte VU_Led_Level =  Kaart(Signal_Strength, 0, Gevoeligheid , 0, Level_Max_Pixels);   Voor (int Ik = 0; Ik < Level_Max_Pixels; Ik++) {     Strippen.setPixelColor(Ik, 0, 0, 0);  //Clear pixel de kleur (in RAM)   }   Voor (int Ik = 0; Ik < VU_Led_Level; Ik++) { Elke pixel in //for strip.     uint32_t Vooruit = Kaart(Ik, Level_Max_Pixels - 1, 0, 0, 21800);     uint32_t rgbcolor = Strippen.ColorHSV(Vooruit, 255, HELDERHEID); RGB //gee tot gesprek     Strippen.setPixelColor(Ik, rgbcolor);         //Set pixel de kleur (in RAM)   }   Strippen.show();   //Update strippen voor match
}

Leegte colorWipe(uint32_t Kleur, int wachten) {   Voor (int Ik = 0; Ik < Strippen.numPixels(); Ik++) { Elke pixel in //for strip.     Strippen.setPixelColor(Ik, Kleur);         //Set pixel de kleur (in RAM)     Strippen.show();                          //Update strippen voor match     Vertraging(wachten);                           //Break even   }
}

Leegte rainbowFade2White(int wachten, int rainbowLoops, int whiteLoops) {   int fadeVal = 0, fadeMax = 100;   //Gee van pixel van ridge run "rainbowLoops" volledig lussen via de kleur   //wheel. Heeft een kleurenpalet te rangschikken van 65536 maar het is niet erg als we op je rug, op zo 'n manier   //precisely tellen van 0 tot * rainbowLoops*6553 met tapdanst op deze manier is er een van 256   //advance rond het wiel bij een goede clip.   Voor (uint32_t firstPixelHue = 0; firstPixelHue < rainbowLoops * 65536;        firstPixelHue += 256) {     Voor (int Ik = 0; Ik < Strippen.numPixels(); Ik++) { Elke pixel in //for strip.       Pixel //offset vooruit in bedrag door nog een volledige revolutie van de       Wiel //colour (rang van 65536) over de gehele lengte van de strip       // (strip.numPixels () tapdanst):       uint32_t pixelHue = firstPixelHue + (Ik * L 65536 / Strippen.numPixels());       //strip. ColorHSV () kunnen op 1 of 3: van argumenten een vooruit (0 tot 65535) of       //optionally verzadiging waarde toevoegen en (helderheid) (elk 0 tot 255).       We gebruiken //here precies het argument drie variant, hoewel de       //second waarde (Damp) is een constante 255.       Strippen.setPixelColor(Ik, Strippen.gamma32(Strippen.ColorHSV(pixelHue, 255,                                            255 * fadeVal / fadeMax)));     }     Strippen.show();     Vertraging(wachten);     Als (firstPixelHue < 65536) {                             //Ridge loop.       Als (fadeVal < fadeMax) fadeVal++;                      In //tasteless     } Anders Als (firstPixelHue >= ((rainbowLoops - 1) * 65536)) { //Load loop.       Als (fadeVal > 0) fadeVal--;                            //tasteless uit     } Anders {       fadeVal = fadeMax; //Interim lus maken smakeloos, sura is op max.     }   }   Voor (int K = 0; K < whiteLoops; K++) {     Voor (int J. = 0; J. < 256; J.++) { //Ramp op 0 tot 255       //Fill hele strip met witte gecorrigeerd bij gamma helderheidsniveau 'j':       Strippen.Vullen(Strippen.Kleur(0, 0, 0, Strippen.gamma8(J.)));       Strippen.show();     }     Voor (int J. = 255; J. >= 0; J.--) { 255 //ramp neer op 0       Strippen.Vullen(Strippen.Kleur(0, 0, 0, Strippen.gamma8(J.)));       Strippen.show();     }   }
}

 

 

Nu kunnen we koppelen een NF analoog signaal door een luidspreker aan de audiosocket. Lijn-in niveau niet genoeg zijn, in dit geval meter dieper ingaan op onze VU. Dus de audio ingang vormen rechtstreeks verband houdt met de verwezenlijking van de uitgang audiospring (max. piek 30 watt).


In de volgende twee delen van deze rij bouwen we het tweede kanaal aan te kunnen geven ook stereosignals meter met de VU, en zo wat meer mogelijkheden, hoe de zB. Er gevoelig en helderheid.
Als uw vragen of wil schrijven, zoals gewoonlijk, in het commentaar.

Ik wil een hoop plezier met kopie van de VU meter en tot de volgende plek.

Für arduinoProjekte für fortgeschrittene

8 Reacties

Tobias

Tobias

Hallo Nils,
Du liegst richtig, die virtuelle Nullinie wird zum Startzeitpunkt des Arduinos eingelesen. Zu diesem Zeitpunkt sollte demnach noch kein Signal anliegen, da diese sonst ggf. verfälscht werden könnte. Dies ist nötig, da die Toleranzen der Bauteile selbst bei nur 1% Abweichung dazu führen könnten, das nach dem Start die eine oder andere VU Led dauerhaft leuchtet. Dies sieht sehr unschön aus. Daher diese Lösung der virtuellen Nullinie. Man könnte aber auch alternativ einmalig die Nullinie beim ersten Start einlesen, und ins EEPRom schreiben, wenn einen das stört.

Tobias

Tobias

Hallo Heiko,

Eine berechtigter Punkt. Jedoch steckt bei der Wahl der MB102 Breadboard Spannungsversorgung die Überlegung dahinter, das das VU Meter zunächst als auf dem Breadboard als TEST aufgebaut wird und später im festen Dauerbetrieb noch mal neu dauerhaft auf eine Platine gelötet wird. Für den festen und gelöteten Einsatz als Modul sollte dann passend dimensioniertes externes 5 Volt-Netzteil verwendet werden. Die MB102 Breadboard Spannungsversorgung ist, wie der Name schon vermuten lässt für den Breadboardeinsatz konzipiert.
Dennoch reicht die MB102 Breadboard Spannungsversorgung für den ersten Aufbau und Test der hier vorgestellten Schaltung aus, denn die 2,5 Ampere beziehen sich auf eine Helligkeitsaussteuerung von 100 % und eine Aussteuerung der LED’s von 100%. Bei dem og. Aufbau ist jedoch die Helligkeit der LED’s auf 39% der maximalen Helligkeit beschränkt, was den Stromverbrauch entsprechend reduziert. 39% von 2,5 A = 0,97 A bei Vollaussteuerung. Im mittleren Betrieb sollen darüber hinaus nur 50% der LED’s aktiv sein, d.h 0,97 A / 2 = 0,48 A. Somit unter den 0,7 Ampere des Moduls.
Zum testen der Schaltung also ausreichend. Im Festbetrieb sollte das Modul, wie du schon schreibst, durch ein normales Netzteil ersetzt werden.
Viele Grüße
Tobias

niko_at

niko_at

Meiner Meinung nach ist der Elko falsch gepolt, d.h. Kathode (Minus) muss an die Lautsprecherbuchse. And der LS-Buchse haben wir im Mittel 0V und am Mikrocontroller (Widerstandsteiler 2x 10kOhm) haben wir U/2 => +2,5V

Zudem fehlen Schutzdioden, dass am Mikrocontroller Eingang nicht Spannungen weit über Ub (5V) und nicht weit unter 0V gehen können!
Z.B: Mikrocontrollereingang über 10 kOhm (ggf. auch kleiner) und 2 Dioden (1N4148) jeweils in Sperrichtung gegen V und 0V. So kann die SPannung max. 0,7V üver V+ und 0,7V unter 0V gehen.

Nils

Nils

Moin,
cooles Projekt! Verstehe ich das richtig, dass im Setup der Base_Left eingelesen wird, um das virtuelle Null-Niveau (Nulllinie) zu ermitteln. Das funktioniert aber nur richtig, wenn beim Einschalten noch kein Audio Signal am Analog-Pin anliegt. Alternativ könnte man 2 1% Widerstände zum Teilen der Spannung nehmen und dann die Nullinie einfach mit 2.5V (also 512) definieren.
Eingangsspannungen kleiner 0V oder größer 5V am analogen Pin werden nicht richtig gemessen, können eventuell den Arduino sogar beschädigen? Vielleicht mit 2 Dioden das Signal auf GND und +5V klemmen?

Dirk

Dirk

Hi, cooles Projekt, da ich im Moment ein VU Meter suche.
Kann man die LED Module hintereinanderschalten? Ich stelle mir vor, 3 Module zu nehmen.
Oder gleich eine komplette LED Matrix 64×32.
Ein Modul mit den 8 LED’s sind zu wenig Auflösung.
Und natürlich muss das mit den Line IN/OUT Signalen funktionieren.
Mann sollte das VU Meter auch kalibrieren können.
Am Lautsprecherausgang macht es für mich keinen Sinn, da sich da die Laustärke ständig ändert.
Danke und Grüße

Heiko Schütz

Heiko Schütz

Frage: Im Beitrag steht, dass “im Betrieb bis zu 2,5 A durch den U64-LED Panel in der Spitze verbraucht werden”. Laut Datenblatt ist die MB102-Spannungsversorgung bis 700 mA ausgelegt. Hält die Spannungsversorgung diese Spitzen von 2,5 A ohne Schaden zu nehmen aus – das ist ja keine Dauerbelastung? Oder wäre es nicht besser (sicherer), gleich ein passend dimensioniertes externes 5 Volt-Netzteil zu verwenden (wie man es z.B. auch zum Betrieb von längeren Neopixel-Streifen benötigt)?

(Datenblatt: https://cdn.shopify.com/s/files/1/1509/1638/files/MB102_Breadboard_Kit_Datenblatt.pdf)

Gerrit

Gerrit

Es wäre schön das VU-Meter einmal in einem kurzen Video im Betrieb zu sehen, um entscheiden zu können ob sich der Nachbau für einen persönlich lohnt.

Gerhard Langner

Gerhard Langner

Hallo. Nicht neu aber cooles projekt. Ich denke eine leicht abgeänderte Vorschaltung wäre auch für die leute wie mich interesant die sowas lieber im linepegel haben möchten.

Laat een reactie achter

Alle opmerkingen worden voor publicatie gecontroleerd door een moderator

Aanbevolen blogberichten

  1. ESP32 jetzt über den Boardverwalter installieren - AZ-Delivery
  2. Internet-Radio mit dem ESP32 - UPDATE - AZ-Delivery
  3. Arduino IDE - Programmieren für Einsteiger - Teil 1 - AZ-Delivery
  4. ESP32 - das Multitalent - AZ-Delivery