29 Mayıs 2017 Pazartesi

Arduino'da Akım Sensörü

 ACS712 Akım Sensörü -30 / +30A



30 Ampere kadar ölçüm yapabilen güzel bir sensör. Akım ölçmek istediğinizde size çok rahat bir kullanım sunan pratik bir de yapısı var. Tek kusuru manyetik alandan fazlaca etkilenmesi. Montaj yaparken role gurubuna veya elektromanyetik alanla çalışan herhangi bir cihaza yakın bir montaj yapmayın. Göstergenizde çok fazla sapma görürsünüz. Tersinden yaklaşacak olursak eğer montaj yaptınız ve değerlerde fazlaca sapma varsa sensörü manyetik alanın içine koymuş olma ihtimaliniz yüksek. Aşağıda vermiş olduğum kod bloğunu arduino mega da deneyip  uyguladım. Hatta sekiz tanesini birden denedim. Gayet güzel sonuç aldım. Devrenizde uygulamak isterseniz içiniz rahat bir şekilde kodları kullanabilirsiniz. Devreye bağlantısı ise kolay. Out kısmını analog okuma bacağına yaparak beslemelerini veriniz. Daha sonra klemensi akımını ölçeceğiniz cihaza seri bir şekilde bağlayınız. Kolay gelsin.

#define akim1 2//istediğiniz analog giriş bacağının adresini verebilirsiniz.

int mVperAmp = 66;
int value= 0;
int ofset = 2500;
double voltaj = 0;
double Amps = 0;

  void akim(){
   
    value = analogRead(akim1);
 voltaj = (value / 1024.0) * 5000; // Gets you mV
 Amps = ((voltaj - ofset) / mVperAmp);
       Serial.print("Akım: ");
       Serial.println(Amps);
    }
  
void setup() {
 Serial.begin(9600);
}

void loop() {
 akim();
 delay(500);


}
Devamını Oku

19 Ocak 2017 Perşembe

Robot Yapmak için Bilinmesi Gerekenler




Robot yapmak eskisine nazaran günümüzde çok daha kolaylaşmış bunun sonucunda birçok insan hobi olarak robot yapımına başlamıştır. Bu konuda ilk adımı atanlar için için nasıl bir yol izleyeceğinizi size anlatmaya çalışacağım. Bir hevesle başlayıp birkaç sorunla karşılaştıktan sonra hemen vazgeçecekseniz bir durup düşünün derim. Çünkü bu işler dışardan gözüktüğü gibi her aşaması tıkır tıkır gitmez. Yaparsınız olmaz. Hem de herkesin yaptığı gibi yapıyorum ama olmuyor dersiniz. Fıtık olmak cümlesi bünyenizde vücut bulur. Okuduğunuz makalelerde halbuki insanlar hiçbir sorun olmadan yapmışlardır. Arada ufacık öyle bir şeyi kaçırırsınız ki tek başınıza bulmanız birkaç gününüzü alabilir. Şevkini kırmak için yazmadım bunları tam aksine ne ile karşılaşacağınız birlin ki zırhlarınızı kuşanın sonra yolda yaralanıp düşmeyesiniz. Basit düzeylerde bile robot yapacak olsanız bu sorunları bir dönem illaki yaşarsınız. Bu işlemlere başladıktan birkaç uygulama içeresinde “Aynısını yaptım olmuyoooo” cümlesini muhakkak kuracaksınız. Hazırlıklı olun. Gelelim işin bilgi kısmına. Elektronik, programlama bilgileriniz başlangıç için olması gerekir. Biraz ilerleyip somut projeler ortaya koyduktan sonra mekanik kısma geçebilirsiniz. Peki, elektronik gibi bir deryadan nereden başlayacağız.

