Arduino İle TrigonoMETRE
Your ads will be inserted here by
Easy Plugin for AdSense.
Please go to the plugin admin page to
Paste your ad code OR
Suppress this ad slot.
Öğrencilerimizin matematik dersine ilgilerini artırmak ve konuyu kavramalarına katkı sağlamak amacıyla hazırlanan bu materyal, trigonometrik fonksiyonların birim çember üzerinde hareket eden kadran ile eş zamanlı gösterimini sağlamaktadır. Bu şekilde sinüs, kosinüs, tanjant ve kotanjant değerlerinin birbirleri arasında ki ilişkinin gözlemlenmesi amaçlanmaktadır.
Proje videosu
Kullanılan Malzemeler:
Arduino UNO
LCD 4×20
180 veya 360 derecelik Servo motor
10K çok turlu potansiyometre
Dakota panel
9V pil ve Soket
Projenin Yapılışı:
İlk olarak Arduino ile LCD bağlantıları yapılır ve (adetim olduğu üzere) LCD bağlantılarının test edilmesi amacıyla Arduino UNO ile ekrana yazı yazdırılır. Bunun için basit bir kod yazılarak kontrol işlemi yapılmalıdır. Aksi takdirde devrenin karmaşıklaşması ile doğabilecek hataları bulmak çok zor olacaktır.
Aşağıda Arduino UNO ile LCD bağlantıları görülmektedir
Tüm Arduino dersleri için tıklayın…
Aşama aşama gidersek LCD bağlantıları ve testinden sonra Servo motor bağlantılarına geçilebilir. Sevo motor, bilindiği üzere açısal hareket edebilen istenilen açı değerine giderek orada sabit durdurulabilen özel üretim motorlardır. Servo motorlarda genel olarak 3 adet pin bulunmaktadır. Bu pinlerden 1- +Vcc, 2- Gnd, 3- Sinyal ucudur. +5Volt ile çalışmaktadır. Vcc pini Arduino UNO üzerinde bulunan Vcc girişine,Gnd pini Arduino UNO üzerinde bulunan Gnd girişine, Sinyal pini ise Arduino UNO üzerinde bulunan (PWM çıkış özelliği olan) dijital pinlerden 3. pine bağlanır. (Arduino ile LCD kullanımı yazısı için tıklayın…)
Daha sonra ise açı değerini ayarlamak için kullanılan Potansiyometrenin bağlantısına geçilir. potansiyometre 10k kullanılmıştır. Pot 3 uçlu ayarlanabilen dirençtir. iki ucu sabit enerji girişi olarak kullanılacaktır. 1. pin Arduino üzerinde bulunan Vcc girişine, 3. pin yine Arduino üzerinde bulunan Gnd pinine, ortada kalan uç ise Arduino UNO üzerinde bulunan analog girişlerden A0 pinine bağlantısı yapılır. Bu şekilde devre bağlantıları tamamlanmış olur.
Arduino ile servo motor yazısını okumak için tıklayın…
Your ads will be inserted here by
Easy Plugin for AdSense.
Please go to the plugin admin page to
Paste your ad code OR
Suppress this ad slot.
Arduino ile analog okuma nasıl yapılır ve analogRead() komutu kullanımı için tıklayın…
Devre şemasının tamamı aşağıdaki gibidir
Projenin programı aşağıda verilmiştir.
#include <Servo.h>
#include <LiquidCrystal.h>
LiquidCrystal lcd(13, 12, 11, 10, 9, 8);
////////////////////////////////////////////////
float sin_hesap,cos_hesap,tan_hesap,cot_hesap;
float radyan_deger;
float aci_degeri=0;
int aci_ekran=0;
float aci_servo=0;
///////////////////////////////////////////////
Servo myservo;
///////////////////////////////////////////////
void setup() {
myservo.attach(3);
lcd.begin(20,4);
lcd.clear();
lcd.setCursor(4,0);
lcd.print(“Trigonometre”);
lcd.setCursor(2,1);
lcd.print(“www.dudigan.com”);
for(int a=8;a<174;a++){
myservo.write(a);
delay(100);
}
for(int a=173;a>8;a–){
myservo.write(a);
delay(100);
}
delay(300);
}
///////////////////////////////////////////////
void loop() {
//////////////////////
aci_degeri = map(analogRead(0),0,1023,0,360);
//////////////////////
if(aci_degeri<181){
aci_servo = aci_degeri;
myservo.write(aci_servo);
}
///////////////////////////////////
radyan_deger = (float)aci_degeri/57,2957;
///////////////////////////////////
sin_hesap = sin(radyan_deger);
cos_hesap = cos(radyan_deger);
tan_hesap = tan(radyan_deger);
cot_hesap = 1/tan_hesap;
///////////////////////////////////
if(aci_degeri==0){sin_hesap = 0;tan_hesap = 0;}
else if(aci_degeri==90){cos_hesap = 0;cot_hesap = 0;}
else if(aci_degeri==180){sin_hesap = 0;tan_hesap = 0;}
else if(aci_degeri==270){cos_hesap = 0;cot_hesap = 0;}
else if(aci_degeri==360){sin_hesap = 0;tan_hesap = 0;}
///////////////////////////////////
lcd.clear();
lcd.setCursor(1,1);
lcd.print(“–ACI–“);
lcd.setCursor(3,2);
aci_ekran = (int)aci_degeri;
lcd.print(aci_ekran);
lcd.setCursor(9,0);
lcd.print(“sin: “);lcd.setCursor(13,0);lcd.print(sin_hesap);
lcd.setCursor(9,1);
lcd.print(“cos: “);lcd.setCursor(13,1);lcd.print(cos_hesap);
lcd.setCursor(9,2);
lcd.print(“tan: “);lcd.setCursor(13,2);if(aci_degeri==90)lcd.print(“sonsuz”); else if(aci_degeri==270)lcd.print(“sonsuz”); else lcd.print(tan_hesap);
lcd.setCursor(9,3);
lcd.print(“cot:”);lcd.setCursor(13,3);if(aci_degeri==0)lcd.print(“sonsuz”); else if(aci_degeri==180)lcd.print(“sonsuz”);else if(aci_degeri==360)lcd.print(“sonsuz”);else lcd.print(cot_hesap);
delay(300);
}
*************************************************************************************************************
Proje İle İlgili Görseller
M. Yalçın ASLAN
Elektronik/Bilgisayar Öğretmeni
Hocam iyi günler devredeki mavi elemanın ne olduğunu bulamadım yardımcı olurmusunuz
Merhabalar, Trimpot.. potansiyometre de kullanabilirsiniz.
Hocam iyi günler kodu Arduino programına yapıştırdıgimda hata veriyor hatayı düzelttim Arduino ya yükledim ancak LCD ye görüntü vermiyor nedeni ne olabilir
KODDA SIKINTI VARMI
merhabalar… test etmeden yayinlamiyoruz kodlari.
hocam merhabalar
lcd.print(“cot:“);lcd.setCursor(13,3);if(aci_degeri==0)lcd.print(“sonsuz”); bu kısımda hata veriyor.
hata bu;
**exit status 1
stray ‘\342’ in program
Merhabalar aynı projeyi yaptım . Ama benim servo aşırı hızlı dönüyor . Aynı kodları yükledim bende
delay komutu ile eklenen sureyi biraz daha artirabilirsiniz
merhaba dereceyi 8 ile 174 arasında aldık. 0 ile 359 arasında olması gerekmiyor mu ?