2 BOYUTTA YÜZEYE YAKIN METAL VE METAL OLMAYAN CİSİMLERİN YER TESPİTİ
2017
LİSANS TEZİ
ELEKTRİK-ELEKTRONİK MÜHENDİSLİĞİ
Adem ALCAN
Selim GÖL
ii
2 Boyutta Yüzeye Yakın Metal ve Metal Olmayan Cisimlerin Yer Tespiti
Adem ALCAN Selim GÖL
Karabük Üniversitesi
Mühendislik Fakültesi
Elektrik-Elektronik Mühendisliği Bölümünde Lisans Tezi
Olarak Hazırlanmıştır
KARABÜK Mayıs 2017
iii
Adem ALCAN, Selim GÖL tarafından hazırlanan “2 Boyutta Yüzeye Yakın Metal ve Metal Olmayan Cisimlerin Yer Tespiti” başlıklı bu tezin Lisans Tezi olarak uygun olduğunu onaylarım.
.../.../201....
Prof.Dr. Bahattin TÜRETKEN ..…….………...
Tez Danışmanı,
Karabük Üniversitesi Elektrik-Elektronik Mühendisliği Bölümü
Doç.Dr. Mustafa AKTAŞ ..…….………...
Karabük Üniversitesi Elektrik-Elektronik Mühendisliği Bölümü
Yrd.Doç. Hüseyin DEMİREL ..…….………...
Karabük Üniversitesi Elektrik-Elektronik Mühendisliği Bölümü
iv
“Bu tezdeki tüm bilgilerin akademik kurallara ve etik ilkelere uygun olarak elde edildiğini ve sunulduğunu; ayrıca bu kuralların ve ilkelerin gerektirdiği şekilde, bu çalışmadan kaynaklanmayan bütün atıfları yaptığımı beyan ederim.”
Adem ALCAN - Selim GÖL
v 1 Lisans Tezi
2 Boyutta Yüzeye Yakın Metal ve Metal Olmayan Cisimlerin Yer Tespiti
Adem ALCAN Selim GÖL
Karabük Üniversitesi Mühendislik Fakültesi
Elektrik-Elektronik Mühendisliği Bölümü
Tez Danışmanı:
Prof. Dr. Bahattin TÜRETKKEN Mayıs 2017, 79 sayfa
Anahtar Kelimeler : 2D tarama, Metal, Elektromanyetik, Elektromanyetik Dalga
vi 2 TEŞEKKÜR
Bu tez çalışmamızda yardımlarından dolayı, her zaman anlayışlı olan ve tez konumuzun danışmanlığını yapan Prof.Dr.Bahattin TÜRETKEN hocamıza , bilgi alışverişi yaptığımız diğer hocalarımıza, bize her türlü maddi ve manevi desteği veren arkadaşlarımıza ve ailelerimize teşekkürlerimizi sunarız.
3
İÇİNDEKİLER
Sayfa
TEŞEKKÜR ... 2
1. GİRİŞ ... 1
1.1 Ellektromanyetik Dalga ... 3
1.2 Elektromanyetik Dalgaların Üretilmesi ... 7
1.3 Elektromanyetik Dalga Çeşitleri ... 8
1.3.1 Gama Işınları ... 8
1.3.2 X Işınları ... 9
1.3.3 Ultraviyole Işınlar ... 10
1.3.4 Kızılötesi Işınlar ... 11
1.3.5 Görünür Işık ... 11
1.3.6 Mor Ve Ötesi Işınları ... 12
1.3.7 MİKRODALGALAR ... 12
1.3.8 Radyo Dalgaları ... 13
1.4 Elektromanyetik Dalgaların Özellikleri ... 13
1.5 Alan Tarama Aygıtları Ve Çalışma Teorileri... 14
1.6 Çalışması Yapılacak Sistem İşlevi Ve Gereksinimleri ... 16
1.6.1 Endüktif Sensör ... 17
2 DONANIM VE YAZILIM ... 19
2.1 Mekanik Yapı ... 19
2.2 Yazılımsal Yapı ... 24
2.2.1 C# Kodları ... 24
2.2.2 Arduino Kodları ... 33
3 PROJENİN GELİŞTİRİLMESİ ... 45 vi
viii 4
4 YÖNETİM PANELİ EKRANI ... 51
4.1 Panel Kullanımı ... 51
5 TESTLER VE SONUÇ ... 53
5.1.1 Çalışma Aşamaları ... 67
6 ÖZGEÇMİŞ ... 72
1 1. GİRİŞ
Özet
Bu tezin amacı zemine hiçbir temasta bulunmadan zeminin altındaki metallerin konumsal tespitini yapmak. Uygulanan bu sistemde bizim için alan ölçülerinde esnekliği ön planda tutmak. Bu proje için çalışma planı Tablo 1.1 de gösterilmektedir.
2.
Projenin Detayları Tasarım çalışması Ürün siparişleri Yazılım çalışması Malzeme temini (diğer) Malzeme testleri Montaj Yazılım yükleme Test Aşaması Teslim ve Sunum
EKİM
1. Hafta
2. Hafta
3. Hafta
4. Hafta
KASIM
1. Hafta
2. Hafta
3. Hafta
4. Hafta
ARALIK 1. Hafta
2. Hafta
3. Hafta
4. Hafta
OCAK
1. Hafta
2. Hafta
3. Hafta
4. Hafta
ŞU BA T1. Hafta
2
2. Hafta
3. Hafta
4. Hafta
MART
1. Hafta
2. Hafta
3. Hafta
4. Hafta
NİSAN
1. Hafta
2. Hafta
3. Hafta
4. Hafta
MAYIS
1. Hafta
2. Hafta
3. Hafta
4. Hafta
3 Elektromanyetik nedir
Elektromanyetizmaya alakası bulunan ve bununla ilgili olup Fransızca kökenli bir terim olan Elektromanyetik bir fizik terimidir. Farklı alanların içerisinde de bulunan elektromanyetik Kimyada mıknatıslık ve elektrik olaylarını kapsar.
1865 yılında fizikçi James Maxvell ‘in ışık hızına yakın bir hızda hareket eden ses dalgalarının gitmesini sağlayan elektromanyetik dalgaların yani radyo dalgalarını keşfetmiştir. Alman bilim adamı olan Hertz ise Maxwell’in bu tezini geliştirerek ve deneyler yaparak ispatladı.
1.1 Ellektromanyetik Dalga Elektromanyetik Dalga
Elektromanyetik dalgalar bir birine dik düzlemdeki birlikte değişen elektrik ve manyetik alanlardan meydana gelir. Uzay ortamında değişen bu alanlar ise manyetik alanları meydana getirir. Herhangi bir ortam içerisindeki elektrik alanı değiştirmek için yüklü cisimleri ivmelendirerek hareket ettirmek gerekir. Hareket eden bu yükler elektromanyetik dalga yayarlar.
Elektromanyetik iki temel bileşene sahiptir. Bunlar Elektrik alan(E) ve Manyetik Alan(B) bileşenleridir. Bu iki bileşen birbirine diktir ve elektromanyetik dalganın yayılma yönü ise bu iki bileşene diktir.
4
Şekil 1.1
Birim yüke etki eden kuvvete elektrik alan denir. Bu kuvvet yönü, + yükten – yüke doğrudur. Elektrik alanların yönleri yönlü oklarla gösterilir. Diğer bir değişle elektrik alan çizgileri potansiyeli yüksek olan bölgeden düşük potansiye doğrudur.
Manyetik alan ise herhangi bir noktada ‘v’ hızıyla hareket eden ‘q’ yükünde ‘F’
kuvvetini meydana getiren bir alan vektörüdür.
Aşağıdaki şekildede gösterildiği gibi ‘x’ doğrultusunda hareket eden bir elektromanyetik dalganın 3 boyutlu şekli gösterilmektedir.
Şekil 1.2 Elektromanyetik dalganın 3 boyutlu hareketi.
5
Şekil 1.3 Elektromanyetik dalganın 1 boyutlu görünümü.
Elektromanyetik dalganın yayılma yönü sağ el kuralı ile bulunmaktadır.
Sinüzoidal dalganın bir noktasından başlamak üzere yine aynı noktaya varıncaya kadar geçen süreye “periyot (T)” denir. Birim zamandaki (1 sn.) periyot sayısına ise
“frekans (f)” denir. f= 1/T”dir. Frekans birimi Hertz (Hz)”dir.
1 KHz = 1.000 Hz 1 MHz = 1.000.000 Hz 1 GHz = 1.000.000.000 Hz „ dir.
Elektromanyetik dalgalar ışık hızı (c= 300.000 km/sn. = 161.800 NM/sn.) ile yayılır.
Bir elektromanyetik dalganın bir periyodunda kat edilen yol, dalga boyunu (λ) verir.
NOT: Lamda (λ) ışığın dalga boyu gösterim simgesi. Birimi metredir (m).
c = λ .f ve λ = c/f ” dir.
Düşük frekanslı olan elektromanyetik dalgalar, uzun dalga boyuna sahiptirler büyük frekanslı dalgalar ise daha kısa dalga boyuna sahiptirler. Elektromanyetik dalgalar taşıdıkları enerji, frekansları ve dalga boylarına göre sınıflandırılır. Frekans değerleri sınıflandırıldığında farklı olan ışınlar sıralandığında elektromanyetik spektrum elde edilir. Tüm bu ışın skalasında düşük enerjili radyo dalgalarından yüksek
6
enerjili dalgalara kadar olan bu skalaya elektromanyetik spektrum denir ve bu skalada bilindiği kadarıyla radyo dalgalarıyla başlayıp gama dalgalarında biter.
Şekil 1.4 Elektromanyetik dalga spektrumu
7 1.2 Elektromanyetik Dalgaların Üretilmesi Elektromanyetik Dalgaların Üretilmesi
Elektromanyetik dalgaların dalga boylarına bağlı olarak elektromanyetik dalga üretecinin yapısı da değişir. Şekil 1.5 ‘te görüldüğü gibi kısa dalga yayını yapan elektromanyetik sinyal üreteci “ω=1/√LC” frekansı ile titreşen bir LC devresini göstermektedir.
Şekil 1.5 Elektromanyetik Dalga Üreteci
Sistem dipol antenin çıkışı olan iki kolunun uçlarında elektrik yüklerinin salınımı işlemini yapar ve bu salının sonucunda belirli bir düzende yayılan elektromanyetik alan çizgilerinin yayılımı şekil 1.6 ‘ da görünmektedir.
Şekil 1.6 Elektromanyetik Alan Çizgilerinin Yayılımı
8 1.3 Elektromanyetik Dalga Çeşitleri Elektromanyetik Dalga Çeşitleri
Elektromanyetik dalgalar dalga boylarına (λ) göre gruplandırılır. Sinyalin iki tepe noktası arasındaki uzaklığa verilen isime dalga boyu(λ) denir.
Elektromanyetik dalga çeşitleri;
Şekil 1.7 Elektromanyetik Spektrum
1.3.1 Gama Işınları Gama Işınları
En güçlü enerjiye sahip dalgalar olarak bilinirler. Skalada en kısa dalga boyuna(λ) sahip dalgalar olmasına rağmen en büyük foton enerjisi ve en yükse frekanslara sahiplerdir. Doğal ve yapay radyoaktif maddelerin çekirlerlerinde oluşan reaksiyon sonucunda açığa çıkarlar. Herhangi bir madde içerisinden geçitiklerinde o maddenin atomları ve molekülleri dışında bulunan elektronların tamamına çarparlar ve bunun sonucunda iyonlaşma meydana gelir.
Gama ışınarının taşıdıkları enerji miktarı çok yüksel olduğundan dolayı canlılar üzerinde yüksek miktarda zararlı etki oluştururlar. Bu ışında doğru kullanılmadığında aksi taktirde faydadan çok zarara sebebiyet verirler.
9
Şekil 1.8 Gama Işınları
Çok daha küçük dalga boyunave çok yüksek enerji sahiptirler. Atomların bozulması sonucunda meydana gelirler. Dalga boyları 10 pikometreden küçüktür.
1.3.2 X Işınları X Işınları
Çok yüksek hızlarda elektronların herhangi bir metal hedefe gönderilerek durdurulması sonucunda ortaya çıkarlar. Katot üzerinden hızlandırılan elektronların anota çarparak durması sonucu meydana gelirler.
X ışınları yüksek enerjiye ve küçük dalga boyuna sahiptirler.10 nanometre ile 10 pikometre arasında dalga boyuna sahiptirler
Şekil 1.9 X-Işınları
10 1.3.3 Ultraviyole Işınlar
Ultraviyole ışınları
Ultraviyole ışınları gözle görülmezler. 10 ile 380 nanometre aralığında bir dalga boyuna sahiptirler. Bu ışınların ana kaynağı güneştir. Elektrik ve kaynak arkları sırasında da oluşurlar. Güneşten dünyaya gelen ışın miktarları aşağıdaki durumlara bağlıdır;
Koruyucu ozon tabakasına
Bulut durumuna
Mevsime Günün saatine
Enleme
Deniz seviyesinden yüksekliği
Şekil 1.10 Ultraviyole Işınları
Ultraviyoler ışınları yansıyarakta etkili olabilir. Su, kar veya kumdan yansıyan bu ışınlar kolaylıkla engellenebilir.
11 1.3.4 Kızılötesi Işınlar
Kızıl Ötesi Işınlar
Dalga boyları 1-7 mm – 10-7m arasındadır. Isıya sahip cisimler tarafından yayılırlar.
Elektromanyetik dalgalar arasında görebildiğimiz tek ışınlardır. Farklı renklerde kendini gösterir. Bu renklerin tümü bir araya geldiğinda dalga boylarının toplamı bize görünür ışık oluşturur.
Şekil 1.11 Kızıl Ötesi Işınlar
1.3.5 Görünür Işık Görünür Işık
Dalga boyları 4x1014Hz ile 7x1014 Hz arasındadır. İnsan gözünün algıladığı ışıktır.
Bunlar çok sıcak cisimlerden yayılır. (Kırmızı, sarı, yesil, mavi, mor gibi)
Şekil 1.12 Görünür Işık
12 1.3.6 Mor Ve Ötesi Işınları
Mor Ötesi Işınlar
Bunların kaynağı genelde güneştir. Dalga boyları 4 10–7m–6 10–10m arasındadır.
Yeryüzüne az miktarda ulaşırlar. Güneş çarpmasının sebebi bu ışınlardır.
Şekil 1.13 Mor Ötesi Işınlar
1.3.7 MİKRODALGALAR
Mikrodalgalar
Dalga boyları 0,1-100cm ve frekansları 0,3-300 giga hertz (GHz) olan elektromanyetik dalgalardır. Bazı elektronik cihazlar tarafından üretilebilirler. Işık, yağmur ve toz içerisinden kolayca geçebildikleri için uzaydan dünyayı görüntüleme amacı ile kullanılırlar.
Şekil 1.14 Mikrodalgalar
13 1.3.8 Radyo Dalgaları
Radyo Dalgaları
Anten üzerindeki yüklerin hareketlendirilmesi (ivmelenmesi) ile meydana gelirler.
Dünyanın iyonosfer tabakası tarafından yansıtılan bu dalgalar bazı cisimlerin içerisinden rahatca geçebilirler. Titreşen devrelerin bulunduğu elektronik cihazlar tarafından üretilirler.
Dalga boyları 0,3m – 1 km arasında değişen bu dalgalar taşıyıcı sinyal olarak kullanılırlar.
1.4 Elektromanyetik Dalgaların Özellikleri Elektromanyetik Dalgaların Özellikleri
Yüklü cisimlerin ivmeli hareketleri sonucu meydana gelirler.
Kendini meydana getiren, elektrik ve manyetik alanları birbirine diktir.
Işık hızıyla yayılırlar.
Yüksüzdürler.
Yüksüz oldukları için elektrik ve manyetik alandan etkilenmezler.
Enerjileri E=h ν formülü ile hesaplanır.
Hızları farklı ortamlara geçtiklerinde değişir.
Soğurulabilirler; soğuran cisimler ısınır.
Enine dalgalardır. Kendini meydana getiren elektrik ve manyetik alanları aynı fazdadır.
E = B.c dir. (c; ışık hızıdır.) Yansıma, kırılma, kırınım ve girişim yapabilirler.
Boşlukta yayılabilirler.
14
1.5 Alan Tarama Aygıtları Ve Çalışma Teorileri
Günümüzde bu alanda geliştirilen bir takım pratik ve kullanışlı cihazlar vardır ve bunlara genel olarak “ALAN TARAMA” cihazları denmektedir.
Bu cihazlar özellikle geniş arazilerde ve çok derinde veya yüzeye yakın olabilecek bazı metal veya boşlukların tespitinde kullanılan yardımcı cihazlardır.
Prensip olarak bı cihazlar, statik enerjiyi kullanıcısından alıp hareket kabiliyeti olan mekanik bir sistemle hedefin yaydığı frekansları algılayarak konum belirtir.
Herhangi bir zemin içinde bulunan cisim ve minerallerin çokluğu ya da yoğunluğu tarama cihazının kararsız davranmasına sebep olabilir. Bu kararsız davranışları, tespit edilen bir hedefin kesin olarak konumunun belirlenememesine yol açabilir. Kullanıcının aradığı kesin ve kararlı sinyallerdir.
Alan Taramada en doğru ve hızlı sonucu almak, temel teori ve buna bağlı prensibi değişikliğe uğratmadan, statik enerjiyi kullanarak mümkün olabilmektedir.
Yer altında bulunan metal kütlenin uzun süre bulunduğu yerde hiç açılmadan duruyor olması, metal kütlenin etrafında manyetik bir alan oluşturacaktır. Bu “Manyetik Alan”, cismin toprak altında kalma süresi uzadıkça daha da genişleyerek büyüyecektir.
Manyetik alanın, metal etkisi nedeniyle metal objeleri daha büyük veya daha derinden tespit edilmesine hem sebep hem de yardımcı olacaktır.
Aşağıda olası bir aramada, Alan Tarama ile yapılabilecek yer tespiti ve hedefin ebat ve yaklaşık derinliğinin hesaplanması görülmektedir
15
Şekil 1.15
Şekil 1.15 ‘te görülen hedef burada metal bir objedir ve 45 derecelik açılar ile tüm yönlere enerji frekansını yaymaktadır. Yüzeye ulaşan bu frekanslar dik bir açıya kavuşur ve yaklaşık 100-180 cm kadar daha yükselebilirler. Daha sonra bu frekanslar, kuzeye doğru yönelme eğilimindedir.
Şekil 1.16
Şekil 1.16 ‘da olası bir hedefin yeryüzüne ulaşan frekanslarının düzlem olarak etki alanını görmektesiniz. Alan Tarama cihazı ile bu etki alanının içinde bulunmak, cihazın hedef kaynağına doğru yönelmesine sebep olacaktır.
16
1.6 Çalışması Yapılacak Sistem İşlevi Ve Gereksinimleri
Herhangi bir cismin istenilen yerde olup olmadığını belirleyen elektronik bir algılayıcı tipidir. Bu tip algılayıcılar ürettikleri sinyal sayısaldır ve 1(evet), 0 (hayır) çıkışı verirler. Cisimlerin temassız biçimde algılanması, hareketli parçalara sahip olmaması ve arızalarının az olmasından dolayı risk içeren alanlarda kullanılması sebebiyle endüstride en çok karşılaşılan algılayıcılardır.
Endüstride en çok karşılaşılan temassız algılayıcı çeşitleri aşağıda listelenmiştir.;
Endüktif
Kapasitif
Manyetik
Optik (ışık bariyeri, yansıma algılayıcıları)
Ultrasonik
Elektromanyetik dalgalarla tarama sistemi temel alınarak kısıtlı bütçeyle oluşturulan bu projede kullanılacak malzeme tipi olarak yaklaşım sensörleri tercih edilmiştir. Bilgi gönderici olarak kullanılan Endüktif sensördür.
17 1.6.1 Endüktif Sensör
Resim 2.16 Endüktif sensör
Çalışma Prensibi
Endüktif sensörler bobin, LC osilatör, tetikleyici ve çıkış katından oluşmaktadır.
Sensöre uygulanan besleme gerilimi sonucunda osilatör salınıma başlar ve yüksek frekanslı bir elektromanyetik alan oluşturur.
Osilatör bobini tarafından üretilen ve her hangi bir yöne yönelmeden bobin eksenine simetrik biçimlenen manyetik alana ferrit çekirdek sayesinde istenen doğrultuda yön verilir. Bobin ve çekirdek ayrıca metal ekranla çevrildiği takdirde manyetik alan tamamen sensörün ön kısmına hapsedilir ve böylece sensöre gömülebilir montaj özelliği eklenmiş olur. Osilatör tarafından üretilen bu manyetik alan içine giren iletken malzemeler algılama yüzeyine yakınlıklarıyla orantılı olarak bobindeki akımı değiştirirler. Değişen bu akım tetikleyiciyi aktifler ve çıkış katını
anahtarlar. Şekil 1.15 Endüktif sensörün Çalışması
18
Sistemde kullanılacak endüktif sensörün bağlantı şeması
Resim 1.1
19 2 DONANIM VE YAZILIM
2.1 Mekanik Yapı Mekanik Yapı
Makine X ve Y eksenleri arasındaki belirlenmiş bir alanı tarayacağından dolayı bu hareketleri kontrol etmek için milleri üzerinde bilyeli lineer rulmanlar kullanılmakta.
X ekseni için 10mm Y ekseni için 2 adet 8mm mil kullanılmıştır. Hareket miller üzeride alanı tarayacak elektronik komponenti taşıması için tasarlanan birde parça bulunmakta. X ekseni üzerinde 40 cm Y ekseni üzerinde 40 cm alanı taraması için gelirilen bu hareketli parçaları kontrol etmek için 3 adet step motor kullanmıştır.
Kutu ve kutu üzerinde miller, hareket eden ve milleri sabitleyen parçaların çizimleri aşağıdadir
Resim 2.1 Kutu Tasarıımı
20
Aşağıdaki resimde de görüldüğü gibi 10 cm derinliğe sahip 40x40 genişliğe sahip bir kutu tasarladık.
Şekil 2.1 Kutu Uzunlukları
Aşağıda mekanik sistem için gerekli parçaların çizimlerinin ekrar görüntüleri bulunmaktadır
Resim 2.2 Yan Kenar Taşıyıcı
21
Resim 2.3 Yatay eksen 8mm Mil Tutucu
Resim 2.4 40x40x10 Taranacak Kutu Tasarımı
22
Resim 2.5 Dikey Eksen 10 mm Mil Tutucu
Resim 2.6 Lineer Rulman
Hareketli parçaların simülasyonunu çizim porgramı üzeriden gerçekleştirdik.
23
Resim 2.7 Kutu Animasyon
Resim 2.8 Kablo Taşıyıcı
24 2.2 Yazılımsal Yapı
2.2.1 C# Kodları
Aşağıdaki kodların yanı sıra programın tasarımının yapılıp tasarım ekranı üzerindeki bölgelere kodların bağlantısı yapılmıştır. Yapılan sistemin iletişim yolu olarak seri port kullanılarak büyük bir oranda veri kaybı önlenmiştir.
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.IO.Ports;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace TezDesktop {
public partial class Form1 : Form {
int _x = 0, _y = 0;
bool exist = false;
bool ready = false;
Bitmap bitmap;
private const int width = 600, height = 600;
private const int u_width = 12, u_height = 12;
private const int bosluk = 0;
private const int mavi = 1;
private const int kirmizi = 2;
List<Coordinates> kordinatlar = new List<Coordinates>();
Coordinates kordinat;
string port = "";
List<string> foundedText = new List<string>();
private Bitmap blue {
get {
Bitmap bitmap = new Bitmap(u_width, u_height);
Pen myPen = new Pen(Color.Black);
using (Graphics gfx = Graphics.FromImage(bitmap)) {
25
using (SolidBrush brush = new SolidBrush(Color.FromArgb(46, 118, 234)))
gfx.FillRectangle(brush, 0, 0, u_width, u_height);
gfx.DrawRectangle(myPen, 0, 0, u_width, u_height);
}
return bitmap;
} }
private Bitmap red {
get {
Bitmap bitmap = new Bitmap(u_width, u_height);
Pen myPen = new Pen(Color.Black);
using (Graphics gfx = Graphics.FromImage(bitmap)) {
using (SolidBrush brush = new SolidBrush(Color.FromArgb(216, 95, 90)))
gfx.FillRectangle(brush, 0, 0, u_width, u_height);
gfx.DrawRectangle(myPen, 0, 0, u_width, u_height);
}
return bitmap;
} }
private Bitmap clear {
get {
Bitmap bitmap = new Bitmap(u_width, u_height);
Pen myPen = new Pen(Color.Black);
using (Graphics gfx = Graphics.FromImage(bitmap)) {
using (SolidBrush brush = new SolidBrush(Color.FromArgb(255, 255, 255)))
gfx.FillRectangle(brush, 0, 0, u_width, u_height);
gfx.DrawRectangle(myPen, 0, 0, u_width, u_height);
}
26 return bitmap;
} }
public Form1() {
InitializeComponent();
timer1.Enabled = false;
timer1.Interval = 100;
timer1.Tick += Timer1_Tick;
timer2.Enabled = false;
timer2.Interval = 9000;
timer2.Tick += Timer2_Tick;
bitmap = new Bitmap(width, height);
ClearUI();
}
private void Timer2_Tick(object sender, EventArgs e) {
listBox1.Items.Clear();
foreach (var box in foundedText) listBox1.Items.Add(box);
}
private void Timer1_Tick(object sender, EventArgs e) {
label2.Text = "X : " + (_x == -1 ? 0 : _x + 1) + "
Y : " + (_y + 1);
if (_x != -1)
UpdateCoordinates();
}
private void button1_Click(object sender, EventArgs e) {
pictureBox4.Hide();
for (int i = 0; i < 20; i++) {
if (!serialPort1.IsOpen) {
try {
serialPort1.PortName = "COM" + i;
serialPort1.Open();
if (serialPort1.IsOpen) {
27
button6.Enabled = true;
timer1.Enabled = true;
timer2.Enabled = true;
port = serialPort1.PortName;
serialPort1.BaudRate = 9600;
serialPort1.DataReceived +=
SerialPort1_DataReceived;
labelPort.Text = " Connected with " + port + " Port";
labelPort2.Text = " Connected with " + port + " Port";
} }
catch { } }
} }
private void SerialPort1_DataReceived(object sender, SerialDataReceivedEventArgs e)
{
try {
var gelen = serialPort1.ReadExisting();
switch (gelen[0]) {
case 'x':
_x++;
if (gelen[1] == '-') exist = false;
else
exist = true;
break;
case '-':
if (gelen[1] == 'x') _x--;
else _y--;
if (gelen[2] == '-') exist = false;
else
exist = true;
break;
case 'y':
_y++;
if (_y == 50)
serialPort1.Write("p");
28
if (gelen[1] == '-') exist = false;
else
exist = true;
break;
case '1':
exist = true;
break;
case '0':
exist = false;
break;
case 'o':
if (gelen[1] == 'k')
port = ((SerialPort)sender).PortName;
break;
} } catch { } }
private void button1_Click_1(object sender, EventArgs e) {
labelPort.Text = " Disconnect ";
labelPort2.Text = " Disconnect";
if (serialPort1.IsOpen) serialPort1.Close();
}
private void button2_Click(object sender, EventArgs e) {
if (_x != 49) {
if (serialPort1.IsOpen) serialPort1.Write("a");
label4.Text = "One step forward in X direction";
label5.Text = " ";
} }
private void button3_Click(object sender, EventArgs e) {
if (_x != 0) {
if (serialPort1.IsOpen)
29
serialPort1.Write("b");
label4.Text = " One step back in X direction";
label5.Text = " ";
} }
private void button4_Click(object sender, EventArgs e) {
if (_y != 50) {
if (serialPort1.IsOpen) serialPort1.Write("c");
label5.Text = " One step forward in Y direction";
label4.Text = " ";
} }
private void button5_Click(object sender, EventArgs e) {
if (_y != 0) {
if (serialPort1.IsOpen) serialPort1.Write("d");
label5.Text = "One step back in Y direction";
label4.Text = " ";
} }
private void start_Click(object sender, EventArgs e) {
if (serialPort1.IsOpen) serialPort1.Write("s");
label4.Text = " ";
label5.Text = " ";
}
private void pause_Click(object sender, EventArgs e) {
pause.Text = "Resume";
if (serialPort1.IsOpen) serialPort1.Write("p");
}
private void button6_Click(object sender, EventArgs e) {
if (serialPort1.IsOpen) {
30 serialPort1.Write("r");
_x = -1;
_y = 0;
bitmap = new Bitmap(width, height);
kordinatlar = new List<Coordinates>();
ClearUI();
}
label4.Text = " ";
label5.Text = " ";
start.Enabled = true;
pause.Enabled = true;
cancel.Enabled = true;
button2.Enabled = true;
button3.Enabled = true;
button4.Enabled = true;
button5.Enabled = true;
}
private void Form1_Load(object sender, EventArgs e) {
button6.Enabled = false;
start.Enabled = false;
pause.Enabled = false;
button2.Enabled = false;
button3.Enabled = false;
button4.Enabled = false;
button5.Enabled = false;
}
private void Form1_FormClosing(object sender, FormClosingEventArgs e)
{
if (serialPort1.IsOpen) serialPort1.Close();
}
private void cancel_Click(object sender, EventArgs e) {
if (serialPort1.IsOpen) serialPort1.Write("o");
}
private void groupBox3_Enter(object sender, EventArgs e) {
}
31
private void groupBox1_Enter(object sender, EventArgs e) {
}
private void aboutToolStripMenuItem_Click(object sender, EventArgs e)
{
MessageBox.Show( "Bu program 2016-2017 öğretim yılı
"+"\n" + "Engineering Design dersi kapsamındaki çalışmalar sonucunda " + "\n" + "Adem ALCAN tarafından yapılmıştır.");
}
private void exitToolStripMenuItem_Click(object sender, EventArgs e)
{
Application.Exit();
}
private void disconnectToolStripMenuItem_Click(object sender, EventArgs e)
{
labelPort.Text = " Disconnect ";
labelPort2.Text = " Disconnect";
if (serialPort1.IsOpen) serialPort1.Close();
}
private void connectToolStripMenuItem_Click(object sender, EventArgs e)
{
for (int i = 0; i < 20; i++) {
if (!serialPort1.IsOpen) {
try {
serialPort1.PortName = "COM" + i;
serialPort1.Open();
if (serialPort1.IsOpen) {
button6.Enabled = true;
timer1.Enabled = true;
timer2.Enabled = true;
port = serialPort1.PortName;
32
serialPort1.BaudRate = 9600;
serialPort1.DataReceived +=
SerialPort1_DataReceived;
labelPort.Text = " Connected with " + port + " Port";
labelPort2.Text = " Connected with " + port + " Port";
} }
catch { } }
} }
private void rstToolStripMenuItem_Click(object sender, EventArgs e)
{
if (serialPort1.IsOpen) {
serialPort1.Write("r");
_x = -1;
_y = 0;
bitmap = new Bitmap(width, height);
kordinatlar = new List<Coordinates>();
ClearUI();
}
label4.Text = " ";
label5.Text = " ";
start.Enabled = true;
pause.Enabled = true;
cancel.Enabled = true;
button2.Enabled = true;
button3.Enabled = true;
button4.Enabled = true;
button5.Enabled = true;
}
private void UpdateCoordinates() {
kordinat = new Coordinates() { x = _x * u_width, y = _y
* u_height, exist = exist, current = true };
foreach (var coordinate in kordinatlar) if (coordinate.current)
coordinate.current = false;
33 kordinatlar.Add(kordinat);
foreach (var coordinate in kordinatlar)
using (Graphics g = Graphics.FromImage(bitmap)) {
if (coordinate.exist) {
g.DrawImage(red, coordinate.x, coordinate.y, u_width, u_height);
if (coordinate.current)
foundedText.Add("\n" + "x: " + ((coordinate.x / u_width) + 1 ) + " y: " + ((coordinate.y / u_height) + 1));
} else
g.DrawImage(blue, coordinate.x, coordinate.y, u_width, u_height);
if (coordinate.current)
g.DrawString("0", x.Font, new
SolidBrush(Color.FromArgb(255, 255, 255)), coordinate.x + 1, coordinate.y + 1);
}
pictureBox1.Image = bitmap;
}
private void ClearUI() {
using (Graphics g = Graphics.FromImage(bitmap)) for (int i = 0; i < 50; i++)
for (int j = 0; j < 50; j++)
g.DrawImage(clear, i * u_width, j * u_height, u_width, u_height);
} } }
2.2.2 Arduino Kodları
#define X_STEP_PIN 54
#define X_DIR_PIN 55
#define X_ENABLE_PIN 38
34
#define X_MIN_PIN 3
#define X_MAX_PIN 2
#define Y_STEP_PIN 60
#define Y_DIR_PIN 61
#define Y_ENABLE_PIN 56
#define Y_MIN_PIN 14
#define Y_MAX_PIN 15
#define Z_STEP_PIN 46
#define Z_DIR_PIN 48
#define Z_ENABLE_PIN 62
#define Z_MIN_PIN 18
#define Z_MAX_PIN 19
#define LED_PIN 13
#define FAN_PIN 9
char giris;
int stpx_min=0;
int stpy_min=0;
int stpx_max=0;
int stpy_max=0;
int x_r_button = 0;
int y_r_button = 0;
35 void sola_git(int n);
void saga_git(int n);
void ileri(int n);
void geri(int n);
void geri_git_reset(int n);
void sola_git_reset(int n);
bool calisiyormu = true;
bool y_calisiyormu = true;
bool x_calisiyormu = true;
int sol = 0;
int sag = 0;
int ileri_read = 0;
void setup() { Serial.begin(9600);
pinMode(X_MIN_PIN, INPUT);
pinMode(Y_MIN_PIN, INPUT);
pinMode(Y_MAX_PIN, INPUT);
pinMode(LED_PIN , OUTPUT);
pinMode(X_STEP_PIN , OUTPUT);
pinMode(X_DIR_PIN , OUTPUT);
pinMode(X_ENABLE_PIN , OUTPUT);
pinMode(Y_STEP_PIN , OUTPUT);
pinMode(Y_DIR_PIN , OUTPUT);
pinMode(Y_ENABLE_PIN , OUTPUT);
pinMode(Z_STEP_PIN , OUTPUT);
36 pinMode(Z_DIR_PIN , OUTPUT);
pinMode(Z_ENABLE_PIN , OUTPUT);
digitalWrite(X_ENABLE_PIN , LOW);
digitalWrite(Y_ENABLE_PIN , LOW);
digitalWrite(Z_ENABLE_PIN , LOW);
} void loop () { if(Serial.avalable())
giris= (char) Serial.read();
switch (giris){
case 'r':
calisiyormu = true;
x_calisiyormu = true;
y_calisiyormu = true;
if(calisyormu && x_calisyormu) sola_git_reset(10000);
giris = "";
digitalWrite(X_ENABLE_PIN , LOW);
if(calisyormu && y_calisyormu) geri_git_reset(10000);
giris = "";
digitalWrite(X_ENABLE_PIN , LOW);
Serial.write('r');
break;
case 's':
calisiyormu = true;
37 x_calisiyormu = true;
y_calisiyormu = true;
for ( int j=0;j<27;j++){
sag = 0;
sol = 0;
if(calisiyormu) sola_git(7000);
giris = "";
digitalWrite(X_ENABLE_PIN , LOW);
if(calisiyormu) ileri(140);
if(calisiyormu) saga_git(7000);
giris = "";
digitalWrite(X_ENABLE_PIN , LOW);
if(calisiyormu) ileri(140);
giris = "";
}
ileri_read = 0;
digitalWrite(X_ENABLE_PIN , HIGH);
digitalWrite(Y_ENABLE_PIN , HIGH);
digitalWrite(Z_ENABLE_PIN , HIGH);
case 'a':
sola_git(140);
giris = "";
38 digitalWrite(X_ENABLE_PIN , LOW);
break;
case 'b':
saga_git(140);
giris = "";
digitalWrite(X_ENABLE_PIN , LOW);
break;
case 'c':
ileri(140);
giris = "";
digitalWrite(Y_ENABLE_PIN , LOW);
break;
case 'd':
geri(140);
giris = "";
digitalWrite(Y_ENABLE_PIN , LOW);
break;
case 'g':
if(digitalRead(Y_MAX_PIN) == 0) Serial.write("1");
else
Serial.write("0");
break;
case 't':
Serial.write("ok");
39 break;
} }
void sola_git(int n){
for(int i=0 ; i< n ; i++ ){
if(Serial.available())
giris= (char) Serial.read();
if(giris == 'p'){
calisiyormu = false;
break;
}
digitalWrite(X_DIR_PIN , LOW);
digitalWrite(X_STEP_PIN , LOW);
delay(1);
digitalWrite(X_STEP_PIN , HIGH);
if(i%140 == 0) {
if(digitalRead(Y_MAX_PIN) == 0) Serial.println("x+");
else
Serial.println("x-");
}
} //Serial.println("x");
} void ileri(int n){
40 for(int i=0 ; i< n ; i++){
if(Serial.available())
giris= (char) Serial.read();
if(giris == 'p' || digitalRead(X_MAX_PIN) == 0){
calisiyormu = false;
break;
}
digitalWrite(Y_DIR_PIN , HIGH);
digitalWrite(Y_STEP_PIN , HIGH);
digitalWrite(Z_DIR_PIN , HIGH);
digitalWrite(Z_STEP_PIN , HIGH);
delay(1);
digitalWrite(Y_STEP_PIN , LOW);
digitalWrite(Z_STEP_PIN , LOW);
digitalWrite(Y_ENABLE_PIN , LOW);
digitalWrite(Z_ENABLE_PIN , LOW);
}
if(digitalRead(Y_MAX_PIN) == 0) Serial.println("y+");
else
Serial.println("y-");
}
void saga_git(int n){
for(int i=0 ; i<n ; i++ ){
if(Serial.available())
giris= (char) Serial.read();
41 if(giris == 'p'){
calisiyormu = false;
break;
}
digitalWrite(X_DIR_PIN , HIGH);
digitalWrite(X_STEP_PIN , HIGH);
delay(1);
digitalWrite(X_STEP_PIN , LOW);
if(i%140 == 0) {
//Serial.println("-x");
if(digitalRead(Y_MAX_PIN) == 0) Serial.println("-x+");
else
Serial.println("-x-");
}
} //Serial.println("-x");
} void geri(int n){
for(int i=0 ; i< n ; i++){
if(Serial.available()) giris= (char) Serial.read();
if(giris == 'p'){
calisiyormu = false;
break;
42 }
digitalWrite(Y_DIR_PIN , LOW);
digitalWrite(Y_STEP_PIN , HIGH);
digitalWrite( Z_DIR_PIN , LOW);
digitalWrite(Z_STEP_PIN , HIGH);
delay(1);
digitalWrite(Y_STEP_PIN , LOW);
digitalWrite(Z_STEP_PIN , LOW);
giris = "";
digitalWrite(Y_ENABLE_PIN , LOW);
digitalWrite(Z_ENABLE_PIN , LOW);
if(i%140 == 0) {
if(digitalRead(Y_MAX_PIN) == 0) Serial.println("-y+");
else
Serial.println("-y-");
}
} }
void geri_git_reset(int n){
for(int i=0 ; i< n ; i++){
if(Serial.available())
giris= (char) Serial.read();
if(giris == 'p'){
calisiyormu = false;
43 break;
}
x_r_button = digitalRead(14);
if(x_r_button == 0){
x_calisiyormu = false;
break;
}
digitalWrite(Y_DIR_PIN , LOW);
digitalWrite(Y_STEP_PIN , HIGH);
digitalWrite( Z_DIR_PIN , LOW);
digitalWrite(Z_STEP_PIN , HIGH);
delay(1);
digitalWrite(Y_STEP_PIN , LOW);
digitalWrite(Z_STEP_PIN , LOW);
giris = "";
digitalWrite(Y_ENABLE_PIN , LOW);
digitalWrite(Z_ENABLE_PIN , LOW);
} }
void sola_git_reset(int n){
for(int i=0 ; i< n ; i++ ){
if(Serial.available())
giris= (char) Serial.read();
if(giris == 'p'){
calisiyormu = false;
44 break;
}
x_r_button = digitalRead(3);
if(x_r_button == 0){
x_calisiyormu = false;
break;
}
digitalWrite(X_DIR_PIN , HIGH);
digitalWrite(X_STEP_PIN , HIGH);
delay(1);
digitalWrite(X_STEP_PIN , LOW);
} }
45 3 PROJENİN GELİŞTİRİLMESİ
Yapacağımız sistemin genel amacı kurulduğu bölgedeki zeminin altında bulunan metallerin konumlarının tespit edilmesi. Her metal için ayrı konumlar belirlenmesi ve bütün alan üzerindeki taramayı yazacağımız bir paket programla görselleştirerek kullanıcıya sunulması.
Programda metallerin konumlarını belirlememiz için zeminde konumsal bir çalışma yaparak koordinat sistemini oluşturmaya çalışacağız. Zemine özel oluşturacağımız bu koordinat sistemi üzerinde cihazımıza bağlı step motorlar eşliğinde iki boyutta tarama gerçekleştirmek. Motorların adım sayıları ve adım süreleri göz önüne alınarak uygulanacağı zemine özel koordinat sistemi geliştirilmektedir.
Tarama işleminin gerçekleştirileceği paket program görseli aşağıdaki gibidir.
Resim 2.8 İlk Oluşturulan Tarama Ekranı
46
Programın içeriğindeki ilk kutucukta bulunan Connect butonu sistemin seri haberleşme(USB) portunu kullanarak pc ile sürücü kartı arasındaki bağlantıyı sağlamaya yarar. Disconnect butonu ise bağlantıyı kesmek amacı ile kullanılacaktır.
Manual Control sekmesi devrede kullanılan motorların X ve Y koordinatları üzerinde istenilen bölgeler arası bağımsız kontrol yapmasını sağlar
Automatic Control sekmesinin amacı start butonuna basıldığında sistemi sıfır konumuna alarak tarama yapması , pause butonu herhangi bir olağan dışı durumda sistemin son konumunda durdurulması, stop butonuna basıldığında ise sistemi kapatmasını sağlamaktır.
Resim 2.9 Bağlantı
Resim 2.10 Manuel kontrol
Resim 2.11 Otomatik Tarama
47
Status sekmesi ise sistemdeki motorları konumunu anlık olarak göstermesi için yapılması planlanmaktadır.
Yukarıdaki açıklanan ilk sistemde tarama ekranının daha kolay yönetilmesi ve sistemin bazı bağlantı ve ayarları kendi kendine yapması için yeni çalışmalara ihtiyaç duyuldu.
Örneğin bağlan butonuna basıldığında bilgisayara donanımsal olarak sadece bir cihazın bağlı olması gerekmekteydi. Herhangi başka bir cihaz (yazıcı, tarayıcı, vs..) bağlı olduğunda program kendini kapatıyordu ve tarama verilerini kaybediyorduk
Status
Resim 2.12 Durum Ekranı
48
Resim 2.13 Mart 2017 Ekran Görseli
Yeniden yazılım geliştirmesine gittiğimiz izleme ekranındaki tarama bölgesinin küçük olduğunu farkettik. Tarama ekranı genişleterek yeni arayüz tasarımını gerçekleştirerek tarayacağımız cismin yakın bir görsel çıkartarak şeklinin belirlenmesini sağladık
49
Resim 2.14 Nisan 2017 Yazılım Geliştime Sonrası Ekran Görseli
Nisan ayında tamamlanan Resim 2.14’ deki yönetim ekranında tarama sırasında üzerinde bulunduğumuz yerin anlık ekrana yansıdığını sistemin bunu otomatik yaptını farkederek manıel kontrol bölgesindeki “Check” butonunun iptal ederek yeniden tasarladık.
50
Resim 2.15’ deki en son tasarlanan yönetim panelinin son hali görülmektedir. Program kontrol butonlarını aktif hale getirebilmek için bağlantı sağlandıktan sonra tarama başlığının bilinmeyen son durumu için tarama işlemi yapılmalıdır.
Resim 2.15 Yönetim Paneli
51 4 YÖNETİM PANELİ EKRANI
4.1 Panel Kullanımı
Proje yönetim panelinin genel olarak görünümü Resim 4.1’ deki gibidir.
Izgara şeklinde bölünmüş bölge tarama alanında gelen sinyalleri işlemek ve alan üzerindeki konumunu belirlemek için tasarlanmıştır.
Resim 4.1
52
Resim 4.2 Otomatik Tarama
Resim 4.3 Manuel Tarama
Resim 4.4 Veri Listeleme
Resim 4.5 Anlık Konum
Resim 4.2’ de görülen kısım cihaz ile bilgisayar arasındaki bağlantıyı yapmak ve okuyucu sensörü son kaldığı durumu resetlemek için kullanılır. Sisteme reset komutu gönderdiğimiz durumda otomatik kontrol butonları aktif hale gelmemektedir.
Start butonu otomatik taramayı başlatır.
Pause butonu hata veya herhangi bir problemde sistemi durdurur.
Resim 4.3’ de tarama bölgesinde manuel olarak konum değiştirebilir ve belirlediğimiz konumdaki taramayı gerçekleştirir.
Resim 4.4’ de görülen sonuç ekranında tarama sırasında her 10 sn de bir taranan verilerin konumsal noktalarını X ve Y cinsinden listeler.
Resim 4.5’ deki bölgede tarama sensörünün anlık olarak hangi konumda olduğunu gösterir.
53 5 TESTLER VE SONUÇ
Yaptığımız sistemdeki test sonuçları aşağıdaki gibi görünmektedir.
Geliştirmelerden sonra ilk yapılan testte cisimlerin koordinatlarını belirlerken sonuç kısmına alınacak verilerin zamanlamasa yapıldı. Her 10 saniyede kendini yenileyen sonuç kısmı sistemde veri kaybı yaratmakta ve çözüm olarak verilerin gönderilme süreleri test edilerek sisteme girildi.
Resim 5.1 Test 1
54
2 . Testte ayarlanan veri gönderim sürecleriyle ilgili zaman denemeleri yapılırken çıkan sonuçlardan birisi.
Resim 5.2 Test 2
55
Resim 5.3 Test 3
Resim 5.4Test 4
56
Resim 5.5Test 5
Resim 5.6Test 6
57
Resim 5.8 Test 8 Resim 5.7 Test 7
58
Resim 5.9 Test 9
Resim 5.10 Test 10
59
Resim 5.11 Test 11
Resim 5.12 Test 12
60
Resim 5.13 Test 13
Resim 5.14 Test 14
61
Resim 5.15 Test 15
Resim 5.15.1 Test 15
62
Resim 5.16 Test 16
Resim 5.16.1 Test 16
63
Resim 5.17.1 Test 17 Resim 5.17 Test 17
64
Resim 5.18 Test 18
Resim 5.18.1 Test 18
65
Resim 5.19 Test 19
Resim 5.19.1 Test 19
66
Resim 5.20.1 Test 20 Resim 5.20 Test 20
67 5.1.1 Çalışma Aşamaları
Resim 5.1.1 İlk Kurulum
Resim 5.1.2 Malzemeler için Tutucu Parça Çıktıları
68
Resim 5.1.3 İlk Kurulumdan Sonra Yazılım Denemeleri
Resim 5.1.4 Endüktif Sensör Denemeleri
69
Resim 5.1.5 Sensör Mesafesi Algılama Testi
Resim 5.1.6 Sensörün Çalıştırılması
70
Resim 5.17 Sensörün Çalıştırılması
Resim 5.1.8 Sensörün Çalıştırılması
71
Resim 5.1.9 Arduino ve Ramps
Resim 5.1.10 Güç Kaynağı
72 6 ÖZGEÇMİŞ
KAYNAKÇA
1. Kızıötesi İşleme ve Anali Merkezi, Caltech / JPL 2. Polar, Pixie, ABD Ulusal Havacılık ve Uzay Dairesi 3. NASA Science & Missionscience, NASA
4. Elektromanyetik teorinin temelleri / Aktaş, Şahin ; Şahin Aktaş 5. C# Programlama Kılavuzu / Wright, Charles
6. Programming C# / Liberty, Jesse 7. Solidworks Solidcam /Ali Naci Bıçakçı 8. Arduino Hızlı & Kolay Kitabı - Volkan Kanat 9. Projeler İle Arduıno / Erdal DELEBE