Arduino ile güneş takip sistemi yapacağız. Ldrlerin konumları önemli. A0 ve a1 deki ldrler yatay eksen kontrolü için A0 ve A3 de dikey eksen için takip yapmaya kullanılacaktır. Devreyi aşağıda şekilde kurabilirsiniz.

LDR Yerleşim Mantığı
Yatay Hareket: LDR 1 (Sol) ve LDR 2 (Sağ) arasındaki ışık farkına bakılır.
Dikey Hareket: LDR 1 (Alt-Sol) ve LDR 3 (Üst-Sol) arasındaki ışık farkına bakılır.
Ldrler arasına separatör eklemek hassasiyeti artırır. Kodumuz aşağıdadır.
#include <servo.h>
Servo dikeyServo; // 1. Servo (270 Derece) - Pin 9
Servo yatayServo; // 2. Servo (360 Derece) - Pin 10
// LDR Pin Tanımlamaları
const int ldr1 = A0; // Sol Alt (Referans noktan)
const int ldr2 = A1; // Sağ
const int ldr3 = A2; // Üst (LDR 1'in üstünde)
// Ayarlar
int dikeyPos = 45; // Başlangıç dikey açısı (Türkiye için ideal başlangıç)
int tolerans = 25; // Gereksiz titremeyi önlemek için hassasiyet eşiği
int hiz360 = 90; // 360 derece servo durma noktası (Genellikle 90)
void setup() {
dikeyServo.attach(9);
yatayServo.attach(10);
// Başlangıç pozisyonu
dikeyServo.write(dikeyPos);
yatayServo.write(hiz360);
Serial.begin(9600);
}
void loop() {
int v1 = analogRead(ldr1); // Sol Alt
int v2 = analogRead(ldr2); // Sağ
int v3 = analogRead(ldr3); // Üst
// --- YATAY HAREKET (1 ve 2 arasındaki fark) ---
// Eğer Sağ (v2) daha çok ışık alıyorsa sağa dön
if (abs(v1 - v2) > tolerans) {
if (v1 > v2) {
yatayServo.write(100); // Sola yavaş dönüş
} else {
yatayServo.write(80); // Sağa yavaş dönüş
}
} else {
yatayServo.write(hiz360); // Fark azsa dur
}
// --- DİKEY HAREKET (1 ve 3 arasındaki fark) ---
// Eğer Üst (v3) daha çok ışık alıyorsa yukarı kalk
if (abs(v1 - v3) > tolerans) {
if (v3 > v1) {
if (dikeyPos < 100) dikeyPos++; // Yukarı (Türkiye sınırlarına göre)
} else {
if (dikeyPos > 15) dikeyPos--; // Aşağı
}
dikeyServo.write(dikeyPos);
}
delay(30); // Okuma stabilitesi için kısa bekleme
}
Henüz yorum yapılmamış. İlk yorumu siz yapın!