Arduino Due etiketine sahip kayıtlar gösteriliyor. Tüm kayıtları göster
Arduino Due etiketine sahip kayıtlar gösteriliyor. Tüm kayıtları göster

4 Ocak 2015 Pazar

Arduino Due ile röle kontrolü

DSLR otomatik kontrol projesinin bir parçası olarak röle kontrol edecek bir devre ve program yapmaya karar verdim. Canon EOS serisi DSLR fotoğraf makinelerinde kablo ile deklanşöre basmak için gereken tek şey bir adet 2.5 mm büyüklüğünde stereo jak. Buna eklenecek bir kaç kablo ile sonuçta kontrol etmek istediğimiz şey hazır olacak. Doğru iki uç kısa devre yapıldığında makine deklanşöre basılmış gibi çalışacaktır. Diğer iki ucu kısa devre yapınca da fotoğraf makinesi otomatik olarak odaklamaya çalışacaktır ama bu projede sadece deklanşör kontrolü üzerine çalışmayı planladığımdan sadece iki uca kumanda etmeye çalışacağım. 

Aşağıdaki fotoğrafta 2.5 mm stereo jakın nasıl göründüğünü ve kabloların nereye lehimlendiğini görebilirsiniz.



Bu şekilde bağlandığında jak fotoğraf makinesine takıldığında mavi ve sarı kablolar birbirlerine dokundurulduklarında istenen kısa devre olur ve fotoğraf çekilir.



Projemde fotoğraf çekimini sabit zaman aralıklarında otomatik olarak da yaptırmak istediğimden bu basit düzeneğe biraz daha ek yapmam gerekiyordu. Sabit zaman aralığı kontrolünü arduino due ile yapmaya karar verdim. Mikroişlemcinin zamanı gelince ürettiği sinyal ile kısa devre oluşturmak için de bir röle devresi kullanmayı düşündüm. Kullandığım devreyi bu sayfadaki altıncı adımda verilen şemaya göre yaptım. Aynı sayfada ayrıca rölenin özelliklerinin nasıl bulunacağı ve kullanılacak devre elemanlarının değerlerinin nasıl hesaplanacağı anlatılıyor.

Ben bu sayfadaki gibi 12 V değil 5 V röle kullandım, çünkü elimdeki 12 V rölenin bacakları kulandığım delikli kartın deliklerine sığmadı. Şansıma rölenin üstünde hangi bacağın ne olduğu işaretliydi. Bu sayede yapmam gereken tek hesap sinyali üretecek dijital çıkışın mümkün olduğunca az akım çekmesi için transistörün bazına bağlı direncin değeriydi. Rölemin girişindeki direnci 130 ohm ölçtüm.

I = 5V / 130 ohm = 39 mA

Devre için yine elimde bulunan H337 NPN tipi bir transistör kullandım. Hfe değeri de özelliklerinde yazıldığına göre 100 ile  630 arasındaydı. Dolayısıyla base'den geçecek akım

39/100 = 0.39 mA ile 39/630 = 0.061 mA arasında olacak.

Transistör aktifken base ve emitter arasında yaklaşık 0.6 V düşüş olacağından ve transistöre bağlı dijital çıkış 3.3V sağlayacağından bu bacağa bağlanacak direnç de aşağıdaki aralıkta olmalı.

(3.3 - 0.6)/0.00039 = 6900 ohm             (3.3 - 0.6)/0.000061 = 44000 ohm

Elimde bu aralığın alt sınırına yakın olarak 10 kohm değerinde dirençler vardı ve bunlardan birini kullanmaya karar verdim. Eğer Hfe değeri 10 kohm için olan değerden daha yüksek ise transistör nasıl olsa doyum bölgesinde çalışacağından istediğim sonuca ulaşmış olacaktım.

Şimdilik sistemin enerji kaynağı olarak laptop kullanıyorum. Ayrıca zamanlamayı da sadece programı değiştirip tekrar yükleyerek değiştirebiliyorum. Kısaca sistem henüz ne taşınabilir ne de ayarlanabilir. Bunlar da projenin sonraki adımları olacak.