1.Temel elektronik elemanları muhakkak bilmeniz gerekir. Direnç ve çeşitleri, LED, diyot, transistorlar röleler.
2.Motor çeşitleri. DC motor çeşitlerini ağırlıkla ayrıntılı olarak nasıl çalıştığını bilmeniz gerekir. Aç ye sonra bakabilirsiniz.
3.Temel olarak devreleri deneyebileceğiniz bir deney tahtası da azım size breadbord nedir nasıl kullanılır.
4.Güç kaynakları konusunu üstün körü bakın gerilim nasıl küçültülür nasıl sabitlenir temel devrelerine göz atın hatta not alın muhakkak işinize yarayacak.

Elektronik kısımda bunları öğrendik peki şimdi programlamada yeniysek ne yapacağız.

1.Algoritma öğreneceğiz. Temel olarak Google de birçok örnek var çözümleri yapılıp pratikleşmeli.
2.Daha sonra herhangi bir programlama dili öğrenmeye başlamalı. Ama bunu nasıl seçeceği. Basic mi C mi Java mı?C birçok mikrodenetleyici tarafından desteklenen bir dildir. İhtiyaçlarını fazlasıyla karşılar. Bu dilden başlayabilirsiniz.

                Dilde öğrendik eee şimdi nasıl başlayacağız. Bu öğrendiğimizi maddeleri birleştirerek tek bir projeye dökecek ya da birleştirecek olan elemanı seçmeye kaldı iş. Robotların beyni olacak programlama kısmını yükleyerek robotu yöneteceğimiz parçayı seçmeye geldi sıra. Daha önce bunu üzerine bir yazı yazmıştım Pic mi Arduino mu? Bu yazımı okuyarak bu konuda fikir edinebilirsiniz.

                Eğer mikrodenetleyici kısmına karar verdiyseniz ilk hangi proje ile başlayacağınız önemli. Yavaş yavaş ısına ısına başlamak çok önemli. Gözünüz korkmasın ilk uygulamada.
  1.  Bir ledi yakıp söndürün.
  2. LED’in parlaklık kontrolünü yapın.
  3. Bir motoru çalıştırıp durdurun ve motor hız kontrolünü gerçekleştirin.
  4.  Bir rc servo motor ile konum kontrolünügerçekleştirin.
  5. Bir LCD ekrana yazı yazın.

Şimdilik benden bu kadar eğer söylediklerimi yaptıysanız ve başarılı olduysanız artık kendinize özgü projeler yapabilirsiniz. Ama öğrenme aşamasındakiler özgünlüğe çok takılmasa da olur başlangıç için yapılmış olanla devam edip daha sonra uzmanlaştıkça özgünlüğe geçebilirsiniz. Hadi hepinize kolay gelsin.
Devamını Oku

12 Ocak 2017 Perşembe

Arduino Joystick ile Servo Motor Kontrolü


                Piyasada bulunan joystick shield ile bunu projemiz çok kolay bir şekilde gerçekleştireceğiz.Ama isterseniz potansiyometreler ile siz bu  parçanın bir benzerini oluşturabilirsiniz.Sonuçta bu shieldin içerisinde x ve y eksenleri için için kullanılan iki tane pot var.Bunlar düzgün bir şekilde monte edilerek hazır bir şekilde bizlere sunulmuş.Ben kendim yapmak istiyorum diyorsanız potansiyometre ya da trimpotu kullanarak buna benzer ürünler oluşturabilirsiniz.Piyasada bu shieldin 10 TL gibi bir fiyatta olduğunu düşünürsek uğraşmaya değeceğini düşünmüyorum.Eksen kontrol kısmında ise iki tane servo motor kullanarak birini x dirğerini y ekseninde hareket etmesini sağlayacak şekilde pantiltler kullanabiliriz.Ya da siz sac veya tahtalar ile pantilt yapabilirsiniz.Yapmış olduğumuz proje daha önce servo motor kontrolü kısmında bahsetttiğimiz konuların üzerine inşa edilmiştir.Eğer yeni başlıyor ve meseleyi anlamaya çalışıyorsanız önce o konuya bakmanızı tavsiye ederim. Ayrıca buton kısmını kullanmadım isterseniz buton kısmında arduinonun bir dijital bacağına bağlayarak işlev ekleyebilirsiniz.

