FN: S Seguidor Solar enkel que Tiene Ejes Duales (11 / 13 steg)
Steg 11: El código para controlar el seguidor
Sube el código aquí al Arduino.
UD. Puede modificar el código para cambiar el sensibilidad de los sensores y la velocidad de los servon.
#include / / include Servo bibliotek
MAX 180 horisontella
Servo horisontell. horisontella servo
int servoh = 180; 90. stå horisontella servo
int servohLimitHigh = 180;
int servohLimitLow = 65;
65 grader MAX
Servo vertikal; vertikala servo
int servov = 45; 90. stå lodrät servo
int servovLimitHigh = 80.
int servovLimitLow = 15.
LDR pin-anslutningar
namn = analogpin;
int ldrlt = 0; LDR övre vänstra - botten vänster <---BDG
int ldrrt = 1; LDR topp rigt - längst ner till höger
int ldrld = 2; LDR nedåt vänster - vänster topp
int ldrrd = 3; LDR ner rigt - ÖVERKANT höger
void setup()
{Serial.begin(9600);
servo anslutningar
Name.attacht(PIN);
Horizontal.attach(9);
Vertical.attach(10);
Horizontal.write(180);
Vertical.write(45);
Delay(3000);
}
void loop()
{int lt = analogRead(ldrlt); / / topp vänster
int rt = analogRead(ldrrt); längst upp till höger
int ld = analogRead(ldrld); nedåt vänster
int rd = analogRead(ldrrd); ned höger
int dtime = analogRead (4) / 20; Läs potentiometrar
int tol = analogRead (5) / 4.
int dtime = 10; int tol = 50;
int avt = (lt + rt) / 2; genomsnittliga värdet topp
int avd = (ld + rd) / 2; genomsnittliga värdet ner
int avl = (lt + ld) / 2; medelvärdet på vänster
int avr = (rt + rd) / 2; genomsnittliga värde rätt
int dvert = avt - avd; Kontrollera diffirence för upp och ner
int dhoriz = avl - avr; / / kolla diffirence og vänster och rigt
Serial.Print(AVT);
Serial.Print("");
Serial.Print(Avd);
Serial.Print("");
Serial.Print(AVL);
Serial.Print("");
Serial.Print(AVR);
Serial.Print("");
Serial.Print(dtime);
Serial.Print("");
Serial.Print(TOL);
Serial.println("");
om (-1 * tol > dvert || dvert > tol) / / check om diffirence i toleransen annars ändra vertikala vinkeln
{
om (avt > avd)
{
servov = ++ servov;
om (servov > servovLimitHigh)
{
servov = servovLimitHigh;
}
}
annars om (avt < avd)
{
servov =--servov;
om (servov < servovLimitLow)
{
servov = servovLimitLow;
}
}
Vertical.write(servov);
}
om (-1 * tol > dhoriz || dhoriz > tol) / / check om diffirence i toleransen annat ändra horisontell vinkel
{
om (avl > avr)
{
servoh =--servoh;
om (servoh < servohLimitLow)
{
servoh = servohLimitLow;
}
}
annars om (avl < avr)
{
servoh = ++ servoh;
om (servoh > servohLimitHigh)
{
servoh = servohLimitHigh;
}
}
annars om (avl = avr)
{
ingenting
}
Horizontal.write(servoh);
}
Delay(dtime);
}