31 Ağustos 2010 Salı

Veritabanından okunan tip bilgisine göre nesne yaratma

Merhaba, bir önceki yazımda Linq To Sql Classes yöntemi ile veritabanı tablolarından otomatik olarak yazılım sınıfların yaratılmasını anlatmıştım. Şimdi aynı proje üzerinde biraz değişiklik yapıp veritabanından okunan sınıf adlarına göre çalışma zamanında nesneler oluşturacağız.

İlk olarak, bir önceki yazımda kullandığım projeye 3 adet yeni sınıf ve bir interface ekliyoruz. Bunlar; BronzeMusteri, AltinMusteri, PlatinMusteri sınıfları ve IMusteri interface'i .

C# ile otomatik olarak veritabanı tablolarından sınıflar oluşturma

Merhaba, bu yaz Microsoft yaz okulunda öğrendiğim en güzel konulardan biriydi bu. Veritabanı tablolarından sınıflar oluşturma ve bunları kullanma, yani Linq To Sql Classes.
Veritabanı kullanan uygulamalar geliştirdiğimiz zaman,  veritabanındaki her tablo için yazılım tarafında bir mapping sınıfı oluştumak hem zaman alır hem de oldukça sıkıcı bir iştir. Microsoft bu soruna, .Net Framework 3.0 ile birlikte gelen Linq ile bir çözüm bulmuş. Aslında Linq, List gibi veri yapılarında, SQL benzeri sorguların çalıştırılabilmesini sağlayan .Net Extention'ı. Fakat yetenekleri bununla sınırlı değilmiş, veritabanı tablolarından otomatik olarak sınıflar üretip mapping işlemi de yapıyormuş.

Nasıl Mı?
Bunu anlatabilmek için çok basit bir örnek hazırladım. Çalıştırabilmek için; SQL Server 2005 veya üstü, .Net Framework 3 veya üstü ve de Visual Studio 2008 veya 2010 sisteminizde yüklü olmalı . Ben Visual Studio 2010 ve SQL Server 2008 kullandım.

30 Ağustos 2010 Pazartesi

El Yapımı Servo Motor

Geçen sene can sıkıntısından yaptığım bir projeydi bu, oldukça düşük torka sahip olsa da (biraz dişli ile bu sorun aşılabilir tabiki) opamp'ın karşılaştırıcı olarak kullanımını öğrenmem açısından faydalı oldu.


                      Büyük Halini Görmek İçin Resme Tıklayın


Nasıl Çalışıyor?
Devrede iki adet potansiyometre var bunlardan biri kontrol için kullanılan potansiyometre diğeri de dc motor tarafından döndürülen ve servonun konumunun algılanabilmesini sağlayan potansiyometre. Bunlardan okunan voltaj değerleri 2 farklı 741 opamp ta birbirlerinin tersi sırada karşılaştırılıyor. Böylece arada bir voltaj farkı oluştuğunda çift yönlü karşılaştırmanın yapılabilmesi sağlanıyor. Aynı şey tek opamp ile negatif gerilim kaynağı kullanılarak  da yapılabilirdi belki ama L293 entegresinin kontrolünde sorun çıkarabilirdi bu nedenle çift opamp kullanmayı tercih ettim.
Kontrol potansiyometresi, motora bağlı potansiyometreden yüksek bir değere çekildiğinde değişikliği algılayan ilgili opamp pozitif çıkış üretiyor bu olay önündeki transistörü iletime geçiriyor ve dc motor sürücü entegresi olan L293D nin kontrol uçlarından biri Low' a düşüyor. Bu da motorun bir yönde dönmesini sağlıyor. Eğer dönüş yönü motora bağlı olan opamp'ı kontrol opamp'ının değerine çekecek şekilde ayarlanmış ise, her iki opamp da aynı konuma geliyor ve orada sabit kalıyorlar. Tıpkı gerçek servo motorlarda uygulanan pwm sinyaline karşılık şaftın bir açıya gelmesi ve orada kalması gibi. Bu işlemlerin aynısı kontrol potansiyometresinin değerinin düşüğe çekildiği durum için de geçerli.

Not: Devre şemasında hatalar ya da gereksiz gördüğünüz yerler olabilir.

PIC Resetlenme Sorunu

Şu yazıda anlattığım robot kol projesinde karşılaştığım bir sorunu bu;
Üzerinde PIC 16F877 bulunan kontrol devresinde servo motorlara hareket sinyali verildikten sonra PIC sürekli resetleniyordu ve program tutarsız bir şekilde çalışıyordu. Proteus ortamında yaptığım simulasyonlarda ise bir sorun görünmüyordu. Bunun üzerine biraz araştırma yaptım ve sorunun "Brown Out Reset" isimli ayardan kaynaklandığını öğrendim.
Brown Out Reset aktif iken, mikrodenetleyicinin besleme gerilimi düştüğü zaman, işlemci resetlenerek program yeniden başlatılıyor.
Benim projede de tam olarak olan şey buydu servolar çalışmaya başladığında mikrodenetleyici besleme geriliminde düşüşe yol açıyorlardı bu da işlemciyi resetliyordu. Bu durumu önlemek için Brown Out Reset'i pasifleştirmek gerekiyor. PIC programlayıcının ayarlarından yapılabileceği gibi kaynak kodda config bölümünden de yapılabilir.

Örneğin Hi Tech PIC C için;
 __CONFIG( diger ayarlar .... &BORDIS );



3 Eksenli Robot Kol

Merhaba  uzunca bir aradan sonra bu yazımda, geçen yıl bahar döneminde Endüstriyel Elektronik dersi kapsamında yaptığım 3 eksenli robot kol projesini paylaşmak istiyorum.

Bizden dönem projesi olarak, kendi ekseni çevresinde dönebilen ve kolları 180 derecelik aralıkta hareket edebilen, 3 eksenli bir robot kol yapmamız istenmişti.(Şekil-1)
Şekil-1

Robotun kontol mekanizması, motor seçimi ve kullanılacak mikrodenetleyici tipi bizim tercihimize bırakıldı.

Kontrol kısmını nasıl olsa bir şekilde yaparım deyip, mekanik kısımlardan başlamaya karar verdim. Kendi ekseni etrafındaki dönüş için bir step motor ve diğer eksenler için 2 şer tane 6 kg torklu servo motor satın aldım.
Şekil-2
Ardından gövdeyi oluşturabilmek için , hafif olması amacıyla, dört adet 20cm'lik plastik cetvel satın aldım ve bunları sıcak silikon ile motorlara yapıştırdım. Geriye tek birşey kalmıştı o da tüm sistemi tutacak ve yüzey normalinde dönmesini sağlayacak tepsi. Bunun için de evde bulduğum eski bir bilezik kutusunu kullandım. (siyah bant ile güzel durdu :) ) El yapımı robotumun mekanik kısımları böylece bitmiş oldu. (Şekil-2)