Zonnewijzer simulator
8 berichten
• Pagina 1 van 1
Zonnewijzer simulator
Het leek mij leuk om als eerste project een simulatie te maken van een zonnewijzer.
Het geheel draait op een barebone arduino en een 1307 RTC klok.
De arduino stuurt een servomotor aan en twee LEDs.
Zoals op de foto te zien is is het mechaniek opgebouwd met rietjes die op de as van de servo zijn bevestigd.
Om de simulator niet van 18.00 tot 06.00 werkeloos te laten zijn, laat ik de servo teruglopen en de cyclus nogmaals doen met een rode LED.
De witte en de rode LED zijn anti parallel geschakeld, dat scheelt in de bedrading en dus in gewicht.
In de software wordt automatisch gecorrrigeerd voor zomer en winter tijd.
De cijfers voor de tijdindicatie zijn een knipoog naar de digitale aansturing en zijn binair.
Het geheel draait op een barebone arduino en een 1307 RTC klok.
De arduino stuurt een servomotor aan en twee LEDs.
Zoals op de foto te zien is is het mechaniek opgebouwd met rietjes die op de as van de servo zijn bevestigd.
Om de simulator niet van 18.00 tot 06.00 werkeloos te laten zijn, laat ik de servo teruglopen en de cyclus nogmaals doen met een rode LED.
De witte en de rode LED zijn anti parallel geschakeld, dat scheelt in de bedrading en dus in gewicht.
In de software wordt automatisch gecorrrigeerd voor zomer en winter tijd.
De cijfers voor de tijdindicatie zijn een knipoog naar de digitale aansturing en zijn binair.
- Bijlagen
-
- P1010113.JPG (51.39 KiB) 10878 keer bekeken
Advertisement
Re: Zonnewijzer simulator
Bereken je ook de werkelijke zonne stand? Azimuth en Elevatie ?
Dat heb ik namelijk gedaan voor mijn Zonnevolger. Dit gaat straks Zonnepanelen op de zon gericht houden..
Dat heb ik namelijk gedaan voor mijn Zonnevolger. Dit gaat straks Zonnepanelen op de zon gericht houden..
Re: Zonnewijzer simulator
Nee, er zit gewoon een RTC klok in. De tijd zet in om naar een waarde voor een servo.
Bijgaand de source code
De twee LEDs zijn tegen elkaar in geschakeld, scheelt weer een draadje in de constructie.
Bijgaand de source code
/*
* Sundial emulation (my first project)
* emulate a sundial with a led going round driven by a servo.
* Gert Horsting 2012
*/
#include <Time.h>
#include <Wire.h> // Communication over I2C
#include <DS1307RTC.h> // a basic DS1307 library that returns time as a time_t
#include <Servo.h>
Servo myservo; // intitiate servo
int uur; // variable for hour
int mnt; // variable for minute
int servo; // variable for servo value
int val; // value for servo adjusted to 180 degrees
int brightLed = 7; // Bright LED on pin 6 for 06:00 - 18:00
int redLed = 8; // Red LED on pin 7 for 18:00 - 06:00
void setup() {
pinMode (brightLed , OUTPUT); // select pin as output
pinMode (redLed , OUTPUT); // select pin as output
myservo.attach(9); // set servo on pin 9
setSyncProvider(RTC.get); // the function to get the time from the RTC
}
void loop()
{
time_t t = now(); // get the current time, store it in t
uur = (hour(t)); // get the hour, store it in uur
uur = uur + adjustDstEurope(); // adjust for DST
mnt = (minute(t)); // get the minute, store it in mnt
servo = uur * 60 + mnt; // calculate total minutes, store it in servo
if (servo < 360) // before 6 am , add 720 minutes (12 hours)
servo = servo + 720; // sundial only does from 06:00 to 18:00
if (servo > 1079) // after 6 pm, subtract 720 minutes
servo = servo - 720; // for the same reason
val = map(servo,360,1079,160,0); // map the servo value to 0-180 degrees (mirrored for backside)
// had to adjust to 160 due to deviaton of the used sevo
checkLED(); // which time period ?
myservo.write(val); // set servo
}
void checkLED(){
if ((uur >= 6) && (uur < 18)) // if between 06:00 and 18:00
{
digitalWrite(brightLed,HIGH); // bright LED is on
digitalWrite(redLed,LOW);
}
else // else
{
digitalWrite(brightLed,LOW); // red LED is on
digitalWrite(redLed, HIGH);
}
}
int adjustDstEurope()
{
// last sunday of march
int beginDSTDate= (31 - (5* year() /4 + 4) % 7);
int beginDSTMonth=3;
//last sunday of october
int endDSTDate= (31 - (5 * year() /4 + 1) % 7);
int endDSTMonth=10;
// DST is valid as:
if (((month() > beginDSTMonth) && (month() < endDSTMonth))
|| ((month() == beginDSTMonth) && (day() >= beginDSTDate))
|| ((month() == endDSTMonth) && (day() < endDSTDate)))
return 1; // DST europe = 1 hour
else return 0; // nonDST europe = 0 hour
}
De twee LEDs zijn tegen elkaar in geschakeld, scheelt weer een draadje in de constructie.
Re: Zonnewijzer simulator
Dank je wel.
Ik zelf gebruik een DFC77 ontvanger en vanuit die tijd bereken ik de echte zonnestaand aan de hemel.
Die waarden geef ik weer door aan de stappen motors die de panelen gaan richten.
Ik zelf gebruik een DFC77 ontvanger en vanuit die tijd bereken ik de echte zonnestaand aan de hemel.
Die waarden geef ik weer door aan de stappen motors die de panelen gaan richten.
8 berichten
• Pagina 1 van 1
Terug naar Afgeronde projecten
Wie is er online?
Gebruikers in dit forum: Geen geregistreerde gebruikers en 0 gasten