C# ile Arduino Sıcaklık Ölçümü

Merhaba Arkadaşlar,
Bu uygulamamızda, öncelikle olarak Arduino dan C# uygulamasına veri göndermeyi, C# Veri okuma , C# Arduinodan veri alma başlıklarını da içeren, ele alacağız ve bunu pekiştiren bir örnek olarak da Arduino ile sıcaklık ölçümü yaparak bu sıcaklık verilerini Serial bağlantı ile arayüze gönderip orada farklı uygulamalar yapacağız..

Öncelikle arayüzün tasarımından bahsedelim ve nasıl çalıştığını anlatalım sonra...


Basit bir arayüz oluşturuyoruz. Arduino nun bağlı olduğu portu seçmek için bir adet ComboBox ekliyoruz. Daha sonra cihaza bağlanmak için bir adet Button ve bağlantıyı durdurmak için bir Button ekliyoruz.. Serialden alınan sıcaklık verisini göstermek için bir adet Label ekliyoruz.. Tabi bunun dışında metin kısımları için de labeller var.. Bir de görsellik katmak açısından ProgressBar ekleyerek gelen sıcaklık verisini yüzdelik şekilde gösterelim.. Bunların dışında da program içerisinde kullanılacak olan SerialPort ve Timer özelliklerini de arayüze ekledikten sonra programın çalışma mantığından bahsedelim..

Arayüzümüz eklenen Timer ile mevcut programı sürekli yenileyecektir ta ki Timer durdurulana kadar. Bu süreçte Serial üzerinden arduino ile iletişime geçip arduinodan sıcaklık verisini okur. Bunu Timer ın yanileme süresi boyunca bir kere yapar. Önce arduinoya serial haberleşmenin başlaması için bir değer gönderir gönderdiği değere karşılık da arduino ölçmüş olduğu sıcaklık değerini serial üzerinden gönderir. Arayüz de aldığı bu sıcaklık verisini ilgili Label a ve ProgressBar a yazarak ekrana aktarır.

Arayüzün Kodları Aşağıdaki gibidir...

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace ArduinoSicaklikOlcumu
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            for (int i = 0; i < System.IO.Ports.SerialPort.GetPortNames().Length; i++)
            {
                comboBox1.Items.Add(System.IO.Ports.SerialPort.GetPortNames()[i]);
            }

            
        }

        private void button1_Click(object sender, EventArgs e)
        {
            timer1.Start();
            try
            {
                serialPort1.PortName = comboBox1.Text;
                if (!serialPort1.IsOpen)
                    serialPort1.Open();
            }
            catch
            {
                MessageBox.Show("Seri Porta Bağlı !!");
            }
        }

        private void button2_Click(object sender, EventArgs e)
        {
            try
            {
                
                if (serialPort1.IsOpen)
                    serialPort1.Close();
            }
            catch
            {
                MessageBox.Show("Seri Port Kapalı !!");
            }
        }

        private void timer1_Tick(object sender, EventArgs e)
        {
            try
            {
                serialPort1.Write("1");
                int receiveddata = Convert.ToInt16(serialPort1.ReadExisting());
                receiveddata = ((receiveddata * 5000) / 1023) / 10;
                progressBar1.Value = receiveddata;
                label3.Text = receiveddata.ToString() + "*C";
                System.Threading.Thread.Sleep(100);
                
            }
            catch (Exception ex) { }
        }
    }
}
Arduino Kodları da Aşağıdaki gibi olacaktır...

int TempPin=A0;
int sicaklik=0;
char t;

void setup()
{ 
  Serial.begin(9600);
}
void loop(){
  if(Serial.available()>0)
  t=Serial.read();
  if(t=='1')
  {
    sicaklik = analogRead(TempPin); 
    Serial.println(sicaklik);
    delay(100);
  } 
}

17 yorum

Click here for yorum
Hatice aslan
admin
Ağustos 28, 2015 ×

bu projeyi tam anlamadım

Reply
avatar
mvaslan
admin
Ağustos 28, 2015 ×

Merhaba.. anlamadiginiz kısımlar neler söyleyiniz. Ona göre yardımcı olayım size..

Reply
avatar
Unknown
admin
Mayıs 28, 2016 ×

Teşekkürler kardeşim çok iyi bir çalışma olmuş. Arayan bulur derler ya bende çok aradım ve buldum :)