Aşağıdaki videoda projenin şu ana kadarki kısmının nasıl çalıştığını kabaca görebilirsiniz.


18 Ekim 2014 Cumartesi

Arduino Due ve L293D ile adım motoru kontrolü

Geçenlerde elime eski bir scanner geçti. Bu sefer içini fazla kırmadan açtım ve hareketli kısma ulaştım. Motorun kart bağlantısını çıkardım ve Arduino Due kartıma yetişebilsin diue uçları kablo ekleyerek uzattım. Sonra bu adım motorunu kontrol edecek devreyi yapmak için aramalara başladım. Internette bu tür bir sürü şema var ama genelde hepsi Arduino UNO türü kartlar için, yani giriş çıkışların 5V ile çalıştığı kartlar fakat DUE giriş çıkışları 3.3V ile çalışıyor. Bu şemaların DUE ile çalışıp çalışmayacağı konusunda araştırmalar yaptım ve adafruit sayfası forumlarında Limor Fried'ın buna benzer bir soruya verdiği ayrıntısız ama olumlu cevabı gördüm. Bunun üzerine önce L293D motor kontrol çipinin özelliklerine baktım. 

L293D


VCC1 girişi çip üzerindeki mantık devreleri için güç kaynağı olarak kullanılıyor. Bu bacağa 4.5V - 7V arası bir gerilim uygulamak gerekiyor ve maksimum 60 mA akım çekiyor. Arduino Due'nin 5V çıkışı 600 mA kadar akım verebiliyor. Motor için kullanılan VCC2 güç kaynağı ise VCC1'den 36V'a kadar bir gerilimle çalışıyor. Bunun için baba yadigarı ayarlanabilir bir güç kaynağı kullandım. 1A, 2A, 3A, 4A girişleri Arduino Due üzerindeki sayısal çıkışlarla kontrol ediliyor ve en fazla 100 μA akım çekiyorlar. Due kartındaki sayısal giriş çıkışlar ise 15 mA akıma kaynaklık yapabilecek ve 9 mA akım çekebilecek güçte. Bu karşılaştırmalardan sonra bu adresteki gibi bir bağlantı yapma çalışmasına başladım.

Elimdeki motor da adafruit adresindeki deneydeki gibi tek kutuplu (unipolar) ve 5 kabloya sahip bir adım motoruydu fakat önce hangi kablonun nereye bağlanması gerektiğini bulmam gerekiyordu. Aşağıda wikipedia sayfasından aldığım bir tek kutuplu adım motoru temsili şeması görülüyor.


Burada ortadaki uçlar ortak olacak şekilde bağlarsak tipik bir 5 kablolu tek kutuplu adım motoru elde etmiş oluruz. Elimdeki motorun ortak ucunu bulmak için basit bir test uyguladım. İkişer ikişer uçların arasındaki direnci ölçtüm. Ortak uç ile bobinin bir ucu arasındaki direnç bobinin iki ucu arasındaki direncin yarısı kadar olmalı. Aynı şekilde diğer dört uçla arasında aynı dirence sahip olan uç ortak uç olmalı. Yaptığım ölçümler sonucu bobin uçları arasında 150 ohm ve ortak uç ile bobin uçları arasında ise 75 ohm okumalar elde ettim. Ortak ucu bulduktan sonra diğer dört ucu hangi sırayla aktifleştirmem gerektiğini deneme yanılmayla buldum. Bunun için adafruit sayfasındaki adım motoru eğitim projesini denemeye başladım. Devreyi projedeki gibi oluşturdum.


