Bij sunset lampen aan en 22:40 weer uit

Arduino specifieke Software
Gebruikers-avatar
Berichten: 23
Geregistreerd: 24 Jul 2020, 14:55

Bij sunset lampen aan en 22:40 weer uit

Berichtdoor bertgroothuis » 14 Nov 2023, 22:21

Hallo allemaal,

In mij Home Lights project wil ik bij sunset de lampen aan zetten en om (ongeveer) 22:40 weer uit zetten.
Nu doe ik dat handmatig maar wil dat automatiseren.
Ik heb een sketch gevonden. Zie sketch.
Het resultaat in de seriële monitor geeft bijvoorbeeld 17:40 als zonsondergang.
Deze waarde wil ik in een variabele zetten en zo de tijd vergelijken tot aan 22:40 om de lampen weer uit te doen.
Ik kom er niet uit of ik dat in deze notitie (17:50) of moet omreken naar milliseconden.
Diverse sketches van internet gehaald maar daar word ik niet echt wijzer van.

Graag advies en misschien een voorbeeld waar ik verder mee kan.

Hartelijk dank.

Bert


Code: Alles selecteren
//======================================================================================================================
// SolarCalculator Library for Arduino example sketch: SunriseSunset.ino
// 
// Calculate the times of sunrise, solar noon, and sunset for a given date and location.
//
// Tested with Arduino IDE 1.8.19 and Arduino Uno
//======================================================================================================================

#include <SolarCalculator.h>

void setup()
{
  Serial.begin(9600);

  // Date
  int year = 2023;
  int month = 11;
  int day = 14;
  int urentiental;
  int urenenkel;
  int minutentiental;
  int minutenenkel;
  int urentotaal;
 
  // Location
  double latitude = 52.2;
  double longitude = 6.1;
  int utc_offset = 1;

  double transit, sunrise, sunset;

  // Calculate the times of sunrise, transit, and sunset, in hours (UTC)
  calcSunriseSunset(year, month, day, latitude, longitude, transit, sunrise, sunset);

  // Get the approximate times (minimum program size) (iterations = 0)
  //calcSunriseSunset(year, month, day, latitude, longitude, transit, sunrise, sunset, SUNRISESET_STD_ALTITUDE, 0);

  // Print results
  char str[6];
  Serial.println();
  Serial.println(hoursToString(sunrise + utc_offset, str));
  Serial.println(hoursToString(transit + utc_offset, str));
  Serial.println(hoursToString(sunset + utc_offset, str));
  Serial.println();
 
}

void loop()
{
}

// Rounded HH:mm format
char * hoursToString(double h, char *str)
{
  int m = int(round(h * 60));
  int hr = (m / 60) % 24;
  int mn = m % 60;

  str[0] = (hr / 10) % 10 + '0';
  str[1] = (hr % 10) + '0';
  str[2] = ':';
  str[3] = (mn / 10) % 10 + '0';
  str[4] = (mn % 10) + '0';
  str[5] = '\0';
  return str;
}

Advertisement

Berichten: 180
Geregistreerd: 26 Aug 2015, 11:57

Re: Bij sunset lampen aan en 22:40 weer uit

Berichtdoor Frits1956 » 14 Nov 2023, 23:01

Bert, je doet helemaal niets in de loop.
Hoe denk je dat de controller dan iets kan vergelijken en er eventueel een actie op kan ondernemen?
Het main programma zou er in jip en janneke taal bijvoorbeeld zo uit kunnen zien:
1 Haal de tijd van internet (of een andere bron)
2 vergelijk de van internet gehaalde tijd met de ingestelde tijden.
3 is de internet tijd gelijk aan de aan tijd, doe dan de lampen aan.
4 is de internet tijd gelijk aan de uit tijd, doe dan de lampen uit.
5 ga naar het begin van het main programma (wat gelijk staat aan dit is het einde van de instucties)

suc7 met je zoektocht.

Gebruikers-avatar
Berichten: 23
Geregistreerd: 24 Jul 2020, 14:55

Re: Bij sunset lampen aan en 22:40 weer uit

Berichtdoor bertgroothuis » 15 Nov 2023, 10:33

Hoi Frits1956,

Je hebt gelijk. Ik gebruik een DS1302 voor de tijd. Dat heb ik in een andere sketch werkend. Ik ben niet compleet geweest merk ik.
Deze 2 twee sketches wil ik dan samenvoegen tot 1 waar dan de tijd word vergeleken. In bovenstaande sketch wil ik in de loop een vergelijking toevoegen om te testen op de tijd en zodoende de lamp aan en later weer uit te kunnen zetten.
Wat mij niet lukt is om een vergelijking te maken die op deze tijden test. Dat wil ik testen in deze sketch. en dat later samenvoegen. Elk dingetje wil ik eigenlijk apart testen om het overzicht te houden. Ik ben geen pro in programmeren.
Ik hoop dat het zo wat duidelijker is.

Groet Bert.

Berichten: 180
Geregistreerd: 26 Aug 2015, 11:57

Re: Bij sunset lampen aan en 22:40 weer uit

Berichtdoor Frits1956 » 15 Nov 2023, 11:26

Allereerst een opmerking over de DS1302. Mijn ervaring is dat deze niet gelijk loopt.
Verder lijkt het erop dat je de sunset tijd van internet afhaalt. Dat zou inhouden dat je een internet verbinding hebt.
Als je een internet verbinding hebt, waarom gebruik je de tijd van dat internet dan niet?

Verder lijkt het mij onzin om naar een string te converteren. Je hebt allerlei int variabelen. Prima om mee te rekenen en te vergelijken lijkt mij.
suc7