Reply
avatar
mvaslan
admin
Mayıs 28, 2016 ×

Eyvallah. Ben Teşekkür ederim. İyi çalışmalar. Kolay gelsin :)

Reply
avatar
Unknown
admin
Kasım 16, 2016 ×

arduınodakı rfıd adlı degıskenım var ve ıcıne verı aktardım c# tan bu verıyı cekmek ısıtıyorum kodalrını yazabılrımısınız acaba

Reply
avatar
mvaslan
admin
Kasım 22, 2016 ×

Aynı şey farklı bir şey değil ki. istediğin veriyi gönder.

Reply
avatar
Unknown
admin
Aralık 20, 2016 ×

devre şeması varmı kardeşim bunun hangi malzemeler bağlanacak arduınoya yardım edersen sevinirim :)

Reply
avatar
mvaslan
admin
Aralık 20, 2016 ×

Sitede yer alan LM35 sıcaklık sensörü uygulaması yazısını örnek alabilirsiniz. İyi Çalışmalar..
http://mvaslan.blogspot.com.tr/2014/06/arduino-ve-lm35-ile-scaklik-olcumu.html

Reply
avatar
Unknown
admin
Aralık 20, 2016 ×

teşekkürler bilgi için :)

Reply
avatar
Adsız
admin
Aralık 26, 2016 ×

bunun board üzerine kurulu devresinin fotoğrafı var mıdır acaba , malzemeler falan ?

Reply
avatar
Adsız
admin
Ocak 01, 2017 ×

iki farklı projeyi c# birleştirip calıştırabilirmiyi mesala led yakma ve lm35

Reply
avatar
mvaslan
admin
Ocak 02, 2017 ×

Yapmanız gereken sadece arduino kodundaki Yada sizin istediğin bir analog pinine lm35 in data bacağını bağlamak. Başka birşey yok.

Reply
avatar
mvaslan
admin
Ocak 02, 2017 ×

Yapabilirsin. Program akışını düzenleyip. Sıcaklık okuma ve led yakmayı yapabilirsin. Hatta ölçütünü sıcaklık belirli değeri geçtikten sonra ledin yanmasını sağlayabilirsin. Koşul yapılarını düzenlemen gerekir.

Reply
avatar
Adsız
admin
Ocak 17, 2017 ×

Güzel bir bilgi olabilirmiş ama olamamış. Hiçbir açıklama satırı yok buttonların isimleri direk button1 button2 diye default isimleriyle kullanılmış. Böyle kod yazılmaz kontrollerin isimleri görevleriyle benzer olmalı ve açıklama satırları ile ne yapıldığı açıklanmalı.Birde neyi anlamadınız diye soruyorsunuz komik.

Reply
avatar
mvaslan
admin
Ocak 17, 2017 ×

Dikkatiniz ve uyarınız için teşekkürler. Dediklerinizde haklısınız. Belki düzeltirim. ;)

Reply
avatar
Unknown
admin
Haziran 09, 2017 ×

Arduino kısmında char olarak aldığınız t yi int olarak almanız gerekiyor aksi halde çalışmıyor

Reply
avatar
mvaslan
admin
Haziran 09, 2017 ×

Merhaba Rahşan Hanım,
Uzun zamandır blogla uğraşmıyordum. Yorumlarda epey birikmiş. Ama çalışmıyor diye bir mesaj alınca cevap verme gereksinimi duydum. Öncelikle bu blog benim önce çalışmasını yapıp sonra nette kendim için depo ettiğim bir blog. Siz bu yorumu yapınca direk drive'ımdaki dosyayı bulum indirip çalıştırdım, sorunsuz çalışıyor. Sizin tavsiyenizi de denedim, o da çalışıyor. Çünkü mantık aynı aslında. Gelen karakter arduinoda eğer bir int değişkene kaydedildiğinde Sayısal olarak kaydediliyor. Koşul kısmında bu int değerin char karşılığı '1' midir diye soruyor. Yada direk char değişkene kaydedersek t == '1' şeklinde char ın kendisi bu mudur diye kontrol ediyor. Şu an masa üstümde uygulama gayet iyi çalışıyor. Tavsiyeniz için teşekkürler. Keşke Buraya daha fazla şeyler paylaşabilsem ama vaktim yok. Kolay gelsin.

Reply
avatar