Joystick:


Josytick


Pan tilt:
 
Pan tilt



Devre Şeması:
Devre Şeması





Devre Programı:
#include <Servo.h>//Servo kütüphanesini kullanacağımız belirtiyor ve kütüphaneyi çağırıyoruz.
Servo xekseni;  // x ekseni için bir servo objesi oluşturuyoruz.
Servo yekseni; // y ekseni için bir servo objesi oluşturuyoruz.
int xeksenipin = 1;  // joystickin x ekseninin  bağlanacağı bacağı tutan değişkeni belirliyoruz.
int yeksenipin = 0;  //joystickin x ekseninin  bağlanacağı bacağı tutan değişkeni belirliyoruz.

int valx;    // servo motora bilgi gönderecek değişkeni tanımlıyoruz.
int valy; // servo motora bilgi gönderecek değişkeni tanımlıyoruz.
void setup() {
  xekseni.attach(5);  /* x ekseni servosunu 5 nolupine bağladık*/
    xekseni.attach(6);  /* y ekseni servosunu 6 nolupine bağladık*/

}
void loop() {
  valx = analogRead(xeksenipin);           /* potansiyometredeki değeri okuyoruz.(0-1023) arası değer gelecek*/
  valx = map(valx, 0, 1023, 0, 180);     // 0-1023 arası okuduğumuz değeri 0-180arası skala ediyoruz.
  xekseni.write(valx);   /*Skala ettiğimiz değeri servo motora gönderiyoruz.ve pozisyona gitmesini sağlıyoruz.*/

  valy = analogRead(yeksenipin);           /* potansiyometredeki değeri okuyoruz.(0-1023) arası değer gelecek*/
  valy = map(valy, 0, 1023, 0, 180);     // 0-1023 arası okuduğumuz değeri 0-180arası skala ediyoruz.
  yekseni.write(valy);   /*Skala ettiğimiz değeri servo motora gönderiyoruz.ve pozisyona gitmesini sağlıyoruz.*/
 
  delay(15);  // sevonun pozisyona gitmesi için belirli bir süre bekletiyoruz.

}
Devamını Oku

11 Ocak 2017 Çarşamba

Işık Seviye Ölçümü


Arduino ile daha önce sensör kullanımı ve bir çok proje yaptık.Şimdi ışık seviyesi ölçümü projemizde yine birlikteyiz.Önceki yapmış olduğumuz projelerden kod olarak pek fazla bir farkı olmayacak.Çeşitli elektronik dokunuşlarla ışık seviyesini ölçeceğiz ve istediğimiz göstergeler ile kullanıcıya yansıtacağız.Ben burada daha net anlaşılabilmesi için 16x2 LCD ekran kullanacağım sizler isteğinize göre led seviye göstergesi yada oled ekran vs. yapabileceğiniz herhangibir gösterge cihazı ile projenizi tamamlayabilirsiniz.Işık ölçme işlemini bu alanda kullanımmı en kolay olan LDR ile yapacağım.LDR nedir önce onu biraz anlatalım.LDR ışık ile ters orantılı olarak direnç değeri değişen devre elemanıdır.Işık şiddeti arttıkça direnç değeri azalan ışık şiddeti azaldıkça direnç değeri azalan bir elemandır.Biz buradan hareket ederek ortamdaki ışık oranını görüntüleyeceğiz.Öncelikle devremize kuralım.

Arduino İle Işık Seviye Kontrol Devresi


 Devrenin Programı: 

#include <LiquidCrystal.h>
// LiquidCrystal(rs, enable, d4, d5, d6, d7) ilk komutu kullanarak pin bağlantılarını belirliyoruz.
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
  int analogdeger;
