Yavaş yavaş kablosuz düzeneklere geçmenin fayda sağlayacağını düşündüm. Bunun için de aralarından en basiti olan kızılötesi haberleşmeyi seçtim. Kısaca bahsetmek gerekirse kızılötesi bizim gözümüzle göremediğimiz ışınlar ve bu ışınları görebilen alıcı ve vericiler sayesinde 2 ayrı bağımsız devre belirli kodlamalar sayesinde haberleşebiliyor.En basitinden telefonunuzun kamerası ile televizyon kumandasının önündeki lede bakarken herhangi bir tuşa bastığınızda led'in yandığını görebilirsiniz. Fakat çıplak gözle kendimiz bu ışınları göremiyoruz.
TV kumandası seçtim çünkü hem bu kumandalardaki kodları çözümlemeyi öğrenmek hem de hazır bir verici olduğu için bizi fazla uğraştan kurtarır diye düşündüm :).
Kısaca yapacağımız projeyi anlatmam gerekirse önce TV kumandamızdaki tuşların kodlarını arduinomuz sayesinde öğreneceğiz ve bu kodları kullanarak sayısal çıkışlara hükmedeceğiz.
Ama önce aşağıdaki linkten arduino sketch kızılötesi kütüphanesini indirmemiz gerekiyor.
http://www.pjrc.com/teensy/arduino_libraries/IRremote.zip
Bunu arduino'nun kurulu olduğu klasördeki libraries içine atıyoruz. Adını sadece IR yaparsanız iyi olur. Bu kütüphane ile kullanacağımız kodları incelememiz gerekirse;
IRrecv irrecv(receivePin) ; // Adını koyabileceğimiz bir IR alıcı oluşturuyoruz.
irrecv.enableIRIn() ; // IR ile veri alma işlemini başlatıyoruz.
irrecv.decode(&results); // Alınan kodu çözme teşebbüsüne girer.
results.value ; // Verinin kodudur. (bu değeri kullanacağız)
irrecv.resume(); // Veri alımından sonra diğer kodu almak için başa döner.
Önce aşağıdaki kodları yazıyoruz ve kullandığımız kumandanın kullanmak istediğimiz herhangi 4 tuşunun kodlarını yazıyoruz..Tabi önce Sketch>Import Library > IR'yi tıklıyoruz ki kütüphanemiz eklensin.
#include <IRremote.h>
int RECV_PIN = 11; //IR'nin 3.bacağını taktığımız pin
IRrecv irrecv(RECV_PIN);
decode_results kod; // dekode sonucu
void setup()
{
Serial.begin(9600);
irrecv.enableIRIn(); // Alma başlıyor
}
void loop()
{
if (irrecv.decode(&kod))
{
Serial.println(kod.value, DEC); // Kodun Decimal Değeri
irrecv.resume();} // Yeni kod alımı
}
Benim kumandamda bu değerler çıktı. 1 tuştan 2 farklı değer çıkabilir. Mühim değil, 2 değeri de tek bir değere indirgeyeceğiz bu sorun da ortadan kalkmış olacak. Bunu da aşağıdaki örnekteki gibi yapacağım.
if(k==1874)
return 1; // 1874 değerim 1 oldu
3 Led kullandım, 3 tuş açmak için kullanacağım , 1 tuşu da kapatmak için kullanacağım.
#include <IRremote.h>
int RECV_PIN = 11;
IRrecv irrecv(RECV_PIN);
decode_results kod;
int kumanda(int k)
{
if(k==3922)
return 1;
if(k==3907)
return 2;
if(k==3906)
return 3;
if(k==3911)
return 4;
if(k==1874)
return 1;
if(k==1859)
return 2;
if(k==1858)
return 3;
if(k==1863)
return 4;
return -1;
}
void setup()
{
pinMode(7, OUTPUT);
pinMode(8, OUTPUT);
pinMode(9, OUTPUT);
Serial.begin(9600);
irrecv.enableIRIn();
}
void loop() {
if (irrecv.decode(&kod)) {
Serial.println(kumanda(kod.value));
if(kumanda(kod.value) == 1)
digitalWrite(9,HIGH);
if(kumanda(kod.value) == 2)
digitalWrite(8,HIGH);
if(kumanda(kod.value) == 3)
digitalWrite(7,HIGH);
if(kumanda(kod.value) == 4){
digitalWrite(7,LOW);
digitalWrite(8,LOW);
digitalWrite(9,LOW);
}
irrecv.resume();
}
}
Videomuz ;
microprocessor etiketine sahip kayıtlar gösteriliyor. Tüm kayıtları göster
microprocessor etiketine sahip kayıtlar gösteriliyor. Tüm kayıtları göster
4 Nisan 2014 Cuma
Arduino - Kızılötesi Kullanarak (Infared Receiver) TV Kumandası ile Led Yakma
15 Mart 2014 Cumartesi
Arduino- Çıkışları 9Volt veya 12 Volt Yapmak
Bildiğiniz üzere Arduino çıkışları 5V olmak üzere tasarlanmış. Fakat bazı devrelerde yönetmek istediğimiz elemanların çalışma voltları 12V,9V olabilmekte. Arduino ile bu elemanları yönetebilmek için mikrodenetleyicimizin ilgili pin çıkışına yandaki devreyi kurduğumuzda çıkışı 12V olarak yani transistörleri kaç volt ile besliyorsak o gerilimde alabileceğiz. Bunu bir nevi DC-DC Inverter olarak da düşünebiliriz .
***Q1 transistörünün NPN,Q2 transistörünün PNP olduğunu gözden kaçırmamakta fayda var.***
Fritzingde 9V batarya bağlayarak bu devreyi çizdim. Gerilim değerini değiştirerek istediğiniz gerilimi çıkıştan alabilirsiniz...
Bu devreyi öğrenmemde yardımcı olan arkadaşım Ebru YAVUZ'a teşekkür ederim :)...
Etiketler:
12V,
12V Output,
Antalya,
Arduino,
Arduino Tutorial,
Arduino UNO,
DC-DC ınverter,
Digital,
Dijital,
Inverter Arduino,
Karadeniz Teknik Üniversitesi,
Microchip,
microprocessor
12 Mart 2014 Çarşamba
Arduino - LM35 Sıcaklık Sensörü ile Termometre Uygulaması
Analog giriş fonksiyonları ile sadece potansiyometre gibi elemanların çıkışlarını değil aynı zamanda analog çıkış veren bütün sensörlerin gerilim değerlerini Arduino'ya aktarabiliriz.Elbette ki bu değerler 5V değerini aşmamalı.
Sol taraftaki resimde sıcaklık değerini analog çıkış olarak vermekte olan LM35 sensörü ve pinlerinin ne için kullanıldığı gösterilmekte.
Vs+ Arduino'muzun 5V, Toprak pini GND'ye ve Vçıkış olarak gösterilen pin de herhangi bir analog girişe takılarak Arduino ile sıcaklık ölçümü yapabiliriz.
Bu proje ile hem sensör ölçümlerine başlamış olacağız, hem de bir önceki yazıda görmüş olduğumuz "float" kodunu da kullanmış olacağız.

