Arduino
OKUDUĞUNUZ KONU
Arduino Voltmetre Hafıza Kartı Kayıt LCD Ekran
4

Arduino Voltmetre Hafıza Kartı Kayıt LCD Ekran

Yazar : Eren Doğan17 Nisan 2017

Merhaba arkadaşlar, daha önce ki projeme benzeyen bir devre yapıyoruz yine çalıştığım yerde benden tramvayların hattan çektiği gerilim ölçümü yapan ve de hafıza kartı na düzenli olarak kaydeden (datalogger) bir devre yapmamı istemişlerdi belki sizin de işinize yarar diyerek paylaşıyorum.Bu devre ile 50 Vdc ye kadar sağlıklı ölçüm yapabilirsiniz Kütüphanelerle ilgili sıkıntınız olursa yorumda paylaşın lütfen

Projede Kullanılan Malzemeler

  • Arduino UNO
  • 16×2 LCD ekran
  • Potansiyemetre
  • RTC Saat Modülü
  • SD kart modülü
  • 100k 1/4 Watt direnç
  • 10k 1/4 Watt direnç

Devre Şeması:

Çalışma Videosu:

Devre Kodları:

#include <SPI.h>
#include <SD.h>
#include <DS1302.h>
#include <LiquidCrystal.h>

LiquidCrystal lcd(10, 9, 4, 3, 2, 1);
const int SSPin = 8;
int analogInput = A0;

float vout = 0.0;
float vin = 0.0;

float R1 = 100000.0;
float R2 = 10000.0;

int value = 0;

namespace
{
const int CePin = 5;
const int IoPin = 6;
const int SckPin = 7;
char buf[50];
DS1302 rtc(CePin, IoPin, SckPin);
String dayAsString(const Time::Day day)
{
switch (day)
{
case Time::kSunday: return "Pazar";
case Time::kMonday: return "Pzt";
case Time::kTuesday: return "Sali";
case Time::kWednesday: return "Csb";
case Time::kThursday: return "Psb";
case Time::kFriday: return "Cuma";
case Time::kSaturday: return "Cmt";
}
return "Hata!";
}

void PrintTime()
{
Time t = rtc.time();
const String day = dayAsString(t.day);
snprintf(buf, sizeof(buf), "%s %04d-%02d-%02d %02d:%02d:%02d",
day.c_str(),
t.yr, t.mon, t.date, t.hr, t.min, t.sec);
lcd.setCursor(0,1);
lcd.println(buf);
}
}

void setup()
{
lcd.begin(16, 2);
pinMode(analogInput, INPUT);
if (!SD.begin(SSPin))
{
lcd.println("SD kart baglanamadi");
return;
}
lcd.println("SD kart baglandi");
rtc.writeProtect(false);
rtc.halt(false);
Time t(2017, 04, 10, 11, 30, 00, Time::kMonday);
rtc.time(t);
delay(2000);
lcd.clear();
}

