Arduino ile voltmetre

Sumer Yamaner

Moderator
Katılım
17 Eyl 2013
Mesajlar
9,084
Tepkime puanı
23,743
Yaş
62
Konum
İstanbul
Web sitesi
www.sumeryamaner.com
İlgi Alanı
Uçak
Bugün LCD ekran kullanmayı öğrendim.
Tasarladığım alet potansiyometre ile oluşturduğum 0 - 5 V arası gerilimi ölçüp LCD ekrana yazacak ve bir de bar graph oluşturacaktı. Voltaj değeri sürekli oynar korkusuyla sisteme bir de "sakinleştirici" ekledim. Şöyle ki on elemanlı bir değişkende son on voltaj değeri saklanıyor. Her bir ölçümde en eskisi atılıp değerler bir kaydırılıp son okunan değer en sona yazılıyor. Bunların ortalaması alt satırda sağda görülüyor. Yukarıdaki bar graph da bu değere göre hesaplanıyor. Bar graph'da yıldız kullandım. Şimdi karakter tanımlayıp o şekilde deneyeceğim.

Bu VIDEOYU görmek için izniniz yok. Giriş yap veya üye ol

Kod:
// LCD ekran denemesi2

/*
LCD RS digital 12
LCD Enable digital 11
LCD D4 digital 5
LCD D5 digital 4
LCD D6 digital 3
LCD D7 digital 2
LCD R/W 0V
*/

#include <LiquidCrystal.h>
int readpot = 0;
int potpin = 1;
int bar = 0;
float readvolt = 0.0;
float results[10];
float average;
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
char bargraph[] = "                ";
byte block[8] = {B00000,
                 B11111,
                 B11111,
                 B11111,
                 B11111,
                 B11111,
                 B11111,
                 B00000,};
                 


void setup()
{
  pinMode(2, OUTPUT);
  pinMode(3, OUTPUT);
  pinMode(4, OUTPUT);
  pinMode(5, OUTPUT);
  pinMode(11, OUTPUT);
  pinMode(12, OUTPUT);
  Serial.begin(9600);
  lcd.begin(16, 2);
  lcd.home();
  lcd.createChar(0, block);
}


void loop()
{
  lcd.setCursor(0, 1);
  readpot = analogRead(potpin);
  readvolt = readpot * 5.0 / 1024;
  lcd.print("                ");
  lcd.setCursor(0, 1);
  lcd.print(readvolt);
  lcd.print(" V");

  for(int i = 0; i < 9; i++)
  {
    results[i] = results[i + 1];
  }
  results[9] = readvolt;
  average = 0.0;
  for(int i = 0; i < 10; i++)
  {
   average = average + results[i]; 
  }
  average = average / 10;
  
  lcd.setCursor(8, 1);
  lcd.print(average);
  lcd.print(" V");
  bar = (average / 5 * 17);
  lcd.home();
  for(int i = 0; i < 16; i++)
  {
    bargraph[i] = ' ';
  }
  for(int i = 0; i < bar; i++)
  {
    bargraph[i] = '*';
  }
  for(int i = 0; i < 16; i++)
  {
    lcd.print(bargraph[i]);
    Serial.print(bargraph[i]);
  }
  Serial.println(" ");
}

NOT: Arada Serial.print komutları var. Onlar debug etmek için kullanıldı.
 
Arduino ile voltmetre

Bu da blok karakter tanımlayarak oluşturulan bar graph. Bir sonraki adımda daha ince hareket eden (birkaç farklı karakter ile) bir bar graph yapmayı deneyeceğim.


[attachimg=1]


Kod:
// LCD ekran denemesi3

/*
LCD RS digital 12
LCD Enable digital 11
LCD D4 digital 5
LCD D5 digital 4
LCD D6 digital 3
LCD D7 digital 2
LCD R/W 0V
*/

#include <LiquidCrystal.h>
int readpot = 0;
int potpin = 1;
int bar = 0;
float readvolt = 0.0;
float results[10];
float average;
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
char bargraph[] = "                ";
byte block[8] = {B00000,
                 B11111,
                 B11111,
                 B11111,
                 B11111,
                 B11111,
                 B11111,
                 B00000,};
                 


void setup()
{
  pinMode(2, OUTPUT);
  pinMode(3, OUTPUT);
  pinMode(4, OUTPUT);
  pinMode(5, OUTPUT);
  pinMode(11, OUTPUT);
  pinMode(12, OUTPUT);
  Serial.begin(9600);
  lcd.begin(16, 2);
  lcd.home();
  lcd.createChar(0, block);
}


