LM317, BD139 ve TIP3055 İLE 0-30V GERİLİM VE 5A AKIM AYARLI GÜÇ KAYNAĞI DEVRESİ




Devreyi 0-30V AC veya 2x12V AC ve 120 Watt ve üzeri trafo ile çalıştırabilirsiniz. İsterseniz girişteki köprü diyot ve kondansatörü iptal ederek DC-DC düşürücü gibi de kullanabilirsiniz. LM317 voltaj regülatörüne bağlı potansiyometre ile gerilim, BD139 transistöre bağlı potansiyometre ile akım ayarlanabilmektedir. Devreyi soğutmak için fan bağlanır düşüncesi ile sabit 12 volt elde etmek için 7812 voltaj regülatörü eklenmiştir. Buradan en fazla 1 Amper çekilebileceği unutulmamalıdır. 7812 ve TIP3055 transistörlere soğutucu bağlanması sürekli yüksek akım çekilmesi durumları için faydalı olacaktır.

MALZEME LİSTESİ

  1. Köprü Diyot
  2. 1000uF 35V Kondansatör (2 adet)
  3. LM317 Voltaj Regülatörü
  4. BD139 NPN Transistör
  5. 10Potansiyometre (2 adet)
  6. 220Ohm 1/4 Watt Direnç
  7. TIP3055 NPN Power Transistör
  8. 0.1Ohm 1W Taş Direnç (2 adet)
  9. 7812 Voltaj Regülatörü



Devrenin PCB Tasarımı Proteus Programı (Version 8.12 SP0) ile yapılmıştır. Aşağıdaki linkten indirebilirsiniz.


İNDİRMEK İÇİN TIKLAYIN


ARDUINO UNO Pin Değişim Kesmesi - Pin Change Interrupt

Arduino Uno kartında kullanılan Atmega328P işlemcisi için kesmeleri incelediğimizde mevcut olan Timer kemeleri ve 2 ve 3 numaralı pinler ile kullanılan harici kesmeler dışında pek de bahsedilmeyen bir kesme türü daha var. Bu kesmenin adı pin değişim kesmesi (PCI - Pin Change Interrupt).

Bu kesmeyi incelediğimizde adından da anlaşılacağı üzere belirlenen herhangi bir pinin lojik seviyesinde (HIGH veya LOW) herhangi değişim meydana geldiğinde yani HIGH iken LOW olduğunda veya LOW iken HIGH olduğunda kesme rutini çalıştırılır. Peki hangi pinlerde bu şiklde kesme oluşur? Arduino Uno ya ait bütün pinleri kullanarak bu şekilde kesme rutinleri çalıştırabiliriz.
Pin değişim kesmesini kullanabilmek için Arduino paltformundan bir miktar ayrılarak Atmega328P işlemcisini fiziksel yapısına ve kendi iç kaydedicilerine (register) müdehale etmemiz gerekecek. İşlemcimizi incelediğimizde PortB, PortC, PortD olmak üzere 3 adet fiziksel portları mevcut. Yukarıdaki resimden bu portların hangi bacaklar üzerinden kullanabileceğimizi görebiliriz. Yeşil renkli olan pinler PORTC, Sarı renkli olan pinler PortB, Mavi renkli olan pinler ise PortD için ayrılmış pinlerdir. Bu portlara ait bütün pinler için kesme tanımlayarak kullanabiliriz. Dikkat etmemiz gereken şey ise PortD0 ve PortD1 pinleri (Arduino Uno için D0 ve D1 pinleri) seri haberleşme için kullanıldığından dolayı başka bir yerde kullanmak işlemciye program atarken problem oluşturabilmektedir.

Şimdi örnek bir program ile devam edelim. Arduino Uno üzerinde örneğin D7 pini ve A0 pini için aynı program içinde çalışan iki ayrı kesme oluşturalım. Bu pinlere yerleştirilen butonlara basıldığında kesme alt programı çağrılsın ve seri port üzerinden bilgisayara veri göndersin.

Burada dikkat etmemiz gereken nokta kesmeleri tanımlarken her bir port isimi için belirlenmiş kesme isimleri isimleri var ve bu isimlere dikkat etmemiz gerekiyor. PortB için PCI0, PortC için PCI1, PortD için PCI2 isimlerini kullanacağız. Şimdi kodlarımıza bakalım...

//.................................................................................................................................................................

#define buton1 A0 //Kesme karşılığı PCINT8
#define buton2 7 //Kesme karşılığı  PCINT23

//cbi ve sbi define fonksiyonları program içerisinde kesme bitlerini ayarlamak için kullanılacaktır
#define cbi(sfr, bit) (_SFR_BYTE(sfr) &= ~_BV(bit))    //sfr adresindeki beliritlen biti LOW yapar
#define sbi(sfr, bit) (_SFR_BYTE(sfr) |= _BV(bit))     //sfr adresindeki beliritlen biti HIGH yapar



void setup() {

  Serial.begin(9600);//Seri haberleşme başlatıldı


  pinMode(buton1, INPUT);
  digitalWrite(buton1, HIGH);
  pinMode(buton2, INPUT);
  digitalWrite(buton2, HIGH);


  //Kesme isimlerini ve kesme için kullanılacak olan pinleri belirleyelim
  sbi (PCICR, PCIE2);    // PCI2 (PortD için) kesmesi aktif hale getirildi
  sbi (PCMSK2, PCINT23); // PortD nin 7. pini (Arduino 7 numaralı digital pini)kesme için tanımlandı

  sbi (PCICR, PCIE1);   // PCI1 (PortC için) kesmesi aktif hale getirildi
  sbi (PCMSK2, PCINT8); // PortC nin 0. pini (Arduino A0 numaralı Analog pini)kesme için tanımlandı

}


