Arduino
OKUDUĞUNUZ KONU
Visual C# ile 8 Kanal Röle Kontrolü
12

Visual C# ile 8 Kanal Röle Kontrolü

Yazar : Alper Gencan28 Aralık 2015

Herkese merhaba.Bu projede dilerseniz bluetooth kullanarak kablosuz ,dilerseniz de kablolu bağlantı kurarak C# uygulamasından 8 kanallı bir röleyi kontrol edebilirsiniz.Uygulamada “Bağlantı” kısmından arduinonuzun bağlı olduğu COM portunu seçip “Bağlan” butonuna basmanız yeterli.Ondan sonra açma/kapatma butonları ile röleleri kontrol edebilirsiniz.Ayrıca rölelerin isimlerini uygulama açıkken kendiniz değiştirebilirsiniz.

Malzemeler

  • Arduino (Ben uno kullandım siz farklı kartlar kullanabilirsiniz)
  • Bluetooth HC05 yada HC06
  • 8 kanallı röle kartı
  • Jumper kablo

Bluetooth Kontrolü İçin:

Öncelikle bilgisayarınızda bluetooth olması gerekli.Bluetooth ayarlarını açıp eşleştirme yapmalısınız..Bunun için devrenizi kurup arduinonun çalışması lazım.Arduino çalışıyorken bilgisayarınızın bluetooth ayarlarından kullandığınız bluetooth cihazını seçip eşleştirme yapıyorsunuz şifre genelde “1234” yada “0000” dır.Eşleştirme tamamlandıktan sonra gene bluetooth ayarlarından bağlantının hangi COM portu üzerinden yapıldığını öğrenmelisiniz.Orada gelen ve giden veri olmak üzere iki COM portu atanmıştır.Bizim için önemli olan giden COM portudur.C# uygulamasını açtığınızda port listesinden giden port hangisi ise onu seçmelisiniz aksi taktirde bağlantı kurulmaz.

Kablolu Bağlantı için:

Kablolu bağlantı da ise arduino kartını bilgisayarınıza bağladığınızda hangi COM portuna bağlı ise C# uygulamasında o portu seçmeniz yeterli.

C# Uygulaması:

Kullanılan Kütüphaneler:

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

COM Port Listeleme:

string[] Ports = SerialPort.GetPortNames();
foreach (string port in Ports)
comboBox1.Items.Add(port);

Bu kodu “public Form1” içerisine yazmalısınız.Burada tasarım kısmında bağlantı için bir adet combobox ve bir adette buton var. “Ports” adında string türünde dizi tanımlıyoruz ve bu dizinin elemanlarını seri port isimlerine eşitliyoruz daha sonra bütün elemanları combox içerisine ekliyoruz.Buraya kadar sadece bağlantı kurucağmız portu seçmiş oluyoruz.

Bağlantı Kurmak:

private void baglan_Click(object sender, EventArgs e)
{
if (baglan.Text == "Bağlan")
{
try
{
serialPort1.PortName = comboBox1.SelectedItem.ToString();
serialPort1.Open();
baglan.Text = "Kes";
baglan.BackColor = Color.Red;
bilgi.Text += "\n Bağlandı";
}
catch
{
MessageBox.Show("Lütfen doğru portu seçiniz.");
}
}
else
{
serialPort1.Close();
baglan.Text = "Bağlan";
baglan.BackColor = Color.Lime;
bilgi.Text += "\n Bağlantı Kesildi";
}

}

Kodu kısaltarak yazıyorum en temel haliyle.Burada mantık şu şekilde.”Bağlan” butonumuzun texti “Bağlan” ise bağlantı kurmayı deniycek.Bağlantı kurulduktan sonrada butonun textini değiştiriyoruz ve bağlantıyı kesme olayını başlatıyoruz.Yani aynı butona tekrar bastığınızda texti “Bağlan” olmadığı için portu kapatıcak.

Röle Kontrolü:


private void one1_Click(object sender, EventArgs e)
{
if (serialPort1.IsOpen)
serialPort1.Write("oneopen");
one1.BackColor = Color.LimeGreen;
bilgi.Text += "\n Röle-1 Açık";
}

private void off1_Click(object sender, EventArgs e)
{
if (serialPort1.IsOpen)
serialPort1.Write("oneclose");
one1.BackColor = Color.White;
off1.BackColor = Color.Red;
bilgi.Text += "\n Röle-1 Kapalı";
}

