Zonnewijzer simulator

Toon hier Uw afgeronde projecten aan anderen.
Berichten: 77
Geregistreerd: 06 Okt 2012, 10:57

Zonnewijzer simulator

Berichtdoor Beamer » 03 Nov 2012, 12:33

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.
Bijlagen
P1010113.JPG
P1010113.JPG (51.39 KiB) 10642 keer bekeken

Advertisement

Gebruikers-avatar
Berichten: 188
Geregistreerd: 23 Dec 2011, 00:12

Re: Zonnewijzer simulator

Berichtdoor Duality » 04 Nov 2012, 00:55

mooi met binary notatie erbij :)
lijkt me leuk om zelf wel is te maken :)

Gebruikers-avatar
Berichten: 700
Geregistreerd: 05 Mrt 2012, 21:56
Woonplaats: Appingedam

Re: Zonnewijzer simulator

Berichtdoor pjh » 05 Nov 2012, 08:10

Geniaal

Berichten: 79
Geregistreerd: 07 Dec 2012, 10:27
Woonplaats: Paesens (Frl)

Re: Zonnewijzer simulator

Berichtdoor paysan » 18 Feb 2013, 09:27

Super goed van je.

Berichten: 79
Geregistreerd: 07 Dec 2012, 10:27
Woonplaats: Paesens (Frl)

Re: Zonnewijzer simulator

Berichtdoor paysan » 18 Feb 2013, 09:29

Zou ik de source code mogen zienn ajb?

Wim

Berichten: 79
Geregistreerd: 07 Dec 2012, 10:27
Woonplaats: Paesens (Frl)

Re: Zonnewijzer simulator

Berichtdoor paysan » 18 Feb 2013, 09:31

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..

Berichten: 77
Geregistreerd: 06 Okt 2012, 10:57

Re: Zonnewijzer simulator

Berichtdoor Beamer » 18 Feb 2013, 17:53

Nee, er zit gewoon een RTC klok in. De tijd zet in om naar een waarde voor een servo.

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.

Berichten: 79
Geregistreerd: 07 Dec 2012, 10:27
Woonplaats: Paesens (Frl)

Re: Zonnewijzer simulator

Berichtdoor paysan » 27 Feb 2013, 09:59

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.

Terug naar Afgeronde projecten

Wie is er online?

Gebruikers in dit forum: Geen geregistreerde gebruikers en 7 gasten