Analog giriş için Arduino'daki A1 pin girişini kullandım. Analog girişler sol tarafta olduğundan devre kurma işininin rahat olması için breadboard un sağ tarafının kullanılması sağlıklı olur.
Matematiksel ifadeyi kurabilmek için yani analog değeri sayısal değere çevirmek için LM35'in analog çıkış yapısını bilmemiz gerekir.
Orta bacağından verilen mV mertebesindeki gerilim her °C için 10 mV üretir. Yani 25 °C için çıkış 250 mV olur.
Daha ayrıntılı bilgi için http://www.ti.com/lit/ds/symlink/lm35.pdf
Arduino'daki ADC 10 bitlik olduğu için ve en yüksek değerimiz 5000 mV olduğu için bu 5000 mV'u 1024 parçaya işlemcimiz ayıracaktır. Yani 1023.değer bize 5V'u verecek ve her 10 mV bize 1 °C 'yi verecek şekilde programımızı yazıyoruz.
Kodlarımız ;
float sicaklik; //Analog değeri dönüştüreceğimiz sıcaklık
float analoggerilim; //Ölçeceğimiz analog değer
void setup () {
Serial.begin(9600); //Seri haberleşme,Sıcaklığı ekranda görücez
}
void loop () {
analoggerilim = analogRead(A1); //A1'den değeri ölç
analoggerilim = (analoggerilim/1023)*5000;//değeri mV'a dönüştr
sicaklik = analoggerilim /10,0; // mV'u sicakliğa dönüştür
Serial.print("Sicaklik Degeri: ");
Serial.print (sicaklik);
Serial.println (" derece");
delay (1000);
}
Seri Haberleşme monitörü ile okuduğumuz değerler. Sensörün etrafında ateş yakarak değeri arttırabilirsiniz. Tabi sensörü yakmayın ateşle :))).
Bu da devremizin videosu.En kısa zamanda bu sensör ile yaptığımız sıcaklık ölçümünü LCD'ye bağlayarak burda yayınlayacağım. Video'yu beğenmeyi unutmayın :).
Sol taraftaki resimde sıcaklık değerini analog çıkış olarak vermekte olan LM35 sensörü ve pinlerinin ne için kullanıldığı gösterilmekte.
Vs+ Arduino'muzun 5V, Toprak pini GND'ye ve Vçıkış olarak gösterilen pin de herhangi bir analog girişe takılarak Arduino ile sıcaklık ölçümü yapabiliriz.
Bu proje ile hem sensör ölçümlerine başlamış olacağız, hem de bir önceki yazıda görmüş olduğumuz "float" kodunu da kullanmış olacağız.