void loop()
{
  lcd.setCursor(0, 1);
  readpot = analogRead(potpin);
  readvolt = readpot * 5.0 / 1024;
  lcd.print("                ");
  lcd.setCursor(0, 1);
  lcd.print(readvolt);
  lcd.print(" V");

  for(int i = 0; i < 9; i++)
  {
    results[i] = results[i + 1];
  }
  results[9] = readvolt;
  average = 0.0;
  for(int i = 0; i < 10; i++)
  {
   average = average + results[i]; 
  }
  average = average / 10;
  
  lcd.setCursor(8, 1);
  lcd.print(average);
  lcd.print(" V");
  bar = (average / 5 * 17);
  lcd.home();
  for(int i = 0; i < 16; i++)
  {
    bargraph[i] = ' ';
  }
  for(int i = 0; i < bar; i++)
  {
    bargraph[i] = 0;
  }
  for(int i = 0; i < 16; i++)
  {
    lcd.write(bargraph[i]);
  }
}
 

Ekli dosyalar

  • pic0001.jpg
    pic0001.jpg
    108.5 KB · Görülme: 68
Arduino ile voltmetre

Artık gücün karanlık ya da aydınlık tarafı yok, sadece gücün Arduino tarafı var :D
 
Arduino ile voltmetre

LCD ekran kullanımının en büyük avantajı, başka kodları test ederken bazı ara değerlerin görüntülenebilmesini sağlaması. O nedenle bugünü LCD ekrana ayırdım. Bence oldukça verimli bir Arduino günü oldu. Şimdi potansiyometre ile oynarken kahvemi içebilirim. :D
 
Arduino ile voltmetre

Zafer SAHIN' Alıntı:
Artık gücün karanlık ya da aydınlık tarafı yok, sadece gücün Arduino tarafı var :D
Evet bencede Zafer Bey. Şuan harıl harıl uçakları heliye dönüştüren bir kod üzerinde çalışıyorum, bittiğinde hiç böyle bir problem kalmayacak. :laugh:

Sümer abiden yardım istesem mi diyorum ama büyük ihtimalle bu kodun tersini yazmakla uğraşıyordur, pek vakit ayıramaz sanırım bana yardımcı olmaya. :lol: :lol:
 
Arduino ile voltmetre

Türker Akgün' Alıntı:
Şuan harıl harıl uçakları heliye dönüştüren bir kod üzerinde çalışıyorum

Sümer abiden yardım istesem mi diyorum ama büyük ihtimalle bu kodun tersini yazmakla uğraşıyordur

:lollol: :lollol: :lollol:

Ben endişelenmeye başladım Türker abi :) Sümer abi bu arduino işinde çok ilerledi, onun kod önden gidiyor olabilir. Zafer abi helici diye hatırlıyorum ama, ondan dolayı içim ferah :laugh:
 
Arduino ile voltmetre

Rasim Öztürk' Alıntı:
:lollol: :lollol: :lollol:

Ben endişelenmeye başladım Türker abi :) Sümer abi bu arduino işinde çok ilerledi, onun kod önden gidiyor olabilir. Zafer abi helici diye hatırlıyorum ama, ondan dolayı içim ferah :laugh:
Hiç merak etme Rasim şuan wing-dragon'u V911'e dönüştüren kod hazır çok az kaldı. :lollol: :lol: :lol:
 
Arduino ile voltmetre

Türker Akgün' Alıntı:
Hiç merak etme Rasim şuan wing-dragon'u V911'e dönüştüren kod hazır çok az kaldı. :lollol: :lol: :lol:

Sümer abi ne yaptın böyle maşallah Allah nazarlardan saklasın emeklemeden koşmak gibi bir şey oldu sizinkisi. :saygilar:
 
Arduino ile voltmetre

Türker Akgün' Alıntı:
Evet bencede Zafer Bey. Şuan harıl harıl uçakları heliye dönüştüren bir kod üzerinde çalışıyorum, bittiğinde hiç böyle bir problem kalmayacak. :laugh:

Sümer abiden yardım istesem mi diyorum ama büyük ihtimalle bu kodun tersini yazmakla uğraşıyordur, pek vakit ayıramaz sanırım bana yardımcı olmaya. :lol: :lol:

Elimi bile sürmem. Hazır library'si var... :p