Solar traker LDR - mcworkshop

MC   WORKSHOP
Vai ai contenuti

Menu principale:

Solar traker LDR


Solar traker
Two versions of a solar tracker

Version one
The first version mounts a single solar panel with a rechargeable battery and an LED.






Azimuth and elevation of the sun



Milano ITALIA 18/11/2018 time 12:00



Etah Groenlandia 18/11/2018 time 12:00


As we see in the images the differences are obvious. The LDRs and the initial positions of the servomotors must be calculated according to the area in which we find ourselves.
This is an educational project that does not take into account the many variables that exist in a real physical place.
Come vediamo nelle immagini le differenze sono ovvie. Gli LDR e le posizioni iniziali dei servomotori devono essere calcolati in base all'area in cui ci troviamo.
Questo è un progetto educativo che non tiene conto delle molte variabili esistenti in un luogo fisico reale.

Elettric diagram

Servo signal #1 to pin 9 Arduino
Servo signal #2 to pin 10 Arduino
LDR #1 and #2 to pin A0 Arduino
LDR #3 and #4 to pin A1 Arduino





Sketch
Between the first and the second project there is no difference in the sketch

// Inseguitore solare - Cerani  luglio 2018
// code open source
#include <Servo.h>
int ServoHorizontalPin = 10;
int ServoVerticalPin = 9;
int HorizontalPotPin = A1;
int VerticalPotPin = A0;
int ServoH_a = 120;
int ServoH_b = 30;
Servo HorizontalServo;
Servo VerticalServo;
#define Tollerance 20
int HorizontalPotValue;
int oldHorizontalPotValue;
int VerticalPotValue;
int oldVerticalPotValue;
int HorizontalServoPosition;
int VerticalServoPosition;
void setup()
{
 HorizontalServo.attach(ServoHorizontalPin);
 VerticalServo.attach(ServoVerticalPin);
 HorizontalServo.write (90);
 VerticalServo.write (90);
}
void loop()
{
 HorizontalPotValue  = averageAnalogRead(HorizontalPotPin, 10);
 VerticalPotValue  = averageAnalogRead(VerticalPotPin, 10);
 if ( abs(HorizontalPotValue - oldHorizontalPotValue) > Tollerance) {
   oldHorizontalPotValue = HorizontalPotValue;
   HorizontalServoPosition  = map(HorizontalPotValue, 0, 1023, ServoH_a , ServoH_b);
   HorizontalServo.write(HorizontalServoPosition);
 }
 if ( abs(VerticalPotValue  - oldVerticalPotValue  ) > Tollerance) {
   VerticalServoPosition  = map(VerticalPotValue, 0, 1023, ServoH_a , ServoH_b);
   VerticalServo.write(VerticalServoPosition);
 }
 delay(50);
}
long averageAnalogRead(const byte AnChannel, const byte Num) {
 long _val = 0;
 for (int n = 0; n < Num; n++) {
   _val += analogRead(AnChannel);
 }
 return _val / Num;
}

Version two
In the second version I worked on aesthetics. The setting is a desert. The main tower mounts the LDRs. There are two solar panels. Imaginary batteries will be charged during the day. In the evening, the batteries feed a water vaporizer contained in the greenhouse.
Nella seconda versione mi sono occupato dell'estetica. L'ambientazione è un deserto. La torre principale monta gli LDR. Ci sono due pannelli solari. Le batterie immaginarie verranno caricate durante il giorno. Di sera, le batterie alimentano un vaporizzatore di acqua contenuta nella serra.












 
Copyright 2015. All rights reserved.
Torna ai contenuti | Torna al menu