DIY ELECTRONICSEN

← Tüm projeler

Dijital Voltmetre

Başlangıç20 dk

Arduino'nun analog girişiyle 0 ile 5 V arasındaki gerilimi ölçen bir voltmetre: potansiyometreyi çevirdikçe A0 pinine gelen gerilim değişir; 16x2 LCD'nin üst satırında volt olarak (ör. 3.27 V), alt satırında soldan dolan bir çubuk olarak görünür. Analog okumanın (0–1023) volta nasıl çevrildiğini, okumaların ortalamasıyla titremeyi azaltmayı ve LCD'ye kendi karakterlerini tanıtıp çubuk çizmeyi öğretir. Kitaplık Yöneticisi'nden "LiquidCrystal I2C" kurulur.

Google Play'den indirin

Gerekli malzemeler

Bağlantı adımları

  1. 1

    Güç kablolarını bağla

    Güç kablolarını bağla

    Kırmızı erkek-erkek jumper kabloyu Arduino'nun güç başlığındaki 5V pinine tak, diğer ucunu breadboard'un üstteki kırmızı çizgili (+) güç sırasına bağla; kablo breadboard'un altından dolanıp gelir. Siyah kabloyu Arduino'nun üst sırasında, 13 numaralı pinin yanındaki GND pinine tak, diğer ucunu üstteki mavi çizgili (−) sıraya bağla. Bu projede yalnızca üstteki güç sıraları kullanılır.

    • Arduino 5V → üstteki kırmızı çizgili (+) sıra (kırmızı kablo)
    • Arduino GND (üst sıradaki) → üstteki mavi çizgili (−) sıra (siyah kablo)
  2. 2

    Potansiyometreyi tak ve bağla

    Potansiyometreyi tak ve bağla

    Potansiyometreyi, üç bacağı üst yarıda F sırasına, 4., 5. ve 6. sütunlara gelecek şekilde tak; gövdesi ortadaki boşluğun üstüne uzanır. Kısa siyah bir kabloyla 4. sütunun J sırasını üstteki (−) sıraya, kısa kırmızı bir kabloyla 6. sütunun J sırasını üstteki (+) sıraya bağla. Turuncu kabloyla Arduino'nun A0 pinini orta bacağın sütununa, 5. sütunun H sırasına bağla (INPUT_PIN A0); kablo potansiyometrenin sağından dolaşıp gelir. İki uç bacak arasında hep 5 V vardır; orta bacak düğmeyi çevirdikçe 0 ile 5 V arasında bir yere kayar ve Arduino bunu ölçer.

    • potansiyometre sol bacak → 4. sütun, üst yarı
    • potansiyometre orta bacak → 5. sütun, üst yarı
    • potansiyometre sağ bacak → 6. sütun, üst yarı
    • 4. sütun, üst yarı → üstteki mavi çizgili (−) sıra (siyah kablo)
    • 6. sütun, üst yarı → üstteki kırmızı çizgili (+) sıra (kırmızı kablo)
    • Arduino A0 → 5. sütun, üst yarı (turuncu kablo)
  3. 3

    LCD ekranı bağla

    LCD ekranı bağla

    LCD'nin arkasındaki I2C modülünün dört pinine erkek-dişi kabloların dişi uçlarını tak. GND'yi üstteki (−) sıraya, VCC'yi üstteki (+) sıraya, SDA'yı 18. sütunun, SCL'yi 19. sütunun üst yarısına bağla. Sonra mavi bir erkek-erkek kabloyla Arduino'nun A4 pinini 18. sütunun, sarı kabloyla A5 pinini 19. sütunun üst yarısına bağla. I2C'de ekran yalnızca iki veri kablosuyla (SDA ve SCL) konuşur; kod onu adresiyle bulur, çoğunda 0x27.

    • LCD ekran GND → üstteki mavi çizgili (−) sıra (siyah kablo)
    • LCD ekran VCC → üstteki kırmızı çizgili (+) sıra (kırmızı kablo)
    • LCD ekran SDA → 18. sütun, üst yarı (mavi kablo)
    • LCD ekran SCL → 19. sütun, üst yarı (sarı kablo)
    • Arduino A4 → 18. sütun, üst yarı (mavi kablo)
    • Arduino A5 → 19. sütun, üst yarı (sarı kablo)

Arduino kodu

Kodu indir (.ino)Wokwi'de dene

Devreyi tarayıcıda, hiçbir parça almadan çalıştır: Wokwi'de kodu başlat, Seri Monitörü izle.

// Kitaplık Yöneticisi'nden kurulacak:
// "LiquidCrystal I2C"
#include <Wire.h>
#include <LiquidCrystal_I2C.h>

