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.
Valf Kontrol Shield devremizde 3 adet valfi kontrol edebilecek transistörler bulunmaktadır.
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 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.