Analog giriş için Arduino'daki A1 pin girişini kullandım. Analog girişler sol tarafta olduğundan devre kurma işininin rahat olması için breadboard un sağ tarafının kullanılması sağlıklı olur.
Matematiksel ifadeyi kurabilmek için yani analog değeri sayısal değere çevirmek için LM35'in analog çıkış yapısını bilmemiz gerekir.
Orta bacağından verilen mV mertebesindeki gerilim her °C için 10 mV üretir. Yani 25 °C için çıkış 250 mV olur.
Daha ayrıntılı bilgi için http://www.ti.com/lit/ds/symlink/lm35.pdf
Arduino'daki ADC 10 bitlik olduğu için ve en yüksek değerimiz 5000 mV olduğu için bu 5000 mV'u 1024 parçaya işlemcimiz ayıracaktır. Yani 1023.değer bize 5V'u verecek ve her 10 mV bize 1 °C 'yi verecek şekilde programımızı yazıyoruz.
Kodlarımız ;
float sicaklik; //Analog değeri dönüştüreceğimiz sıcaklık
float analoggerilim; //Ölçeceğimiz analog değer
void setup () {
Serial.begin(9600); //Seri haberleşme,Sıcaklığı ekranda görücez
}
void loop () {
analoggerilim = analogRead(A1); //A1'den değeri ölç
analoggerilim = (analoggerilim/1023)*5000;//değeri mV'a dönüştr
sicaklik = analoggerilim /10,0; // mV'u sicakliğa dönüştür
Serial.print("Sicaklik Degeri: ");
Serial.print (sicaklik);
Serial.println (" derece");
delay (1000);
}
Seri Haberleşme monitörü ile okuduğumuz değerler. Sensörün etrafında ateş yakarak değeri arttırabilirsiniz. Tabi sensörü yakmayın ateşle :))).
Bu da devremizin videosu.En kısa zamanda bu sensör ile yaptığımız sıcaklık ölçümünü LCD'ye bağlayarak burda yayınlayacağım. Video'yu beğenmeyi unutmayın :).
11 Mart 2014 Salı
Arduino - Matematiksel İşlemler
Arduino matematiksel işlemler yapmak için matematiksel operatörleri kullanır. Bu operatörleri birlikte kullanarak karmaşık matematik işlemleri, arduinoya yaptırabilir sensörlerden elde ettiğimiz değerleri(V,mV) istediğimiz değerlere çevirebiliriz (K,C,metre vs.).
Bu operatörlere örnek vermek gerekirse,
c= a + b // a değeri ile, b değerini toplayıp c değerine atar.
c= a - b // a değerinden b değerini çıkartıp c değerine atar.
c= a * b // a değeri ile, b değeriniçarpıp c değerine atar.
c= a / b // a değerini b değerine bölüp c değerine atar.
c = a%b // a değerinin b ye bölümünden kalanı c değerine atar, bu ifadeyi kullanmıştık.
Ledlerin veya butonların hangi pinlere bağlı olduğunu belirtmek için int değerini kullanmıştık.
Bu int değeri bizim belirttiğimiz sayının veya çıkışın tamsayı istendiği anlamına gelmekte.
Eğer bu istenen çıkışın veya girişin ondalık sayı olması isteniyorsa değer int olarak değil float ile girilir. Örneğin ;
int a=5;
float b=5,6;
float c=a+b;
int d= a+b;
Burda sadece olayın nasıl işlediğini anlatmak istiyorum yoksa bu kodlar direkt çalışmaz elbette ki :).
Sonuçlarda float olarak girilen c değeri 10,6, int olarak girilen d değeri de 11 olarak çıkar.
ÜS Alma işlemi x üssü alınacak sayı, n üs olmak üzere;
pow(x,n) olarak alınır.
KAREKÖK alma işlemi x sayısı için de ;
sqrt(x) olarak alınır.
MUTLAK değer alma işlemi yine x sayısı için;
abs(x) olarak alınır.
TRİGONOMETRİK ifadeler de x RADYAN olmak üzere ;
sin(x),cos(x),tan(x) gibi bizim bildiğimiz ifadelerle alınabilir.
NOT : Genellikle radyan değerlerle değil açılarla direktman çalıştığımız için açıları otomatikman radyana çevirebiliriz. Bunun için arduinoda tanımlı DEG_TO_RAD ifadesini kullanabiliriz. Örnek vermek gerekirse açıyı dışardan okuduğumuzu farz edelim ve bunun karesini alalım. aci_d ifadesi dışardan okunuyor olsun.
aci_r = aci_d * DEG_TO_RAD;
y= pow(aci_d,2);
Bu kod ile açı olarak okunulan aci_d ifadesi radyana dönüştürülmüş olur.
BÜYÜK ve KÜÇÜK Olanı Bulma;
x ve y kıyaslanan 2 değer olsun,
max(x,y); // büyük olan hangisiyse çıkış o olur.
min(x,y); // küçük olan hangisiyse çıkış o olur.
Bu operatörlere örnek vermek gerekirse,
c= a + b // a değeri ile, b değerini toplayıp c değerine atar.
c= a - b // a değerinden b değerini çıkartıp c değerine atar.
c= a * b // a değeri ile, b değeriniçarpıp c değerine atar.
c= a / b // a değerini b değerine bölüp c değerine atar.
c = a%b // a değerinin b ye bölümünden kalanı c değerine atar, bu ifadeyi kullanmıştık.
Ledlerin veya butonların hangi pinlere bağlı olduğunu belirtmek için int değerini kullanmıştık.
Bu int değeri bizim belirttiğimiz sayının veya çıkışın tamsayı istendiği anlamına gelmekte.
Eğer bu istenen çıkışın veya girişin ondalık sayı olması isteniyorsa değer int olarak değil float ile girilir. Örneğin ;
int a=5;
float b=5,6;
float c=a+b;
int d= a+b;
Burda sadece olayın nasıl işlediğini anlatmak istiyorum yoksa bu kodlar direkt çalışmaz elbette ki :).
Sonuçlarda float olarak girilen c değeri 10,6, int olarak girilen d değeri de 11 olarak çıkar.
ÜS Alma işlemi x üssü alınacak sayı, n üs olmak üzere;
pow(x,n) olarak alınır.
KAREKÖK alma işlemi x sayısı için de ;
sqrt(x) olarak alınır.
MUTLAK değer alma işlemi yine x sayısı için;
abs(x) olarak alınır.
TRİGONOMETRİK ifadeler de x RADYAN olmak üzere ;
sin(x),cos(x),tan(x) gibi bizim bildiğimiz ifadelerle alınabilir.
NOT : Genellikle radyan değerlerle değil açılarla direktman çalıştığımız için açıları otomatikman radyana çevirebiliriz. Bunun için arduinoda tanımlı DEG_TO_RAD ifadesini kullanabiliriz. Örnek vermek gerekirse açıyı dışardan okuduğumuzu farz edelim ve bunun karesini alalım. aci_d ifadesi dışardan okunuyor olsun.
aci_r = aci_d * DEG_TO_RAD;
y= pow(aci_d,2);
Bu kod ile açı olarak okunulan aci_d ifadesi radyana dönüştürülmüş olur.
BÜYÜK ve KÜÇÜK Olanı Bulma;
x ve y kıyaslanan 2 değer olsun,
max(x,y); // büyük olan hangisiyse çıkış o olur.
min(x,y); // küçük olan hangisiyse çıkış o olur.
8 Mart 2014 Cumartesi
Arduino - Ortak Katot 7 Segmentli Gösterge 0-9 Sayıcı
Bir önceki yazımda ledleri buton yardımıyla sırasıyla yakmıştık. Bu yazımda ise 7 segment gösterge (display) kullanarak 0-9 sayıcı yapacağız. Ama önce 7 segment display hakkında biraz bilgi edinmeliyiz.Displaylerin bir çok çeşiti bulunmakta (ortak anot,ortak katot, 7seg,14 seg, 16 seg vs.). Biz projemizde 7 segmentli ortak katot display kullanacağız.