void setup() {
  lcd.begin(16, 2); /* Kullandigimiz LCDnin sutun ve satir sayisini belirtmeliyiz */
  lcd.clear();
 }
void loop() {
  analogdeger=analogRead(A0);//Ao dan okuduğumuz LM35 değeri
   lcd.setCursor(3, 0); /* Imlecin yeri 0. satir 3. sutun olarak ayarlandi */
  lcd.print("Isik siddeti:"); /* Ekrana yazi yazalim */
  lcd.setCursor(5, 1); /*Imlecin yeri 1. satir 5. sutun olarak ayarlandi */
  lcd.print(analogdeger);/*analog olarak okuduğumuz değeri 2. satıra yazdırıyoruz.siz burada oran orantı kurarak % cinsinden değer de yazdırabilirsiniz.*/

}
Devamını Oku

3 Ocak 2017 Salı

Arduino ile Ledli Seviye Kontrol



Bu projemizde analog değerden okuduğumuz herhanbir değeri ledler ile seviye kontrol yaparak kullanıcıya bildireceğiz.Ben potansiyometre kullandım ama siz analog okuyabileceğiniz çeşitli sensörleri kullanabilirsiniz. Program gayet basit ana bloğunun çoğu if komutundan oluşuyor.Eğer if’i anladıysanız bu program için gerisi kolay.Hadi biraz da program üzerinden bakalım.

int yes1=7;//ledleri bağlayacağımız pinleri tanımlayıp isim veriyoruz.
int yes2=8;
int sari1=9;
int sari2=10;
int kir1=12;
int kir2=13;
int analog;//analog okuduğumuz değer için bir değişken tanımlıyoruz.

void setup() {
Serial.begin(9600);//seri haberleşme için başlangıç komutunu veriyoruz.
pinMode (yes1,OUTPUT);//Led pinlerini çıkış olarak tanımlıyoruz.
pinMode (yes2,OUTPUT);
pinMode (sari1,OUTPUT);
pinMode (sari2,OUTPUT);
pinMode (kir1,OUTPUT);
pinMode (kir2,OUTPUT);
}

void loop() {
analog=analogRead (A0);//A0 bağladığımız potansiyometrenin değerini okuyoruz.
delay(50);//İsteğe göre bekleme süresi istenirse hiç konulmayabilir.
if (analog==0)//eğer okunan değer 0 ise ledlerin hepsi sönsün.
 {
  digitalWrite (yes1,LOW);
  digitalWrite (yes2,LOW);

  digitalWrite (sari1,LOW);
  digitalWrite (sari2,LOW);

  digitalWrite (kir1,LOW);
  digitalWrite (kir2,LOW);
 }

if (0<analog && analog<=170)/*belirli aralıklarla sınama yapıp hangi ledin yanacağını belirliyoruz.*/
 {
  digitalWrite (yes1,HIGH);
  digitalWrite (yes2,LOW);
 
  digitalWrite (sari1,LOW);
  digitalWrite (sari2,LOW);
 
  digitalWrite (kir1,LOW);
  digitalWrite (kir2,LOW);
 }

if (171<=analog && analog<=340) /*belirli aralıklarla sınama yapıp hangi ledin yanacağını belirliyoruz.*/
 {
  digitalWrite (yes1,HIGH);
  digitalWrite (yes2,HIGH);
 
  digitalWrite (sari1,LOW);
  digitalWrite (sari2,LOW);
 
  digitalWrite (kir1,LOW);
  digitalWrite (kir2,LOW);
  }

if (341<=analog && analog<=510) /*belirli aralıklarla sınama yapıp hangi ledin yanacağını belirliyoruz.*/
 {
  digitalWrite (yes1,HIGH);
  digitalWrite (yes2,HIGH);
 
  digitalWrite (sari1,HIGH);
  digitalWrite (sari2,LOW);
 
  digitalWrite (kir1,LOW);
  digitalWrite (kir2,LOW);
 }

if (511<=analog && analog<=680)/*belirli aralıklarla sınama yapıp hangi ledin yanacağını belirliyoruz.*/
 {
    digitalWrite (yes1,HIGH);
  digitalWrite (yes2,HIGH);
 
  digitalWrite (sari1,HIGH);
  digitalWrite (sari2,HIGH);
 
  digitalWrite (kir1,LOW);
  digitalWrite (kir2,LOW);
 }


if (681<=analog && analog<=950) /*belirli aralıklarla sınama yapıp hangi ledin yanacağını belirliyoruz.*/
 {
   digitalWrite (yes1,HIGH);
  digitalWrite (yes2,HIGH);
 
  digitalWrite (sari1,HIGH);
  digitalWrite (sari2,HIGH);
 
  digitalWrite (kir1,HIGH);
  digitalWrite (kir2,LOW);
 }

if (951<=analog && analog<=1023) /*belirli aralıklarla sınama yapıp hangi ledin yanacağını belirliyoruz.*/
 {
   digitalWrite (yes1,HIGH);
  digitalWrite (yes2,HIGH);
 
  digitalWrite (sari1,HIGH);
  digitalWrite (sari2,HIGH);
 
  digitalWrite (kir1,HIGH);
  digitalWrite (kir2,HIGH);
 }
Serial.println (analog);/*okuduğumuz değeri ekran görerek programın doğru çalıştığını görebiliriz.*/
}
İşte Devrenin Bağlantı Şeması:

