Ana Sayfa Arduino Arduino C# ZedGraph Realtime Grafik

Arduino C# ZedGraph Realtime Grafik

6 min read
2
1
6,707

Herkese Merhabalar.

Bu uygulamada Arduino, Microsoft Visual Studio 2010 kullanılmıştır. C# ile grafik çizmemize olanak sağlayan  ZedGraph kütüphanesinden yararlanılmıştır.

Kütüphaneyi https://sourceforge.net/projects/zedgraph/files/zedgraph%20dll%20only/5.1.5/ indirebilirsiniz.

Uygulamamızın genel algoritmasına bakarsak şöyle çalışır; seri porttan veri okunur, veri aralardaki ‘*’ göre parse edilip text.box’lara aktarılır ve grafikde gerçek zamanlı olarak çizdirilir.

Yaptığımız uygulamada arduinodan 2 adet analog veri okunmaktadır.Bu veriler serial porta gönderilir.Bu veriler C# da yaptığımız bir arayüzle okunur. Bu sayede mikrodenetliyici ile iletişim kurabiliriz ve veri alışverişinde bulunabiliriz. C# üzerinden serial port programı yazma işlemi oldukça basittir. Seri port öğesi eklenir ve ayarları yapılır.Seri porttan gelen verileri ayırmak için Split kullanıyoruz.

1.Arduino Kodu

const int analogInPin = A0;

const int analogInPin1 = A1;

int sensorValue = 0;

int sensorValue1 = 0;

String sdeger=””;

void setup() {

Serial.begin(9600);

}

void loop() {

sensorValue = analogRead(analogInPin);

sensorValue1 = analogRead(analogInPin1);

sdeger+=’*’;

sdeger+=sensorValue;

sdeger+=’*’;

sdeger+=sensorValue1;

sdeger+=’*’;

Serial.println(sdeger );

sdeger=” “;

delay(200);

}

2.C# Kodu

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;

using System.IO;

using System.Threading;

using ZedGraph;

using System.IO.Ports;

namespace ZedGraph

{

public partial class Form1 : Form

{

GraphPane myPaneSicaklik = new GraphPane();

GraphPane myPaneTitreşim = new GraphPane();

PointPairList listPointsSicaklik = new PointPairList();

PointPairList listPointsTitreşim = new PointPairList();

LineItem myCurveSicaklik;

LineItem myCurveTitreşim;

double zaman = 0;

public Form1()

{InitializeComponent();}

private void Form1_Load(object sender, EventArgs e)

{Control.CheckForIllegalCrossThreadCalls = false;

for (int i = 0; i < System.IO.Ports.SerialPort.GetPortNames().Length; i++)

{comboBox1.Items.Add(System.IO.Ports.SerialPort.GetPortNames()[i]);}

comboBox2.Items.Add(300);

comboBox2.Items.Add(1200);

comboBox2.Items.Add(2400);

comboBox2.Items.Add(4800);

comboBox2.Items.Add(9600);

comboBox2.Items.Add(19200);

comboBox2.Items.Add(57600);

comboBox2.Items.Add(115200);

GrafikHazirla();}

private void GrafikHazirla()

{

myPaneSicaklik = zedGraphControl1.GraphPane;

myPaneTitreşim = zedGraphControl2.GraphPane;

myPaneSicaklik.Title.Text = “Sıcaklık – Zaman Grafiği “;

myPaneTitreşim.Title.Text = “Tireşim – Zaman Grafiği “;

myPaneSicaklik.XAxis.Title.Text = ” t (s) “;

myPaneTitreşim.XAxis.Title.Text = ” t (s) “;

myPaneSicaklik.YAxis.Title.Text = “Çıkış Sicaklik(Degree)”;

myPaneTitreşim.YAxis.Title.Text = “Çıkış Tireşim (Tireşim)”;

myPaneSicaklik.YAxis.Scale.Min = 0;

myPaneTitreşim.YAxis.Scale.Min = 0;

myPaneSicaklik.YAxis.Scale.Max = 1500;

myPaneTitreşim.YAxis.Scale.Max = 1500;

myCurveSicaklik = myPaneSicaklik.AddCurve(null, listPointsSicaklik, Color.Red, SymbolType.None);

myCurveTitreşim = myPaneTitreşim.AddCurve(null, listPointsTitreşim, Color.Blue, SymbolType.None);

myCurveSicaklik.Line.Width = 3;

myCurveTitreşim.Line.Width = 3;

}

private void button1_Click(object sender, EventArgs e)

{if (comboBox1.Text == “” && comboBox2.Text == “”)

{MessageBox.Show(“PORT VE BAUNDRATE SEÇİNİZ”);}

else if (comboBox1.Text == “”)

{MessageBox.Show(“PORT SEÇİNİZ”);}

else if (comboBox2.Text == “”)

{MessageBox.Show(“BAUNDRATE SEÇİNİZ”);}

else

{

serialPort1.PortName = comboBox1.SelectedItem.ToString();

serialPort1.BaudRate = int.Parse(comboBox2.SelectedItem.ToString());

serialPort1.Open();

MessageBox.Show(“BAĞLANTI BAŞARILI”);

serialPort1.DataBits = 8;

serialPort1.StopBits = System.IO.Ports.StopBits.One;

serialPort1.Parity = Parity.None;

serialPort1.Handshake = Handshake.None;

}     }

private void button2_Click(object sender, EventArgs e)

{serialPort1.Close();}

private void serialPort1_DataReceived(object sender, SerialDataReceivedEventArgs e)

{

string[] data = serialPort1.ReadLine().Split(‘*’);

if (data.Length == 4)

{

textBox1.Text = data[1];

textBox2.Text = data[2];

zaman += 0.05;

listPointsSicaklik.Add(new PointPair(zaman, Convert.ToDouble(data[1].ToString()) ));

listPointsTitreşim.Add(new PointPair(zaman, Convert.ToDouble(data[2].ToString())));

myPaneTitreşim.XAxis.Scale.Max = zaman;

myPaneSicaklik.XAxis.Scale.Max = zaman;

myPaneSicaklik.AxisChange();

myPaneTitreşim.AxisChange();

zedGraphControl1.Refresh();

zedGraphControl2.Refresh();

}}  }}

Çalışma Videosu;

https://www.youtube.com/watch?v=JheGmH0Ne1M

Buna Benzer Yazılar Göster !
Daha Fazlasını Yükle - Ekrem Keleş
Daha Fazla Göster -  Arduino

2 Yorumlar

  1. halil

    24 Ocak 2018 at 22:21

    myPaneSicaklik = zedGraphControl1.GraphPane;

    satırında hata veriyor. Forma grafiğin çizilmesi için eklenen komponent hangisi ? teşekkürler

    Reply

  2. Ekrem Keleş

    25 Ocak 2018 at 02:35

    ZedGraph dll yi projene eklemen gerekiyor.
    Video da anlatılmıştır.
    https://www.youtube.com/watch?v=JheGmH0Ne1M
    https://sourceforge.net/projects/zedgraph/files/zedgraph%20dll%20only/5.1.5/ Zedgraph kütüphanesini indirebilirsiniz.

    Reply

Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

Bak Bakalım ?

Matlab Simulink ile STM32F4 Servo Motor Kontrolü

Bu uygulamada STM32F4 ve MATLAB & Simulink kullanılarak Servo Motor kontrolü gerçekleş…