Analog Giriş - Çıkış

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:
  • 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