13 Nisan 2017 Perşembe

Arduino Geliştirme Kartı (Arduino PLC)

Arduino olsun veya başka bir geliştirme kartı olsun, kendi başına yapabileceği iş sınırlıdır. Çünkü kartın bacak bağlantılarının üzerinden akabilecek olan akım bir lambayı yakmaktan, bir motoru çalıştırmaktan veya vantilatörü çalıştırmaktan çok uzaktır. Hele ki işin içine 220V alternatif akım gibi bir dünya karışınca, hali ile en baba besleme gerilimi bile 5Volt doğru akım olan geliştirme kartları (burada Arduino) süt dökmüş kedi gibi kalır. Sonuçta sözü edilen cihazları veya aletleri çalıştırmak için Arduino ile o cihazları yalıtacak ama aynı zamanda kontrolunu sağlayacak bir arayüze ihtiyaç vardır.

Paylaşılmakta olan bu projede (aynı zamanda 1. kitapta yer alan) Arduino ile herhangi bir cihazı kontrol etmek için gereken arayüz anlatılmaktadır.

5 adet analog giriş ayrıldı. Normal bir dünya olarak bakıldığında herşey analog seviyesinde çalışır. Yani besleme gerilimi her zaman vardır, seviyesi oynasa  bile daima vardır. Bir termometre seviyesi veya değeri değişse bile her zaman gösterdiği bir değeri vardır. Çok sır karşılaşılan potansiyometre (çoğunlukla eski radyolarda ve kuvvetlendiriciler de ses ayar düğmesi olarak bilinen) aynı şekilde her daim üzerinde bir değer vardır.

Bu dünyada kesintisiz daima bilgi akışı vardır. Ama mikroişlemcilerin dünyasında ise olay her zaman 1 ve 0 olarak yürür.

Gerçek dünyadan mikroişlemcilerin dünyasına geçişte bir tercümana ihtiyaç duyulur. Buna  analog dijital çevirici olarak bilinen ( kısaca ADC) modüller kullanılır.

Örneğin LM35, NTC, PTC (ısı ile direnci değişen eleman), LDR (ışık ile değeri değişen) , AMR (manyetik alan ile direnci değişen) veya HALL sensörlerielemanların değerini mikroişlemciye aktarmak için kullanılan arabirim işte burasıdır. Aynı zamanda ADC modüller kullanılarak bir pilin veya bir yerin gerilimini okunabilir, veya aynı şekilde akım okunabilir ve mikroişlemci tarafından okunan bilgiler değerlendirilebilir.

ADC olarak bilinen modüllerin en yaygın kullanıldığı alan dijital terazi olarak bilinen aletlerdir. Çok özel yapılar haricinde basınç ile şekli değişen dolayısı ile direnci değişen bir sensör kullanılarak oluşturulan gerilim (özel ölçüm teknikleri içerir) bir ADC üzerinden okunarak işlemci tarafından ekran üzerinde görüntülenir.

Burada paylaşılmakta olan devrenin analog girişleri bu tür olayları okumak üzere kullanılabilir.

Dijital girişler olayın zaten bilindik bölümüdür. Normalde girişte gerilim var lojik 1 gerilim yok lojik 0 olarak tanımlasa da aslında belli bir gerilimin altı lojik 0 olarak kabul görürken, belli bir gerilimin üzeri otomatik olarak lojik 1 olarak işlem görür. Elbette burada  girişten gelebilecek aşırı gerilimlerden Arduino kartı korumak için opto kuplör olarak bilinen bir devre elemanından yararlanmaktayız. Basitçe bir tarafından LED ve diğer tarafında fototransistör bulunan ve arasında optik olarak birleştirilmiş bir elemandır. Dolayı ile iki taraf elektriksel olarak yalıtılmıştır. Sonuç buton gibi girişlerde kullanılan (veya sınır anahtarı) aletler için Arduino kartının yalıtılması için kullanılmaktadır.

