Okay, så blev jeg inspireret til at kikke lidt på en simpel solartracker og har lavet lidt test kode til arduino.
Inspirationen var en lille video på youtube, en gut der bruger en gammel kontor stol som base for hans solar tracker.

Det er klart at mekanikken skal komme fra noget man kan få fat i meget billigt eller gratis og så added lidt her og der fra feks biler, en visker motor måske, se denne løsning på mekanikken, simpel og genial ![]()
Koden til mit lille arduino solar tracker eksperiment er lavet med to solceller fra to skrottede solar have lamper, og en standard freeduino fra nuelectronics.
Enter password
/*
* solar tracker first test program
* Home: http://techmind.dk
* 290809
*/
int ledPin13 = 13; // LED connected to digital pin 13 on arduino board
int ledPin2 = 2; // red LED connected to digital pin 2
int ledPin3 = 3; // yellow LED connected to digital pin 3
int ledPin4 = 4; // green LED connected to digital pin 4
int ledPin5 = 5; // yellow LED connected to digital pin 5
int ledPin6 = 6; // red LED connected to digital pin 6
int ledPin7 = 7; // green D2 LED connected to digital pin 7
int lastvalue;
char sensorData[10];
void setup() // run once, when the sketch starts
{
pinMode(ledPin2, OUTPUT); // sets the digital pin as output
pinMode(ledPin3, OUTPUT); // sets the digital pin as output
pinMode(ledPin4, OUTPUT); // sets the digital pin as output
pinMode(ledPin5, OUTPUT); // sets the digital pin as output
pinMode(ledPin6, OUTPUT); // sets the digital pin as output
pinMode(ledPin7, OUTPUT); // sets the digital pin as output
}
void loop() // run over and over again
{
if ((analogRead(4) == analogRead(5)+10))
{
if ((analogRead(4) <= analogRead(5)+10) && (analogRead(4)+10 >= analogRead(5)))
{
digitalWrite(ledPin4, HIGH);
digitalWrite(ledPin5, LOW);
digitalWrite(ledPin3, LOW);
digitalWrite(ledPin6,LOW);
digitalWrite(ledPin2, LOW);
}
}
if (analogRead(4) > analogRead(5)+100)
{
digitalWrite(ledPin5, HIGH);
digitalWrite(ledPin4, LOW);
digitalWrite(ledPin3, LOW);
digitalWrite(ledPin6,LOW);
digitalWrite(ledPin2, LOW);
}
if (analogRead(4)+100 < analogRead(5))
{
digitalWrite(ledPin3, HIGH);
digitalWrite(ledPin4, LOW);
digitalWrite(ledPin5, LOW);
digitalWrite(ledPin6,LOW);
digitalWrite(ledPin2, LOW);
}
if (analogRead(4) > analogRead(5)+150)
{
digitalWrite(ledPin6, HIGH);
digitalWrite(ledPin5, LOW);
digitalWrite(ledPin4, LOW);
digitalWrite(ledPin3, LOW);
}
if (analogRead(4)+150 < analogRead(5))
{
digitalWrite(ledPin2, HIGH);
digitalWrite(ledPin3, LOW);
digitalWrite(ledPin4, LOW);
digitalWrite(ledPin5, LOW);
}
}
// ********************************************************************************************************************************
// ***** Opsamler sp�nding fra analog 4 *****
// ********************************************************************************************************************************
void getcurrent(char *current)
{
int sign, whole;
sign=false; // kommer fra gettemperatur routinen
if(sign) current[0]='-';
else current[0]='+';
// analog read
//sensor = 3;
whole = 0;
whole = analogRead(4);
whole = whole;
if (whole < 513) whole = 513;
if (whole > 715) whole = 513;
int mappedValue = map( whole, 513, 700, 0, 5000 ); // 513 svarer til 2,5 volt og 715 svarer til 25, volt + 5x187mvolt, 5000 er 5 ampere ** 700 calibreretr 230809
current[1]= (mappedValue % 10000)/1000 +'0' ;
current[3]= (mappedValue % 1000)/100 +'0';
current[2]=',';
current[4]= (mappedValue % 100)/10 +'0';
//whole=whole;+24; //calibrering af m�ling
current[5]= (mappedValue % 10)+'0';
current[6] = '\0';
delay(1000UL); // delay 30 sec
}
// ********************************************************************************************************************************
// ***** Opsamler m�lt sp�nding 1:1 (maks 5 v) og putter data i en string (den varialen som bruges til at kalde routinen med)*****
// ********************************************************************************************************************************
void getvoltage(char *voltage)
{
int sign, whole;
//sensor = 1;
sign=false; // kommer fra gettemperatur routinen
if(sign) voltage[0]='-';
else voltage[0]='+';
// analog read
whole = 0;
whole = analogRead(0);
whole = whole; // diveder med 2 ved 0 til 5 volt
int mappedValue = map( whole, 0, 1023, 0, 2000 ); //
voltage[1]= (mappedValue % 10000)/1000 +'0' ;
voltage[2]= (mappedValue % 1000)/100 +'0';
voltage[3]=',';
voltage[4]= (mappedValue % 100)/10 +'0';
//whole=whole;+24; //calibrering af m�ling
voltage[5]= (mappedValue % 10)+'0';
voltage[6] = '\0';
// voltage[1]= (whole % 10000)/1000 +'0' ;
// voltage[2]= (whole % 1000)/100 +'0';
// voltage[3]=',';
// voltage[4]= (whole % 100)/10 +'0';
//whole=whole;+24; //calibrering af m�ling
// voltage[5]= (whole % 10)+'0';
// voltage[6] = '\0';
delay(1000UL); // delay 30 sec
}

Links og ressourcer:
motor styring med 4 mosfets til arduino