Arduino ile Ledli Seviye Kontrol

Devrenin Çalışması:



Devamını Oku

29 Aralık 2016 Perşembe

Arduino İle Servo Motor





Çeşitli torklarda ve boyutlarda pozisyon kontrolü yapabilen motorlardır. Hobiciler için arduino ile birlikte kullanıldığında pozisyon kontrolünü çok basit hale getirmiştir. Servo motor için yazdıkları kütüphane sayesinde 0-180 ° arasında istediğiniz dereceye motoru çevirip sabit tutabilirsiniz. Flex sensör ile robot kol veya el yapımıda bu aralar moda olmuşken servo motor kontrolünü öğrenmeden olmaz. Servo motorlar PWM(Pulse Width Modulation) sinyalinin duty cycle ını kontrol ederek pozisyon kontrolü yapılır.Pwm sinyali kare dalga gönderilerek güç kontrolü yapabiliyor 0-5 Varası  değerlerin çıktısını arduinodan alabiliyorduk. Servo motor içinde pwm sinyali kullanacağız ve güç saykılını ayarlayarak 0-180 ° arası kontrol yapabileceğiz.20 ms bir saykılda 1-2 ms lik güç saykılı ayarlaması yaparak bu işlemi yapacağız.1ms de 0° 2ms de 180° oacak şekilde orantılı olarak değişen bir grafik sergiler.Aşağıda gösterildiği gibi.




Bağlantı kısmı ies 3 bacaktan oluşan servo motorlarda kırmızı, sarı ve siyah bacakları sırasıyla +, data,- olarak bağlantılarını gerçekleştiriyoruz. Servo motorun nasıl çalıştığını anladıktan sonra artık programı yazıp devreyi kurması kalıyor.Programı arduinonun örnekler kısmından alıyoruz. Dosya/Örnekler/Servo/Knob örneğini açınız. Aşağıdaki program karşınıza çıkacak. Şimdi satır satır ne yaptığımızı anlayalım.