Sonraki bölüm artık sadece çıkış ile ilgili. Bilinen en basit yalıtımı sağlanmış anahtar.... Röle.
Eğer bu tür ürünleri satan yerleri dolaşırsanız, çok çeşitli boy, çalışma gerilimi, bağlantı uçları olan röle çeşitleri ile karşılaşabilirsiniz.
Hatta şekil olarak hayal bile edemeyeceğiniz biçimlerde karşınıza çıkar ki (yüksek akımlı röleler) hatta bazı durumlarda artık adı bile röle değildir. (örneğin kontaktör olarak anılırlar). Hatta bazı çok yüksek güçlü röleler yağ bulunan bir hazne içinde çalıştırılır. (Şehrin elektrik sisteminde kullanılan yapılarda)
Bir röle içine açıldığı zaman görülecek budur. Bobin, ve bobinin oluşturduğu manyetik alan tarafından etkilenebilen bir anahtar.
Bir rölenin prensip çizimi yukarıda görülmektedir.

Tabi devre üzerinden şu konusu geçen optokuplör tarzı bir ürün kullanılarak da hali ile motor sürücü oluşturuldu.Tabii ki bu motor sürücü doğru akım 24Volt ile çalışması gerekiyor. Motor sürücü tasarlanırken motor tek yön kullanılacağı öngörüldü. Elbette röleler kullanılarak da motorun iki yönlü (ileri geri) çalıştırılması mümkündür.

İşte tüm bu elemanlar bir araya getirilerek Arduino PLC ürünün ortaya çıkardık. Her ne kadar proje aşamasında  Arduino UNO çalışacağı öngörüldü. Bir noktadan sonra yeterli gelmeyince Raduino kartı ile kullanımına geçildi.

Sahibinden. com adresinde  Arduino PLC için kutu ve plastik tabanına satın alabilirsiniz.

n11. com adresinde  Arduino PLC için kutu ve plastik tabanına satın alabilirsiniz.


Eleman
Tanımı ve kılıf bilgisi
Miktarı
6'lı tek sıra erkek
bacak arası 2.54mm,uzunluk 32mm
1
8'lıi tek sıra erkek
bacak arası 2.54mm,uzunluk 32mm
2
10'lu tek sıra erkek
bacak arası 2.54mm,uzunluk 32mm
1
470pF
805 smd
1
10uF elektrolitik
radyal (çap 5mm, yükseklik 7.5mm)
3
100uF elektrolitik
radyal (çap 5mm, yükseklik 7.5mm)
1
100nf
bacak arası 2.54mm dip
6
10nf
bacak arası 2.54mm dip
5
330uF/35V elektrolitik
radyal (çap 10mm, yükseklik 13mm)bacak arası 5,08mm
1
2200uF/25V elektrolitik
radyal (çap 12,6mm, yükseklik 25,5mm) bacak arası 5,08mm
1
1N4007
silisyum diyot
4
1N4148
küçük sinyal diyodu silisyum
13
SB1100 veya 1N5819
sckottky diyot
3
15V/ 1W
zener diyot
1
330uH
Kondansator tipi bobin
1
3mm led
3mm çaplı kırmızı LED
4
75NF75
TO220 kılıflı mosfet
1
BC337
TO92 kılıflı transitor
4
2k2
¼ W dip direnç
8
3k6
805 smd
1
1k2
805 smd
1
150R
¼ W dip direnç
1
13R
¼ W dip direnç
1
1k
¼ W dip direnç
3
47R
¼ W dip direnç
1
10k
¼ W dip direnç
7
220R 1W
1 W dip direnç
1
0,33R 1/2W
½ W dip direnç
1
1k
SMD 805 analog gerilim bölücü dirençleri
5
499R
SMD 805 analog gerilim bölücü dirençleri
5
3A sigorta
direnç tipi 3A sigorta
1
140R %1
1/8 W dip direnç
5
360R %1
1/8 W dip direnç
5
S3-5
5V stöi röle
4
MC34063
Soic 8 /150mil
1
TLP250
Dip 8 optokuplor
1
PC817
Dip 4 optokuplor
4
adaptor girişi
90 derece adaptor girişi
1
6'lı klemens
90 derece bacak arası 5,08mm
5
3'lü klemens
90 derece bacak arası 5,08mm
1
2x10 sıra pin
bacak arası 2.54mm
1
jumper
2,54mm bacak aralık için (ek olarak)
10
Arduino Uno
Bacak bağlantıları eşdeğer bir kart da olabilir
1
USB Kablo
Ardiuno Uno- Bilgisayar bağlantısı için
1

