5. DERS - DHT11 Sensörü ve Arduino UNO ile Sıcaklık ve Nem Ölçümü

Bu derste Arduino UNO ve DHT11 sensörü kullanılarak sıcaklık ve nem ölçümü yaptım. Yaptığım ölçümü Microsoft Visual Studio C# 2013 de yazdığım SerialCom. V1.1  isimli program ile görüntüledim. DHT11 sıcaklık ve nemi aynı anda ölçen bir sensör. Sıcaklık ölçüm aralığı 0-50 °C hassasiyeti ±2 °C. Nem ölçüm aralığı ise %20-%90 hassasiyeti ± %5.


Şekil 1 – DHT11 Sıcaklık ve Nem Sensörü (Humidity and Temperature Sensor)

İlk olarak Arduino UNO, DHT11 bağlantısını gerçekleştirdim (Şekil 2). Ardından Arduino 1.6.6 programını açtım ve DHT11 sensörünün kütüphanesini ekledim. Eğer bu kütüphaneyi eklemezsek programımız çalışmayacaktır. DHT11 kütüphanesini eklemek için Arduino 1.6.6 programının “Taslak” menüsünden “library ekle” seçilir açılan pencerede ise “.ZIP Kitaplığı ekleKomutu” seçilir (Şekil 3). Bilgisayarımızda kayıtlı olan zip uzantılı kütüphane dosyası seçilerek onaylanır.


Şekil 2 – Arduino UNO ve DHT11 Sensörü Bağlantı Şeması

DHT11.zip dosyasını indirerek Arduino 1.6.6 programınıza ekleyin. DHT11.zip dosyasını İndirilenler-Download sekmesinden indirebilirsiniz.


Şekil 3 - DHT11.zip dosyasını kütüphaneye ekleme.

Arduino Programı

#include <DHT11.h> //DHT11 kütüphanesi eklenir
//Dijital pin tanımlaması
int pin=2;
DHT11 dht11(pin);
void setup()
{
  Serial.begin(9600);//Seri habarleşme başlatılır
}
void loop()
{
  float nem,sicaklik;
  int oku = dht11.read(nem,sicaklik); //sensördeki veriler okunur
  //Nemi oku ve seri porta gönder
  Serial.print(nem, 2);
  Serial.print(",");
  //Sıcaklık santigrat derece olarak oku ve seri porta gönder
  Serial.print(sicaklik, 2);
  Serial.println();
  delay(2000); // 2 Saniye bekle
}

Arduino Programını İndirilenler-Download sekmesinden indirebilirsiniz.



SerialCom. V1.1 Programı

Ölçümünü gerçekleştirdiğim değerleri okumak için C# 2013 programında SerialCom. V1.1 isimli bir program yazdım (Şekil 4). Bu programı yazarken using System.IO.Ports; satırını yazmayı unutmayın. Dikkat etmemiz gereken bir hususta seri port haberleşme hızı. Bu değeri 9600 olarak ayarladım. Donanım ve program hızı aynı değerlere sahip olmak zorunda.


Şekil 4 - SerialCom. V1.1 programı

Programın PORT SELECT kısmında Arduino UNO’nun haberleştiği seri port numarası seçilir. Port seçimi yapıldıktan sonra ise Start*Stop kısmında START butonuna basılarak haberleşme başlatılır. STOP butonuna basılarak da haberleşme durdurulur. Humudity-Temparature kısmında ise sırasıyla Nem, Sıcaklık ve Zaman görüntülenir. Program dosyasını İndirilenler-Download sekmesinden indirebilirsiniz.

 private void Form1_Load(object sender, EventArgs e)
        {
            string[] ports = SerialPort.GetPortNames();
            foreach (string port in ports)
            {
                comboBox1.Items.Add(port);
            }
            timer2.Enabled = true;
        }

        private void button1_Click(object sender, EventArgs e)
        {
            string x = comboBox1.SelectedItem.ToString();
            serialPort1.PortName = x;
            serialPort1.BaudRate = 9600;
         }

        private void timer1_Tick(object sender, EventArgs e)
        {
            timer1.Interval = 2000;
            String dataFromArduino = serialPort1.ReadLine().ToString();
            String[] dataTempHumid = dataFromArduino.Split(',');
            int Humidity = (int)(Math.Round(Convert.ToDecimal(dataTempHumid[0])/100, 0));
            int Temperature =(int)(Math.Round(Convert.ToDecimal(dataTempHumid[1])/100, 0));
            textBox1.Text = Humidity.ToString() + " %";
            textBox2.Text = Temperature.ToString() + " °C";
        }

        private void timer2_Tick(object sender, EventArgs e)
        {
            textBox3.Text = DateTime.Now.ToLongTimeString();
        }

        private void button2_Click(object sender, EventArgs e)
        {
            timer1.Enabled = true;
            try
            {
                if (! serialPort1.IsOpen)
                     serialPort1.Open();
            }
            catch
            {
                MessageBox.Show("Seri Port Seçin!");
            }
        }

        private void button3_Click(object sender, EventArgs e)
        {
            timer1.Stop();
            serialPort1.Close();
        }
    }
}


Programı yazarken using System.IO.Ports; satırını yazmayı unutmayın. Bu kütüphane serialPort nesnesinin çalışmasını sağlar.



Ders videosu



6 yorum:

  1. String dataFromArduino = serialPort1.ReadLine().ToString();
    şu kısım c#da hata veriyor

    YanıtlaSil
  2. Peki hocam c# kullanarak bu aynı işlemi LCD ekranda okutmak için ne yapmalıyım.

    YanıtlaSil
  3. Peki hocam değerleri LCD ekrana eklemek için ne yapmalıyız

    YanıtlaSil