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);
}
}
27 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.
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
Replykodları nasıl çalışrıracağız......
ReplyTeşekkürler. Aşağıdakileri eklemeden Seri İletişimi açamadım. using System.IO; using System.IO.Ports;
Replymerhaba 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.
ReplySıcaklık kontrolü fan çalıştırması nasıl olur yardımcı olabilir misiniz
ReplyMerhaba. 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 ?
ReplyBende 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 ?
ReplyMerhaba Ben Kodlamayi asagidaki bigi yaptım,
Replyporta 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)
{
}
}
}
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ı?
ReplyMerhaba 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
ReplyConversionConversion EmoticonEmoticon