#include <Servo.h>//Servo kütüphanesini kullanacağımız belirtiyor ve kütüphaneyi çağırıyoruz.
Servo myservo;  // bir servo objesi oluşturuyoruz.
int potpin = 0;  // potansiyometrenin bağlanacağı bacaağı tutan değişkeni belirliyoruz.
int val;    // servo motora bilgi gönderecek değişkeni tanımlıyoruz.
void setup() {
  myservo.attach(9);  /* servo motorun data bacağını hangi pine bağlayacağımızı belirliyoruz.Pwm bacağı olmak zorunda buna dikkat ediniz yoksa pwm çıkışı alamazsınız ve servoyu kontrol edemezsiniz.*/
}
void loop() {
  val = analogRead(potpin);  // potansiyometredeki değeri okuyoruz.(0-1023) arası değer gelecek
  val = map(val, 0, 1023, 0, 180);     /*0-1023 arası okuduğumuz değeri 0-180arası skala ediyoruz.*/
  myservo.write(val);   /*Skala ettiğimiz değeri servo motora gönderiyoruz.ve pozisyona gitmesini sağlıyoruz.*/
  delay(15);  // sevonun pozisyona gitmesi için belirli bir süre bekletiyoruz.
}


Devre Şeması:





 İsterseniz İsisde de deneyebilirsiniz.

Devamını Oku

27 Aralık 2016 Salı

Arduino, LM35 ve LCD Ekran ile Sıcaklık Ölçümü



Şimdiki projemizde lm35 i kullanarak lcd ekrana sıcaklı değerini yazdıracağız.Daha önceki derslerimizde LCd ekrana yazı yazdırmayı öğrenmiştik o konuyu geçtiğimiz varsayıyorum.Eğer bakmadıysanız buradan bakabilirsiniz.Bizim için önemli olan LM35 sensorunden gelen analog değeri okuyarak sıcaklık ile orantılamak olacak.Bir sensorden veri okuyup yorumlayacaksanız öne sensorun katalog bilgilerini gözden geçirmeniz gerekecek. Lm35 in datasheetinden sensorun sıcaklık ile çıkışını şu şekilde vermişler.




Görüldüğü gibi 1500 mV ta 150°C olduğunu söylüyor.Buradan oran orantı kurarak işlem yapacağız.Bizim analogRead komutu ile okuduğunuz değer 0-5V arasını 0-1023 arası olarak okuyor.
1500 mV hangi değere denk geldiğini bulmalıyız ki derce ile analog okunan değer arasında bağıntı kuralım.

                 5000mV            1023
                 1500mV               x
                ______________
                x = (1500*1023) /5 000= 306,9

Yani 306,9 değeri olarak verilmiş ama biz bunu integer olarak okuyacağımız için 307 değeri alalım ve diyelim ki 307 değeri geldiğinde ortam 150°C ye gelmiş demektir.Şimdi bir orantı daha kurarak işlemi tamamlıyoruz.

                 150°C           307
                 Sıcaklık         analogRead
                ______________
    *            Sıcaklık = (150*analogRead) /307

İşte yıldızlı orantı ile artık sıcaklık değerimiz bulabiliriz.
Şimdi devreyi kurup programı yükleyip çalıştırması kaldı.Bu arada unutmadan LM35 in bacak bağlantılarına datasheetten bakmak gerekir ki pin bağlantısını doğru yapalım.




Program:
#include <LiquidCrystal.h>
// LiquidCrystal(rs, enable, d4, d5, d6, d7) ilk komutu kullanarak pin bağlantılarını belirliyoruz.
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
 float sicaklik;
  int analogdeger;
void setup() {
  lcd.begin(16, 2); /* Kullandigimiz LCDnin sutun ve satir sayisini belirtmeliyiz */
  lcd.clear();
 }
void loop() {

  analogdeger=analogRead(A0);//Ao dan okuduğumuz LM35 değeri
  sicaklik = (150*analogdeger)/306;//formülümüzü yazdık
 
  lcd.setCursor(3, 0); /* Imlecin yeri 1. satir 3. sutun olarak ayarlandi */
  lcd.print("Sicaklik:"); /* Ekrana yazi yazalim */
  lcd.setCursor(5, 1); /* Imlecin yeri 2. satir 5. sutun olarak ayarlandi */
  lcd.print(sicaklik);//sicaklik değeri yazdırıldı.
}


Devre Şeması:


İşlem gayet basit kolay gelsin.





Devamını Oku