Burada ben her butonu karışıklık olmasın diye isimlendirdim.Örneğin 1. röleyi açma butonuna bastığınızda kod öncelikle portu kontrol edicek.Port açıksa yani bağlantı kurulmuşsa “oneopen” bilgisini göndericek.Arduino kodumuzuda bu verilere göre hazırlıyoruz.Veri gönderme bu kadar basit gerisi buton renklerini değiştirme ekrana bilgi yazdırmak.Kapatma mantığıda aynı şekilde port kontrol edilir açıksa kapatma verisi gönderilir.

Röle İsimlerini Değiştirmek:

Bunun için projeye yeni bir Form ekledim ve içerise röle sayısı kadar textBox ve buton ekledim.Bunun için Form1 de bulunan groupBox ların yani Röle isimleri yazan kısımların “Modifiers” özellikleri “Public” olmak zorunda.Böylece başka formlardan bu özellikleri değiştirebiliriz.Aynı şekilde richtextBox ında diğer formdan yazı yazdırabilmemiz için modifiers özelliğini public yapıyoruz.

Birinci Rölenin İsmini Değiştirme:


private void button1_Click(object sender, EventArgs e)
{
Form1 form = Application.OpenForms["Form1"] as Form1;
GroupBox Gbox = form.Controls["röle1"] as GroupBox;
form.bilgi.Text += ("\n Röle adı"+"~"+textBox1.Text+"~"+"olarak değiştirildi");
Gbox.Text = textBox1.Text;
}

Burada iki form sayfasınında aynı anda açık iken bu işlemi yapabilmemiz için butona tıkladığmızda diğer açık olan formu (yani From1) aratıyoruz.Daha sonra “Gbox” adında bir groupBox tanımlıyoruz adının ne olduğu önemli değil sadece bu formda kullanmak için bir isim giriyoruz.Daha sonra “röle1” isimli groupBox a eşitliyoruz.Oda bizim diğer formumuzda ki groupBox ın adı.Yani kısaca belirttiğmiz formda “röle1” aratıp onu “Gbox” a eşitliyorum.Artık Gbox değişkenimizi form2 deki textBox1 e eşitlediğmizde textBox a girdiğmiz veri bizim Röle-1 adımız olucak.Benzer işlemi 8 butonun içerisinede yapıyoruz.

Arduino Kodu:

String data;
int role1 = 9;
int role2 = 8;
int role3 = 7;
int role4 = 6;
int role5 = 5;
int role6 = 4;
int role7 = 3;
int role8 = 2;

void setup() {
pinMode(role1,OUTPUT);
pinMode(role2,OUTPUT);
pinMode(role3,OUTPUT);
pinMode(role4,OUTPUT);
pinMode(role5,OUTPUT);
pinMode(role6,OUTPUT);
pinMode(role7,OUTPUT);
pinMode(role8,OUTPUT);
digitalWrite(role1,HIGH);
digitalWrite(role2,HIGH);
digitalWrite(role3,HIGH);
digitalWrite(role4,HIGH);
digitalWrite(role5,HIGH);
digitalWrite(role6,HIGH);
digitalWrite(role7,HIGH);
digitalWrite(role8,HIGH);
Serial.begin(9600);
}

void loop() {
while(Serial.available())
{
delay(10);
data += char(Serial.read());
}
if(data.length() >0) {
Serial.println(data);

if(data == "oneopen") {digitalWrite(role1,LOW);}
if(data == "oneclose") {digitalWrite(role1,HIGH);}

if(data == "twoopen") {digitalWrite(role2,LOW);}
if(data == "twoclose") {digitalWrite(role2,HIGH);}

if(data == "threeopen") {digitalWrite(role3,LOW);}
if(data == "threeclose") {digitalWrite(role3,HIGH);}

if(data == "fouropen") {digitalWrite(role4,LOW);}
if(data == "fourclose") {digitalWrite(role4,HIGH);}

if(data == "fiveopen") {digitalWrite(role5,LOW);}
if(data == "fiveclose") {digitalWrite(role5,HIGH);}

if(data == "sixopen") {digitalWrite(role6,LOW);}
if(data == "sixclose") {digitalWrite(role6,HIGH);}

if(data == "sevenopen") {digitalWrite(role7,LOW);}
if(data == "sevenclose") {digitalWrite(role7,HIGH);}

if(data == "eightopen") {digitalWrite(role8,LOW);}
if(data == "eightclose") {digitalWrite(role8,HIGH);}
}
data = "";
}

Burada porttan gelen veriyi okumak için String türünde “data” adında bir değişken tanımlıyoruz ve dataya göre rölenin bağlı olduğu pini “LOW” yaptığnızda röle çıkış veriyor.

Pin bağlantıları kodda görüldüğü gibidir.Bluetooth bağlantısı için