Berichten: 38
Geregistreerd: 20 Jul 2022, 14:40

Re: Bij sunset lampen aan en 22:40 weer uit

Berichtdoor Harm J Seef » 15 Nov 2023, 11:42

Wellicht is het ook wel zo handig om even pas op de plaats te maken, en goed na te denken over waar je precies mee bezig bent, en vooral wat je wil.
Ja, het is inderdaad mogelijk om op internet te kijken hoe laat het is, om vervolgens via een lengte- en breedtegraad-berekening en datum te herleiden,
zodat berekend kan worden hoe laat de zon op een jouw locatie -plus/min zomertijd- ondergaat,
om daarmee een buitenlamp aan te zetten. Dit wordt een ‘Astro-timer’ genoemd.

Ik denk dat een schemersensor in combinatie met een schakelklok veel eenvoudiger is.
De schakelklok gaat om 15:00 aan. De klokbediende schemerschakelaar staat in serie met de buitenlamp.
Om 22:40 schakelt de klok alles uit. That’s all folks!

Natuurlijk is programmeren leuker. Gebruik dan een LDR als sensor, en een DCF-RTC als klok.
Voor het programmeren van schakeltijden in een computer, wordt meestal gebruik gemaakt van een epoch-counter.
Dit is in feite een secondenteller die om 24:00 gereset wordt.
Vanuit een RTC kan de huidige hh:mm-tijd teruggerekend worden naar een epochtijd.

22:40 = (22 * 60 * 60 ) + (40 * 60) = 79200 + 2400 = 81600

if ( EpochTime > 81600) { Light = false }

Succes met je project.

Gebruikers-avatar
Berichten: 23
Geregistreerd: 24 Jul 2020, 14:55

Re: Bij sunset lampen aan en 22:40 weer uit

Berichtdoor bertgroothuis » 15 Nov 2023, 13:44

Hoi Harm,

Dank je. Is het mogelijk om de tijd, bijvoorbeeld 22:40, om te zetten naar een getal? Daar heb ik naar lopen zoeken maar kan niets zinnigs vinden.

Gr. Bert

Berichten: 180
Geregistreerd: 26 Aug 2015, 11:57

Re: Bij sunset lampen aan en 22:40 weer uit

Berichtdoor Frits1956 » 15 Nov 2023, 14:27

Bert, er gaan 60 seconden in een minuut zoals je wel weet en 60 minuten in een uur.
Zoals harm laat zien is 22:40u gelijk aan 81600 seconden na middernacht...... Zie daar je getal

Gebruikers-avatar
Berichten: 23
Geregistreerd: 24 Jul 2020, 14:55

Re: Bij sunset lampen aan en 22:40 weer uit

Berichtdoor bertgroothuis » 15 Nov 2023, 14:42

Dat klopt Frits,

De zonsondergang heeft geen constante tijd. De uitkomst van de SolarCalculator geeft een bepaalde tijd. Bijvoorbeeld 17:05 voor de zonsondergang.
Als ik deze zonsondergang om kan zetten naar een getal kan dat vergelijken om de lampen aan te doen.
En om daar een omrekenslag in te maken kan ik niet vinden.
De tijd om de lampen uit te doen is dan wel constant en daar neem ik dan de waarde 81600 voor.

Berichten: 38
Geregistreerd: 20 Jul 2022, 14:40

Re: Bij sunset lampen aan en 22:40 weer uit

Berichtdoor Harm J Seef » 15 Nov 2023, 17:34

Bert, je mist even de clou. Astro-timers stammen uit begin van de 20e eeuw, toen de halfgeleiders nog ontwikkeld moesten worden.
Om altijd op tijd de nachtverlichting in portieken en trappenhuizen in te schakelen, werden mechanische astro-schakelklokken gebruikt.
Inmiddels is deze techniek achterhaald door de schemer-schakelaar.
Astro-timers worden in bepaalde engelse gemeenten nog steeds gebruikt omdat de lokale wetgeving dat eist. Zoek maar eens op internet onder ‘astro timer’.

Zoals je inmiddels vastgesteld hebt, heeft de zonsondergang (en opgang) geen vaste tijd.
Om de buitenlamp in te schakelen kun je een schemerschakelaar gebruiken.
Dit kan als digitale schemerschakelaar (Aan=donker), of als een ADC-waarde van een aangesloten ldr.
Zoek maar eens op ‘arduino ldr’.

Na 15:00, ofwel EpochTime = (15 x 60 x 60=) 54000, maak je variabele SwitchLdr= true.
if (Epoch > 54000) { SwitchLdr = true}

Voor een ldr als schemerschakelaar gebruik je een analoge ingang.
if (AdcLdr > 123) { Sunset = true ; } else { Sunset = false; }

De buitenlamp wordt aangestuurd vanuit een digitale uitgang.
if (Sunset == true && SwitchLdr == true) { BuitenLamp = HIGH;} else {Buitenlamp = LOW;}

Na 22.40 wordt de buitenlamp uitgeschakeld.
if (Epoch > 81600) { SwitchLdr = false;}

Gebruikers-avatar
Berichten: 23
Geregistreerd: 24 Jul 2020, 14:55

Re: Bij sunset lampen aan en 22:40 weer uit

Berichtdoor bertgroothuis » 16 Nov 2023, 10:28

Hoi Harm,

Ik zal dat gaan uitzoeken.

Bedankt.

Gr.Bert

Terug naar Arduino software

Wie is er online?

Gebruikers in dit forum: Google [Bot] en 104 gasten