
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
| Malzeme | Adet |
|---|---|
| Arduino Uno / Nano | 1 |
| Rotary Encoder | 1 |
| LED | 1 |
| 330Ω direnç | 1 |
| Jumper kablolar | Yeterli 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;
}



