badwet
Üye
- Katılım
- 14 Ağu 2009
- Mesajlar
- 100
- Puanları
- 1
Öncelikle herkese merhabalar forumda birçok güneş takip devresi başlığı var ama ben tam olarak aradığımı bulamadım gerçi arduino'ya yeni başladım ama Şöyle bir devre tasarlamaya çalıştım ama sorunlarım var çözemiyorum bilgisi olan arkadaşlardan yardım istiyorum devreyi bread board üzerine kurdum.ama istediğim gibi çalıştıramadım.
açıklamak gerekirse;
panel doğu-batı ekseninde yani tek eksende çalıaşacak,2 adet ldr ile kontrol edilecek ve sistemde 2 adette limit sw.olacak biri doğuda biri batıda.panel batıya ulaştığında limit sw'e basacak ldr'leri okuyup tam karanlık olduğunda ertesi gün için doğuya yönelecek ve doğudaki sw'e bastığında duracak ve ertesi gün güneşin doğmasını bekleyecek ve gün doğduğunda tekrar aynı işlemi tekrarlayacak.dc motorun devir yönünüde röle ile polariteyi değiştirerek yapacağım ekteki şemada var.
kodları benzer bir projeden aldım ve üzerinde bazı değişikler yapmaya çalıştım ışığı bir yönde aldığında bir tarafa diğer yönden aldığında diğer tarafa çıkış alabiliyorum fakat karanlık olduğunda yani her iki ldr değeri aynı olduğunda ve batı limit sw'e bastığında sonuç elde edemiyorum
size isiste yapmaya çalıştığım devreyi ve kodları gönderiyorum yardımcı olursanız sevinirim .dediğim gibi aduino'da daha yeniyim kusurlardan dolayı affola.
resimi yükleyince farkettim sw.'ten sonra pulldown direncini çizmeyi unutmuşum kusura bakmayın.
int sensorPinA0 = A0; // doğu ldr
int sensorPinA1 = A1; // batı ldr
const int motor1Pin = 11; // motor batı röle ucu
const int motor2Pin = 12; // motor doğu röle ucu
const int switch1Pin = 5; //doğu limit sw
const int switch2Pin = 6; //batı limit sw
int sensorValueA0 = analogRead(sensorPinA0);
int sensorValueA1 = analogRead(sensorPinA1);
int switch1val= digitalRead(switch1Pin);
int switch2val= digitalRead(switch2Pin);
void setup()
{
Serial.begin(9600);
analogReference(INTERNAL);
pinMode(motor1Pin, OUTPUT);
pinMode(motor2Pin, OUTPUT);
pinMode(switch1Pin, INPUT);
pinMode(switch2Pin, INPUT);
pinMode(sensorValueA0, INPUT);
pinMode(sensorValueA1, INPUT);
}
void loop()
{
// read the sensor:
sensorValueA0 = analogRead(sensorPinA0);
sensorValueA1 = analogRead(sensorPinA1);
switch1val = digitalRead(switch1Pin);
switch2val = digitalRead(switch2Pin);
float voltage1 = sensorValueA0*(5.0/1023.0);
float voltage2 = sensorValueA1*(5.0/1023.0);
if (voltage1 > voltage2);// if the voltage1 > voltage2, motor doğuya döner
{
digitalWrite(motor1Pin, LOW); //
digitalWrite(motor2Pin, HIGH); // motor doğuya döner
}
else
{
digitalWrite(motor1Pin, HIGH); // motor batıya döner
digitalWrite(motor2Pin, LOW); //
}
if (voltage1 == voltage2);
{
digitalWrite(motor1Pin, LOW); //eğer her iki ldr voltajı eşit ise her iki motor çalışmaz panel durur
digitalWrite(motor2Pin, LOW);
}
{
if ((voltage1+ voltage2<3) && (switch1val == HIGH));//her iki ldr voltajı eşit ise ve batı sw basılı ise motor 1 pinine enerji ver ve paneli doğuya döndür.
digitalWrite(motor2Pin, HIGH);
digitalWrite(motor1Pin, LOW);
}
{
if (switch2val == HIGH);
digitalWrite(motor1Pin, LOW);
digitalWrite(motor2Pin, LOW);
}
}
açıklamak gerekirse;
panel doğu-batı ekseninde yani tek eksende çalıaşacak,2 adet ldr ile kontrol edilecek ve sistemde 2 adette limit sw.olacak biri doğuda biri batıda.panel batıya ulaştığında limit sw'e basacak ldr'leri okuyup tam karanlık olduğunda ertesi gün için doğuya yönelecek ve doğudaki sw'e bastığında duracak ve ertesi gün güneşin doğmasını bekleyecek ve gün doğduğunda tekrar aynı işlemi tekrarlayacak.dc motorun devir yönünüde röle ile polariteyi değiştirerek yapacağım ekteki şemada var.
kodları benzer bir projeden aldım ve üzerinde bazı değişikler yapmaya çalıştım ışığı bir yönde aldığında bir tarafa diğer yönden aldığında diğer tarafa çıkış alabiliyorum fakat karanlık olduğunda yani her iki ldr değeri aynı olduğunda ve batı limit sw'e bastığında sonuç elde edemiyorum
size isiste yapmaya çalıştığım devreyi ve kodları gönderiyorum yardımcı olursanız sevinirim .dediğim gibi aduino'da daha yeniyim kusurlardan dolayı affola.
resimi yükleyince farkettim sw.'ten sonra pulldown direncini çizmeyi unutmuşum kusura bakmayın.
int sensorPinA0 = A0; // doğu ldr
int sensorPinA1 = A1; // batı ldr
const int motor1Pin = 11; // motor batı röle ucu
const int motor2Pin = 12; // motor doğu röle ucu
const int switch1Pin = 5; //doğu limit sw
const int switch2Pin = 6; //batı limit sw
int sensorValueA0 = analogRead(sensorPinA0);
int sensorValueA1 = analogRead(sensorPinA1);
int switch1val= digitalRead(switch1Pin);
int switch2val= digitalRead(switch2Pin);
void setup()
{
Serial.begin(9600);
analogReference(INTERNAL);
pinMode(motor1Pin, OUTPUT);
pinMode(motor2Pin, OUTPUT);
pinMode(switch1Pin, INPUT);
pinMode(switch2Pin, INPUT);
pinMode(sensorValueA0, INPUT);
pinMode(sensorValueA1, INPUT);
}
void loop()
{
// read the sensor:
sensorValueA0 = analogRead(sensorPinA0);
sensorValueA1 = analogRead(sensorPinA1);
switch1val = digitalRead(switch1Pin);
switch2val = digitalRead(switch2Pin);
float voltage1 = sensorValueA0*(5.0/1023.0);
float voltage2 = sensorValueA1*(5.0/1023.0);
if (voltage1 > voltage2);// if the voltage1 > voltage2, motor doğuya döner
{
digitalWrite(motor1Pin, LOW); //
digitalWrite(motor2Pin, HIGH); // motor doğuya döner
}
else
{
digitalWrite(motor1Pin, HIGH); // motor batıya döner
digitalWrite(motor2Pin, LOW); //
}
if (voltage1 == voltage2);
{
digitalWrite(motor1Pin, LOW); //eğer her iki ldr voltajı eşit ise her iki motor çalışmaz panel durur
digitalWrite(motor2Pin, LOW);
}
{
if ((voltage1+ voltage2<3) && (switch1val == HIGH));//her iki ldr voltajı eşit ise ve batı sw basılı ise motor 1 pinine enerji ver ve paneli doğuya döndür.
digitalWrite(motor2Pin, HIGH);
digitalWrite(motor1Pin, LOW);
}
{
if (switch2val == HIGH);
digitalWrite(motor1Pin, LOW);
digitalWrite(motor2Pin, LOW);
}
}