arduino proje etiketine sahip kayıtlar gösteriliyor. Tüm kayıtları göster

Arduino Kontrollü Akıllı Masa Lambası: Ortam Işığına Göre Ayarlanabilir

Arduino Kontrollü Akıllı Masa Lambası: Ortam Işığına Göre Ayarlanabilir

Arduino Kontrollü Akıllı Masa Lambası: Ortam Işığına Göre Ayarlanabilir

Herkese merhaba Arduino severler! Bu yazımızda, etrafımızdaki ışık koşullarına göre parlaklığını otomatik olarak ayarlayan, akıllı bir masa lambası projesi geliştireceğiz. Bu proje hem Arduino'ya yeni başlayanlar için harika bir giriş olacak, hem de daha deneyimli kullanıcılar için keyifli bir uygulama örneği sunacak. Hazırsanız, malzemelere ve kodlamaya geçelim!

Neden Akıllı Masa Lambası?

Akıllı masa lambası, okuma, çalışma veya hobilerinizle uğraşırken gözlerinizi yormamak için ideal bir çözüm sunar. Ortamdaki ışık azaldığında lamba otomatik olarak parlaklığını artırır, ortam aydınlandığında ise parlaklığı kısar. Böylece, her zaman ideal bir aydınlatma seviyesine sahip olursunuz.

Gerekli Malzemeler

  • Arduino Uno (veya benzeri bir Arduino kartı)
  • LDR (Işık Bağımlı Direnç)
  • 10k Ohm Direnç
  • Potansiyometre (10k Ohm idealdir)
  • LED (Yüksek parlaklığa sahip)
  • 220 Ohm Direnç (LED için)
  • Breadboard
  • Jumper kablolar

Devre Şeması ve Bağlantılar

Devremizi kurarken aşağıdaki bağlantı şemasına dikkat edelim:

  • LDR:
    • LDR'nin bir bacağı -> Arduino 5V (Vcc) pinine
    • LDR'nin diğer bacağı -> 10k Ohm direncin bir bacağına
    • 10k Ohm direncin diğer bacağı -> GND'ye
    • LDR ve 10k Ohm direncin birleştiği noktadan -> Arduino A0 pinine
  • Potansiyometre:
    • Potansiyometrenin bir ucu -> Arduino 5V'a (VCC)
    • Potansiyometrenin diğer ucu -> GND'ye
    • Potansiyometrenin orta ucu (silgi) -> Arduino A1 pinine
  • LED:
    • LED'in uzun bacağı (anot) -> 220 Ohm direncin bir bacağına
    • 220 Ohm direncin diğer bacağı -> Arduino Dijital 9 pinine (PWM pini)
    • LED'in kısa bacağı (katot) -> GND'ye

Arduino Kodu

Şimdi de Arduino kodumuza göz atalım. Bu kod, LDR'den gelen ışık değerini okuyacak, bu değeri potansiyometre ile ayarlanan hassasiyete göre ölçeklendirecek ve LED'in parlaklığını buna göre ayarlayacak.


 const int ldrPin = A0;
 const int potPin = A1;
 const int ledPin = 9;

 void setup() {
  Serial.begin(9600);
  pinMode(ledPin, OUTPUT);
 }

 void loop() {
  // LDR'den ışık değerini oku
  int ldrValue = analogRead(ldrPin);

  // Potansiyometreden hassasiyet değerini oku
  int potValue = analogRead(potPin);

  // Hassasiyet değerini 0-1023'ten 1-100 arasına ölçeklendir
  int sensitivity = map(potValue, 0, 1023, 1, 100);

  // Işık değerini 0-255 arasına ölçeklendir ve hassasiyet ile çarp
  int ledBrightness = map(ldrValue, 0, 1023, 255, 0); // Ters çevrildi çünkü düşük ışıkta daha parlak istiyoruz
  ledBrightness = constrain(ledBrightness * sensitivity / 100, 0, 255); // Hassasiyet ayarı ve sınırlama

  // LED'in parlaklığını ayarla
  analogWrite(ledPin, ledBrightness);

  // Seri monitöre değerleri yazdır (isteğe bağlı)
  Serial.print("LDR: ");
  Serial.print(ldrValue);
  Serial.print(", Pot: ");
  Serial.print(potValue);
  Serial.print(", Brightness: ");
  Serial.println(ledBrightness);

  delay(50); // Daha kararlı okumalar için kısa bir gecikme
 }
 

