Berlijn klok
2 berichten
• Pagina 1 van 1
Berlijn klok
Dit project startte ik nadat deze klok in Berlijn mij weer eens te binnen schoot.
In 1985 heb ik daar een week vanuit school vertoeft en met enige verwondering toen deze klok zien staan die toen nog op de Kurfürstendamm stond.
Deze klok staat nu voor het Europa-Center ongeveer een kilometer verderop.
Dat was een aardige uitdaging om daar wat moois van te maken maar is uiteindelijk gelukt.
Bij dit project is ook de 3D printer ingezet voor de realisatie.
Ook voor dit project staan er op mijn site (Weird Science Web) foto's en nog meer info om deze klok na te kunnen bouwen.
In 1985 heb ik daar een week vanuit school vertoeft en met enige verwondering toen deze klok zien staan die toen nog op de Kurfürstendamm stond.
Deze klok staat nu voor het Europa-Center ongeveer een kilometer verderop.
Dat was een aardige uitdaging om daar wat moois van te maken maar is uiteindelijk gelukt.
Bij dit project is ook de 3D printer ingezet voor de realisatie.
Ook voor dit project staan er op mijn site (Weird Science Web) foto's en nog meer info om deze klok na te kunnen bouwen.
- Code: Alles selecteren
#include <DCF77.h>
#include <DS3231.h>
#include <LedControlMS.h>
#define DCF_PIN 2
#define DCF_INTERRUPT 0
#define LDR_PIN A0 // LDR sensor met 10k pull down weerstand
#define SYNC_BUTTON_PIN 7 // Synchronisatie knop met 10k pull down weerstand
bool h12, PM, century = false, setOnce = true;
int analogValue, secs;
DS3231 Clock;
DCF77 DCF = DCF77( DCF_PIN, DCF_INTERRUPT );
time_t DCFtime;
LedControl lc = LedControl( 12, 11, 10, 1 ); // Pinnen 12, 11, 10 op Arduino aansluiten op pin 1, 13, 12 op de MAX7219
void setup()
{
pinMode( SYNC_BUTTON_PIN, INPUT );
Wire.begin();
delay( 1000 );
lc.shutdown( 0, false );
setDisplay();
// Start synchronisering als RTC voor de eerste keer wordt aangezet
if( Clock.getDate() == 1 && Clock.getMonth( century ) == 1 && Clock.getYear() == 0 )
{
synchronizeDCF();
}
}
void loop()
{
// Start synchronisering elke dag om 3:00 AM of meteen nadat de synchronisatie knop is ingedrukt
if(( Clock.getHour( h12, PM ) == 3 && Clock.getMinute() == 0 ) || digitalRead( SYNC_BUTTON_PIN ) == HIGH )
{
synchronizeDCF();
}
secs = Clock.getSecond();
lc.setLed( 0, 2, 7, secs % 2 ); // Seconde aanduiding, laatste LED in de derde rij
// Set display één keer gedurende de 0 seconde
if( secs == 0 && setOnce )
{
setDisplay();
setOnce = false;
}
if( secs != 0 )
{
setOnce = true;
}
delay( 99 ); // Kleine delay voor een snelle display response maar niet overdrijven
}
void synchronizeDCF()
{
int i, limit;
DCF.Start();
delay( 1000 );
limit = Clock.getMinute() - 1;
if( limit == -1 )
{
limit = 59;
}
do
{
for( i = 0; i < 50; i++ )
{
lc.setLed( 0, 2, 7, !digitalRead( DCF_PIN )); // Laat de pulsen zien van de DCF77 ontvanger op de seconde LED
delay( 20 ); // Kleine delay voor een snelle display response maar niet overdrijven
}
if( Clock.getSecond() == 0 )
{
setDisplay(); // Update display, ook al is er geen huidige tijd zichtbaar
}
DCFtime = DCF.getTime(); // Krijgt de tijd door interrupt signalen
} while( DCFtime == 0 && Clock.getMinute() != limit ); // probeer synchronisatie voor 59 minuten
if( DCFtime != 0 )
{
setTime( DCFtime );
setCRTTime();
}
setDisplay();
DCF.Stop();
}
void setDisplay()
{
int i, hrs, mins;
hrs = Clock.getHour( h12, PM );
mins = Clock.getMinute();
lc.clearDisplay( 0 );
analogValue = analogRead( LDR_PIN ) / 73 + 1; // Maak het ADC bereik van 0..1023 naar 1..15
lc.setIntensity( 0, analogValue ); // Zet display intensiteit volgens omgevingslicht (dimmen in het donker)
for( i = 0; i < hrs / 5; i++ )
{
lc.setLed( 0, 0, i, true ); // Eerste 4 LEDs in eerste rij
}
for( i = 0; i < hrs % 5; i++ )
{
lc.setLed( 0, 0, i + 4, true ); // laatste 4 LEDs in eerste rij
}
for( i = 0; i < mins / 5; i++ )
{
if( i < 8 )
{
lc.setLed( 0, 1, i, true ); // Alle 8 LEDs in tweede rij
}
else
{
lc.setLed( 0, 2, i - 8, true ); // Plus 3 laatste LEDs in derde rij
}
}
for( i = 0; i < mins % 5; i++ )
{
lc.setLed( 0, 2, i + 3, true ); // 4 LEDs in derde rij offset + 3
}
}
void setCRTTime()
{
Clock.setSecond( second() );
Clock.setMinute( minute() );
Clock.setHour( hour() );
Clock.setDoW( weekday() );
Clock.setDate( day() );
Clock.setMonth( month() );
Clock.setYear( year() - 2000 );
}
Advertisement
Re: Berlijn klok
Ja mooi ding eigenlijk, heb ook de waterklok gezien die vindt ik ook mooi.
paul deelen
shooter@home.nl
shooter@home.nl
2 berichten
• Pagina 1 van 1
Terug naar Afgeronde projecten
Wie is er online?
Gebruikers in dit forum: Geen geregistreerde gebruikers en 1 gast