C# ile Arduino Kullanarak Boy Ölçüp Access Veritabanına Kaydetme

C# ile arduino ders videolarına 2.proje ile devam ediyoruz. Daha önce c# ile arduinoda led yakma nasıl yapılır onun videosunu çekmiştik. Videomuza youtube sayfamızdan ulaşabilirsiniz.

Şimdi ise arduino da mesafe ölçer kullanılarak boy ölçümü yapıp bu değeri c# arayüzü ile alıp access veritabanına kaydetme nasıl yapılır onu görecez.

C# da arayüzümü textbox,combobox,listbox,datetimepicker,label,datagridview ve butonlardan oluşturdum. Görünümü aşağıdaki gibidir.

Not: projede serial işlemlerini yapmak için 

using System.IO.Ports; kütüphanesi eklenmelidir.

Yine serial işlemleri için toolbox tan serialport toolbox nesnesini projemize eklememiz gerekir.

oledb veritabanına bağlantı nesnemizin tanımlamasını aşağıdaki kod ile gerçekleştirmekteyiz.

OleDbConnection baglanti = new OleDbConnection(“Provider=Microsoft.ACE.OLEDB.12.0;Data Source=ogrenciler.accdb”);

baglantı nesnemizi tanımlarken oledb ile yapacağımızı ve kaynak olarak ogrenciler veritababını kullanacağımızı baglantı nesnemize tanıttık. 

Not: Access ile oluşturduğumuz veritabanını projemizde bin/debug klasörüne atmalıyız.

  String[] portlar = SerialPort.GetPortNames(); bukod ile bağlı portları portlar değişkenine atıyoruz.Global olarak tanımlayabileceğimiz gibi formload kısmına da yazabiliriz.

form load kısmına ise

foreach(string port in portlar)
{
comboBox1.Items.Add(port);
comboBox1.SelectedIndex = 0;
}

datagriddoldur();

Bu kısımda portlar değişkeniyle; eğer bilgisayarımıza bağlı port varsa isimlerini çekip comboboxta görüntülenmesini sağlayacağız.Datagriddoldur ile veritabanımızda veri varsa datagridview1 de görüntülenmesini sağlayacağız.

public void datagriddoldur()
{
DataTable dt = new DataTable();
OleDbDataAdapter adapter = new OleDbDataAdapter(“SELECT * FROM OgrenciBilgi”, baglanti);
adapter.Fill(dt);
dataGridView1.DataSource = dt;
adapter.Dispose();
}

Kaydet butonu için aşağıdaki kodlar yazılacaktır.

try
{
baglanti.Open();
DateTime tarih = DateTime.Parse(dateTimePicker1.Text.ToString());
OleDbCommand komut = new OleDbCommand(“INSERT INTO OgrenciBilgi (Ogr_No, Ad_Soyad, Boy,Tarih) VALUES (‘” +int.Parse( textBox1.Text.Trim()) + “‘, ‘” + textBox2.Text.Trim() + “‘, ‘” +int.Parse( textBox3.Text.Trim()) + “‘, ‘” + tarih.ToShortDateString() +”‘)”, baglanti);
komut.ExecuteNonQuery();
komut.Dispose();
MessageBox.Show(“Öğrenci Bilgileri Kaydedildi”);
datagriddoldur();
}
catch(Exception ex)
{
MessageBox.Show(“Hata Algılandı:” + ex.Message);
}

finally
{
baglanti.Close();
}

Bağlantının kontrolü ve açılıp kapatılması için;

if (serialPort1.IsOpen)
{
serialPort1.Close();
label6.Text = “Kapalı”;
}
else
{
if (comboBox1.Text != “”)
{
serialPort1.PortName = comboBox1.Text;
serialPort1.Open();
label6.Text = “Açık”;
}
else { MessageBox.Show(“Port bulunamadı!”); }
}

Ölç butonu için aşağıdaki kodlar yazılacaktır.

int aralik = 30;
int boy = 0;
if (serialPort1.IsOpen != true)
{
MessageBox.Show(“Serial Port bağlantısı kapalı!”);
}
else
{
listBox1.Items.Clear();
int x = 0;
serialPort1.Write(“1”);// veri okumasını istedik biz istemedikçe sensör veri okumasın
while (x < 5)
{
boy = aralik – int.Parse(serialPort1.ReadLine());
listBox1.Items.Add(boy);
x++;
}
// en çok hesaplanan uzaklığı bul ve bunu doğru kabul et
int encok = 0; string mod = “”;
for (int i = 0; i < listBox1.Items.Count; i++)
{
int sayac = 0;
for (int j = 0; j < listBox1.Items.Count; j++)
{
if (listBox1.Items[i].ToString() == listBox1.Items[j].ToString())
{
sayac++;
if (sayac > encok)
{
encok = sayac;
mod = listBox1.Items[j].ToString();
}}}}
boy = int.Parse(mod);
listBox1.Items.Add(“değer:” + boy);
textBox3.Text = boy.ToString();
}

Arduino kod kısmına gelince;

int trigPin = 2;
int echoPin = 7;

long sure;
long uzaklik;

void setup(){
pinMode(trigPin, OUTPUT);
pinMode(echoPin,INPUT);
Serial.begin(9600);
}
void loop()
{
int kontrol =Serial.read();
if(kontrol==’1′){
int x=0;
while(x<5){
digitalWrite(trigPin, LOW);
delayMicroseconds(5);
digitalWrite(trigPin, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin, LOW);
sure = pulseIn(echoPin, HIGH);
uzaklik= sure /29.1/2;
if(uzaklik > 200)
uzaklik = 200;

Serial.println(uzaklik);
delay(100);
x++;
}
}
}

Arduino kısmında mesafe ölçer bağlantılarını trigpin için 2 , echo pin için 7. digital pine bağlanır.Vcc 5 volt Gnd gnd pinine bağlanır.

Bir cevap yazın

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