Arduino‘nun ikonik kartı UNO‘nun dördüncü versiyonu R4’te kullanılan Renesas RA4M1 serisi mikrokontrolcünün dikkate değer özelliklerinden biri dahili DAC (Digital-Analog-Converter/Dijital-Analog Dönüştürücü) barındırması.
DAC Arduino UNO dünyası için yeni bir özellik. Yıllardır kullandığımız ADC’nin tersi olarak düşünebiliriz. ADC’de Arduino pinine belirli bir gerilim veriyor ve bu değeri sketch kodumuz içinde ölçüp kullanıyorduk.
DAC ise tam tersi şekilde çalışıyor. Sketch kodu içinde DAC’a bir değer gönderiyoruz ve gönderdiğimiz değer 0-5 Volt arasında bir gerilim olarak Arduino pininde üretiliyor.
Arduino UNO R4 ailesinde 12-bit çözünürlüğünde tek kanallı bir DAC bulunuyor. Bu DAC’a A0 pini üzerinden ulaşabiliyoruz. DAC varsayılan olarak 8-bit çözünürlüğe ayarlı olarak geliyor.
analogWave kütüphanesi
Arduino ekibi bu DAC’ı kolayca kullanabilmemiz için analogWave adında bir kütüphane hazırlamış. Kütüphane istediğimiz frekanslarda sinüs, kare veya testere dişi dalga sinyalleri üretebilmemize imkan veriyor. Arduino IDE’ye R4 sınıfı kartları eklediğimiz zaman bu kütüphane de otomatik olarak kuruluyor ve kullanıma hazır oluyor.
Bu kütüphane ile hazırlanmış üç temel örnek sketch koduna göz atalım. Sinüs dalga (sine) ile başlayalım.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 |
/* Arduino UNO R4 DAC Örnekleri: Sinüs R4'ün A0 pininden ulaşılabilen dahili DAC'ı kullanır. 1000 Hz frekansında sinüs dalga üretir, 500 Hz ile 1000 Hz arasında geçiş yapar. Renesas üretimi mikrokontrolcü ile çalışan Arduino UNO R4 modellerinde geleneksel ADC'nin yanında DAC (Digital-Analog-Converter) fonksiyonu da yer alıyor. Böylece istediğimiz gerilim veya fonksiyonda çıkış elde etmek mümkün. UNO R4'te yer alan DAC tek kanallı ve A0 pini üzerinden kullanılıyor. METE HOCA, Ağustos 2023 www.metehoca.com / INS: metehoca / YT: metehoca */ #include "analogWave.h" // AnalogWave kütüphanesini ekliyoruz. analogWave dalga(DAC); // Kütüphaneyi 'dalga' adıyla başlatıyoruz. int frekans = 1000; // Kullanacağımız frekansı seçiyoruz. void setup() { dalga.sine(frekans); // Sinüs dalga üretilmeye başlanıyor. } void loop() { dalga.freq(frekans/2);// Frekansı yarıya düşürelim delay(2000); // Biraz bekleyelim dalga.freq(frekans); // Tam frekansa geri dönelim delay(2000); } |
Kare dalga (square) ile devam edelim.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 |
/* Arduino UNO R4 DAC Örnekleri: Kare R4'ün A0 pininden ulaşılabilen dahili DAC'ı kullanır. 1000 Hz frekansında kare dalga üretir, 500 Hz ile 1000 Hz arasında geçiş yapar. Renesas üretimi mikrokontrolcü ile çalışan Arduino UNO R4 modellerinde geleneksel ADC'nin yanında DAC (Digital-Analog-Converter) fonksiyonu da yer alıyor. Böylece istediğimiz gerilim veya fonksiyonda çıkış elde etmek mümkün. UNO R4'te yer alan DAC tek kanallı ve A0 pini üzerinden kullanılıyor. METE HOCA, Ağustos 2023 www.metehoca.com / INS: metehoca / YT: metehoca */ #include "analogWave.h" // AnalogWave kütüphanesini ekliyoruz. analogWave dalga(DAC); // Kütüphaneyi 'dalga' adıyla başlatıyoruz. int frekans = 1000; // Kullanacağımız frekansı seçiyoruz. void setup() { dalga.square(frekans);// Kare dalga üretilmeye başlanıyor. } void loop() { dalga.freq(frekans/2);// Frekansı yarıya düşürelim delay(2000); // Biraz bekleyelim dalga.freq(frekans); // Tam frekansa geri dönelim delay(2000); } |
Son olarak da testere dişi dalga (sawtooth) ile bitirelim.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 |
/* Arduino UNO R4 DAC Örnekleri: Testere R4'ün A0 pininden ulaşılabilen dahili DAC'ı kullanır. 1000 Hz frekansında testere dişi dalga üretir, 500 Hz ile 1000 Hz arasında geçiş yapar. Renesas üretimi mikrokontrolcü ile çalışan Arduino UNO R4 modellerinde geleneksel ADC'nin yanında DAC (Digital-Analog-Converter) fonksiyonu da yer alıyor. Böylece istediğimiz gerilim veya fonksiyonda çıkış elde etmek mümkün. UNO R4'te yer alan DAC tek kanallı ve A0 pini üzerinden kullanılıyor. METE HOCA, Ağustos 2023 www.metehoca.com / INS: metehoca / YT: metehoca */ #include "analogWave.h" // AnalogWave kütüphanesini ekliyoruz. analogWave dalga(DAC); // Kütüphaneyi 'dalga' adıyla başlatıyoruz. int frekans = 1000; // Kullanacağımız frekansı seçiyoruz. void setup() { dalga.saw(frekans); // Testere dişi dalga üretilmeye başlanıyor. } void loop() { dalga.freq(frekans/2);// Frekansı yarıya düşürelim delay(2000); // Biraz bekleyelim dalga.freq(frekans); // Tam frekansa geri dönelim delay(2000); } |
Temel DAC Kullanımı
UNO R4 üzerindeki DAC ile istediğimiz değerde gerilim üretmemiz mümkün. Üstelik bunun için herhangi bir kütüphane kullanmamız da gerekmiyor.
Yazının başında DAC’ın varsayılan olarak 8-bit çözünürlükte geldiğinden, ancak 12-bit yeteneğinin olduğundan bahsetmiştik. 8-bit çözünürlükte 0-255 değerleri arasında değer atayabilirken, bu aralık 12-bit çözünürlükte 0-4095‘e çıkıyor. Böylece çok daha hassas çıkış değerleri elde edebiliyoruz.
Bu çözünürlük artışını analogWriteResolution() fonksiyonu ile yapıyoruz. Bu fonksiyonu aşağıdaki sketch kodunda görebileceğimiz şekilde void setup() içine yerleştirmemiz yeterli. Değer olarak sadece 8 veya 12 girebiliyoruz.
Aşağıdaki sketch kodu çıkıştan sırasıyla 5 Volt, 2,5 Volt ve 0 Volt verecektir. UNO R4’ün devre yapısı nedeniyle mikrokontrolcüye sağlanan gerilim asla tam 5 Volt olmadığı için USB ile beslerken farklı, harici güç ile beslerken farklı değerler almamız normal. Yani mikrokontrolcü kendisine sağlanan gerilime göre orantılı olarak değer üretebiliyor.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 |
/* Arduino UNO R4 DAC Örnekleri: Temel Yapı R4'ün A0 pininden ulaşılabilen dahili DAC'ı kullanır. Çıkışta tam, yarı ve sıfır gerilim oluşturur. Renesas üretimi mikrokontrolcü ile çalışan Arduino UNO R4 modellerinde geleneksel ADC'nin yanında DAC (Digital-Analog-Converter) fonksiyonu da yer alıyor. Böylece istediğimiz gerilim veya fonksiyonda çıkış elde etmek mümkün. UNO R4'te yer alan DAC tek kanallı ve A0 pini üzerinden kullanılıyor. METE HOCA, Ağustos 2023 www.metehoca.com / INS: metehoca / YT: metehoca */ int bekle = 2000; // Değişim beklemesi void setup() { analogWriteResolution(12); // Varsayılanı 8 bit. } void loop() { analogWrite(DAC, 4095); // Tam gerilim çıkışı delay(bekle); // Biraz bekleyelim analogWrite(DAC, 2048); // Yarı gerilim çıkışı delay(bekle); analogWrite(DAC, 0); // Sıfır çıkış. delay(bekle); } |
Arduino’da iyi olmak için öncelikle elektronikte iyi olmak gerekir. Türkiye’nin en iyi temel elektronik eğitim seti ARDUINO ÖNCESİ TEMEL ELEKTRONİK EĞİTİM VE DENEY SETİ‘ni keşfedin. Gereksiz bilgilerden arındırılmış basit ve eğlenceli anlatımla ELEKTRONİK öğrenin ve Arduino’ya METE HOCA farkıyla güçlü başlayın!
ÖZGÜN ve KULLANIŞLI projeler yapabilmek için ARDUINO’yu doğru öğrenmek gerekir. Arduino’ya güçlü başlamanın en iyi yolu ARDUINO’YA GÜÇLÜ BAŞLANGIÇ EĞİTİM VE PROJE SETİ‘dir. Arduino Uno üzerine kurulu olan set ile bu müthiş geliştirme platformunu tüm detaylarıyla anlayacak, başka hiçbir yerde bulamayacağınız inceliklerini öğrenecek ve en sık kullanılan Arduino sensör ve modüllerine aşina olacaksınız.