Elbette Arduino PLC tanıtımı youtube üzerinde yapıldı.

PCB için söylenebilecek şey; çift yüzlü ve delik içi kaplamalı olduğu yönündedir. PCB üzerindeki elemanları çoğu görüleceği üzere delik içi geçişlidir. Gerek yer sorunu, gerekse çalışma şeklinden dolayı az da olsa bazı elemanlar yüzey montajdır. (FR4 olarak geçen malzemedir)

PCB çiziminden sonra alınmış 3 boyutlu görünümü.. Ve bacakların listesi. Buradaki COM: ortak bacak,NO:normalde açık;NC:normalde kapalı;PWM: darbe genişlik modülasyonu şeklinde yaklaşımla incelenebilir. Adaptör giriş ucu 12 veya 24Volt ortası artı(+) olan bir fiş kullanılmalıdır.
Ayrıca motor çalıştırmak istendiğinde 24Volt  ayrı olarak motor bağlantılarının iki yanından doğru bir şekilde bağlanmalıdır. Aksi halde motor sürücü devresinin yanması kaçınılmazdır.


Monte edilmiş Arduino PLC üzerine Raduino veya Arduino UNO takılmış resimler.
Deneme için oluşturduğumuz sistem.Kutu üzerine 2.4inç Nextion ekran ile birlikte fonksiyonlarını denemek için oluşturulmuştur. Denemesi sayfa üzerindeki filmde izlenebilir.

Raduino kartı ile kullanılmak istendiğinde resimde görülen diyodun eklenmesi gereklidir. Çünkü UNO kartlarında besleme doğrudan  uygulanır.(iç regülatörü kullanır). Bu eklenen diyot ile besleme gerilimi  Raduino beslemesine uygulanır.


Şematik olarak Arduino PLC görünümü. Burada bacak bağlantıları daha açık olarak görülebilmektedir. Normalde A,B,C,D şeklinde ifade edilen Rölelerdir , isim vermek gerekli olmasa da program yazarken hangi rölenin aktif olduğunun belirlenmesi açısından gereklidir.
Motor kontrol için kod örneği: Yukarıdaki şekilde yapılan bağlantı ile kullanım içindir. Sadece potansiyometre ayarı ile motor hız kontrolu amaçlıdır. 
//değişkenleri belirleme, ilk değerlerini atama
int pot=A5;     //potansiyometrenin bağlı olduğu ADC girişi
int potDeger=0; //potansiyometre okuma için ilk değer
int motor=0;    //motor hızı için ilk değer

void setup() {
  // bir kez çalıştırmak için  başlangıç kodunun buraya koy:
  Serial.begin(9600); //pot değerini bilgisayarda izlemek için
}

void loop() {
  //adc değerini oku
 potDeger=analogRead(pot);  // adc
 Serial.println(potDeger); //pot değerini bilgisayara gönder
 //adc değeri 4'e böl -motor hız ayarı
 motor=potDeger/4;
 //motor hız ayarını 5. bacağa çıkart
 analogWrite(5,motor); //PWM değerini ayarla
 delay(30); //tüm işlemi tekrarlamadan önce bekle.
}

Program açısından Arduino UNO olsun, Raduino olsun aynen kullanılabilir. Sadece derleme esnasında Raduino kartı için MEGA seçilmesi yeterlidir.