Arduino / HC-06

  • Pin-0 (RX) / TX
  • Pin-1 (TX) / RX
  • 3.3V / VCC
  • GND / GND

Projeyi bu linkten indirebilirsiniz : https://yadi.sk/d/dZaDC-qkmZ6GF

SİZCE NASIL OLMUŞ?
Beğendim
88%
İlginç
6%
Eh İşte
6%
Anlamadım
0%
Kötü
0%
Berbat
0%
YAZAR HAKKINDA
Alper Gencan
Alper Gencan
Karabük Üniversitesi Elektrik Elektronik Mühendisliği mezunuyum. Ankara'da Best Grup Savunma Sanayi firmasında Ar-Ge mühendisi olarak çalışmaktayım. Üniversite hayatıma kadar amatörce olan elektrik elektronik uğraşım okul hayatım ile bir adım öne taşınmış oldu. Daha çok kontrol sistemleri ve robot projeleri ile uğraşmaktayım.
12 YORUMLAR
  • hüseyin men
    28 Aralık 2015 at 21:19

    abim öncelikle yaptğın uygulama için eline sağlık . zahmet olmazsa uygulamanın kodlarını aabilirmisin c# tan biraz kurcalıyayım c# a yeni başladımda.

  • 5 Ocak 2016 at 14:42

    arduinomu pc tanıtamadım ben bu konuda bana yardımcı olurmusunuz

  • Faseli_Mehmet
    22 Ocak 2016 at 10:39

    öncelikle meraba proje gayet güzel ve kullanışlı bir proje . fakat bir kaç sorum olcak sizlere burda kullanılan 8 kanallı röle kartı yerine ayrı ayrı olan röle kartları kullanabilmemiz için ne yapmamız lazım ve aynı zaman da bluetooth değilde internet üzerinden haberleşme imkanınızı neden değerlendirmediniz ?

    • Alper Gencan
      Alper Gencan
      22 Ocak 2016 at 20:02

      Merhaba teşekkürler.8kanallı röle kartı yerine ayrı ayrı röleleri aynı şekilde istediğniz pine bağlayabilirsiniz birşey değişmez.İnternet üzerinden henüz yapamıyorum çünkü bulunduğum yerde kablolu bağlantı kurulamıyor wifi aldım ama daha gelmedi malesef.O yüzden mecburi bluetooth yaptım şimdilik

  • fatih taşlı
    4 Mayıs 2016 at 19:49

    bunu 16 kanal a çıkarma gibi bir şansımız varmı acaba

  • Ömer POLAT
    23 Ekim 2016 at 15:23

    if(data.length() >0) { bu satırda ki gt;0 hata veriyor nedir bu

    • Alper Gencan
      Alper Gencan
      23 Ekim 2016 at 16:17

      yazım yanlışınız yok ise hata vermemesi gerekiyor parantezleri gözden geçirin.Kodun amacı kısaca gelen veri olup olmadığını incelemektedir.

      • Yakup Gövler
        13 Ağustos 2017 at 19:08

        Arduino kodunun 37. satırındaki
        if(data.length() &gt ;0) {
        ifadesindeki hatanın nedeni > sembolünün html karşılığına dönüşmüş olmasıdır. Kodu kopyala/yapıştır şeklinde kullanacak olanlar 37. satırdaki ifadeyi
        if(data.length() > 0) {
        şeklinde değiştirmelidirler, aksi halde yazım yanlışı hatası alırlar.

  • bilal beslen
    9 Nisan 2017 at 18:41

    merhaba hocam bir sorum olucak bu proramın tablet versiyonu varmı . teşekkürler

    • Yakup Gövler
      13 Ağustos 2017 at 19:13

      Bu uygulamanın aynısını bulamazsınız ama MIT appinventor ile kendiniz yapabilirsiniz.
      İnternette appinventor ile bluetooth üzerinden arduino kontrolünü anlatan onlarca kaynak bulabilirsiniz. Örneğin https://www.youtube.com/watch?v=7S0m3YRrBKI adresindeki ders sizin için başlangıç olacaktır.
      Aynı zamanda play store üzerinde de bluetooth üzerinden arduinonun pinlerini yönetmeyi sağlayan uygulamalar var ama kendi uygulmanazı yazmanız, istediğiniz gibi görselleştirmeniz açısından daha doğru bir yaklaşım olacaktır.

  • MEHMET KARA
    6 Ekim 2017 at 08:36

    Hocam bu kodlarla bu projeyi tamamlayabilirmiyiz. Ayrıca rölelelere hertürlü elektronik cihazın açıp kapamasını sağlayabilirmiyiz.Yada rölelerle başka bir arduino yu kontrol edebilirmiyiz.

YORUM YAP