Arşiv

Posts Tagged ‘Karanlık’

Arduino ile Karanlıkta Yanan Led (Parlaklık Ayarlı)

Bir önceki karanlıkta yanan led uygulamasında LDR voltajı digitalRead() ile okunarak digitalWrite() ile led devresine 5V verilmiştir. Bu uygulamada ise karanlığa oranla led parlaklığı arttırılacaktır.

Arduino pinleri çıkış olarak ayarlandığında 0 veya 5V vermektedir. Ara değerleri çıkış olarak verebilmek için analog sinyal üretilmesi gerekir. Analog çıkışı Arduino’nun PWM (Pulse Width Modulation) sahip pinleri (yanında ~ işareti olan pinler) verebilmektedir. Arduino Uno’da 3,5,6,9,10 ve 11. pinler PWM çıkışına sahiptir. Bu pinlerle analog sinyal üretilip motor hız kontrolü, LED parlaklığı ayarlanabilmektedir.

Bu pinler; analogWrite(pin, deger) fonksiyonu ile 0-5V arası çıkış gerilimi verebilir. deger parametresi 0-255 arası int türündendir. 0-> 0V, 255->5V için kullanılır. Ara değer vermek içinse oranlama yapılır.

Devrede 330 ohm’luk led direnci ve 10K’lık potansiyemetre (direnç yerine) kullanılmış olup devre tasarımımız şöyledir:

Dijital 9.pin (PWM var) lede +0..5V arası voltaj vermek için kullanılmaktadır. Karanlıkta LDR direnci artar dolayısıyla üzerine düşen voltaj da artar. Analog 1.pin LDR’ye düşen voltajı okur ve 0-1023 arası değere dönüştürür. Eşik değer 300 belirlenmiştir. Eşik değer aşıldığında (karanlık arttığında) analogWrite(9, gonderilecekDeger) ile karanlığa oranla 0-5V arası voltaj dijital 9.pin ile lede gönderililir. Aksi durumda led söndürülür. Oranlama gelen değerin 1023’e bölünüp 255 ile çarpılmasıyla yapılmıştır.

Kaynak kod şöyledir:

int gelenDeger;
int gonderilecekDeger;

void setup()
{
  pinMode(9, OUTPUT); //PWM pini 
  pinMode(A1, INPUT); //LDR'ye düşen voltaj  

  Serial.begin(9600);
}

void loop()
{
  gelenDeger = analogRead(A1); //0-1023 arası değer dönecek
  gonderilecekDeger = (gelenDeger/1023.0)*255; //PWM değeri
  
  if (gelenDeger >=300) //LDR eşik değeri
  {
    analogWrite(9, gonderilecekDeger); 
  } else
  {
    analogWrite(9, 0); //OV
  }

  Serial.print(gelenDeger);
  Serial.print("-");
  Serial.println(gonderilecekDeger);
  
  delay(750);
}

Seri monitör çıktıları aşağıdaki gibi olup solda LDR’den okunan analog değer, sağda ise lede gönderilen analog değer vardır.

Ledin ne kadar karanlıkta yanacağı analog pinin potansiyemetrenin orta ayağına çekilmesi ile ya da pot’un direncinin arttırılmasıyla da ayarlanabilir.

Kaynakça
https://www.arduino.cc/reference/en/language/functions/analog-io/analogwrite/
https://www.arduino.cc/en/Tutorial/PWM
https://gelecegiyazanlar.turkcell.com.tr/konu/arduino/egitim/arduino-301/arduinoda-analog-sinyal-uretme

 

Kategoriler:Robotik Etiketler:, , , , , , , ,

Arduino ile Karanlıkta Yanan Led

04/12/2017 2 yorum

Uygulamada digitalRead() ve analogRead() fonksiyonlarının kullanılması amaçlanmıştır.

digitalRead(), dijital pine gelen voltaj değerini okur. 0 (LOW) veya 1 (HIGH) değerini döndürür. digitalRead(), 0 ve 5 volt arasındaki gerilimlerin tam değerini ölçemez. 2,5V eşik değeri olup üzerinde ise 1 (HIGH) altında ise 0 (LOW) değerini döndürür.

0-5V arası değerlerin okunabilmesi için analogRead() fonksiyonu kullanılır. analogRead(), analog pinlerden gelen voltaj değerlerini okur ve 0-1023 arası bir değer döndürür (Analog to Digital Converter-ADC). Okunan değerin gerçek voltaj değerine dönüştürülmesi gerekir.

Devrede 330 ohm’luk led direnci ve 10K’lık potansiyetmetre kullanılmış olup devre tasarımı şöyledir:

Dijital 9.pin lede +5V vermek için kullanılmaktadır. Dijital 7. pine gelen voltaj LDR’ye düşen voltajdır. LDR üzerine ışık düştüğünde LDR’nin direnci düşer; dolayısıyla voltajı da düşer. Karanlıkta ise direnci artar dolayısıyla voltajı da artar. Dijital 7. pine gelen voltaj 2,5V eşik değerini aştığında digitalRead() fonksiyonu 1 değerini döndürür. Bu şarta bağlı olarak dijital 9.pine HIGH değeri vererek ledi yakarız. Aksi durumda ledi söndürürüz.

Uygulamada aynı zamanda analogRead() fonksiyonu da kullanılmıştır. Dijital 7.pin ve analog 1.pin LDR’ye düşen voltajı okur. Analog pinler ADC ile gelen voltajı 0-1023 arası değere dönüştürür. LDR’ye kaç volt düştüğünü görmemiz için gelen değeri 1024’e bölüp 5V ile çarpmak gerekir. Seri monitörden analog pine gelen değerleri ve voltajı öğrenebiliriz.

Kaynak kod şöyledir:


int gelenDeger;
float voltaj;

void setup() {
  pinMode(7,INPUT); //digitalRead pini
  pinMode(9,OUTPUT); //Lede +5v pini
  pinMode(1,INPUT); //analogRead pini
  
  Serial.begin(9600); //seri iletişimi başlat
}

void loop() {
  
  gelenDeger = analogRead(1); //A1 pini okuyor
  voltaj= ((float)gelenDeger/1024)*5; //gelen değer dönüştürülüyor
    
  if (digitalRead(7)==1) //LDR voltajı artınca 
  {
    digitalWrite(9,HIGH);  //Ledi yak
  }else
  {
    digitalWrite(9,LOW);  //LDR voltajı düşükse yakma
  }

  //gelen değeri volta çevirerek seri monitör ekranına yaz
  Serial.print(gelenDeger);
  Serial.print("-");
  Serial.print(voltaj);
  Serial.println("V");

  delay(750);
}

Seri monitör çıktıları şöyledir:

Ledin ne kadar karanlıkta yanacağı potansiyemetrenin 3.pini yerine orta pini kullanılarak ayarlanabilir. Pot’un direnci ne kadar yüksekse led daha fazla karanlık olunca yanacaktır. Çünkü LDR’ye kalan voltaj miktarı düşecektir.

Ayrıca ledin parlaklığını karanlığa bağlı olarak ayarlamak için de analogWrite() fonksiyonu kullanılabilir.

Kaynakça
https://www.arduino.cc/reference/en/language/functions/digital-io/digitalread/
https://www.arduino.cc/reference/en/language/functions/analog-io/analogread/
https://gelecegiyazanlar.turkcell.com.tr/konu/arduino/egitim/arduino-101/temel-arduino-fonksiyonlari
https://www.arduino.cc/en/Tutorial/ReadAnalogVoltage

Kategoriler:Robotik Etiketler:, , , , , , ,