Ben testte tabii ki Arduino UNO yerine DUE kullandım ama aynı bağlantıları yaptım, çünkü projede verilen programı birebir kullanmayı planlamıştım. Tabii ki elimdeki motorun kabloları bu şemadakinden farklıydı. Dolayısı ile bir sonraki sayfadaki programı yükleyip kablo bağlantılarını değiştirerek motorun ne kadar yumuşak çalıştığını gözlemledim. Birkaç deneme sonunda istediğim sonucu almayı başardım.

Programı Arduino'ya yükledikten sonra seri port monitörünü açıp oradan motorun hangi yöne (pozitif ya da negatif) ne kadar dönmesi gerektiği yazılıyor ve ENTER tuşuna basınca da program bu değeri okuyup motor kontrolüne başlıyor. Motor verilen değer kadar döndüğünde otomatik olarak durduruluyor.

Program aslında oldukça basit ama bazı satırları yine de açıklamak istiyorum.

int in1Pin = 12;
int in2Pin = 11;
int in3Pin = 10;
int in4Pin = 9;

Stepper motor(512, in1Pin, in2Pin, in3Pin, in4Pin);

Bu komut ile motorun temel konfigürasyonu yapılıyor. Birinci parametre (512) motorun bir turu kaç adımda yaptığını belirtiyor. Yukarıdaki örneğe göre motor bir turu 512 adımda tamamlıyormuş. Diğer parametreler de motorun girişlerini kontrol eden dijital giriş çıkışlar, motorun kabloları değil. Bu girişler L293D çipinin 1A, 2A, 3A ve 4A ayaklarına bağlı ve sıraları önemli. Ben bu sıralamayı deneme yanılmayla buldum. Eğer motor sadece iki kablo ile kontrol edilecekse yukarıdaki komutun başka bir versiyonu kullanılmalı:

Stepper motor(768, in1Pin, in2Pin);


motor.setSpeed(10);

Bu komut motorun bir dakikada kaç tur atacağını yani hangi hızla döneceğini belirliyor. Bunu yapmak için kullanılan kütüphane daha önce bir tur için gereken adım sayısını kullanarak iki adım arasında geçmesi gereken süreyi hesaplıyor ve her adımdan sonra o kadar milisaniye bekliyor. Bu değişkenlerin hepsi tamsayı tipler olduğundan kütüphanenin duyarlılığı da milisaniye ile sınırlı. Yani iki adım arasında ancak 1 milisaniyenin katları (0 dahil) kadar beklenebilir.

loop içi de aslında oldukça kolay. Seri port monitöründen girilen bir tamsayı alınıyor ve motor o kadar adım hareket ettiriliyor. Hareket için kullanılan komut

motor.step(steps);

motoru steps değişkenindeki değer kadar hareket ettiriyor. Bu hareket sırasında yukarıda tanımlanan in1Pin, in2Pin, in3Pin ve in4Pin çıkışlarına belli bir sırayla HIGH ve LOW değerleri veriliyor. Dönüş sırasında her adımda çıkışlar aşağıdaki şemaya göre aktifleştiriliyor:

Adım no modulo 4 = 0Adım no modulo 4 = 1Adım no modulo 4 = 2Adım no modulo 4 = 3
1010011001011001
in1Pin = HIGHin1Pin = LOWin1Pin = LOWin1Pin = HIGH
in2Pin = LOWin2Pin = HIGHin2Pin = HIGHin2Pin = LOW
in3Pin = HIGHin3Pin = HIGHin3Pin = LOWin3Pin = LOW
in4Pin = LOWin4Pin = LOWin4Pin = HIGHin1Pin = HIGH

Bu tablo kullanılarak motorun kabloları yazılımla deneme yapılmadan da bulunabilir. Tablodaki çıkışlar L293D çipindeki 1A ... 4A girişlerine girerken bunlara tekabül eden 1Y ... 4Y çıkışları da motorun kablolarına bağlanıyor. Yani aynı tablo kullanılarak motorun kablolarına yeterli gerilim verildiğinde motorun beklenen adımı atması lazım. Tabii adımlar sırasındaki hareket çok küçük olduğundan motora dikkatlice bakmak gerekiyor.