Display 8 adet ledden oluşmakta. Bunlardan 7 tanesini
istediğimiz rakamları göstermek için kullanacağız. Bu yüzden de hangi ledi hangi harfle adlandırdığımızı programlamanın ve sayıcının sağlığı açısından iyi öğrenmemiz gerekiyor. Sağdaki resim hangi ledin hangi harf ile standardize edildiğini gösteriyor. Bu isimler standarttır tabi siz kendi istediğiniz gibi adlandırabilirsiniz fakat şimdiki proje için standarda uyacağız.
Elimizde bulunan katot displayin hangi pininin hangi ledi yaktığı yandaki resim göstermekte. A ledini yakmak için örneğin 7 numaralı display pinine gerilim vermeliyiz. Tabii ki 5 voltu aşmamak ve 8.,3. pinlerin toprağa bağlı olması şartı ile.
Herhangi bir lede gerilim uygulamadaki direnç bağlama kuralımızı burda da işleyebiliriz o yüzden pinlere direkt 9v veya benzeri gerilimleri uygulamayın :) .
Devrede bir önceki yazıda yaptığımız uygulamaya benzer olacak sadece daha gösterişli ve daha anlamlı daha işe yarar bir proje olacak. Geliştirilerek skorboard yapılabilir bu proje ile.

