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

14 3.046

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.

Arduino Yazılımı:

Verici Yazılımı:
#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ı:
#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

 

Bunlar da İlgini Çekebilir

Cevap bırakın

E-posta hesabınız yayımlanmayacak.

  1. Ali

    Öncelikle tebrikler 433mhz yerine nrf24L01 modülünü kullanabilirmiyiz.

  2. ms

    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

    1. Sezgin GÜL

      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.

  3. ERDEM

    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

  4. ERDEM

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

  5. ERDEM

    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

    1. Sezgin GÜL

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

      1. ERDEM

        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);

        }

  6. ERDEM

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

  7. ERDEM

    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);
    }

  8. ERDEM

    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?

    1. Sezgin GÜL

      bmp180 örnek kodu buradan bakabilirsin. https://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.

      1. ERDEM

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

        1. Sezgin GÜL

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