Arduino ve Visual Basic İle Rf Üzerinden Sıcaklık Nem Ölçümü
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:
- 2 Adet Arduino ( model farketmez nano yeterli olacaktır.)
- 433 Mhz Rf Modül ( Bu projede 433 Mhz kullandık.Farklı frekanslardaki modülleri de kullanabilirsiniz)
- 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
Merhaba,
C# arayuz kodlarını paylasabilir misiniz?
Saygılar
Öncelikle tebrikler 433mhz yerine nrf24L01 modülünü kullanabilirmiyiz.
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
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.
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
kodu yazamadım bi yardımcı olurmusunuz bmp 180 i eklediğimde değerler donuyor
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
bmp180 kullanıyorsan buradan bakabilirsin http://www.robimek.com/bmp180-basinc-sensoru-kullanimi/
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);
}
dediklerinizi yaptım ancak ekrana yazdıramıyorum yardımcı olabilirmisiniz
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);
}
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?
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.
2×16 lcd kullanarak rf üzerinden ekrana yazdırmam lazım kod ekleyebilirseniz çok sevinirim
lcd kütüphanesindeki yazdırma fonksiyonlarına bakıp yapabilirsiniz.