Home Arduino Arduino LCD Vu-Meter

Arduino LCD Vu-Meter

by onurnp

Arduino LCD Vu-Meter Yapalım!

Merhabalar arkadaşlar bugün sizlerde arduino vu-metre yapacağız ancak bu vu meter sıradan bi vu meter olmayacak lcd ile yapacağız çok daha güzel ve sıradışı bir şey olacak Şimdi lafı fazlaca uzatmadan malzeme listemizi görelim ve malzemelerimizi tanıyalım..

  • Arduino Uno/Nano/Mega
  • 100K ohm Direnç
  • 22K ohm Direnç
  • 1K Direnç
  • 10K Potansiyometre
  • 100nF Kapasitör
  • 16×2 LCD
  • Kulaklık giriş jakı isteğe bağlı.

Şimdi Bağlantılarımızı görselde ki gibi yapalım.

Arduino LCD Vu-Meter Bağlantı Şeması
Arduino LCD Vu-Meter Bağlantı Şeması

Şimdi bağlantılarımızı yaptığımıza göre kodlama aşamasına geçebiliriz.

Şimdi Kütüphanemizi ekliyelim.

Taslak>library ekle>Library düzenle-Tıklayıp Arama penceresine “LiquidCrystal” yazalım. Ve ilk çıkan adafruit libini kuralım.

Sonra ekrandaki tüm kodları silip aşağıdaki kodu yapıştıralım.

Arduino LCD Vu-Meter Kodlama

#include <LiquidCrystal.h>

byte Bar[8] = {
        B11111,
        B00000,
        B11111,
        B11111,
        B11111,
        B11111,
        B00000,
        B11111
};

byte L[8] = {
        B00111,
        B01000,
        B10100,
        B10100,
        B10100,
        B10111,
        B01000,
        B00111
};

byte R[8] = {
        B00111,
        B01000,
        B10110,
        B10101,
        B10110,
        B10101,
        B01000,
        B00111
};

byte EndMark[8] = {
        B10000,
        B01000,
        B00100,
        B00100,
        B00100,
        B00100,
        B01000,
        B10000
};

byte EmptyBar[8] = {
        B11111,
        B00000,
        B00000,
        B00000,
        B00000,
        B00000,
        B00000,
        B11111
};

byte peakHoldChar[8] = {
        B11111,
        B00000,
        B01110,
        B01110,
        B01110,
        B01110,
        B00000,
        B11111
};

String main_version = "1.0";
int left, right;                        //Bu değişkenle sağ ve sol kanaldan gelen sesleri ölçülendiriyoruz             
const int numReadings = 5;              //Yenileme oranı. Default oran 5 tir ama dilerseniz artırıp azaltabilirsiniz.
int indexL = 0;                         //sol kanal değerimiz
int totalL = 0;                         //sol kanal toplam değerimiz
int maxL = 0;                           //max değerimizin kayıt edildiği yer
int indexR = 0;                         
int totalR = 0;                         
int maxR = 0;
int inputPinL = A1;                     //sol kanal adc 1
int inputPinR = A0;                     //sağ kanal adc 2
int volL = 0;
int volR = 0;
int rightAvg = 0;
int leftAvg = 0;
long peakHoldTime = 1500;               //peak değer gecikmesi
long peakHold = 0;
int rightPeak = 0;
int leftPeak = 0;
long decayTime = 0;
long actualMillis = 0;

LiquidCrystal lcd(11, 10, 7, 6, 5, 4);  //lcd ekran ayarımız