// Ölçülen gerilimin girdiği analog pin
const int INPUT_PIN = A0;
// Arduino'nun 5V'u: multimetren varsa
// 5V pininde ölçtüğünü yaz, sonuç düzelir
const float VREF = 5.00;
// Ortalaması alınan okuma sayısı
const int SAMPLES = 16;
// Ölçümler arası süre (ms)
const unsigned long READ_EVERY = 300;

// I2C adresi çoğunda 0x27, bazısında 0x3F
LiquidCrystal_I2C lcd(0x27, 16, 2);

// Çubuğun beş parçası: 1-5 sütunu dolu
// kutular, LCD'ye özel karakter olarak
void makeBars() {
  for (int level = 0; level < 5; level++) {
    // Soldan level+1 sütunu dolu satır
    byte row = 0;
    for (int col = 0; col <= level; col++) {
      row |= 0x10 >> col;
    }
    byte shape[8];
    for (int y = 0; y < 8; y++) shape[y] = row;
    lcd.createChar(level, shape);
  }
}

// Okumaların ortalaması: sayı titremez
int readAverage() {
  long sum = 0;
  for (int i = 0; i < SAMPLES; i++) {
    sum += analogRead(INPUT_PIN);
  }
  return sum / SAMPLES;
}

// Alt satır: 0-5 V, 16 kutuluk bir çubuk;
// her kutu 5 adım, toplam 80 adım
void showBar(int raw) {
  int steps = (long)raw * 80 / 1023;
  lcd.setCursor(0, 1);
  for (int cell = 0; cell < 16; cell++) {
    int fill = steps - cell * 5;
    if (fill >= 5) {
      lcd.write(byte(4));
    } else if (fill > 0) {
      lcd.write(byte(fill - 1));
    } else {
      lcd.print(' ');
    }
  }
}

void setup() {
  lcd.init();
  lcd.backlight();
  makeBars();
  Serial.begin(9600);
}

void loop() {
  int raw = readAverage();
  // 0-1023 arası okuma, volta çevrilir
  float volts = raw * VREF / 1023.0;

  lcd.setCursor(0, 0);
  lcd.print("Gerilim: ");
  lcd.print(volts, 2);
  // Sondaki boşluk eski yazıyı siler
  lcd.print(" V ");
  showBar(raw);

  Serial.print("Gerilim: ");
  Serial.print(volts, 2);
  Serial.print(" V  (A0 = ");
  Serial.print(raw);
  Serial.println(")");
  delay(READ_EVERY);
}

Seri Monitörde göreceğin

SERIAL MONITOR · 9600 BAUD
Gerilim: 0.00 V  (A0 = 0)
Gerilim: 1.27 V  (A0 = 260)
Gerilim: 2.50 V  (A0 = 512)
Gerilim: 3.79 V  (A0 = 776)
Gerilim: 5.00 V  (A0 = 1023)

Bir kablo yerinde değilse

SERIAL MONITOR · 9600 BAUD
Gerilim: 1.84 V  (A0 = 377)
Gerilim: 2.31 V  (A0 = 473)
Gerilim: 0.97 V  (A0 = 199)
Gerilim: 2.66 V  (A0 = 544)

Sonuç

Kodu yükleyince LCD'nin üst satırında "Gerilim: 2.50 V" gibi bir değer, alt satırında soldan dolan bir çubuk görünür. Potansiyometreyi bir uca çevirince 0.00 V'a, öbür uca çevirince 5.00 V'a yakın bir değer okursun; çubuk da boşalıp dolar. Değerler Seri Monitöre de yazılır, yanında A0'ın 0 ile 1023 arasındaki ham okuması durur: Arduino 0–5 V'u 1024 basamağa böler, her basamak yaklaşık 4.9 mV'tur. Uçta 4.95 ya da 5.07 gibi bir değer görürsen Arduino'nun 5V'u tam 5 değildir (USB'den gelen gerilim biraz oynar); multimetren varsa 5V pinini ölç ve koddaki VREF'e yaz. Sayılar kendi kendine rastgele oynuyorsa orta bacağın A0 kablosu yerinde değildir. Çubuk ters yönde doluyorsa uç bacakların kablolarını yer değiştir. Ekranın ışığı yanıyor ama yazı yoksa I2C modülünün arkasındaki mavi trimpotu çevirerek kontrastı ayarla; hâlâ yoksa koddaki 0x27'yi 0x3F yap. Bir kalem pili de ölçebilirsin: orta bacağın kablosunu A0'dan çıkar, pilin + ucunu A0'a, − ucunu GND'ye bağla; 1.5 V civarı görürsün. A0'a asla 5 V'tan yüksek gerilim verme: 9V pil Arduino'yu bozar.

Benzer projeler

Uygulamada her bağlantıyı tek tek işaretle, envanterindeki parçalarla eşleştir ve kaldığın yerden devam et.

Google Play'den indirin