Analog Giriş - Çıkış
analogRead()
Açıklama
0 ve 5 volt arasındaki gerilimin tam
değeri ölçer.
Sözdizimi
analogRead(pin)
Parametre
pin: 0 ile 5 volt arasında okunacak
pin numarası
Returns
int (0 to 1023)
|
analogWrite()
Açıklama
Analog değer üretmek için kullanılır.
Sözdizimi
analogWrite(pin, Değer)
Parametre
pin: Yazılacak pin numarası
Değer: 0 ile 255 arasında duty cycle
Returns
Null
|
map (değer, fromLow, fromHigh, toLow,
toHigh)
Değer = çevrilen değer.
Bu fonksiyon fromLow ve fromHigh
arasındaki değerleri, lineer olarak toLow ve toHigh arasına çevirir. Sonucu
ileride kullanmak için mutlaka bir değişkene aktarılmalıdır.
Servo motoru için bir örnek
PotDeger = map(PotDeger, 0,
1023, 0, 179);
|
Bu uygulamayı yapmak için ihtiyacınız olan
malzemeler:
·
1 x Arduino
·
1 x 10kΩ Potansiyometre
·
1 x Breadboard
void setup() {
Serial.begin(9600); // dikat edilirse pinmode yok
}
void loop() {
int sensorDegeri =
analogRead(A0); /* Arduinonun A0
ayagindaki gerilim olculuyor */
Serial.println(sensorDegeri); /* okunan deger seri haberlesme ile yollaniyor */
delay(1000); /* daha dogru bir olcum icin biraz bekleme kullanilmalidir */
}
Float voltdegeri;
void setup() {
Serial.begin(9600); // dikat edilirse pinmode yok
}
void loop() {
int sensorDegeri =
analogRead(A0); /* Arduinonun A0
ayagindaki gerilim olculuyor */
Serial.println(sensorDegeri); /* olculen deger seri haberlesme ile yollaniyor */
Voltdegeri = (sensorDegeri*5) /
1023;
Serial.println(Voltdegeri);
delay(1000); /* daha dogru bir olcum icin biraz bekleme kullanilmalidir */
}
Örnek 2: Potansiyometreden gelen değer ile ledin
parlaklığını azaltma veya yükseltme.
Parçalar:
Parçalar:
- 1 kırmızı
LED
- 1
breadboard
- 1 10kΩ Potansiyometre
- 4 kablo
- 1 220Ω Direnç
- 1
Arduino UNO
const int led = 11;
const int anaPin = A0;
int anaValue = 0;
byte anaByte = 0;
void setup()
{
}
void loop()
{
anaValue = analogRead(anaPin);
anaByte = anaValue/4;
analogWrite(led, anaByte);
delay(50);
}
Uygulama: LM35 ile sıcaklık ölçümü
Bu uygulamada LM35
sıcaklık sensörü yardımıyla ortamın sıcaklığını ölçeceğiz. LM35 sensörünün
besleme (5 V), toprak ve çıkış olmak üzere üç adet pini bulunmaktadır. Çıkış
pinindeki değer ortamın sıcaklığına göre doğrusal olarak değişmektedir.
Bu uygulamayı yapmak için ihtiyacınız
olan malzemeler;
·
1 x Arduino
·
1 x LM35 (Sıcaklık Sensörü)
·
1 x Breadboard
Kablo bağlantılarınızı
şekildeki gibi yapınız. Sensörün resimde görüldüğü gibi yazılı kısmı size
bakacak şekilde tuttuğunuzda 1. pin 5 volt besleme, 2. pin çıkış pini ve 3. pin
toprak pinidir. Rated for Full −55°C to 150°C Range and Linear +
10-mV/°C Scale Factor.
float sicaklik;
void setup()
{
Serial.begin(9600); /* Haberleşme başlatıldı */
}
void loop()
{
sicaklik = analogRead(A0); /* A0daki gerilim ölçüldü */
sicaklik = sicaklik * 0.48828125;/* Ölçülen gerilim sıcaklığa çevrildi */ // 0.48828125 değeri LM35’in datasheetinden alındı.
Serial.print("SICAKLIK = ");
Serial.print(sicaklik);
Serial.println("C");
delay(500);
}
float sicaklik; //Analog değeri dönüştüreceğimiz
sıcaklık
float olculendeger; //Ölçeceğimiz analog değer
int sicaklikpin=1;
//Analog değer girişi
void setup () {
Serial.begin(9600); //Seri haberleşme,sıcaklığı ekrandan takip edeceğiz.
}
void loop () {
olculendeger =
analogRead(sicaklikpin); //A1'den değeri alacak
olculendeger =
(olculendeger/1023)*5000;//değeri mV'a dönüştürecek
sicaklik =
olculendeger /10,0; // mV'u sicakliğa dönüştürecek
Serial.print("Sicaklik : ");
Serial.print
(sicaklik);
Serial.println
(" derece");
delay (1000);
//1sn aralıklarla yapacak
}
Servo Motor
Servo motor 0 ila 180 derece
arasında 1 derece hassasiyetle dönebilen motor çeşididir. Tam tur atamaz.
Genellikle robot kol gibi tam tur dönmesine gerek olmayan, hassas açılı
yerlerde kullanılır. Servo motor içerisinde bir adet DC motor bulunur. DC
motorun ucuna bağlı dişli sisteminin yardımıyla servo mili daha fazla yük
kaldırabilmektedir. Bu işlem sırasında servonun dönüş hızı da yavaşlamış olur.
Kullanılan dişli sistemine göre servo motorların kaldırabileceği yük değişir.
Servo motorun üç adet bağlantı
kablosu bulunmaktadır. Bu kablolar genellikle kırmızı, turuncu (bazen sarı) ve
siyah (bazen kahverengi) olmaktadır. Bu renkler kabloların görevini
göstermektedir. Kırmızı renk besleme (genellikle 5 volt) bağlantısını, siyah
veya kahverengi renk de toprak bağlantısını göstermektedir. Geriye kalan
turuncu kablo ise motorun açısını belirleyecek olan veri bağlantısıdır. Motorun
dönüş açısının belirlenmesi için veri hattı üzerinden PWM adı verilen özel kare
dalga sinyalleri yollanmaktadır. PWM sinyali belirli bir süre 5 volt, belirli
bir süre 0 volt düzeyinde verilen gerilimdir. 5 volt düzeyinde geçen süreye
"görev zamanı", toplam süreye de "PWM periyodu" denir.
Servo motorun kontrolü için ayarlanmış özel görev zamanları ve PWM periyotları
vardır. Bu ayarlar dışındaki PWM sinyalleri servo motoru düzgün çalıştıramaz.
#include <Servo.h> /*
Servo kutuphanesi projeye dahil edildi */
Servo servoNesnesi; /* servo motor nesnesi yaratildi */
void setup()
{
servoNesnesi.attach(9); /* Servo motor 9 numarali pine baglandi */
}
void loop()
{
servoNesnesi.write(100); /* Motorun mili 100. dereceye donuyor */
delay(1000);
servoNesnesi.write(20); /* Motor mili 20. dereceye donuyor */
delay(1000);
}
map Fonksiyonu
map (değer, fromLow, fromHigh, toLow, toHigh)
Bu fonksiyon fromLow ve fromHigh arasındaki değerleri,
lineer olarak toLow ve toHigh arasına çevirir. Sonucu ileride kullanmak için
mutlaka bir değişkene aktarılmalıdır.
#include <Servo.h> /* Servo kutuphanesi projeye dahil edildi
*/
Servo servoMotor; /* servo motor nesnesi yaratildi */
int Potansiyometre = A0; /* Potansiyometre pini belirlendi*/
int PotDeger; /* Potansiyometre degeri icin degisken olusturuldu */
void setup()
{
servoMotor.attach(9); /* Servo motor 9 numarali pine baglandi */
}
void loop()
{
PotDeger =
analogRead(Potansiyometre); /* Potansiyometrenin cikis gerilimi olculuyor */
PotDeger = map(PotDeger, 0, 1023, 0, 179);
/*
Potansiyometreden olculen 0 ve 1023
arasindaki deger map fonksiyonu ile
Servo motorun calisma araligina
yani 0 ve 180 dereceye cevriliyor.
*/
servoMotor.write(PotDeger); /* Hesaplanan deger servo motora yollaniyor*/
delay(15); /* Motorun konumunu almasi icin bir sure bekleniyor */
}
Hiç yorum yok:
Yorum Gönder