Bildirim
Arduino Başlangıç Projeleri
Daha Fazla 
Bu Konudaki Kullanıcılar:
Daha Az 

2 Misafir - 2 Masaüstü

Giriş
Mesaj
-
-
-
Butonlar mikroişlemcilerle yapılan her proje önemli elemanlardır. Yazılan programları çalıştırmada ya da çalışan programlara anında müdahele için butonlar kullanılmaktadır. Açıkçası yazılan program sonrası uygulamaya geçildiğinde ve butona basıldığında bir led in yanması bile ayrı bir zevk veriyor insana :).
Butonlar önemli çünkü mikroişlemciler ile yapacağımız herhangi bir robotik uygulamada, robota bu butonlar sayesinde yön verme gibi bir seçeneğimiz bulunmakta. Oyuncak arabalar için git/gel komutları gibi.
Arduino'dan önce kullanmış olduğum MSP430 Launchpad üzerinde kendi butonu bulunmaktaydı ve geriye sadece onu programa okutmak kalıyordu. Arduino UNO'da sadece reset butonu olduğu için bu butonu kendimiz harici olarak eklicez.
Butonu şemada görüldüğü gibi +Vin ile toprak arasına bir direnç ile birlikte bağlıcaz.
Arduino, PC ile seri haberleşme yapabilme özelliğine sahip bir mikroişlemci. Arduino programının üst menüsünde bulunan Tools kısmından Serial Monitor yazan yere tıklarsak seri haberleşmeyi gösterecek olan pencereyi görebiliriz. Elbette ki bu seri haberleşmeyi kullanmamız için gereken bir komutumuz olacak.Bir kez kullanacağımız için bu komutu void setup() içerisinde kullanıcaz.
quote:
Serial.begin(9600);
Şemamızdaki devreyi kurduktan sonra aşağıdaki komutları yükleyebiliriz artık mikroişlemcimize.
int buton = 2; // 2.pini isimlendirdik
void setup() {
Serial.begin(9600); //9600 baud hızında seri haberleşme için
pinMode(buton, INPUT_PULLUP); // 2.pinin giriş olduğunu belirttik
}
void loop() {
int butondurumu = digitalRead(buton); //buton durum adında integer bir değeri programa okuttuk ve bunu da butonun durumu olarak belirledik (1 ya da 0)
Serial.println(butondurumu); // Seri Haberleşme ile butonun durumu ekrana yansıtılıyor.
delay(20); // değer okunurken 2 değer arasında ki süre ms.
}
INPUT_PULLUP komutunu kullandım çünkü sadece INPUT komutunu kullandığımda buton değerleri saçmaladı biraz. INPUT_PULLUP komutunu kullandığımda sonuçlarım daha sağlıklı oldu.
Mikroişlemcilerin tipine göre butonların okunması farklılık gösterebiliyor. Arduino'da butona bastığımızda "0", basılmadığında "1" sonucunu alıyoruz.
Seri haberleşme özelliği sayesinde butonun durumunu ekranda görebiliyoruz. 0 ise basılı , 1 ise basılı değil.
Küçük bir uygulama yapalım şimdi. Bir portu input, başka bir portu output olarak kullanalım. Çıkışa led bağlayalım,butona bastığımızda led yansın diğer koşulda da sönük halde kalsın. Devremizi aşağıdaki gibi bağlayalım.
2.pine buton, 4.pine de led bağladık.Komutlar :
int buton = 2; //buton'a 2 sayısı atandı
void setup() {
Serial.begin(9600); //Seri Haberleşme Kodu
pinMode(buton, INPUT_PULLUP); //2.pin giriş oldu
pinMode(4, OUTPUT); //4.pin çıkış oldu
}
void loop() {
int butondurumu = digitalRead(buton); // butondan okunan sonuç butondurumuna atandı
delay(20);
if (butondurumu == 0)
{ digitalWrite (4, HIGH);
Serial.println("LED YANDI");} //buton basılıysa led yanık halde // ve ekrana yansıtılıyor
else
{digitalWrite (4, LOW);
Serial.println("LED SONDU");} //buton basılı değilse led sönük halde ve ekrana yansıtılıyor
}
-
Hayatta herşeyin "1" ve "0" lardan oluşmadığından bahsetmiştik.Hayat analog değerlerle kaynıyor :D. Bu yazımda bunu daha iyi anlıcaz. Maksimum 5V'a kadar ölçüm yapabilen bir voltmetre yapıcaz.
Arduino analog girişleri 10bitliktir. 2^10= 1024 matematiksel hesabından, okunan her analog değer 1024 örneğe ayrılır.Bu ayrılan örneklere göre de okunma işlemi yapılır yani her değer 0-1023 değerleri ve bu değerler arasında ki en yakın tamsayı değerine atanır. Aslında daha önce bahsetmem gerekiyordu (Analog çıkışlarda) bu ADC olayından , geç kaldığım için özür dilerim.
Bizim analog gerilim değerimiz maksimum 5V olacak. Bu 5V'luk değer 0-1023 değerleri arasında atanacak. Bu, seri haberleşme portunu kullanıp değer okurken küçük bir matematiksel formüle ihtiyacımız olacağını gösteriyor bize.
Öncelikle potansiyometrenin bir ucu 5V'ta, bir ucu toprakta, orta ucu da A1 pininde olmak üzere şekildeki gibi devremizi bağlıyoruz.Analog girişi üzerinde Analog yazan pinlerden yapıyoruz.
void setup ()
{ Serial.begin(9600);} //9600 baud hızında seri haberleşme komutu
void loop () {
int analogdeger = analogRead(A1); //A1'den okunan analog değerleri atadık
float gerilim = analogdeger * (5.0 / 1023.0); // Bu kısmı aşağıda açıklıcam
Serial.println(gerilim); //Ekranda gerilim değerini gösteriyoruz.
delay(50); //2 ölçüm arasında geçen zaman dilimi (ms)
}
A1 pininden okunan değerler 0 ile 1023 arasında değişen değerler olacak. Temel Ölçme dersinde öğrendiğimiz analog ölçüm formülünü bu kısımda kullandık, kullandık ki seri haberleşme sayesinde ekrana yazdıracağımız değer volt biriminde olsun.
Gerilim = Okunan Skala Değeri x ( Maksimum Okunabilen Değer / Maksimum Skala )
Analog olarak değer okumak bizim için çok mühim olacak çünkü aklıma gelen örnek Helikopterler,Multikopterler vb. araçları kullanırken yapacağımız kumanda sistemlerinde kullanabiliriz bu analog değer okumayı.
-
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;
quote:
" 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.
-
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 :) .
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. 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;
Devrenin Çalışma Videosu :
-
gayet açıklayıcı türkçe anlatımlar olmuş :) -
Güzel çalışma, örnekler ve zorluk dercesi giderek artacaktır umarım :-) -
Tatilde arduinoya başlamayı planlıyordum artık burdan takip ederim örnekleri -
tebrik ederim son derece açıklayıcı. arduino ya başlamayı düşünenler için güzel bir Türkçe kaynak olacaktır -
Teşekkür ederim arkadaşlar...
Öğrendikçe yazmaya ve daha ileri seviyede uygulamalara da başlayacağım tekrar teşekkür ederim :). -
Güzel bir rehber daha ellerine sağlık
< Bu ileti mobil sürüm kullanılarak atıldı > -
Hocam blogunuz çok güzelmiş teşekkürler güzel paylaşımlar için -
Hocam merhaba
polis çakar devresi yapmaya çalıştım ancak bu kodlara göre 2 led birden yanıyor ayrı ayrı yakamıyorum kodlardamı bi sorun var acaba(8i pinmodede9 olarak yazmışım mesajı editlerken düzelttim)son durum iki led birden pin10un ayarlarına göre yanıyor
kodlar şu şekilde:
void setup() {
// Pinler Çıkış olarak belirleniyor
pinMode(10, OUTPUT); // MAVI LED
pinMode(8,OUTPUT);
}
void loop() {
digitalWrite(10, HIGH); // LED yanik
delay(50);
digitalWrite(10,LOW);
delay(50);
digitalWrite(10,HIGH);
delay(50);
digitalWrite(10,LOW);
delay(1000);
digitalWrite(8,HIGH);
delay(50);
digitalWrite(8, LOW);
delay(50);
digitalWrite(8,HIGH);
delay(50);
digitalWrite(8,LOW);
delay(1000);
}
< Bu mesaj bu kişi tarafından değiştirildi GorkemSelcuk -- 26 Aralık 2014; 21:31:10 >
-
Hemen yazdıktan sonra aklıma geldi.Sorun çözüldü.Aynısını yaşayanlar için çözüm:
pin8 yerine pin5e çevirdim.digitalin diger parçasında olması için ya değilse sanırsam seri baglama gibi oluyor.
ledi de breadbordun sağ tarafına çektim.gndyi de kabloyla oraya çektim ve sonuç başarılı oldu.isteyenler kullanabilir. :) -
Arduionayla ilgilenen arkadaşlar bir buluşma yapsak iyi olur ne dersiniz?
< Bu ileti mobil sürüm kullanılarak atıldı > -
Merhaba ,
çalıştığım şirkette otomasyon panelleri üzerinde endalara çeşitli 4.20 (analog input ) değerleri gösteriyoruz. basınç sıcaklık transmitterlerinden.
benim yapmak istediğim bu endalardan kurtulmak. ardunio'nun hangi ürünü ile bu ar-ge mi tamamlarım. ?
projemde birde PLC var.PLC üzerinden bu AI değerleri kendi yazılımımıza geliyor.
yani 4.20 değerleri ----- bir ayağı ardunio üzerinden tablete diğer ayağı ardunio dan çıkıp plc ye girmem gerekiyor.
bu konuda yol gösterebilir misiniz ?
ardunio üzerinde analog output var mı ? -
Arduinoda bu pinler (~ işaretli olanlar) analog output görevi görmektedir. Yukarıdaki bir kaç örnek uygulama yapılmış. -
@ogzcndyr hocam çok teşekkür ederim. Pulse-width modulation (PWM) olarak geçen kısım mı yani ?
bilgi işlem uzmanıyım aslında. Bu akıllı kartlarda çok tecrübeli değilim.Doğru ürüne karar verip projeyi başlatmam gerekiyor.:( -
Aynen pwm çıkış olarakta geçiyor. BU LİNKTEN pwm hakkında fikir edinebilirsiniz. Ayrıca BURDAKİ facebook grubuna üye olursanız projenizde yardımcı olabilecek insanlar bulabilirsiniz.
Benzer içerikler
- 5 bacaklı röle bağlantı şeması
- elektrikli şofben su tazyik sorunu
- her iki kabloda elektrik var
- kapı otomatiği çalışmıyorsa arıza nerededir
- ev elektriği kaç amper
- gözlüklü drone
Ip işlemleri
Bu mesaj IP'si ile atılan mesajları ara Bu kullanıcının son IP'si ile atılan mesajları ara Bu mesaj IP'si ile kullanıcı ara Bu kullanıcının son IP'si ile kullanıcı ara
KAPAT X
Bu mesaj IP'si ile atılan mesajları ara Bu kullanıcının son IP'si ile atılan mesajları ara Bu mesaj IP'si ile kullanıcı ara Bu kullanıcının son IP'si ile kullanıcı ara
KAPAT X