Kod örneği 2: Röleleri bilgisayar (USB bağlantısı) üzerinden kontrol etmek için.
Arduino UNO için;
// değişkenleri tanımlama
int seri_gir = 0;
int RL1=7;
int RL2=8;
int RL3=9;
int RL4=10;
void setup() {
  // put your setup code here, to run once:
//Arduino röle uçlarını çıkış olarak ata
  pinMode(RL1, OUTPUT);
  pinMode(RL2, OUTPUT);
  pinMode(RL3, OUTPUT);
  pinMode(RL4, OUTPUT);
  Serial.begin(9600);//seri port ataması yap
}

void loop() {
  //seri port işlemleri (aynı zamanda bilgisayar bağlantısı)
  while (Serial.available() > 0)
  { seri_gir = Serial.read(); // seri portu oku
    role_kontrol(); //alına değeri röleleri aç/kapa
  }
}

void role_kontrol()
{
  //seri porttan gelen komuta göre röle kontrol
  if (seri_gir == 'A')  {   // giriş “A” ise
    digitalWrite(RL1, HIGH);   // röle 1 çalıştır
  }
  if (seri_gir == 'a')  {   // giriş “a” ise
    digitalWrite(RL1, LOW);   // röle 1 kapat
  }
  if (seri_gir == 'B')  {  // giriş “B” ise
    digitalWrite(RL2, HIGH);   // röle2'yi çalıştır
  }
  if (seri_gir == 'b')  {  // giriş “b” ise
    digitalWrite(RL2, LOW);    // röle2'yi kapat
  }
  if (seri_gir == 'C')  {   //giriş “C” ise
    digitalWrite(RL3, HIGH);   // Röle 3'ü çalıştır
  }
  if (seri_gir == 'c')  {   // giriş “c” ise
    digitalWrite(RL3, LOW);   // Röle 3'ü kapat
  }
  if (seri_gir == 'D')  {  // giriş “D” ise
    digitalWrite(RL4, HIGH);   // Röle 4'ü çalıştır
  }
  if (seri_gir == 'd')  {   //  giriş “d” ise
    digitalWrite(RL4, LOW);   // Röle 4'ü kapat.
  }
}
Radiuno için:
// değişkenleri tanımlama
int seri_gir = 0;
int RL1=7;
int RL2=8;
int RL3=9;
int RL4=53;
void setup() {
  // put your setup code here, to run once:
//Arduino röle uçlarını çıkış olarak ata
  pinMode(RL1, OUTPUT);
  pinMode(RL2, OUTPUT);
  pinMode(RL3, OUTPUT);
  pinMode(RL4, OUTPUT);
  Serial.begin(9600);//seri port ataması yap
}

void loop() {
  //seri port işlemleri (aynı zamanda bilgisayar bağlantısı)
  while (Serial.available() > 0)
  { seri_gir = Serial.read(); // seri portu oku
    role_kontrol(); //alına değeri röleleri aç/kapa
  }
}

void role_kontrol()
{
  //seri porttan gelen komuta göre röle kontrol
  if (seri_gir == 'A')  {   // giriş “A” ise
    digitalWrite(RL1, HIGH);   // röle 1 çalıştır
  }
  if (seri_gir == 'a')  {   // giriş “a” ise
    digitalWrite(RL1, LOW);   // röle 1 kapat
  }
  if (seri_gir == 'B')  {  // giriş “B” ise
    digitalWrite(RL2, HIGH);   // röle2'yi çalıştır
  }
  if (seri_gir == 'b')  {  // giriş “b” ise
    digitalWrite(RL2, LOW);    // röle2'yi kapat
  }
  if (seri_gir == 'C')  {   //giriş “C” ise
    digitalWrite(RL3, HIGH);   // Röle 3'ü çalıştır
  }
  if (seri_gir == 'c')  {   // giriş “c” ise
    digitalWrite(RL3, LOW);   // Röle 3'ü kapat
  }
  if (seri_gir == 'D')  {  // giriş “D” ise
    digitalWrite(RL4, HIGH);   // Röle 4'ü çalıştır
  }
  if (seri_gir == 'd')  {   //  giriş “d” ise
    digitalWrite(RL4, LOW);   // Röle 4'ü kapat.
  }
}
programların derlenip kartlar üzerine yüklenmesi yeterlidir. Bu kodlamalar RS485 veya uygun port bağlantıları yapılırsa bluetooth gibi haberleşme yöntemleri içinde kullanılması mümkündür.

