21 Haziran 2015 Pazar
Arduino'nuzu KULLANILAMAZ Hale Getirmenin 10 Yolu
Arduino Nasıl Kullanılmaz Hale Getirilir? |
(***SAKIN DENEMEYİN***)
Metod #0: G/Ç pinlerinden birini GNDa bağlamak
Metod #1: G/Ç pinlerini birbirine bağlamak
Metod #2: G/Ç pinlerinden birine 5.5v üzeri gerilim uygulamak
Metod #3: Güçkaynağını Vin pinine ters bağlamak
Metod #4: 5v pinine 5v üzeri gerilim uygulamak
Metod #5: 3.3v pinine 3.3v üzeri gerilim uygulamak
Metod #6: Vin ve GND birbirine bağlamak
Metod #7: Vin ile birlikte harici 5v gerilimi uygulamak
Metod #8: Reset pinine 13v üzeri gerilim uygulamak
Metod #9: Mikroişlemcinin sağladığı toplam akımı aşmak (40ma)
Metod #1: G/Ç pinlerini birbirine bağlamak
Metod #2: G/Ç pinlerinden birine 5.5v üzeri gerilim uygulamak
Metod #3: Güçkaynağını Vin pinine ters bağlamak
Metod #4: 5v pinine 5v üzeri gerilim uygulamak
Metod #5: 3.3v pinine 3.3v üzeri gerilim uygulamak
Metod #6: Vin ve GND birbirine bağlamak
Metod #7: Vin ile birlikte harici 5v gerilimi uygulamak
Metod #8: Reset pinine 13v üzeri gerilim uygulamak
Metod #9: Mikroişlemcinin sağladığı toplam akımı aşmak (40ma)
20 Haziran 2015 Cumartesi
Arduino’da Güç Tasarrufu ve Interrupt Kavramı
Arduino tek başına kullanıldığında 60mA
gibi oldukça fazla güç harcayabilen bir yapıya sahip ancak bunu düşürmekte bir
o kadar kolay.
Öncelikle Arduino’yu direkt pil ile
çalıştırabileceğinizi düşünüyorsanız maalesef yanılıyorsunuz. Evet, pratikte bu
mümkün, 9v bir pili bağlarsınız ve işte çalışır. Hepsi bu! Gerçekten mi evet
gerçekten çalışır ama yaklaşık 5 saat kadar çünkü 9v piller yaklaşık 250mA güçtedir
ve Arduino’nuz 50mA güç tüketse piliniz bu zulme kabaca 5 saat dayanabilir.
Peki ya sonra? Sonra yeni bir pil.
Tabi ki böyle bir durum kabul edilebilir
değil. Peki, ne yapabiliriz? Burada iki çözümümüz var birincisi Arduino’muzun
normal çalışma şartlarında daha az enerji tüketmesini sağlamalıyız. İkincisi
ise çalışmadığı zamanlarda uyumasını sağlamalıyız ki pilimiz aylarca
devremizi çalıştırabilsin. Tabi projeye göre hangi pili kullanacağımızı da
belirlemeliyiz.
Arduino’yu sadeleştirmek
Aslında Arduino oldukça sade bir
yapıdadır. Board her ne kadar işimizi kolaylaştırsa da proje haline getirilmesi
gereken bir iş için çok gereksiz ve hantaldır.
Arduino Uno bildiğiniz gibi
Atmega328 ile çalışır. Ve bu 28 ayaklı entegrenin çalışması için aslında 2 GND,
2 VCC 2, Kristal ayağı ve 1 Reset ayağının yani toplamda 7 ayağın bağlanması
yeterlidir. Bizim de ilk yapmamız gereken budur. Bunu da bir breadboard
üzerinde kolayca yapabiliriz. Peki, neden bunu yaptık? En önemli sebebi aslında
bir 5v ve 3v3 regülatörlerini, bir kez kullandıktan sonra ihtiyacımız
kalmayacak programlayıcı entegresini ve hatta gereksiz LEDleri istemiyoruz.
Çünkü bunların hepsi gereksiz yere akım tüketiyorlar. Biz çok daha uzun süre
pille çalışabilecek bir yapı istiyoruz.
Breadboard üzerinde Arduino programlamak
Tabi bu istediğimiz yapıyı kurmanın bazı
bedelleri var yani şimdi nasıl programlayacağız diye düşünüyorsanız o iş
hala çok kolay. Tek ihtiyacınız olan bir FT232 USB-Serial dönüştürücü. Ben
programlayıcı konusuna fazla girmiyorum aslında bu başka bir yazı konusu. Tabi
bu programlamayı yapmak için ATmega328’e bootloader yüklenmiş olmalı. ATmega328
entegresini boardunuzdan sökmenizi tavsiye edebilirim.
FT232 bağlantısı son
derece kolaydır. Bu modül üzerinde genellikle GND, 5V ve 3V3 çıkışları hali
hazırda bulunur. Yani boardu pile geçene kadar buradan besleyebilirsiniz. Bunun
dışında, kullanacağımız çıkışlar 3 adet; TX, RX ve DTR. TX ve RX zaten USB ile
haberleşen ve programımızın geldiği hatlar. Bunları ATmega328’in RX(2. pin) ve
TX(3. pin) lerine bağlıyoruz. Burada bir fark var USB dönüştürücüden gelen ve
ATmega328 üzerinde olan bağlantılar çaprazlanacak yani TX->RX’e RX->TX e
gidecek sonuçta biri alıcı diğeri verici. DTR ise burada önemli, bu pini direkt
ATmega328’in RESET(1. pin)’ine bağlamalısınız ki bunu bağlamadan önce RESET-VCC
arasına bir 10K direnç atmış olmalısınız yoksa RESET GND ye gittiğinde
işlemcimiz resetlenir.
Arduino uyku modu ve kesmeler
Arduino oldukça kolay uyuyabilir. Bunun
için yapmanız gereken
1
2
|
#include <avr/sleep.h>;
#include <avr/power.h>;
|
kütüphanelerini ekleyip daha sonra
1
2
3
4
5
6
7
|
void enterSleep(void)
{
set_sleep_mode(SLEEP_MODE_PWR_DOWN);
sleep_enable();
sleep_mode();
sleep_disable();
}
|
gibi bir fonksiyon yazıp bunu setup
fonksiyonunun sonunda çağırmaktır. Evet, bunu hemen denerseniz görürsünüz ki Arduino
-belki artık sadece ATmega328 demek lazım- uyur. Çok da güzel uyur. Ama onu
uyandırmanız şuan için imkânsız çünkü bunu için hiç bir şey yapmadınız. Size
ilk tavsiyem setup fonksiyonundan sonra enterSleep fonksiyonunu çağırın ve
akımı ölçün mili amper görmeniz imkânsız artık mikroamperler seviyesindeyiz 20
belki 10 mikroamper.
Tabi işlemcimiz sonsuza kadar uyumamalı
arada bir ya da biz ne zaman dersek uyanıp işini yapmalı sonra tekrar uykusuna
dönebilir.
Arduino Nasıl Uyansın?
Bunun tek yolu var o da interrupt yani
kesme isteği göndermek. Bunlarda iki ye ayrılıyor dış interrupts ve iç interrupt.
Dış dediğimiz direk olarak ayaklarından birinde bir gerilim değişikliği olunca.
Diğeri ise içerden bir saat kurarak uyandırmaktır.
Dış Interrupts (Kesme İstekleri)
Bir interrupt geldiğinde işlemcimiz
uyanır ve kesme isteği ile ilgilenir. Ancak bu her pin için geçerli değil ATmega328
sadece 2 giriş için bunu yapar onlar da Dijital 2 ve Dijital 3 yani 4. ve 5.
pinler. Diğer işlemciler için farlı pinler söz konusu buradan
bulabilirsiniz. http://arduino.cc/en/Reference/attachInterrupt. Diğer
yandan bunlardan gelecek istekleri bir fonksiyon ile ilişkilendirmelisiniz. Bu
işlem genellikle setup bölümünde yapılır ve şuna benzer;
1
2
|
attachInterrupt(0, cagriInterrupt,
LOW);
attachInterrupt(1, iptalInterrupt,
LOW);
|
Burada 0 ve 1 nolu interruptlar yani
Dijital 2 ve 3 girişleri cagri ve iptal diye birer fonksiyona bağlanmışlardır.
Yani bir interrupt alındığında bu fonksiyonlar çağırılır. 3. parametre genelde
LOW olarak kullanılır ki bunu kullanabilmek için normalde bu pinin HIGH yani 1
olması gerekir ki bu da bu pine bağlanacak bir 10K – VCC arası direnç ile
sağlanabilir. Bu parametre farklı değerlerde alabilir ancak en çok kullanılan
budur diye burada değinmiyorum.
Interrupt alındıktan sonra bizim
fonksiyonumuz çalışmaya başlar ardından da loop çalışır ta ki siz tekrar
enterSleep komutunu çağırana kadar. Burada dikkat edilmesi gereken kesme
isteğinin bir kez daha gelmemesi gerekir ki biz işimizi bitirebilelim. Bunun
için çok pratik bir fonksiyon var. Diyelim ki 0 nolu kesme isteği geldi yani
Dijital 2 (4. pin) LOW oldu cagriInterrupt() fonksiyonumuz çalışır. Bu
fonksiyonun başına detachInterrupt(0); eklersek artık butona tekrar tekrar
basılsa da hiç bir şey olmaz çünkü artık o kesmeye ilişkili bir fonksiyon yok
biz o ilişkiyi bitirdik. Tabi uykudan önce buradan tekrar bir kesme almak
istiyorsak tekrar attachInterrupt fonksiyonunu çalıştırmalıyız. Hatta
enterSleep fonksiyonunun başında attach yaparsak daha iyi olacaktır. Böylece
uyumadan önce interruptlar gerekli fonksiyonlarla ilişkilenir.
İç Interrupt ile uyandırma
Aslında bunu yapmanın bir tek yolu var o
da WDT (Watch Dog Timer). Bu aslında işlemcinin kilitlenmesini engellemek için
konulmuş bir özelliktir ve çok işlevseldir. Watch Dog yani bekçi köpeği
çalıştırılırsa ve ayarlanan süre dolmadan resetlenmezse “havlar” yani işlemciyi
resetler ve böylece kısır döngülerden kurtulursunuz ancak bir başka çalışma
şekli daha var. Aynı işlemi yapar ancak resetlemez yani belli periyotlar ile
örneğin 1sn de bir -ki bunun için farklı zamanlamalar ayarlanabilir- işlemciye
bir interrupt gönderir ve uyanıp bir işlem yapmasını sağlayabilir.
Arduino’yu düşük gerilimlerde çalıştırma
Gelelim asıl akımı düşürme konusuna.
ATmega328 aslında 1,8v’a kadar düşük gerilimlerle çalışabilir ama Arduino board
çalışamaz çünkü bu gerilim seviyelerine inebilmek için işlemcinin hızından ödün
vermek gerekiyor. Arduino board her ne kadar 16Mhz bir kristalle çalışıyorsa da
ATmega328 daha yüksek ya da düşük kristaller ile de çalışabilir. Maksimum 20Mhz
ile de çalışabilir ancak bu durumda 5.5v’a ihtiyaç duyar tabi daha fazla akım
harcar.
Bu ilişkiden yola çıkarsak 2Mhz kristal ile de çalışabilir ki bu
durumda daha az gerilim ve akım ile. Benim hedefim 1,5v tek pile
düşemeyeceğimiz için 3v. Bu durumda 2Mhz ya da 4Mhz kristal ile hem çalışma
akımı hem de uyku akımını çok düşürebiliriz. Böylece iki adet kalem pil ya da
CR2032 gibi düğme ya da para pil denilen küçük piller ile devremizi çok
küçültebiliriz. Artık pil ile çalıştığımız için herhangi bir regülatöre de
ihtiyacımız kalmamıştır.
Pil Seçimi
Pil seçimi tamamen size kalmış. Burada
karar vermeniz gereken ne kadar küçük bir cihaz istiyorum ve bu pil ile ne
kadar uzun süre çalışmasını istiyorum. CR2032 200-250mA arasında bir güç harcar
ki bu demek oluyor ki 20uA bir bekleme akımı ile yaklaşık 400 gün bekleyebilir,
tabi pratikte sürekli beklemez. 15mA gibi bir çalışma akımı elde edebilirseniz
sürekli 15 saat çalışabilir demektir. Yani güç tasarrufunuz yine de
işlemcinizin hangi aralıklarla ne kadar süre çalışacağına kalmış. CR2032 sizin
için yeterli değilse AA boy bir kalem pil 1000 hatta 2500mA e kadar çıkabilir.
Ya da biraz daha küçük olanları yani AAA size olan kalem pillerin şarjlı
olanları da 1000mA e kadar çıkabilmektedir. Burada iki adet 1000mA pil
kullandığınız için 2000mA olduğu yanılgısına düşmeyin. İki adet 1,5V 1000mA
piliniz varsa bu bir adet 3V 1000mA piliniz var demektir.
Arduino'da Pek Bilinmeyen Bir Sabit (Constant) : LED_BUILTIN
İlginç Bir Sabit : LED_BUILTIN
Çoğu Arduino modeli bir direnç ile seri LED bağlanmış bir pine sahiptir. LED_BUILTIN sabiti LED bağlı bu pinin numarasını alan bir sabittir. Çoğu Arduino kartında bu pin 13'tür.
Bu sabit kullanılarak yapılmış bir "blink" örneği.
/** https://www.facebook.com/ArduinoHaber
*
* farklı bir blink:
* LED_BUILTIN örneği
*/
void setup() {
pinMode(LED_BUILTIN,OUTPUT);
}
void loop() {
digitalWrite(LED_BUILTIN, HIGH);
delay(1000);
digitalWrite(LED_BUILTIN, LOW);
delay(1000);
}
ARDUIONO'DA PULL_UP ve PULL_DOWN DİRENCİ KULLANIMI
Arduino Haber - Pull_Up / Pull_Down |
Bir pull-up direnç zayıf şekilde, 5 volta bağlı olduğu kablonun voltajını çeker. Öte yandan direnç, eğer başka bir şey güçlü bir şekilde kabloyu 0 volta çekiyorsa, kablonun 0 volta gitmesine izin verecek derecede zayıftır. Pull-up dirençlerin TTL devrelerde kullanılması tercih edilir.
Arduino Haber - Pull_Up / Pull_Down |
Arduino'da pinleri tanımladığımız bir fonksiyon var pinMode(), şimdi Pull_Up direnç bağlantısı ile bu fonksiyonun ilişkisine bakalım.
pinMode()
Açıklama
Dijital pinlerin giriş ya da çıkış olacağına karar veren fonksiyondur.
Arduino'da dijital pinlerin dahili pull_up dirençleri (20K) vardır. Bu direnci INPUT_PULLUP modu ile devre dışı bırakmak mümkün.
Yazım
pinMode(pin, mode)
Parametreler
pin: pin numarası
mode: INPUT, OUTPUT ve INPUT_PULLUP
Örnek
void setup() {
pinMode(2, INPUT_PULLUP);
pinMode(13, OUTPUT);
}
void loop() {
if (sensorVal == HIGH) {
else {
digitalWrite(13, HIGH);
}
void loop() {
int sensorVal = digitalRead(2);
if (sensorVal == HIGH) {
digitalWrite(13, LOW);
}
}
else {
digitalWrite(13, HIGH);
}
}
19 Haziran 2015 Cuma
Arduino Leonardo & Uno - Neden Herkes Bir Leonardo Sahibi Olmalı?
Atmel'in ATmegaXU4 serili çipini kullanan ilk Arduino modeli, aslında farklılığı da bu noktada başlıyor.
Önceki Arduino modelleri programlanabilmek için "seri port" bağlantısına ihtiyaç duyuyor. Platform geliştikçe Arduino'lar USB-Serial dönüştürücü çip edindi. Arduino Uno bu şekilde tasarlanan bir model. ATmega16U2 çipi FTDI dönüştürücü olarak çalışıyor. Aslında bu çip Leonardo'da kullanılan ATmega32U4 çipinin kadeşi sayılır :) analog giriş pini olmayan küçük kardeşi.
Nerdeyse aynı kapasitedeki bir mikrodenetleyiciyi başka bir mikrodenetleyicinin programlanmasını sağlamak için sadece USB dönüştürücü olarak kullanmak hem maliyetli hem de yazık değil mi? :)
Bu garip durum Leonardo'nun piyasaya sürülmesiyle ortadan kalktı. Bu AVR çiplerine sadece dahili USB özelliği katmakla kalmadı, daha bir çok fayda sağladı. Daha ucuz daha çok özelliğe sahip olmasına rağmen Uno'nun üretime devam etmesine de anlam veremiyorum. Yakın zamanda Uno'nun tarihe karışacağını öngörüyorum.
Bakalım Leonardo'nun kalsik Arduino kartlarına göre ne gibi avantajları ve farkları var.
1. Daha Fazla Dijital Pin
4 tane fazldan dijital pin var :) Uno 14 dijital pine sahip (D0-D13). Leonardo bu 14 pinin üzerine dişi girişlerin olduğu bölgenin dışında 4 pine daha sahip. Bu pinlere ulaşmak için ICSP pinlerini kullanmanız gerekecek.(D14-D17)
D14 – MISO – PB3D15 – SCK – PB1D16 – MOSI – PB2D17 – SS – PB0
D17 pini fotoğrafta gösterilen yerden yapılacak lehimle kullanılabilir.
2. Daha Fazla ve Daha İyi PWM Pin
Leonarda 1 tane fazla PWM pinine sahipmiş gibi görünse de (Leonardo 7, Uno 6 PWM'e sahip) , ATmega32U4 çok güçlü zamanlayıcılara (timer) sahip. Uno'dakile ek olarak timer4 zamanlayıcısı fark yaratmaktadır. 1x8-bit, 2x16-bit ve 1x10-bit yüksek hızlı (64MHz) zamanlayıcı. Toplamda 9 adet bağımsız zamanlayıcılı çıkış pini olan Leonardo'da, bu pinlerden 2 tanesi paylaşımlı olduğu için kalan 7 tanesi PWM olarak kullanılabilir.
D3: 8-bit timer0
D5: 16-bit timer1&3
D6: 10-bit timer4
D9: 16-bit timer1&3
D10: 16-bit timer1&3
D11: 8-bit timer0
D13: 10-bit timer4
3. Daha Fazla Analog Pin
Uno gibi ATmegaxx8 tabanlı Arduino'larda dijital olarak kullanılabilen 6 adet analog giriş pini bulunur. Leonardo'da ise 12 adet analog giriş pini var ki dijital olarak ta kullanabilirsiniz :) Arduino Shiled'lerindeki uyumu bozmamak için Leonardo'nun A6-A11 pinleri dijital pinlere bağlanmıştır.
Analog pinleri dijital olarak kullanabilmek için pin numaraları :)
- A6 – D4
- A7 – D6
- A8 – D8
- A9 – D9
- A10 – D10
- A11 – D12
- A0 – D18
- A1 – D19
- A2 – D20
- A3 – D21
- A4 – D22
- A5 – D23
4. SDA/SCL Pinleri
Uno'da I2C/TWI iletişimini sağlayan pinler A4 & A5 iken Leonardo'da D2 ve D3.
Pin dizilimini bozmamak için SDA ve SDL pinleri aynı yerinde.
Pin dizilimini bozmamak için SDA ve SDL pinleri aynı yerinde.
5. Seri Port
Artık ikinci bir seri portumuz var :) İlk seri portumuz dahili USB arayüzüne sahip ve Tx/Rx LEDleri bu pinlere bağlı. İkinci seri port ise D0/D1 pinlerine bağlı, bu pinlere bağlı LED yok.
Tabi ki seri iletişim hızı da arttı :)
6. Klavye ve Fare Olarak Kullanım
Leonardo'nun en heyecan verci özelliği direkt USB desteği. Bu da kalvye ve ya fare ya da her ikisi birden olarak çalışabilir anlamına geliyor. Arduino'daki kütüphaneler sayesinde çok kolay oluyor bu işlem :)
Dikkat : void setup() bölümüne delay(5000); gibi uzun bir bekleme verin, yoksa tekrar programlamaya çalışırken klavye ve fare fonksiyonlarını çalıştırırken programlama konusunda sorun yaşayabilirsiniz.
7. USB Uyarısı
Leonardonun çalışması için Ardunino IDE 1.0 ve üzerine güncelleyin, hala güncellemediyseniz ayıp zaten :)
8. Sonuç
Leonardo Arduino ailesine çok şey kattı. Daha fazla pin, daha hızlı PWM, bir sürü analog giriş pini daha da önemlisi gerçek bir USB sunması. Belki de daha da önemlisi ucuz olması (Ülkemizde Uno'dan bir kaç lira pahalı ama maliyeti daha ucuz). Bir Arduino'ya ihtiyacınız varsa hemen bir Leonardo alın.
Etiketler:
analog pin
,
arduino esplora
,
arduino leonardo
,
arduino micro
,
arduino pro micro
,
ATmega32U4
,
dijital pin
,
fare
,
kalvye
,
mouse
,
pwm
,
türk
,
türkçe
,
usb
Kaydol:
Kayıtlar
(
Atom
)