BAĞLAN

Arduino ve Visual Basic İle Rf Üzerinden Sıcaklık Nem Ölçümü

  • Görüntüleme 5125
  • Arduino ile 433mhz rf kullanarak visual basic ile yapacağımız programda sıcaklık ve nem değerlerini anlık olarak ekranda görebileceğiz.Projemizde önce sıcaklık ve nem ölçümü ile başlayalım daha sonra visual basic ile arayüz programımızı yapalım.Rf Üzerinden Sıcaklık Nem Ölçümü projemize başlıyoruz.

    Malzemeler:

    1. 2 Adet Arduino ( model farketmez nano yeterli olacaktır.)
    2. 433 Mhz Rf Modül ( Bu projede 433 Mhz kullandık.Farklı frekanslardaki modülleri de kullanabilirsiniz)
    3. Sıcaklık Nem Ölçer Modül

    Elektronik Kısım:

    Verici Devresi:

    Verici devresi ile sıcaklık ve nem değerleri alıcı devresine gönderilecek.

    Devrenin pin bağlantıları:

    Tx sinyal pin >> Arduino Dijital 3.pin

    Sıcaklık-Nem Sensör Data Pin >> Arduino Dijital 2.pin

    Alıcı Devresi:

    Alıcı devremiz vericiden gelen dataları alarak bilgisayara aktaracak.

    Devre Bağlantıları:

    Rx sinyal pin >> Arduino Dijital 11.pin

    Alıcı ve verici devremizi tamamladık.Şimdi visual basic ile arayüz programımızı yazmaya başlayalım.

    Visual Basic Arayüz Programı:

    Formun tasarımını aşağıdaki gibi yapabilirsiniz.

    Formumuz İçin Gerekli Araçlar:

    1. 3 Adet Buton
    2. 2 Adet Combobox
    3. 2 Adet Progressbar
    4. 11 Adet Label
    5. 2 Adet Picturebox
    6. 1 Adet SerialPort
    7. 1 Adet Timer

    Formun Yazılım Kısmı:

    • Sistem kütüphanelerini ekleyelim.
    Imports System
    Imports System.ComponentModel
    Imports System.Threading
    Imports System.IO.Ports
    • SerialPort nesnemizi tanımlayalım.
    Dim myPort As Array 'port ismi tanımlama
    Delegate Sub SetTextCallback(ByVal
     
    <pre>1</pre>
     
    As String)
    • Formun Load Kısmına tanımlamalarımızı yapalım.
     myPort = IO.Ports.SerialPort.GetPortNames()
    ComboBox2.Items.Add(9600)
    ComboBox2.Items.Add(19200)
    ComboBox2.Items.Add(38400)
    ComboBox2.Items.Add(57600)
    ComboBox2.Items.Add(115200)
    For i = 0 To UBound(myPort)
    ComboBox1.Items.Add(myPort(i))
    Next
    ComboBox1.Text = ComboBox1.Items.Item(0)
    ComboBox2.Text = ComboBox2.Items.Item(0)
    Button2.Enabled = False
    • Veri almamız için porta bağlanmamızı sağlayacak butonumuza gerekli tanımlamaları yapalım.
    Timer1.Start()
    SerialPort1.PortName = ComboBox1.Text
    SerialPort1.BaudRate = ComboBox2.Text
    SerialPort1.Parity = IO.Ports.Parity.None
    SerialPort1.StopBits = IO.Ports.StopBits.One
    SerialPort1.DataBits = 8
    SerialPort1.Open()
    Label10.Text = "Sensöre Bağlanıldı"
    Button1.Enabled = False
    Button2.Enabled = True
    TextBox4.ForeColor = Color.Green
    Label11.Text = "Veri Alınıyor..."
    • Veri alımını durdurmak için bağlantıyı kes butonumuza gerekli tanımlamaları yapalım.
    Timer1.Stop()
    SerialPort1.Close()
    Button1.Enabled = True
    Button2.Enabled = False
    TextBox3.ForeColor = Color.Red
    Label10.Text = "Bağlantı Kesildi."
    Label11.Text = "Veri Durduruldu."
    • Portu seçmemiz için comboboxların birine tanımlamamızı yapalım.
    If SerialPort1.IsOpen = False Then
    SerialPort1.PortName = ComboBox1.Text
    Else
    MsgBox("Port açıkken değiştirilemez", vbCritical)
    End If
    • Baud rate değerini seçmemiz için gerekli tanımlamamızı yapalım.
    If SerialPort1.IsOpen = False Then
    SerialPort1.BaudRate = ComboBox2.Text
    Else
    MsgBox("Port açıkken değiştirilemez", vbCritical)
    End If
    • Son olarak serialden veri almamızı sağlayacak timer kısmına gerekli tanımlamamızı yapalım.
     Dim str As String
    str = "1"
    SerialPort1.Write(str)
     
    Dim receiveddata As Integer = SerialPort1.ReadLine() 'serial portu okuma ve datayı yazdırma
    Label7.Text = receiveddata
    If receiveddata < 0 Then
    ProgressBar1.Value = -receiveddata
     
    Else
    ProgressBar1.Value = receiveddata
     
    End If
     
    System.Threading.Thread.Sleep(500)
    Dim receiveddata2 As Integer = SerialPort1.ReadLine()
    Label8.Text = receiveddata2
     
    ProgressBar2.Value = receiveddata2
     
    System.Threading.Thread.Sleep(500)

    Visual Basic İle Programımızı yazdık.Şimdi Arduino Yazılımına geçebiliriz.

     

    Arduino Yazılımı:

    Verici Yazılımı:

    // Yazılım Geliştirme By ROBİMEK - 2015</pre>
     
    #include <VirtualWire.h>
    #include <dht11.h> // dht11 kütüphanesini ekliyoruz.
    #define DHT11PIN 2 // DHT11PIN olarak Dijital 2'yi belirliyoruz.
     
    dht11 DHT11;
    char msg[6];
     
    void setup() {
     
     vw_setup(2400);
     vw_set_tx_pin(3);
     
    }
     
    void loop() {
     int chk = DHT11.read(DHT11PIN);
     int sicaklik =DHT11.temperature;
     int nem = DHT11.humidity;
     sprintf(msg, "%d,%d", sicaklik, nem);
     
     vw_send((uint8_t *)msg, strlen(msg));
     
     vw_wait_tx();
     delay(1000);
     
    }
    

    Alıcı Yazılımı:

    // Yazılım Geliştirme By ROBİMEK - 2015
    #include <VirtualWire.h>
    int sicaklik;
    int nem;
     
    int i;
     
    char x;
    char StringReceived[6];
    void setup(){
     
    Serial.begin(115200);
     
    vw_set_rx_pin(11);
    vw_setup(2400);
    vw_rx_start();
     
    }
     
    void loop(){
     
    if(Serial.available()>0)
    x=Serial.read();
     
    uint8_t buf[VW_MAX_MESSAGE_LEN];
    uint8_t buflen = VW_MAX_MESSAGE_LEN;
    if(x=='1')
    {
    if( vw_get_message(buf, &buflen) )
     
    {
    for (i = 0; i < buflen; i++)
     
    {
    StringReceived[i]= char(buf[i]);
    }
    sscanf(StringReceived, "%d,%d",&sicaklik, &nem);
    Serial.println(sicaklik);
    delay(500);
    Serial.println(nem);
    delay(500);
    memset( StringReceived, 0, sizeof( StringReceived));
    }
     
    }
    }

    Projenin videosunda hc-05 ile hc-06 bluetooth modülleri haberleştirerek sıcaklık ve nem ölçümünü yaptık.İki bluetooth un nasıl haberleştiğini de yakın zamanda yayınlayacağım.Diğer bir yöntem de bilgisayarınıza  arduinoya bağlı bluetooth modülünü tanıtarak haberleştirmeyi sağlayabilirsiniz.

    Buradan hc-05 ile hc-06 haberleşmesine bakabilirsiniz. >> hc-05 ile hc-06 haberleşmesi

    Bluetooth ile haberleşme arduino kodunu aşağıdaki linkten indirebilirsiniz.

    Bluetooth sıcaklık nem ölçümü

    Rf ile haberleşmesi videosunu ilerleyen günlerde yayınlayacağım.

    Yazılımda 500 milisaniye gecikme ile veri alımı gerçekleşiyor.

    Bu değeri değiştirecekseniz formun timer kısmındaki System.Threading.Thread.Sleep(500) değerini de değiştirmelisiniz.Aksi halde yanlış değerler alırsınız.

    Visual basic ve arduino yazılımını aşağıdaki linkten indirebilirsiniz.

    SICAKLIK NEM KONTROL

     

    PAYLAŞ

    Sezgin GÜL

    Makine Mühendisi, Maker, Robotik Sistemler Uzmanı

    13 Yorum "Arduino ve Visual Basic İle Rf Üzerinden Sıcaklık Nem Ölçümü"

    1. ms
      16 Mayıs 2016

      iyi çalışmalar ben anlayamadım yazının başında rf alıcı verici ile başlanıyo sonra bluetooth modül kullanılıyo iletişim nasıl sağlanıyor bluetoothla mı rf modülle mi

      Cevapla
      • Sezgin GÜL
        16 Mayıs 2016

        Proje kodları rf modüle göre. Fakat videoda bluetooth ile yaptığımı çekmiştim. Yani iki sistemle de yapabilirsiniz İkisinin de kodu projede mevcut.

        Cevapla
    2. ERDEM
      10 Mayıs 2016

      yaptım sonun mega kullanmıştım bmp180i a5 ve a4 pinlerine bağladığımda değer alamadım mega nın kendi scl sda pinlerini kullanınca oldu

      Cevapla
    3. ERDEM
      10 Mayıs 2016

      kodu yazamadım bi yardımcı olurmusunuz bmp 180 i eklediğimde değerler donuyor

      Cevapla
    4. ERDEM
      8 Mayıs 2016

      IS VE NEM DEĞERLERİNİ EKRAN YAZDIRDIM SONUNDA AMA BASINÇ DEĞERİNİ OKUYUP BİR DEĞİŞKENE ATAYAMIYORUM NASIL BİR KOD KULLANMAM LAZIM

      Cevapla
      • Sezgin GÜL
        8 Mayıs 2016

        bmp180 kullanıyorsan buradan bakabilirsin http://www.robimek.com/bmp180-basinc-sensoru-kullanimi/

        Cevapla
        • ERDEM
          8 Mayıs 2016

          verici kısmına bmp180 i ekleyemiyorum bu şekilde yapıyorum ancak hata veriyor

          #include //Load the library
          #include // dht11 kütüphanesini ekliyoruz.
          #include // Basınç Sensör kütüphanesi
          #include // I2C kütüphanesi
          #define DHT11PIN 2 // DHT11PIN olarak Dijital 2’yi belirliyoruz.

          SFE_BMP180 pressure; //sensör adı tanımlama

          dht11 DHT11;

          char msg[6];

          void setup()
          {
          vw_set_tx_pin(12); // Sets pin D12 as the TX pin
          vw_setup(2000); // Bits per sec

          }

          void loop() {

          int chk = DHT11.read(DHT11PIN);
          int sicaklik =DHT11.temperature;
          int nem = DHT11.humidity;
          int basinc = getPressure();

          sprintf(msg, “%d,%d,%d”, sicaklik, nem , basinc);

          vw_send((uint8_t *)msg, strlen(msg));

          vw_wait_tx();
          delay(200);

          }

          Cevapla
    5. ERDEM
      7 Mayıs 2016

      dediklerinizi yaptım ancak ekrana yazdıramıyorum yardımcı olabilirmisiniz

      Cevapla
    6. ERDEM
      7 Mayıs 2016

      bu kodu derleyemiyorum DHT.H KÜTÜPHANESİNDE sıkıntı var gibi kütüphaneleri ekledim yinede derlenmiyor
      //Including Libs
      #include
      #include “DHT.h”
      #include
      #include //Pressure sensor

      //Defining Pins
      #define DHTPIN 11
      #define DHTTYPE DHT11
      #define BMP085_ADDRESS 0x68 // I2C address of BMP085 //Pressure sensor
      DHT dht(DHTPIN, DHTTYPE);
      Adafruit_BMP085 bmp;

      //Seting up
      void setup()
      {
      Wire.begin();
      if (!bmp.begin()) {
      Serial.println(“Could not find a valid BMP085 sensor, check wiring!”);
      while (1) {}
      }
      //For Debug
      Serial.begin(9600);
      Serial.println(“Setup”);

      dht.begin();
      //Pressure sensor
      // Setup transmit pin
      vw_set_tx_pin(12);
      vw_setup(2000); //

      //For Debug
      Serial.println(“Start Pressure”);
      }

      //Main Loop
      void loop()
      {
      Serial.println(“\n”);
      float h = dht.readHumidity();
      float t = dht.readTemperature();
      float derece = bmp.readTemperature();
      float yukseklik = bmp.readAltitude(101500);
      //First Sensor
      //Humidity

      //Send Data #H is for Humidity
      SendData(“#H”+ ((String)h));

      //Seccond Sensor
      //Temp (Baro Pressure)
      //Send Data #C is for Celcious
      SendData(“#C”+(String(derece,2)));

      //Same seccond Sensor, next output
      //Baro Pressure
      float basinc = bmp.readPressure();

      //Send Data #P is for pressure
      SendData(“#P”+(String(basinc/100,2)));

      //Wait for Next Loop
      delay(5000);
      }

      void SendData(String Data)
      {
      //Debug
      Serial.println(“–>”+ Data + “<– ");

      //Making char Array of String
      const char* rawdata = Data.c_str();

      digitalWrite(13, true); // Flash a light to show transmitting
      vw_send((uint8_t *)rawdata, strlen(rawdata)); //Send Data
      vw_wait_tx(); // Wait until the whole message is gone
      digitalWrite(13, false);
      }

      Cevapla
    7. ERDEM
      7 Mayıs 2016

      merhaba arduino ile dht11 ve bmp180 sensörlerini kullanarak rf ile lcd ekrana sıcaklık basınç ve nem değerlerini yazdırmam lazım çok uğraştım ancak olmadı yardımcı olabilirmisiniz?

      Cevapla
      • Sezgin GÜL
        7 Mayıs 2016

        bmp180 örnek kodu buradan bakabilirsin. http://www.robimek.com/bmp180-basinc-sensoru-kullanimi/
        Bu projedeki koda ekle. sprintf(msg, “%d,%d”, sicaklik, nem); bu kısımda bir tane daha karakter aç basınç değeri için. Örnek olarak;
        sprintf(msg, “%d,%d,%d”, sicaklik, nem,basinc); bu şekilde vericiye entegre et.
        Aynı şekilde alıcıda da;
        sscanf(StringReceived, “%d,%d”,&sicaklik, &nem); buradaki kısmı
        sscanf(StringReceived, “%d,%d,%d”,&sicaklik, &nem, &basinc );
        bu şekilde yapabilirsin. tabi bu eklediklerimi de tanımlaman gerekiyor.

        Cevapla
        • ERDEM
          7 Mayıs 2016

          2×16 lcd kullanarak rf üzerinden ekrana yazdırmam lazım kod ekleyebilirseniz çok sevinirim

          Cevapla
          • Sezgin GÜL
            7 Mayıs 2016

            lcd kütüphanesindeki yazdırma fonksiyonlarına bakıp yapabilirsiniz.

            Cevapla

    Bir yorum yaz

    E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

    Projeler Devamı

    Bizi Takip Et

    izmir escort- izmir escort- izmir escort- izmir escort- izmir escort