Arduino & Lego Solar Tracker (dubbla axeln) (4 / 7 steg)
Steg 4: Program
jfr bifogade .ino fil
/ * SOLAR TRACKER 1.0
* av Mathias Leroy
* Novembre 2014
*
*/
INITIERING
//------------------------------------------------
#include / / sprintf
#include / / servo bibliotek
Servo servoH; pin09 horisontell servo
Servo servoV; pin10 vertikala servo
analog läsa pin-anslutningar
int analogPinTopLeft = 0; gul grön
int analogPinTopRight = 1; grå blå
int analogPinBottomRight = 2; vit svart
int analogPinBottomLeft = 3; rödbrun
PARAMETRAR
//------------------------------------------------
int initAngleH = 80.
int minAngleH = 0;
int maxAngleH = 170;
int initAngleV = 90.
int minAngleV = 50;
int maxAngleV = 150;
int slowingDelay = 50;
int sesitivityH = 30.
int sesitivityV = 30.
int stepH = 10;
int stepV = 10;
VARIABLER
//------------------------------------------------
int angleH = initAngleH;
int angleV = initAngleV;
char printLine [50];
int valueTopLeft = 0;
int valueTopRight = 0;
int valueBottomRight = 0;
int valueBottomLeft = 0;
SETUP
//------------------------------------------------
void setup()
{
servoH.attach(9);
servoH.write(initAngleH);
servoV.attach(10);
servoV.write(initAngleV);
Serial.BEGIN(9600);
Serial.println ("redo!:-)");
}
LOOP
//------------------------------------------------
void loop()
{
Serial.println ("<<< börja slinga---");
Läs värden
valueTopLeft = analogRead(analogPinTopLeft);
valueTopRight = analogRead(analogPinTopRight);
valueBottomRight = analogRead(analogPinBottomRight);
valueBottomLeft = analogRead(analogPinBottomLeft);
skriva ut värden
sprintf (printLine, "%d | %d \n", valueTopLeft, valueTopRight); Serial.Print(printLine);
sprintf (printLine, "%d | %d \n", valueBottomRight, valueBottomLeft); Serial.Print(printLine);
Delay(3000);
beräkna medelvärden
int averageTop = (valueTopLeft + valueTopRight) / 2;
int averageRight = (valueTopRight + valueBottomRight) / 2;
int averageBottom = (valueBottomRight + valueBottomLeft) / 2;
int averageLeft = (valueBottomLeft + valueTopLeft) / 2;
skriva ut medelvärden
sprintf (printLine, "- %d - \n", averageTop); Serial.Print(printLine);
sprintf (printLine, "%d - %d \n", averageLeft, averageRight); Serial.Print(printLine);
sprintf (printLine, "- %d - \n", averageBottom); Serial.Print(printLine);
Delay(slowingDelay);
Övergripande beslut & action
Serial.Print(angleH);
Serial.Print("\n");
om ((averageLeft-averageRight) > sesitivityH & & (angleH-stepH) > minAngleH) {
gå vänster
Serial.Print ("kommer vänster");
Serial.Print("\n");
Delay(slowingDelay);
för (int jag = 0; jag < stepH; i ++) {
servoH.write(angleH--);
Delay(50);
}
}
annars om ((averageRight-averageLeft) > sesitivityH & & (angleH + stepH)
vertikala beslut & action
Serial.Print(angleV);
Serial.Print("\n");
om ((averageTop-averageBottom) > sesitivityV & & (angleV-stepV) > minAngleV) {
går upp
Serial.Print ("kommer");
Serial.Print("\n");
Delay(slowingDelay);
för (int jag = 0; jag < stepV; i ++) {
servoV.write(angleV--);
Delay(50);
}
}
annars om ((averageBottom-averageTop) > sesitivityV & & (angleV + stepV)
Serial.println ("---avsluta Loop >>>");
}