void loop() {
value = analogRead(analogInput);
vout = (value * 4.95) / 1024.0;
vin = vout / (R2 / (R1 + R2));
File dataFile = SD.open("log.txt", FILE_WRITE);
if (dataFile) {
dataFile.println(vin);
dataFile.println(buf);
dataFile.close();
lcd.print("Voltaj=");
lcd.println(vin);
}
else {
lcd.println("Hata");
}
lcd.setCursor(0, 0);
lcd.print("Voltaj =");
lcd.print(vin);
PrintTime();
delay(60000);
lcd.clear();
} 
SİZCE NASIL OLMUŞ?
Beğendim
89%
İlginç
11%
Eh İşte
0%
Anlamadım
0%
Kötü
0%
Berbat
0%
YAZAR HAKKINDA
Eren Doğan
Eren Doğan
Elektrik-Elektronik Mühendisi
4 YORUMLAR
  • Furkan Bozkurt
    29 Mayıs 2017 at 13:38

    Merhaba #include için “DS1302.h: No such file or directory” hatasını alıyorum sorunun çözümü nedir ?

    • Eren Doğan
      Eren Doğan
      29 Mayıs 2017 at 15:57

      gerekli kütüphaneyi ve açıklamayı sana mail attım
      DS1302 kütüphanesini dahil etmen gerekiyor

  • Eren Doğan
    Eren Doğan
    3 Haziran 2017 at 21:55

    Furkan arkadaşımıza yazdığım cevabı belki faydası dokunur diye buraya da ekliyorum
    #include // haberleşme kütüphanesi
    #include // sd kart kütüphanesi
    #include // zaman modülü kütüphanesi
    #include // lcd ekran kütüphanesi

    LiquidCrystal lcd(10, 9, 4, 3, 2, 1); // lcd ekran pin tanımlamaları
    const int SSPin = 8; // sd kart seçme pini
    int analogInput = A0; // gerilim ölçme analog pin

    float vout = 0.0; // çıkış gerilimi
    float vin = 0.0; // giriş gerilimi

    float R1 = 100000.0; // modelleme direnci 100k
    float R2 = 10000.0; // modelleme direnci 10k

    int value = 0; // okunan değer

    namespace
    {
    const int CePin = 5; // zaman modülü aktif etme pini
    const int IoPin = 6; // zaman modülü giriş çıkış data pini
    const int SckPin = 7; // clock sinyal pini
    char buf[50]; // değerlerin geçici olarak tutulacağı dizi
    DS1302 rtc(CePin, IoPin, SckPin); // zaman modülü pin tanımlama
    String dayAsString(const Time::Day day)
    {
    switch (day) // günler
    {
    case Time::kSunday: return “Pazar”;
    case Time::kMonday: return “Pzt”;
    case Time::kTuesday: return “Sali”;
    case Time::kWednesday: return “Csb”;
    case Time::kThursday: return “Psb”;
    case Time::kFriday: return “Cuma”;
    case Time::kSaturday: return “Cmt”;
    }
    return “Hata!”;
    }

    void PrintTime() // zaman yazdırma fonksiyonu
    {
    Time t = rtc.time(); // zaman tanımlama
    const String day = dayAsString(t.day);
    snprintf(buf, sizeof(buf), “%s %04d-%02d-%02d %02d:%02d:%02d”,
    day.c_str(),
    t.yr, t.mon, t.date, t.hr, t.min, t.sec); // yazdırma ayarı yıl 4 hane ay 2 hane gün 2 hane
    lcd.setCursor(0,1); // lcd ekran ayarlama 0.satır 1.sütun
    lcd.println(buf); // ekrana yazdırma
    }
    }

    void setup()
    {
    lcd.begin(16, 2); // lcd başlatma
    pinMode(analogInput, INPUT); // analog giriş tanımlama
    if (!SD.begin(SSPin)) // sd kart başladı mı kontrolü
    {
    lcd.println(“SD kart baglanamadi”);
    return;
    }
    lcd.println(“SD kart baglandi”);
    rtc.writeProtect(false); // rtc yazma koruması kaldırma
    rtc.halt(false);
    Time t(2017, 04, 10, 11, 30, 00, Time::kMonday); // zamanı ekleme
    rtc.time(t);
    delay(2000); // 2 saniye gecikme
    lcd.clear(); // ekranı temizleme
    }

    void loop() {
    value = analogRead(analogInput); // analog değeri okuma
    vout = (value * 4.95) / 1024.0;
    vin = vout / (R2 / (R1 + R2));
    File dataFile = SD.open(“log.txt”, FILE_WRITE); // sd kartı açıp log.txt dosyasını yazıma açma
    if (dataFile) { // eğer dosyamız oluşturulmuşsa
    dataFile.println(vin); // giriş voltaj değerini yaz
    dataFile.println(buf); // tarih değerini yaz
    dataFile.close(); // dosyayı kapat
    lcd.print(“Voltaj=”); // ekrana voltaj yazdırma
    lcd.println(vin); // ekrana voltajı yazdırma
    }
    else {
    lcd.println(“Hata”);
    }
    lcd.setCursor(0, 0);
    lcd.print(“Voltaj =”);
    lcd.print(vin);
    PrintTime();
    delay(60000);
    lcd.clear();
    }

YORUM YAP