Kodun Açıklaması

  • ldrPin, potPin, ledPin: LDR, potansiyometre ve LED'in bağlandığı pinleri tanımlar.
  • setup(): Seri iletişimi başlatır ve LED pinini çıkış olarak ayarlar.
  • loop(): Sürekli olarak çalışan ana döngüdür.
    • analogRead(): LDR ve potansiyometreden analog değerleri okur.
    • map(): Değerleri farklı aralıklara ölçeklendirir. LDR değeri ters çevrilir (255'ten 0'a) çünkü düşük ışıkta LED'in daha parlak olmasını isteriz.
    • constrain(): LED parlaklığının 0 ile 255 arasında kalmasını sağlar. Hassasiyet ayarı bu noktada yapılır.
    • analogWrite(): LED'in parlaklığını PWM sinyali ile ayarlar.
    • Serial.print(): Değerleri seri monitöre yazdırır (isteğe bağlı, hata ayıklama için yararlı).
    • delay(): Kısa bir gecikme ekler.

Proje Nasıl Çalışır?

LDR, üzerine düşen ışık miktarına göre direnci değişen bir sensördür. Ortamdaki ışık azaldığında direnci artar ve Arduino A0 pinine daha düşük bir voltaj gönderir. Arduino, bu voltajı okuyarak ortamın ne kadar karanlık olduğunu anlar. Potansiyometre ise, sistemin hassasiyetini ayarlamanıza olanak tanır. Potansiyometre ile, ortam ışığındaki küçük değişikliklere lamba ne kadar tepki versin, onu belirleyebilirsiniz. Arduino, LDR ve potansiyometreden gelen verileri işleyerek, LED'in parlaklığını otomatik olarak ayarlar.

İpuçları ve İyileştirmeler

  • Kalibrasyon: LDR'nin hassasiyeti ortam ışığına göre değişebilir. Kodu çalıştırmadan önce farklı ışık koşullarında LDR'nin değerlerini kontrol edin ve `map()` fonksiyonundaki aralıkları buna göre ayarlayın.
  • Hassasiyet Ayarı: Potansiyometre ile hassasiyet ayarını deneyerek, farklı ışık koşullarına en uygun ayarı bulun.
  • LED Seçimi: Daha parlak bir LED kullanarak, daha iyi bir aydınlatma sağlayabilirsiniz. Ancak, LED'in akım gereksinimlerini dikkate alarak uygun bir direnç kullanmayı unutmayın.
  • Kasa Tasarımı: Devrenizi daha şık hale getirmek için 3D yazıcıda veya farklı malzemeler kullanarak özel bir kasa tasarlayabilirsiniz.
  • Renk Ayarı: RGB LED kullanarak, lamba rengini de ortam ışığına göre otomatik olarak ayarlayabilirsiniz.

Umarım bu proje size Arduino dünyasına keyifli bir giriş yapmanıza yardımcı olur. Herhangi bir sorunuz olursa, yorumlarda sormaktan çekinmeyin. İyi kodlamalar!

Etiketler: arduino, akıllı lamba, ortam ışığı, ldr, potansiyometre, led, proje, elektronik, kodlama, diy

