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.
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.
Ş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.
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.
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.
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.*/
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.
Ç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.
Ş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.