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...
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..
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 yorumbu projeyi tam anlamadım
ReplyMerhaba.. anlamadiginiz kısımlar neler söyleyiniz. Ona göre yardımcı olayım size..
ReplyTeşekkürler kardeşim çok iyi bir çalışma olmuş. Arayan bulur derler ya bende çok aradım ve buldum :)
ReplyEyvallah. Ben Teşekkür ederim. İyi çalışmalar. Kolay gelsin :)
Replyarduı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
ReplyAynı şey farklı bir şey değil ki. istediğin veriyi gönder.
Replydevre şeması varmı kardeşim bunun hangi malzemeler bağlanacak arduınoya yardım edersen sevinirim :)
ReplySitede yer alan LM35 sıcaklık sensörü uygulaması yazısını örnek alabilirsiniz. İyi Çalışmalar..
Replyhttp://mvaslan.blogspot.com.tr/2014/06/arduino-ve-lm35-ile-scaklik-olcumu.html
teşekkürler bilgi için :)
Replybunun board üzerine kurulu devresinin fotoğrafı var mıdır acaba , malzemeler falan ?
Replyiki farklı projeyi c# birleştirip calıştırabilirmiyi mesala led yakma ve lm35
ReplyYapmanız gereken sadece arduino kodundaki Yada sizin istediğin bir analog pinine lm35 in data bacağını bağlamak. Başka birşey yok.
ReplyYapabilirsin. 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.
ReplyGü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.
ReplyDikkatiniz ve uyarınız için teşekkürler. Dediklerinizde haklısınız. Belki düzeltirim. ;)
ReplyArduino kısmında char olarak aldığınız t yi int olarak almanız gerekiyor aksi halde çalışmıyor
ReplyMerhaba Rahşan Hanım,
ReplyUzun 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.
ConversionConversion EmoticonEmoticon