Evet arkadaşlar bu yazımızda sanayide işinize yarayacak bir uygulama yapacağız. Bildiğiniz gibi selenoid valflerin olmadığı fabrika yoktur. Bu yazımızda 3 adet selenoid valfi network üzerinden kontrol etmemize yarayan bir Arduino shield yapıp bunu Ethernet Shield üzerine takacağız. Bu sayede networke bağlanabilen kompak bir kontrol cihazımız olacak.

Arduino ethernet shield’ ı daha önce incelemiştik. Aşağıdaki ethernet shield’ ı arduino üzerine takıp kendi yaptığımız +24VDC selenoid kontrol shield’ ını bunun üzerine takacağız.

Arduino Ethernet Shield

Arduino Ethernet Shield

Valf Kontrol Shield devremizde 3 adet valfi kontrol edebilecek transistörler bulunmaktadır.

Ethernet Shield Valf Kontrol

Ethernet Shield Valf Kontrol

Farkettiyseniz MAX7219 segmentli dispplay sürücüsünün de bağlantılarını koydum. Şimdi gelelim arduino kodunu. Burada dikkat etmeniz ve ayarlamanız gereken IP Adres bloğu. Bağlu olduğunuz network’ ün ayarlarına göre ip adreslerini ayarlamalısınız. Valfleri açmmak ve kapamak için birinci valf için ‘1’ karakterini kullandık. İkinci valfi açmak için ‘2’ , üç için ‘3’ kullandık. Hepsini kapatmak için ise ‘0’ karakterini kullandık. Siz dilediğiniz gibi yapabilirsiniz.

/*
prg adı: ethernet valf kontrol
board: arduino uno r3
tarih: 8.10.2018
yazan: Remzi ŞAHİNOĞLU
*/

#include <SPI.h>
#include <Ethernet.h>

byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFF, 0xF1 };                      // istenilen bir numara yazılabilir ama diğer cihazlarla çakışmaması gerek
IPAddress ip(???,???,???,???);                                            // laptopa bağlanacaksa onun ki ile çakışmayacak bir numara
IPAddress gateway(???,???,???,1);                                         // varsayılan ağ geçidi, laptop direk bağlanacaksa aynı, modeme bağlanacaksa modeminki ile aynı 
IPAddress subnet(255, 255, 255, 0);                       
IPAddress myDns(111,111,1131,111);                                        // bu internete bağlanmak için gerekli

EthernetServer server(23);                                                // telnet defaults to port 23

//------------------------------ ÇIKIŞLAR --------------------------------//

const int valf_1 = 6;
const int valf_2 = 7;
const int valf_3 = 8;

//------------------------- BAŞLANGIÇ AYARLARI ---------------------------//
void setup()
{
  //Serial.begin(9600);
  //delay(100);

  Ethernet.begin(mac, ip, myDns, gateway, subnet);                        // initialize the ethernet device
  server.begin();                                                         // start listening for clients

  pinMode(valf_1, OUTPUT);
  pinMode(valf_2, OUTPUT);
  pinMode(valf_3, OUTPUT);

  digitalWrite(valf_1, LOW);                                              // çıkışları sıfırla
  digitalWrite(valf_2, LOW);
  digitalWrite(valf_3, LOW);
}

//----------------------------- ANA PROGRAM ------------------------------//
void loop()
{   
  EthernetClient client = server.available();                             // wait for a new client:
  
  if (client.available() > 0)
  {
    while (client.available())
    {
      delay(1);
      char inChar = client.read();
      inputString += inChar;

      if (inChar == '0')
      {
        digitalWrite(valf_1, LOW);
        digitalWrite(valf_1, LOW);
        digitalWrite(valf_1, LOW);
      }
      if (inChar == '1'){ digitalWrite(valf_1, HIGH); }
      if (inChar == '2'){ digitalWrite(valf_1, HIGH); }
      if (inChar == '3'){ digitalWrite(valf_1, HIGH); }   
    }
  }
}

Arduino kodunu server olarak çalıştırdık. Bilgisayardan kontrol etmek için C# dilinde bir client uygulaması yazacağız. Yada Telnet’ i kullanarak arduino kodunda belirlediğimiz karakterleri göndererekte valflerimizi kontrol edebiliriz. Aşağıdaki gibi bir arayüz hazırlayıp IP adres ve Port kısımlarına kendi verdiğiniz değerleri yazmalısınız.

C# ile Arduino Ethernet Kontrolüü Yapmak

C# ile Arduino Ethernet Kontrolüü Yapmak

C# ile veri iletişimi yapmak için C# kodu aşağıdadır.

// www.kaizen40.com

using System;
using System.IO;
using System.Net.Sockets;
using System.Text;
using System.Windows.Forms;

namespace WindowsFormsApp1
{
    public partial class Form1 : Form
    {
        private string veri;

        public Form1()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            veri = "1";
            Veri_Gonder();
        }

        private void button2_Click(object sender, EventArgs e)
        {
            veri = "2";
            Veri_Gonder();
        }

        private void button3_Click(object sender, EventArgs e)
        {
            veri = "3";
            Veri_Gonder();
        }

        private void button4_Click(object sender, EventArgs e)
        {
            veri = "0";
            Veri_Gonder();
        }

        private void Veri_Gonder()
        {
            try
            {
                TcpClient tcpclnt = new TcpClient();
                tcpclnt.Connect(txtIPno.Text, Convert.ToInt32(txtPortNo.Text));
                Stream stm = tcpclnt.GetStream();
                ASCIIEncoding asen = new ASCIIEncoding();

                string paket = veri;     // gönderilecek veri
                byte[] data = asen.GetBytes(paket);
                stm.Write(data, 0, data.Length);
                stm.Flush();

                stm.Close();
                tcpclnt.Close();
            }
            catch (Exception hata)
            {
                MessageBox.Show(hata.Message + "\r\n" + hata.StackTrace);
            }
        }       
    }
}

Umarım işinize yarar. İyi çalışmalar.


2 yorum

Meraklı · 13 Şubat 2023 09:44 tarihinde

Merhaba, kodunuzu yazdığım zaman ” inputString += inChar; ” satırında aşağıdaki hataları alıyorum. Neyden kaynaklandığı hakkında fikriniz var mı acaba?

C:\Users\Meraklı\Documents\Arduino\Step-3\Ethernet_con\Ethernet_con.ino: In function ‘void loop()’:
C:\Users\Meraklı\Documents\Arduino\Step-3\Ethernet_con\Ethernet_con.ino:49:7: error: ‘inputString’ was not declared in this scope
inputString += inChar;
^~~~~~~~~~~
C:\Users\Meraklı\Documents\Arduino\Step-3\Ethernet_con\Ethernet_con.ino:49:7: note: suggested alternative: ‘String’
inputString += inChar;
^~~~~~~~~~~
String

exit status 1

Compilation error: ‘inputString’ was not declared in this scope

    Remzi Şahinoğlu · 18 Şubat 2023 20:11 tarihinde

    inputString değişkenini tanımlamışsın diyor, üst satırda String inputString = “”; şeklinde tanımalama yaparsan sorun düzelir.

Bir yanıt yazın

Avatar placeholder

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

Bu site, istenmeyenleri azaltmak için Akismet kullanıyor. Yorum verilerinizin nasıl işlendiği hakkında daha fazla bilgi edinin.