Açık olan Arduino yükleyici/ derleyici üzerinde UNO veya Raduino kartının seri portunun seçili olduğu durumda “Seri port ekranı” butonu tıklayarak terminal penceresini aç.
Terminal penceresine röleleri çalıştırmak için A,B,C ve D yaz ve “Gönder” tıkla. Röleler gönderilen karaktere göre çalışacaktır. İstenirse “ABCD” şeklinde gönderip tüm rölelerin çalışması da sağlanabilir. Röleleri kapatmak için a,b,c ve d kullan. Uygun karaktere göre röleler kapanacaktır. Tümünü kapatmak için “abcd” şeklinde de gönderilebilir.

Not: Ürüne bir isim vermek gerekiyordu, bizde bu ismi uygun gördük. Elbette ki kartın kendisi Arduino uyumlu bir geliştirme kartıdır. (Üzerine siz ne takarsanız ve yazdığınız program doğrultusunda çalışacaktır)

Devre üzerine takılacak Arduino olsun, Raduino olsun bir şekilde programlanması gerekir ku, Arduino programı haricinde alternatif programlama yöntemlerinden biri Stratch olarak bilinen M.I.T. tarafından desteklenen görsel olarak sürükle bırak dilidir. Her ne kadar Arduino kartı üzerine bir başlangıç yazılımı yüklemesi gerekirse de  (sadece bilgisayara bağlı olduğu sürece çalışır), program tamamlandıktan sonra  derlenmiş programın Arduino üzerine  yüklenerek bilgisayardan bağımsız hale getirilme mümkündür.
Üstteki filmde bu konu ile ilgili bir örnek yer almaktadır. (Sadece Arduino üzerinde çalışan örnek)

Arduino geliştirme kartı olarak kullanılması durumunda rölelerin 1 saniye zaman aralığında sıra ile çekilip bırakılması işlemini yerine getirir. Program doğrudan Arduino UNO üzerine yüklendiğinden  bilgisayar bağlantısı sonlandırılsa bile  oluşturulan program çalışmasına devam eder.
Röle pin bağlantıları aşağıdaki gibi sıralanmıştır
Kodun tamamı bu kadar. Basit görünüyor, öyle değil mi?
  • RL1:7
  • RL2:8
  • RL3:9
  • RL4:10
Programlama ve işlem sonunda Arduino Geliştirme kartı çalışması hakkında  video içerir.

Geliştirme kartı Sürüm2:
Geliştirme kartını bir tablo üzerine monte edip, motor, 3 tane lamba, bir buzer ve 3 buton ile birlikte toplandığı zaman yukarıdaki resimde görüldüğü gibi bir geliştirme platformuna dönüşmesi mümkündür. Daha neler yapılabileceği ise artık kişinin hayal gücüne kalmış.

Bu uygulama ile ilgili küçük bir örnek programımızda yer almaktadır.
Scratch olarak biline görsel blokların yerleşimi üzerine kurulu program ile yapılmış örnek kod yukarıda yer almaktadır.

4 yorum:

  1. Merhabalar, acaba arduino PLC shield mega 2560 ile de calisir mi yoksa sadece UNO ve Raduino yu mu destekliyor? Tesekkurler.

    YanıtlaSil
  2. Merhabalar devre şemasını ya da çizimi paylaşma şansınız var mı?Teşekkürler elinize sağlık.
    (guldenuryavuz.@gmail.com)

    YanıtlaSil
    Yanıtlar
    1. Bu yorum yazar tarafından silindi.

      Sil
    2. Mail adresi yanlış yazılmış.Doğrusu:

      guldenuryavuz.98@gmail.com

      Sil