Arduino ile Rotary Encoder Kullanarak LED Parlaklık Kontrolü (PWM)

Arduino projeleri, elektronik meraklıları için harika birer başlangıç ve öğrenme kaynağıdır. Bu yazımızda, rotary encoder (döner enkoder) kullanarak bir LED’in parlaklığını PWM sinyaliyle nasıl kontrol edebileceğinizi göstereceğiz. Üstelik, encoder üzerindeki buton ile LED’i açıp kapatabileceksiniz. Bu proje; Arduino, PWM, rotary encoder ve buton kontrolleri hakkında temel bilgileri uygulamalı bir şekilde öğrenmenizi sağlayacak.

Proje Özeti

Bu projede:

  • Rotary encoder çevrildiğinde LED’in parlaklığı artar veya azalır.
  • Encoder üzerindeki push buton ile LED açılır veya kapatılır.
  • PWM (Pulse Width Modulation) sinyaliyle LED’in parlaklığı yumuşak şekilde kontrol edilir.

Kısacası, hem dijital giriş (encoder ve buton) hem de analog çıkış (PWM LED) kullanarak kapsamlı bir uygulama yapıyoruz.

Gerekli Malzemeler

MalzemeAdet
Arduino Uno / Nano1
Rotary Encoder1
LED1
330Ω direnç1
Jumper kablolarYeterli Miktarda E-E ve E-D
Breadboard (Opsiyonel)1

Gerekli Kütüphane

Devre Şeması

Devrenin Kodu

#include <RotaryEncoder.h>

#define CLK 2
#define DT 3
#define ENCODER_SW_PIN 4
#define LED_PIN 9  // PWM çıkışı

RotaryEncoder encoder(CLK, DT);

int brightness = 128;      // Başlangıç parlaklığı (0-255)
bool ledOn = true;         // LED açık mı?
const int step = 5;        // Her adımda değişecek miktar

void setup() {
  Serial.begin(9600);
  pinMode(ENCODER_SW_PIN, INPUT_PULLUP); // Buton
  pinMode(LED_PIN, OUTPUT);
  analogWrite(LED_PIN, brightness);      // Başlangıç parlaklığı
}

void loop() {
  encoder.tick();  // Encoder'i güncelle

  // Pozisyon değişti mi kontrol et
  static int lastPos = 0;
  int newPos = encoder.getPosition();

  if (newPos != lastPos) {
    int delta = newPos - lastPos;
    lastPos = newPos;

    // Parlaklığı ayarla
    brightness += delta * step;

    // 0-255 arasında sınırla
    if (brightness < 0) brightness = 0;
    if (brightness > 255) brightness = 255;

    Serial.print("Parlaklık: ");
    Serial.println(brightness);

    // Sadece LED açıksa parlaklığı uygula
    if (ledOn) {
      analogWrite(LED_PIN, brightness);
    }
  }

  // Buton kontrolü
  static bool lastButtonState = HIGH;
  bool buttonState = digitalRead(ENCODER_SW_PIN);

  if (buttonState == LOW && lastButtonState == HIGH) {
    ledOn = !ledOn; // Durumu değiştir
    Serial.println(ledOn ? "LED Açık" : "LED Kapalı");

    if (ledOn) {
      analogWrite(LED_PIN, brightness); // Mevcut parlaklıkta aç
    } else {
      analogWrite(LED_PIN, 0); // Kapalı
    }

    delay(50); // Debounce
  }

  lastButtonState = buttonState;
}

Etiketlendi:

Bir Cevap Yazın

Maker Günlüğü sitesinden daha fazla şey keşfedin

Okumaya devam etmek ve tüm arşive erişim kazanmak için hemen abone olun.

Okumaya Devam Edin