Merhaba. Arduino'dan okuduğumuz verileri direkt Serial Monitör'den ya da LCD'den okuyabiliyorduk. Fakat bu okunan veriler için bir tasarrufumuz olmuyordu. Bu yazıda Arduino'dan okuduğumuz veriyi C# da gösterip, istediğimiz değerleri listbox'a kaydettiğim arayüzden bahsedeceğim. Bu arayüzü oluşturmamda yardımcı olan Necmettin Zengin arkadaşıma teşekkür ederim. Resimde de görüldüğü gibi arayüzde 4 buton, 2 combobox, 2 label ve 1 tane de listbox bulunmakta. 0 yazan yerde ölçülen analog değer gösterilecek ve ekle butonuna bastığımızda okunan değer listbox a eklenecek. C# da hazırlanan bu arayüz için ayrıca bir arduino yazılımına ihtiyaç bulunmamakta. Serial Monitör'de veri okuyacakmış gibi yazılımınızı oluşturmanız yeterli. RS232 vb. seri port haberleşmesinde deneme şansım olmadı, en yakın zamanda PIC için deneyip sonucunu burada yazarım. C# kodlarına geçecek olursak ki yakın zamanda bununla alakalı bir video çekmeyi de planlıyorum;
Microsoft Visual Basic Form şeklinde ve exe olarak aşağıdaki linkten programa ulaşabilirsiniz. İndirme Linki Burda da aynı arayüz programına Serial.ReadLine() methodu ile devam ederek veri okumayı daha stabil daha işlenebilir hale getirdim.
Askerliğim nedeniyle verdiğim 6 aylık aranın ve de Liverpool zaferimizin ardından tekrar merhaba :). Bu yazımda MQ Gaz Sensörleri serisinden MQ-4 sensörünün uygulamasını gerçekleştireceğiz. MQ serisinin sensörlerinin hangi gazlar için üretildiği sonundaki rakamla belirtilmiş. Resimde MQ6 sensörü LPG ve Bütan gazına duyarlı iken uygulamasını yapacağımız MQ4 sensörü Metan,Propan ve CNG gazlarına duyarlı. Propan bildiğiniz üzere çakmaklarda kullanılıyor. Diğer gaz sensörleri ile ilgili daha fazla bilgi için aşağıdaki linke tıklayabilirsiniz. MQ Gaz Sensörleri
MQ-5 GAZ SENSÖRÜ Bu sensörlerin 6 bacağı bulunmakta ve bunlardan 4 pini 2'şerli olarak birbirleriyle kendiliğinden kısa devre. Bu 6 pin 3'erli 2 gruba ayrılmış. Bu 2 grubun ortasındaki pinler ise Heater(ısıtıcı) pinleri. Bize ise hangi tarafı Vcc hangi tarafı GND olarak belirleyeceğimiz kalıyor. Şekilde de görüldüğü gibi A kısmındaki pinleri kendi arasında kısa devre yapıyor ve Arduino'daki 5V'a takıyoruz. B kısmındaki B pinlerini de birbiriyle kısa devre yapıp analog girişine bağlıyoruz. B kısmındaki H pinini (ortadaki pin) de 10-20k ohm'luk bir dirençle B kısmındaki B pinlerine bağlayıp toprağa takıyoruz. Yazı ile biraz karışık oldu ama aşağıdaki fiqürde açıklamam daha anlaşılır olacaktır. Fiqürde sensörün alt kısmı A kısmı olarak belirlenmiş.Out yazan yer ise analogpin'e girecek olan pin.
Kodlarımız diğer analog ölçüm yapan kodlarla aynı, sensör değeri belirli bir seviyeye gelince 13. pine bağlı ledin yanmasını istedim. Çakmağınızla denemeler yapabilirsiniz.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
constint analogInPin = A0; constint ledPin =13;
int veri =0; voidsetup() { Serial.begin(9600); pinMode(ledPin, OUTPUT); } voidloop() { veri = analogRead(analogInPin); if (veri >=200) { digitalWrite(ledPin, HIGH);} else { digitalWrite(ledPin, LOW);}
Serial.print("Okunan Değer = " ); Serial.println(veri); delay(750); }
Daha önceden LM35 sıcaklık sensörü ile bir uygulama gerçekleştirmiştik. LM35 analog çıkış veren bir sensördü. Bu yazımda ise sizlere dijital çıkış veren bir sıcaklık sensörü olan Dallas 18B20 (DS18B20) ile ilgili bilgi vermek istiyorum.
DS18B20 'nin özelliklerinden bahsedecek olursak ; * ±0.5°C ölçüm hassasiyetine sahip * Dallas firmasının geliştirdiği One Wire haberleşmesini kullanır * Ölçüm aralığı -55°C 'den +125°C 'ye kadardır. * Termometre çözünürlüğü kullanıcının seçimine bağlı olarak 9 bitten 12 bite kadardır.
Daha ayrıntılı bilgiyi datasheet sayfasında bulabilirsiniz. DS18B20 Datasheet Bu sensör ile ilgili yazı yazmak istedim çünkü DS18B20 sensörü ki uygulamayı gerçekleştirdiğinizde siz de anlayacaksınız, LM35 sensörüne göre daha kararlı ve daha hassas. Oda sıcaklığı ölçümünden ziyade vücut ateşi vb. hassasiyet gereken ölçümler yapabilirsiniz. Uygulamaya geçmeden önce aşağıdaki linkten "One Wire" kütüphanesini indirip Arduino klasörünün libraries klasörüne yüklüyoruz. OneWire Kütüphanesi Linki
// Sıcaklık sensörünü bağladığımız dijital pini 2 olarak belirliyoruz. int DS18S20_Pin =2;
// Sıcaklık Sensörü Giriş-Çıkışı OneWire ds(DS18S20_Pin); // 2. Dijital pinde.
voidsetup(void) { Serial.begin(9600); // Seri iletişimi başlatıyoruz. }
voidloop(void) { // temperature değişkenini sıcaklık değerini alma fonksiyonuna bağlıyoruz. float temperature = getTemp(); // Sensörden gelen sıcaklık değerini Serial monitörde yazdırıyoruz. Serial.print("Sicaklik: "); Serial.println(temperature); // 1 saniye bekliyoruz. Monitörde saniyede 1 sıcaklık değeri yazmaya devam edecek. delay(1000);
}
// Aşağıdaki fonksiyon DS18B20 sıcaklık sensörümüzden gelen verileri // Celcius cinsinden sıcaklık değerlerine çevirmek için kullanılıyor. // Herhangi bir değişiklik yapmamız gerekmiyor.
floatgetTemp(){ //returns the temperature from one DS18S20 in DEG Celsius
byte data[12]; byte addr[8];
if ( !ds.search(addr)) { //no more sensors on chain, reset search ds.reset_search(); return-1000; }
if ( OneWire::crc8( addr, 7) != addr[7]) { Serial.println("CRC is not valid!"); return-1000; }
if ( addr[0] !=0x10&& addr[0] !=0x28) { Serial.print("Device is not recognized"); return-1000; }
ds.reset(); ds.select(addr); ds.write(0x44,1); // start conversion, with parasite power on at the end
Kablosuz haberleşme neden bilmiyorum diğer haberleşmelere göre daha heyecan verici geliyor bana. Özellikle son zamanlarda kullandığımız akıllı telefonları Arduino ile haberleştirebilmek gerçekten büyük zevk. Zaten basit bir uygulama olsa bile bu yazımdaki uygulamayı yaptığınızda ne demek istediğimi daha iyi anlayacaksınız :).
Yazılımdaki mantık C# uygulamasındaki mantık ile aynı. 3 adet butonumuz var, 1 tanesi ile bluetooth haberleşmesi ile mikrodenetleyicimize bağlanıyoruz. 2.buton ile led yakıyor, 3.buton ile led söndürüyoruz. Bu uygulamayı ilerleterek android kontrollü bir araba, akıllı ev uygulamaları vb. projeler gerçekleştirebilirsiniz. Tabii android bilmekte gerçekten büyük fayda var. Size mutlaka + katkıda bulunacaktır.
Eclipse öğrenmeye başladım fakat henüz başlangıç aşamasındayım. Buradaki kullanacağıız programı Selim Erkan OĞUZ arkadaşımın yardımıyla Google'ın App Inventor isimli programı yardımıyla yaptık. İster kendiniz oluşturursunuz isterseniz vereceğim link ile programı direkt android telefonunuza yükleyerek uygulamayı gerçekleştirebilirsiniz.
Yukardaki resimde uygulamanın kodlarını yazabildiğimiz bir arayüz var. Sağ taraftaki resimde de uygulamamızın basit bir arayüzü var. İndirme linki burda ; arduinotooth indirme linki
HC-06/07 BLUETOOTH MODÜLÜ Anrdoid telefonumuzla Arduino'muz arasındaki haberleşmeyi HC-06 modülümüz sayesinde gerçekleştireceğiz.Bu sayede istediğimiz dataları Arduino'ya gönderip ışık yakıp söndüreceğiz.
Bluetooth'un RXD pinini Arduino'da TXD'ye, Bluetooth TXT pinini, Arduino RXD'sine takacağız. Uyglamayı çalıştırmadan önce telefonunuzu Bluetooth modülü ile eşleştirmeniz gerekiyor. HC-06 veya HC-07 diye ekranda gözükecek. Modülün şifresi 1234. Eşleştirme yaptıktan sonra arayüzü açıp bağlan butonuna tıklayarak bir kez daha bağlanacağız. Bağlantı sağlandıktan sonra modülün üzerinde yanıp sönen ışık sürekli yanmaya başlayacak. Bu da komutlar için bluetooth haberleşmesinin sağlandığını, Arduino'nun komut almaya hazır olduğunu gösterir. Arduino kodlarımız hemen hemen benzer kodlar C# uygulamasındaki kodlarla. Buyrun; int data; int led=7; void setup() { pinMode(led,OUTPUT); Serial.begin(9600); } void loop() { { if (Serial.available()){ int data = Serial.read(); delay(100); if(data=='1'){ digitalWrite(led,1); } if(data=='0'){ digitalWrite(led,0); } delay(100); }}} Videomuz da burda :) Türk Usülü Çay Bardağımız da bize eşlik etmiş :p
Merhabalar, Bu yazıda Processing üzerinden oluşturduğumuz arayüz ile Arduino'ya bağlı RGB ledi süreceğiz. Öncelikle Processing ile ilgili bilgi vereceğim ama şunu belirtmek istiyorum ki Processing ilgilenmek ve öğrenmek istediğim bir dil fakat ne yazık ki çok bir bilgim yok. O yüzden bu uygulamam Coşkun TAŞDEMİR'in Arduino Uygulama kitabından hoşuma giden ve sizinle paylaşmak istediğim bir uygulama. Şayet hoşunuza giderse (ki gidecek :D) Processing ile ilgilenmek isteyebilirsiniz.Arduino Uygulama Kitabı burda imdadınıza yetişebilecek nitelikte. En azından başlangıç için.
PROCESSING NEDİR ? Processing açık kaynaklı görsel bir yazılım programıdır. Kodlarla dijital sanat icra edebilir veya da mikrodenetleyiciler ile seri haberleşme sağlayarak onları yönetebilirsiniz. Download linki Processing İndir RGB LED
RGB Led ortak anot ve ortak katot olmak üzere 2 çeşidi bulunan bir led türüdür. Çalışma mantığı sağ tarafta bulunan Venn şemasıdır. Kırmızı Mavi Yeşil tonları 8 bitte karıştırırak (0-255) diğer doğal renklerin elektronik ortamda oluşturulmasını sağlar. Processing ile de bu programı oluşturacağız ve Arduino'ya bağladığımız RGB ledi süreceğiz. RGB Ledi dirençsiz sürmek istiyorsanız ki ben öyle yaptım, Arduino'nun 3,3V pini ile besleyin. Ben ortak anot kullandım ve RGB ledin uzun bacağını 3,3 V'a bağladım. Ayrıca ledler standart değil renkleri teker teker deneyin !!! Processing'e yazılımı yazmadan önce Sketch>Import Library bölümünden CONTROLP5 kütüphanesini indiriyoruz.Böylelikle renk seçimi yapabileceğiz. Çok bir bilgim yok tüm kodlar hakkında buyrun; import controlP5.*; import processing.serial.*; ControlP5 controlP5; Serial seriPort; ColorPicker cp; int kirmizi; int yesil; int mavi; void setup () { size(400,100); controlP5=new ControlP5(this); cp = controlP5.addColorPicker("renksecici",0,0,255,20); seriPort = new Serial(this,"COM30",9600); // COM30 yerine kendi seriportunuzu yazın. } void draw() { background(cp.getColorValue()); kirmizi=int(red(cp.getColorValue())); yesil=int(green(cp.getColorValue())); mavi=int(blue(cp.getColorValue())); delay(50); } void renksecici(int renk){ println("KIRMIZI" +kirmizi + "YEŞİL" +yesil + "MAVİ" +mavi); RenkGonder(); } void RenkGonder() { seriPort.write('R'); seriPort.write(kirmizi); seriPort.write(yesil); seriPort.write(mavi);
} Bu da Arduino kodumuz ; const int kirmizipin=11; const int yesilpin=10; const int mavipin=9; int kirmizi=0; int mavi=0; int yesil=0; int durum=1; byte gelen = 0; void setup(){ Serial.begin(9600); } void loop() { while(Serial.available()>0) { gelen =Serial.read(); switch(durum) { case 1: if(gelen=='R') {durum=2;} break; case 2: kirmizi=gelen; durum=3; break; case 3: yesil=gelen; durum=4; break; case 4: mavi=gelen; durum =1; break; }} analogWrite(kirmizipin,255-kirmizi); analogWrite(yesilpin,255-yesil); analogWrite(mavipin,255-mavi); delay(20); } Şayet Processing programınız yok ,fakat yine de denemek istiyorsanız buyrun program linki. https://drive.google.com/file/d/0B7Iv2kkg1He_blQ1ZUJUX1lmWkE/edit?usp=sharing Bu da videomuz,
Hobi Elektronik kategorisini biraz boşlamış olduğumu hissettim ve hobi elektroniğe başladığımda yapmış olduğum ilk devreyi buraya yazmak istedim. Devremizi, transistörün (BC547 , BC237 vs.)anahtarlama prensibinden yararlanarak oluşturacağız. Bunun için elbette LDR'yi tanımamız gerekiyor.
LDR (Foto Direnç) Nedir ? Foto direnç yani kısaca LDR, üzerine düşen ışık miktarıyla ters orantıda direnci değişen bir elektrik elemanıdır. LDR’nin aydınlıkta direnci minimum, karanlıkta ise maksimumdur. Bu özelliği ile transistörün anahtarlamasını kullanarak bu devreyi oluşturucaz.
LDR, üzerine ışık düştüğünde neredeyse kısa devre gibi davranır ve transistörü Base'inin tetikler bu sayede transistörün Emitter'ine bağlı LED yanmaya başlar. LDR karanlıkta olduğunda neredeyse açık devre olur (1M ohm civarı) ve transistör tetiklenmez bu yüzden de LED yanmaz. Ben elimdeki dirençlerle bu devreyi kurmaya çalıştım 1k yerine 470ohm, 10k yerine de 1k kullandım. Besleme olarak mecburen Arduino kullandım ama siz direkt 9V verirseniz parlak ledleri kullanabilirsiniz maalesef ben düşük voltajdan ötürü kullanamadım. Buyrun bu da videomuz ;
Bu yazımda C# ile oluşturduğumuz arayüz ile Arduino'nun dijital çıkışlarına hükmetmeyi öğreneceğiz. Uygulamamız 2 aşamadan oluşmakta. Önce Arduino'ya yükleyeceğimiz programda hangi çıkışımızı yani ledi ON ve OFF duruma getirecek datayı belirleyeceğiz. Daha sonra da C# arayüzünden önce Port'lara bağlanmayı ve butonlara bastığımızda hangi datayı göndereceğimizi kararlaştıracağız. C# ile ilgilenmenizi öneririm çünkü her defasında LCD bağlamak veya Serial Monitör kullanamayacağımız projeler olabilir. Tüm verileri tek arayüz üzerinden göndermek veya almak zorunda kalabilirsiniz. İnternet üzerinden C# üzerine projeleri veya arayüzü öğrenmeniz size fayda sağlar. Lafı fazla uzatmadan önce Arduino kodlarımızı vermek istiyorum;
int led = 13; // Hali hazırda bulunan ledi kullanacağım. void setup() { pinMode(led, OUTPUT); Serial.begin(9600); } void loop() { if(Serial.available()) //Eğer seri haberleşme açık olursa alttaki komutlar işleyecek. {int a=Serial.read(); //Seri haberleşme ile okunan verimize a integer değerini verdik. if(a=='1') { digitalWrite(led, HIGH);} // a, 1 olursa yanacak. else if (a == '0') // a, 0 olursa sönecek. {digitalWrite(led, LOW);} }
Led Yak = Buton 3 Led Söndür = Buton 2 Bağla = Buton 1 Programımıza bakarsanız daha bu kısım daha iyi anlaşılacaktır. Arayüzü oluşturduktan sonra Components kısmından SerialPort nesnesini arayüzün üzerine atıyoruz. Amacımız önce programı yüklemiş olduğumuz Arduino'nun portuna, bu arayüz ile bağlanarak LED YAK ve LED SÖNDÜR komutlarını kullanmak :) C# komutlarımız ; using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; using System.IO.Ports; namespace ArduinoSerial { public partial class Form1 : Form { public Form1() { InitializeComponent(); } private void button3_Click(object sender, EventArgs e) { serialPort1.PortName = comboBox1.Text; serialPort1.Open(); } private void Form1_Load(object sender, EventArgs e) { comboBox1.DataSource = SerialPort.GetPortNames(); } private void button2_Click(object sender, EventArgs e) { serialPort1.Write("0"); label1.Text = "LED KAPALI"; } private void button1_Click(object sender, EventArgs e) { serialPort1.Write("1"); label1.Text = "LED AÇIK"; } private void comboBox1_SelectedIndexChanged_1(object sender, EventArgs e) { } }
} Programın çalışabilmesi için Bilgisayarınızda Framework yüklü olması gerekmektedir. Tüm Dosyaları İndirmek İçin Tıklayın (File>Download) (Exe dosyası ArduinoSerial\ArduinoSerial\bin\Debug klasörünün içinde.) Bu da C# arayüz oluşturma videomuz ve çalıştırma videomuz ;
Merhabalar... Bu yazımda hareket algıladığında dijital çıkış veren PIR Sensörü uygulaması yapacağız. Amacımız hareket algılandığında çıkış olarak led yakılması. Fritzing devre şeması için kusura bakmayın, herşeyler var bi'tek PIR yok.
PIR SENSÖRÜ NEDİR ? Orjinal ismi Passive InfraRed Sensor yani Pasif Kızılötesi Sensör olan bu ekipman objelerden yayılan kızılaltı (IR) ışın değişimini tespit etmek için bir Fresnel lens ve IR’ye duyarlı sensör yardımıyla, 6 metreye kadar mesafedeki hareketleri algılayabilir; ucuzdur, kullanımı kolaydır; alarm sistemleri, hareketle aktif olan ışıklar gibi uygulamalar için idealdir.
Sensörün başlığını açarsak üzerinde bulunan 3 bacağın ne ile alakalı bacaklar olduğunu görebiliriz. Üstten baktığımızda en soldaki pin TOPRAK, en sağdaki pin +VCC, ortadaki pin de DATA çıkışıdır.Hareket varken DATA çıkışı '1', yokken '0' olmaktadır.
PIR sensörleri bir mikrodenetleyiciye bağlı olmadan kendi başlarına çalışabilen elemanlardır. Bu sayede satın aldığımız PIR sensörünü önce kendimiz test edebiliriz. Sensörümüze verdiğimiz besleme ile DATA çıkışının ucuna bir LED bağlayarak çalışıp çalışmadığına bakabiliriz. Sensörün arkasında 2 adet trimer var ve bu test aşamasında trimerlerin değerlerini küçük bir tornavida ile değiştirerek istenilen hassasiyete ve DATA çıkışının istenilen zaman kadar '1' olmasını sağlayabiliriz. Uygulamamızın kodlarına bakacak olursak...
int pirPin = 3; // PIR pin int ledPin = 4; // LED pin int deger = 0;
void setup() { pinMode(pirPin, INPUT); // PIR Pin'i giriş yapılıyor pinMode(ledPin, OUTPUT); // LED Pin'i çıkış yapılıyor Serial.begin(9600); //Serial Porttan veri göndermek için baundrate ayarlanıyor. }
void loop(){ deger = digitalRead(pirPin); // Dijital pin okunuyor Serial.println(deger); // Okunan değer seri porttan okunuyor. if (deger == HIGH) { digitalWrite(ledPin, HIGH); } else{ digitalWrite(ledPin,LOW); // Eğer okunan değer 0 ise LED söndürülüyor. }
} Programımızı bu şekilde bırakırsak trimerlerin ayarlarına bağlı olarak çalışır sensörümüz. Bu haliyle bırakırsak Arduino kullanmamızın bir mantığı olmaz. O yüzden sizler "digitalWrite (ledPin,HIGH)" olan kısmın altına "delay(istenilen zaman)" kodunu ekleyerek hareket algılandıktan sonra ledin 1 olma süresini kendiniz ayarlayabilirsiniz. Bu da videomuz ;
Bu uygulamada yardımcı olan arkadaşım Aykut KELEŞ'e teşekkür ederim.
Kaynak olarak kullandığım ve daha detaylı bilgi edinmek isteyenler için bu sitelerin linkleri;