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ö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.
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.
Program açısından Arduino UNO olsun, Raduino olsun aynen kullanılabilir. Sadece derleme esnasında Raduino kartı için MEGA seçilmesi yeterlidir.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. }
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.
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
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.
Merhabalar, acaba arduino PLC shield mega 2560 ile de calisir mi yoksa sadece UNO ve Raduino yu mu destekliyor? Tesekkurler.
YanıtlaSilMerhabalar devre şemasını ya da çizimi paylaşma şansınız var mı?Teşekkürler elinize sağlık.
YanıtlaSil(guldenuryavuz.@gmail.com)
Bu yorum yazar tarafından silindi.
SilMail adresi yanlış yazılmış.Doğrusu:
Silguldenuryavuz.98@gmail.com