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

27 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
Adsız
admin
Kasım 29, 2017 ×

Merhaba c# ve arduino ile okulda akıllı ev projem var.. Bazı konularda fikir almak istiyorum. Yardımcı olabilirseniz çok sevinirim.. Mailim: aybikecingoz@hotmail.com

Reply
avatar
korma
admin
Mart 06, 2018 ×

kodları nasıl çalışrıracağız......

Reply
avatar
Ozer Arslan
admin
Ocak 16, 2019 ×

Teşekkürler. Aşağıdakileri eklemeden Seri İletişimi açamadım. using System.IO; using System.IO.Ports;

Reply
avatar
Adsız
admin
Mart 11, 2019 ×

merhaba bende tamda bu projeyi yapıyorum... yalnız c# dan seri port bağnaltısını kapattığımda led hala mesafe sensöründen gelen veriyi okuyup yanmaya devam ediyor. nasıl kapatabilirim.

Reply
avatar
Unknown
admin
Mayıs 06, 2019 ×

Sıcaklık kontrolü fan çalıştırması nasıl olur yardımcı olabilir misiniz

Reply
avatar
Kübra Nur
admin
Haziran 06, 2020 ×

Merhaba. Bende uygulamayı yaptım fakat port seçemiyorumn yani arduino bilgisayara bağlı fakat visual studio da hiç port gözükmüyor.Yardımcı olabilir misiniz ?

Reply
avatar
Kübra Nur
admin
Haziran 06, 2020 ×

Bende uygulmayı yaptım fakat arduino bilgisayara takılı olmasına rağmen visual studio ile yaptığım ekranda hiç port gözükmüyor.Sorun nerede anlayamadım yardımcı olabilir misiniz ?

Reply
avatar
Astanaveziri
admin
Eylül 24, 2021 ×

Merhaba Ben Kodlamayi asagidaki bigi yaptım,
porta baglaniyor ve sicakligi 24c olarak okuyor.
Ama LM35 i isitsamda bir turlu deger degismiyor?
Neden yapar acaba?
Saygılar.

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.IO.Ports;

namespace _014_C_Sharp_Arduinodan_Sicaklik_okuma
{
public partial class Form1 : Form
{
string[] portlistesi;
bool baglanti_durumu = false;

public Form1()
{
InitializeComponent();
}

void portlistele() //portlistele isiminde metod yaziyoruz
{
comboBox1.Items.Clear();
portlistesi = SerialPort.GetPortNames();
foreach(string portadi in portlistesi)
{
comboBox1.Items.Add(portadi);
if (portlistesi[0] != null)
{
comboBox1.SelectedItem = portlistesi[0];
}

}


}

private void Form1_Load(object sender, EventArgs e)
{
groupBox2.Enabled = false;
portlistele();
}

private void button2_Click(object sender, EventArgs e)
{
portlistele();
}

private void button1_Click(object sender, EventArgs e)
{
timer1.Start();
try
{

if (baglanti_durumu == false)
{
serialPort1.PortName = comboBox1.GetItemText(comboBox1.SelectedItem);
serialPort1.BaudRate = 9600;
serialPort1.Open();
comboBox1.Enabled = false;
button2.Enabled = false;
baglanti_durumu = true;
button1.Text = "Baglantiyi Kes";
button1.BackColor = Color.Red;
label5.Text = "Baglandi";
label5.ForeColor = Color.Green;
groupBox2.Enabled = true;
}

else
{
serialPort1.Close();
comboBox1.Enabled = true;
button2.Enabled = true;
baglanti_durumu = false;
button1.Text = "Baglan";
button1.BackColor = Color.Green;
label5.Text = "Baglanti Kesildi";
label5.ForeColor = Color.Red;
groupBox2.Enabled = false;

}
}
catch
{
MessageBox.Show("! USB porta Kabloyu Takiniz ");

}


}

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

catch(Exception ex)
{

}

}

private void progressBar1_Click(object sender, EventArgs e)
{

}
}
}

Reply
avatar
Adsız
admin
Nisan 15, 2022 ×

Merhaba ben 10 sınıf öğrencisiyim ve öğretmenim visual stüdyo ile hem led yakıp söndürecek hemde ısı ölçecek bir ardunio ödevi istedi fakat benim pek bilgim olmadığından yapamadım acaba yardımcı olma şansınız varmı?

Reply
avatar
Arda
admin
Nisan 17, 2022 ×

Merhaba hem led yakaıp söndüren hemde sıcaklık ölçen bir uygulama yapabilirmisiniz acaba forumdaki insanlarda yararlanmış olur ben şahsen 22 uygulamayı birleştirtemedim

Reply
avatar