```

Arduino 7 segment LED display - arduino ile sayaç örneği


    Merhaba arkadaşlar bugün arduino ile Yedi segment LED görüntü modülü yada kısaca 7 segment kullanımına bakıp basit bir örnek yapacağız. 

Yedi segment LED görüntü modülü
    7 segment yanda da gördüğünüz gibi 8 şeklinde 7 adet led çubuğun birleşmesi ile oluşur istediğimiz rakam yerinde ki ledleri yakarak tüm rakamları elde edebiliriz. Renk ve boyut olarak çok çeşitli olsa da asıl farklılık ortak katot ve ortak anot modelleri arasındadır. Ortak anot modelinde tüm ledler eksi uca bağlanırken gereken güç( genelde 5 volt) tek bacaktan verilir, ortak katot ta ise güç her lede ayrı ayrı verilir ground çıkışı tek olur bağlanmaları yanı sıra kodlamaları da terstir. Bu yazıda ortak katot modelini kullandık bu model bana daha kolay geliyor. Ayrıca bu arkadaşı sürmek için 74HC595 veya 7447 entegresi kullanabiliriz nu sayede arduino da daha az pin kullanırız ve kodlamamız daha kısa olur ancak bu entegre olmadan da led display arduino ile sürülebilir bu yazıda entegre kullanmayacağız ancak önümüzde ki günlerde bu entegre ile daha karmaşık bir 7 segment projesi paylaşacağım. Ayrıca 7 segment yönü noktası aşşağıda olacak şekilde kabul edilse de  direk arduino ya bağlanırken şart değil bu örnekte nokta üstte olacak şekilde ayarlamışım. Şimdi örneğimize geçelim. Örnekte her bir saniyede display da gösterilen rakam 1 artacak 9 olunca sıfırlanacak, bu  projeyi ilerde geliştirip saat, klonometre ve zamanlayıcı gibi kullanışlı örnekler yapacağız.

7 segment pin şeması
    Malzemeler
    1 adet 7 segment led display ( ortak katot)
    1 adet arduino
    1 adet bradboard
    8-9 adet jumper yada kablo kesiti
    7 adet direnç (100-220 ohm olabilir ancak ben bu çizim de kullanmadım)

   Devre Kurulumu
     7 segment in ilgili bacaklarını sıra ile  arduino nun  digital pinlerine bağlanır ortak katot ( ground) da GND pinine bağlanır. Şemayı ekliyorum çok kablo olduğu için karışabilir ancak kod içinden kolayca anlayabilirsiniz.
7 segment LED display Arduino örnek devresi
    Programlama
   Her zaman ki gibi burada da söyleyeceklerimi  kod içine ekliyorum ancak bu devreyi çalıştırdıktan sonra 7 segmenti doğru şekilde ( nokta aşşağıda) noktası bağlanmış olarak çalıştırmanız bu anlatımı daha verimli kılacaktır yararlı olacaktır.


void setup()
{
  // pinleri tanımlıyoruz, isterseniz int a = 0; gibi tanımlamalar ile bacak numaralrını adlandırabilirsiniz ancak bu projede pek gerek yok
  pinMode(0, OUTPUT);//a
  pinMode(1, OUTPUT);//b
  pinMode(2, OUTPUT);//c
  pinMode(3, OUTPUT);//d
  pinMode(4, OUTPUT);//e
  pinMode(5, OUTPUT);//f
  pinMode(6, OUTPUT);//g
}
void loop(){
  // istersek kodu while, case filan ekleyerek daha profesyonel hale getirebilirz ancak sonuç aynı olacak :)
  // 0 dan 9 kadar sayıp tekrar 0 a dönecek delay olarak 1 sn ayarladım bu sayede kronometre gibi kullanılabilir
  // 0
   digitalWrite(0,HIGH);
    digitalWrite(1,HIGH);
    digitalWrite(2,HIGH);
    digitalWrite(3,HIGH);
    digitalWrite(4,HIGH);
    digitalWrite(5,LOW);
    digitalWrite(6,HIGH);
  delay(1000);
  // 1
    digitalWrite(0, LOW);
    digitalWrite(1,LOW);
    digitalWrite(2,LOW);
    digitalWrite(3,LOW);
    digitalWrite(4,HIGH);
    digitalWrite(5,LOW);
    digitalWrite(6,HIGH);
  delay(1000);
  // 2
   digitalWrite(0,HIGH);
    digitalWrite(1,HIGH);
    digitalWrite(2,LOW);
    digitalWrite(3,HIGH);
    digitalWrite(4,HIGH);
    digitalWrite(5,HIGH);
    digitalWrite(6,LOW);
  delay(1000);
    // 3
   digitalWrite(0,HIGH);
    digitalWrite(1,LOW);
    digitalWrite(2,LOW);
    digitalWrite(3,HIGH);
    digitalWrite(4,HIGH);
    digitalWrite(5,HIGH);
    digitalWrite(6,HIGH);
  delay(1000);
  //4
     digitalWrite(0,LOW);
    digitalWrite(1,LOW);
    digitalWrite(2,HIGH);
    digitalWrite(3,LOW);
    digitalWrite(4,HIGH);
    digitalWrite(5,HIGH);
    digitalWrite(6,HIGH);
  delay(1000);
  // 5 
     digitalWrite(0,HIGH);
    digitalWrite(1,LOW);
    digitalWrite(2,HIGH);
    digitalWrite(3,HIGH);
    digitalWrite(4,LOW);
    digitalWrite(5,HIGH);
    digitalWrite(6,HIGH);
  delay(1000);
  
  //6
     digitalWrite(0,HIGH);
    digitalWrite(1,HIGH);
    digitalWrite(2,LOW);
    digitalWrite(3,HIGH);
    digitalWrite(4,HIGH);
    digitalWrite(5,HIGH);
    digitalWrite(6,HIGH);
  delay(1000);
  
  //7
     digitalWrite(0,LOW);
    digitalWrite(1,LOW);
    digitalWrite(2,LOW);
    digitalWrite(3,HIGH);
    digitalWrite(4,HIGH);
    digitalWrite(5,LOW);
    digitalWrite(6,HIGH);
  delay(1000);
  
    // 8
   digitalWrite(0,HIGH);
    digitalWrite(1,HIGH);
    digitalWrite(2,HIGH);
    digitalWrite(3,HIGH);
    digitalWrite(4,HIGH);
    digitalWrite(5,HIGH);
    digitalWrite(6,HIGH);
  delay(1000);
  
  // 9
     digitalWrite(0,LOW);
    digitalWrite(1,LOW);
    digitalWrite(2,HIGH);
    digitalWrite(3,HIGH);
    digitalWrite(4,HIGH);
    digitalWrite(5,HIGH);
    digitalWrite(6,HIGH);
  delay(1000);
  }

Başka bir yazıda görüşmek üzere, Devreyi nokta altta olacak şekilde kurmayı unutmayın yoksa gelişmiş 7 segment projelerinde bocalarsınız.