void loop()
{

  //İşlmeler kesme içinde yapıldığı için ana döngü içinde bir şey yapmaya gerek yoktur.
}


//Bu kesme alt programları belirlenen pinler HIHG-->LOW veya LOW-->HIGH olduğunda çalışacaktır.
//Yani her durum değişikliğinde kesme çağrılacaktır.

ISR (PCINT2_vect)//PCI2 (PortD) kesme alt programı. Kesme oluştuğunda çalışacak olan kodlar
{
Serial.println("PortD Kesmesi oluştu");
}

ISR (PCINT1_vect)//PCI1 (PortC) kesme alt programı. Kesme oluştuğunda çalışacak olan kodlar
{
Serial.println("PortC Kesmesi oluştu");
}



Mini Sumo / Sumo Robot Başlatma Modülü Devresi

Yarışmalara katılanların bildiği gibi sumo robotları başlatma işlemi hakem tarafından kızılötesi kumanda ile yapılıyor. Bunun için robotlar üzerinde kumanda tuşlarını algılayacak bir devreye ihtiyaç var.

Yarışma duyurularında bu devrenin çizimi veriliyor. Mikrodenetleyici içerisinde çalışacak program veriliyor. Ancak devrenin sadece şeması var. Baskı devre çizimi yok. Ben de bu işlere yeni başlayanlar için devrenin baskı devresini Proteus Ortamında çizip sizlerle paylaşıyorum. Umarım işinize yarar.



TB6612FNG Çift motor sürücü için ARES kütüphanesi

Projelerimde DC Motor sürmek için kullandığım Pololu firmasına ait TB6612FNG modeli motor sürücü devresini kendi projeme uyarlamak için biraz emek harcadım ve bu motor sürücü için Proteus içinde kendi kütüphaneme ekledim. Benim gibi ihtiyacı olan başka birisi daha kullansın diye bu çizimi de paylaşıyorum. Çizimi Proteus 8.1 de hazırladım. Büyük ihtimalle daha düşük versiyonlarda açılmayacaktır.

TB6612FNG Çift Motor destekli 3A motor sürücü

ARDUINO NANO için Ares kütüphanesi

Arduino Nano kullanarak bir proje geliştirmeyi düşünüyorsanız mutlaka bir devre tasarlamanız gerekecektir. Özellikle projenizde DC motorlar gibi yüksek akıma ihtiyacı olan bileşenler bulunuyorsa devre tasarlamanız şarttır. Arduino serilerinin hepsinde port çıkışları 40mA üzerinde akım veremez. DC Motoru direk Arduino üzerinden sürmeye çalışırsanız Arduinonuz yanacaktır.

PID Kontrollü Çizgi İzleyen Robot

Çizgi izleyen robotlar siyah zemin üzerinde beyaz çizgiyi veya beyaz zemin üzerindeki siyah çizgiyi uzaktan kumanda tertibatı olmadan otonom olarak takip ederek hareket eden robotlardır.

Çizgiyi algılayabilmek için ön tarafına, tasarımına göre 3, 5 veya 8 adet sensör yerleştirilir. Bu sensörler kızılötesi ışık yayarak karşıdan yansıyan ışığın algılanması mantığı ile çalışır. En çok kullanılan sensörler CNY70 veya Pololu firması QTR8 serisi sensörlerdir.

Aracı hareket ettirebilmek için iki adet elektrik motoru vardır. Bu motorları aracın tasarımına ve ulaşmak istediği hıza göre seçmek gerekir. Benim tercihim 16mm 12V 1500RPM redüktörlü DC motordur. Ayrıca mikrodenetleyicilerin çıkış akımları bu motorları sürmek için yeterli olmadığından Pololu firması tarafından üretilen motor sürücü kullanmaktayım.

Mantık olarak aracın hareket kuralı sensörden okunan veriye göre motorlara farklı güçler uygulanmasıdır. Motorlara güç aktarımı PWM sinyalleri ile gönderilir. Gönderilecek olan PWM sinyalinin boyutu ise PID kontrol algoritması ile hesaplanır.


IR ALICI GÖZLER

IR (Kızıl Ötesi) alıcı gözler, belirli frekanslarda gelen kızıl ötesi ışıkları lojik seviyede sinyallere dönüştüren elemanlardır. farklı üreticilerin farklı biçimlerde alıcı gözleri vardır. Ancak standartolarak üç bacaklıdırlar. Kızıl ötesi ışık almadıkları zaman çıkışta sabit lojik 1 (+5V) bulunmaktadır. Çalıştığı frekansta kızıl ötesi ışık algıladığı anda çıkışı lojik 0 olmaktadır. Üç bacaktan bir tanesi çıkış ucu, diğer iki bacak ise +5V ve GND uçlarıdır.

SONY RM 836-839 Serisi TV Uzaktan kumanda için tuş kodları

Üzerinde çalıştığım projede kontrol için PIC 16F84A, VS1838 alıcı göz ve SONY RM 836-839 Serisi TV Uzaktan kumanda kullanıyorum. Kumanda üzerindeki tuşları internette dolaşırken buldum.