solar tracker med arduino

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.

DSC00748

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.

/*
* 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
}

 

DSC00752

 

Links og ressourcer:

motor styring med 4 mosfets til arduino

mere om solartracker

På forhånd tak ;) Share on Facebook1Share on Google+0Pin on Pinterest0Tweet about this on Twitter1Share on LinkedIn0

Skriv et svar

Din e-mailadresse vil ikke blive offentliggjort. Krævede felter er markeret med *

Disse HTML koder og attributter er tilladte: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>