Sıradan Şeyler....
Hobi amaçlı kendi uğraşlarım belki başkalarının da işine yarar...
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İ
- Köprü Diyot
- 1000uF 35V Kondansatör (2 adet)
- LM317 Voltaj Regülatörü
- BD139 NPN Transistör
- 10K Potansiyometre (2 adet)
- 220Ohm 1/4 Watt Direnç
- TIP3055 NPN Power Transistör
- 0.1Ohm 1W Taş Direnç (2 adet)
- 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
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ış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
![]() |
| TB6612FNG Çift Motor destekli 3A motor sürücü |
ARDUINO NANO için Ares kütüphanesi
PID Kontrollü Çizgi İzleyen Robot
Ç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.



