Enkla Dual Axis Solar Tracker (20 / 23 steg)
Steg 20: Koden
Ladda upp denna kod till din Arduino.
Om du inte har gjort gör, hugg efter den fri Arduino installera. När i programmet måste du ställa in din anslagstavla typ till en Uno. (Eller vilken version du använder.)
Du kan enkelt ändra hastighet och antal servon, sensitivy av sensorer, från inom koden.
Du kan också ladda ner koden som fil ovan eller av vår hemsida.
#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);
}