Display 8 adet ledden oluşmakta. Bunlardan 7 tanesini
istediğimiz rakamları göstermek için kullanacağız. Bu yüzden de hangi ledi hangi harfle adlandırdığımızı programlamanın ve sayıcının sağlığı açısından iyi öğrenmemiz gerekiyor. Sağdaki resim hangi ledin hangi harf ile standardize edildiğini gösteriyor. Bu isimler standarttır tabi siz kendi istediğiniz gibi adlandırabilirsiniz fakat şimdiki proje için standarda uyacağız.
Elimizde bulunan katot displayin hangi pininin hangi ledi yaktığı yandaki resim göstermekte. A ledini yakmak için örneğin 7 numaralı display pinine gerilim vermeliyiz. Tabii ki 5 voltu aşmamak ve 8.,3. pinlerin toprağa bağlı olması şartı ile.
Herhangi bir lede gerilim uygulamadaki direnç bağlama kuralımızı burda da işleyebiliriz o yüzden pinlere direkt 9v veya benzeri gerilimleri uygulamayın :) .
Projemize gelince, yanmasını istediğimiz ledleri teker teker Arduino'muzdaki belirlediğimiz pinlere takıyoruz. Kusura bakmayın fritzingde devre biraz karışık çıktı fakat eminim ki kodlara bakarak zaten devreyi kendiniz de kurabilirsiniz rahatlıkla.
Devrede bir önceki yazıda yaptığımız uygulamaya benzer olacak sadece daha gösterişli ve daha anlamlı daha işe yarar bir proje olacak. Geliştirilerek skorboard yapılabilir bu proje ile.
Butona her bastığımızda sırasıyla istediğimiz sayılar yanmaya başlayacak. Örneğin, 1 sayısı için B ve C ledlerine bağlı pinler 1, diğerleri 0 olacak. Peki bunu nasıl yapacağız.
Kodlarımızda "sayi" isimli bir integer değer gireceğiz ve 0'da itibaren her döngüde 1 artacak. Bu integer değerin 10 ile bölümünden kalan sayıyı displayde göstereceğiz. Yani "%10" ifadesini kullanacağız.
Devrede butonu Arduino'ya bağlarken pull-down direnci koymadım. Eğer siz de koymazsanız aşağıdaki kodları çalıştırabilirsiniz.
Pull-down direnci eklerseniz
if (butondurumu==0) kodu yerine
if (butondurumu==1) kodunu yazmanız gerekiyor.
Kodlarımız;
int buton=12;
int a=2; // her pine displaydeki bir led bağlı
int b=6;
int c=8;
int d=9;
int e=4;
int f=3;
int g=7;
int x=5; //Displaydeki nokta led
int sayi=0; // Modu alınacak sayi
void setup () {
pinMode(a,OUTPUT);
pinMode(b,OUTPUT);
pinMode(c,OUTPUT);
pinMode(d,OUTPUT);
pinMode(e,OUTPUT);
pinMode(f,OUTPUT);
pinMode(g,OUTPUT);
pinMode(x,OUTPUT);
pinMode(buton,INPUT_PULLUP);
Serial.begin (9600);} // Sayi değerini monitörde görmek için
void loop () {
int butondurumu=digitalRead(buton); // buton durumu okuyoruz
if (butondurumu==0) //butona her basıldığında;
{sayi=sayi+1;} // sayi değeri 1 artacak
if (sayi%10==0) //sayinin moduna göre display ledleri
{digitalWrite(a,HIGH); //yanacak
digitalWrite(b,HIGH);
digitalWrite(c,HIGH);
digitalWrite(d,HIGH);
digitalWrite(e,HIGH);
digitalWrite(f,HIGH);
digitalWrite(g,LOW);
}
else if (sayi%10==1)
{digitalWrite(a,LOW);
digitalWrite(b,HIGH);
digitalWrite(c,HIGH);
digitalWrite(d,LOW);
digitalWrite(e,LOW);
digitalWrite(f,LOW);
digitalWrite(g,LOW);
}
else if (sayi%10==2)
{digitalWrite(a,HIGH);
digitalWrite(b,HIGH);
digitalWrite(c,LOW);
digitalWrite(d,HIGH);
digitalWrite(e,HIGH);
digitalWrite(f,LOW);
digitalWrite(g,HIGH);
}
else if (sayi%10==3)
{digitalWrite(a,HIGH);
digitalWrite(b,HIGH);
digitalWrite(c,HIGH);
digitalWrite(d,HIGH);
digitalWrite(e,LOW);
digitalWrite(f,LOW);
digitalWrite(g,HIGH);
}
else if (sayi%10==4)
{digitalWrite(a,LOW);
digitalWrite(b,HIGH);
digitalWrite(c,HIGH);
digitalWrite(d,LOW);
digitalWrite(e,LOW);
digitalWrite(f,HIGH);
digitalWrite(g,HIGH);
}
else if (sayi%10==5)
{digitalWrite(a,HIGH);
digitalWrite(b,LOW);
digitalWrite(c,HIGH);
digitalWrite(d,HIGH);
digitalWrite(e,LOW);
digitalWrite(f,HIGH);
digitalWrite(g,HIGH);
}
else if (sayi%10==6)
{digitalWrite(a,HIGH);
digitalWrite(b,LOW);
digitalWrite(c,HIGH);
digitalWrite(d,HIGH);
digitalWrite(e,HIGH);
digitalWrite(f,HIGH);
digitalWrite(g,HIGH);
}
else if (sayi%10==7)
{digitalWrite(a,HIGH);
digitalWrite(b,HIGH);
digitalWrite(c,HIGH);
digitalWrite(d,LOW);
digitalWrite(e,LOW);
digitalWrite(f,LOW);
digitalWrite(g,LOW);
}
else if (sayi%10==8)
{digitalWrite(a,HIGH);
digitalWrite(b,HIGH);
digitalWrite(c,HIGH);
digitalWrite(d,HIGH);
digitalWrite(e,HIGH);
digitalWrite(f,HIGH);
digitalWrite(g,HIGH);
}
else if (sayi%10==9)
{digitalWrite(a,HIGH);
digitalWrite(b,HIGH);
digitalWrite(c,HIGH);
digitalWrite(d,HIGH);
digitalWrite(e,LOW);
digitalWrite(f,HIGH);
digitalWrite(g,HIGH);
}
delay(100);
Serial.println(sayi); //Bilgisayardaki değere bakarak
delay(10); //displayin doğru olup olmadığını
//anlayabiliriz.
}
Devremizin Resmi;
"Serial.Println(sayi)" komutu ile yaptığımız haberleşmenin resmi;
Videomuz da burda...
7 Mart 2014 Cuma
Arduino - Buton ile Çıkışları Değiştirme
Butonların öneminden daha önceki yazımda bahsetmiştim. Burada da yine bir öncekine benzer bir uygulama yapacağız. Bu uygulamanın yapılış amacını aslında 7 segment display uygulamalarına giriş için yaptığımızı düşünebiliriz.
Kısaca uygulamadan söz etmek gerekirse amacımız burda 1 sayısal giriş ile 2 sayısal çıkışı yönetmek olacak. Butona her bastığımızda çıkışın yeri değişecek. Yani çıkış olarak kullandığımız yeşil ve turuncu ledleri sırayla butona basarak yanmasını sağlayacağız.
Bu uygulamaya geçmeden önce size aritmetik bir operatör olan " mod " almayı anlatacağım.
Arduino'da ve bir çok C tabanlı dilde mod " % " ifadesi ile alınmakta. Yani biz herhangi bir integer değerin herhangi bir sayı modunda almak istersek şu şekilde kullanmamız gerekiyor.
Integer değeri= sayi , mod=5 olsun;
" sayi%5 "
Uygulamamızda bu kavramın daha iyi anlaşılacağını düşünüyorum.
int led1=8; //yeşil led
int led2=7; //turuncu led
int buton=4;
int ledsirasi=0; //modunu alacağımız sayi
void setup () {
pinMode(led1,OUTPUT);
pinMode(led2,OUTPUT);
pinMode(buton,INPUT_PULLUP);}
void loop () {
int butondurumu=digitalRead(buton);
if (butondurumu==0)
{ledsirasi=ledsirasi+1;}
if (ledsirasi%2==0)
{digitalWrite(led1,HIGH);
digitalWrite(led2,LOW);}
else
{digitalWrite(led2,HIGH);
digitalWrite(led1,LOW);}
delay(100);
}
Programda çıkışları seçmeyi (aslında 1 olanı seçmeyi) mod2ye bağlı olarak ledsirasi integer değerine göre seçtim. ledsirasi 0'dan başlamak üzere her butona basıldığında 1 artacak ve mod2ye göre de ya "1" ya da "0" olacak. Buna göre de ya yeşil led ya da kırmızı led in yanması sağlanmış olacak.
Bir sonraki uygulamamızda 7 segmentli gösterge ile 0-9 arası sayıcı yapacağız. Daha önce CMOS 4026 entegresi ile hazır olarak bunu yapmıştım bu sefer arduinoyu kendimiz programlayarak bunu yapacağız.
Kaydol:
Kayıtlar (Atom)