void setup()
{  
  lcd.begin(40, 2); //ekran şablonumuz
    
  lcd.createChar(1, Bar);
  lcd.createChar(2, L);
  lcd.createChar(3, R);
  lcd.createChar(4, EmptyBar);
  lcd.createChar(5, EndMark);
  lcd.createChar(6, peakHoldChar);

  //İlk mesajımız
  
  String EAtolyem = "Elektronik Atolyem";  
  
  for (int i = 0; i <= 16; i++)
  {    
    lcd.setCursor(0, 0); 
    lcd.print(EAtolyem.substring(0, i));
    delay(50);
  }  

  EAtolyem = "VU metre " + main_version;
  
  for (int i = 0; i <= EAtolyem.length(); i++)
  {    
    lcd.setCursor(0, 1);
    lcd.print(EAtolyem.substring(0, i));
    delay(50);
  }

  delay(500);
  
  lcd.clear();
  lcd.setCursor(0, 0); 
  lcd.print("Aciliyor...");

  for (int i = 0; i < 16; i++)
  {
    lcd.setCursor(i, 1); 
    lcd.write(4);
  }
  
  for (int i = 0; i < 16; i++)
  {
    lcd.setCursor(i, 1); 
    lcd.write(1);

    delay(50);
  }  
    
  delay(500);
  lcd.clear();

  decayTime = millis();
}

void loop()
{    
  actualMillis = millis();
  
  lcd.setCursor(0, 0);        //sol kanal barı
  lcd.write(2);               //saol kanal sembolü
  lcd.setCursor(0, 1);        //sağ kanal barı
  lcd.write(3);               //sağ kanal sembolu
  lcd.setCursor(15, 0);       //bar sonu
  lcd.write(5);               //bar sonu
  lcd.setCursor(15, 1);       //bar sonu
  lcd.write(5);               //bar sonu
   
  totalL = analogRead(inputPinL) / 4 - 128; //Sol kanal Gürültü seviyesini temizleyelim
    
  if(totalL > maxL)
  {
    maxL = totalL;
  }
   
  indexL++;
   
  if (indexL >= numReadings)
  {             
    indexL = 0;                         
    left = maxL;
    maxL = 0;
  }   
     
  totalR = analogRead(inputPinR) / 4 - 128; //sağ kanal Gürültü seviyesini temizleyelim
    
  if(totalR > maxR)
  {
    maxR = totalR;
  }
   
  indexR++;
   
  if (indexR >= numReadings)
  {             
    indexR = 0;                         
    right = maxR;
    maxR = 0;
  } 
    
  volR = right / 3;
    
  if(volR > 14)
  {
    volR = 14;
  }

  if (volR < (rightAvg - 2))
  {
    if (decayTime < actualMillis)
      rightAvg--;
      
    volR = rightAvg;
  }    
  else if (volR > (rightAvg + 2))
  {
    volR = (rightAvg + 2);
    rightAvg = volR;
  }
  else
  {
    rightAvg = volR;
  }

  if (volR > rightPeak)
  {
    rightPeak = volR;    
  }

  drawBar(volR, rightPeak, 1);

  volL = left / 3;
   
  if(volL > 14)
  {
    volL = 14;
  }

  if (volL < (leftAvg - 2))
  {
    if (decayTime < actualMillis)
      leftAvg--;   
         
    volL = leftAvg;
  }
  else if (volL > (leftAvg + 2))
  {
    volL = (leftAvg + 2);
    leftAvg = volL;
  }
  else
  {
    leftAvg = volL;
  }

  if (volL > leftPeak)
  {
    leftPeak = volL;
  }

  drawBar(volL, leftPeak, 0);

  if (decayTime < actualMillis)
    decayTime = (millis() + 50);

  if (peakHold < actualMillis)
  {
    peakHold = (millis() + peakHoldTime);
    rightPeak = -1;
    leftPeak = -1;
  }
}

void drawBar(int data, int peakData, int row)
{
  //Değeri aşmışsa dengeleyelim
  if (peakData < 2)
  {
    peakData = -1;
  }

  for (int col = 1; col < 15; col++)
  {
    lcd.setCursor(col, row);

    if (col < data)
    {
      lcd.write(1); //Bar a kutucuk atalım
    }
    else if (peakData == col)
    {
      lcd.write(6); //bar klavuzunu yazalım
    }
    else
    {
      lcd.write(4); //boşluk atalım
    }
  }
}

Şimdi Derleyelim ve bi müzik çalalım…

Projemizi Hazır ettik Devamı için Facebook ve İnstagramdan bizi Takip Etmeyi Unutmayın 🙂

https://www.facebook.com/ElektronikAtolyem45/

https://www.instagram.com/elektronikatolyemm

You may also like

Leave a Comment