Wat is een goed alternatief voor urenlang "delay"?

Arduino specifieke Software
Berichten: 47
Geregistreerd: 29 Sep 2019, 18:42
Woonplaats: Vlijmen

Wat is een goed alternatief voor urenlang "delay"?

Berichtdoor Dorus1404 » 18 Dec 2019, 19:38

Ik gebruik in onderstaande sketch 2x "delay" Het blijkt dat door een of andere oorzaak de "timing" toch uit sync raakt. Daarom de vraag: Wat is een goed alternatief voor het gebruik van "delay"?

/*
Avondtimer

Een avondtimer, schakelt een relais in bij schemer (externe schakeling)
van schemer tot bedtijd. Verlengt tussen 21 jun en 21 dec de avondtijd
elke dag met 2 minuten en na 21 dec verkort elke dag met 2 minuten.
De waarde van de variabele "d" kan worden aangepast aan de begindatum.
*/

int pinin = 5; // Krijgt 5 volt van schemerschakeling bij invallende duisternis
int pinuit = 6; // stuurt een vermogenstransistor met relais. Hoog is Aan
int vala = 0;

unsigned long d = 25200000; // donkere tijd in mSec; schemering tot bedtijd.
long x = 120000; // extra + of - tijd, 2 minuten (tot 21-12 +, daarna -)

void setup() {
pinMode(pinin, INPUT);
pinMode(pinuit, OUTPUT);
}

void loop() {
vala = digitalRead(pinin); // 0 volt bij licht en 5 volt in donkere tijd
if (vala == LOW)
digitalWrite(pinuit, LOW);
else {
digitalWrite(pinuit, HIGH); // donker = 5 volt stuurt relais Aan
delay(d); // schemer tot bedtijd
d = d + x; // dagelijkse verlenging of verkorting avondtijd
if (d >= 31560000) // 29 okt - 21 dec = 53(x) + 25.200.000
x = x * -1; // x wordt neg na 21 dec
digitalWrite(pinuit, LOW); // relais Uit bij bedtijd
if (vala == HIGH) // Voorkomt "delay" overdag, zodat pin 5 weer op tijd wordt geactiveerd
delay(50400000); // Wachten tot ca. 14:00 uur volgende dag. Dan pin 5 = LOW
}
}

Advertisement

Gebruikers-avatar
Berichten: 2655
Geregistreerd: 06 Aug 2016, 01:03

Re: Wat is een goed alternatief voor urenlang "delay"?

Berichtdoor Koepel » 18 Dec 2019, 20:02

Vraag: Hoe doe ik iets met timing ?
Anwoord: millis().
https://github.com/Koepel/Fun_with_millis/blob/master/millis_clock.ino

Berichten: 4064
Geregistreerd: 16 Okt 2013, 14:31
Woonplaats: s hertogenbosch

Re: Wat is een goed alternatief voor urenlang "delay"?

Berichtdoor shooter » 18 Dec 2019, 21:09

zowel delay als millis() is niet zo precies als je zou willen,dat heeft te maken met de deelwaarde in de processor en het gebruikte kristal.
Een veel beter oplossing is met een RealTimeClock IC.
een beetje goede doet maar 1 seconde per week mis.en zelfs als je de spanning eraf haalt en na een week weer aanzet blijft de tijd goed. alleen gebeurt er dan niks.
je kunt met die tijd dus een rekening doen die dan je dag verkort of verlengt.
ga uit van een correcte tijd bijv GMT en ga dan een paar regels rekenen om je tijd te krijgen.
paul deelen
shooter@home.nl

Berichten: 47
Geregistreerd: 29 Sep 2019, 18:42
Woonplaats: Vlijmen

Re: Wat is een goed alternatief voor urenlang "delay"?

Berichtdoor Dorus1404 » 19 Dec 2019, 06:13

Bedankt voor de suggesties.

Andere vraag:
Is het ook mogelijk om b.v. een tijd uit b.v. een bron als internettijd, of een atoomklok te importeren?

Gebruikers-avatar
Berichten: 241
Geregistreerd: 22 Jan 2013, 16:40

Re: Wat is een goed alternatief voor urenlang "delay"?

Berichtdoor zuid » 19 Dec 2019, 08:34

Beide is mogelijk als je een board hebt dat via wifi verbinding met internet heeft.
Daar zijn een heleboel varianten van.
Zoek eens op ESP32 of ESP8266.
Met een verbinding met internet is het ook mogelijk de tijd waarop de zon onder en/of opkomt ook via internet op te vragen.
m.v.g, Nico

Gebruikers-avatar
Berichten: 2655
Geregistreerd: 06 Aug 2016, 01:03

Re: Wat is een goed alternatief voor urenlang "delay"?

Berichtdoor Koepel » 19 Dec 2019, 09:44

Samengevat:

Even een korte tijd wachten, bijvoorbeeld 10ms: delay().
Iets met een vaste interval doen, bijvoorbeeld iedere seconde: millis().
Een RTC met batterij geeft de juiste tijd. De DS3231 is de beste keus.
Een DCF77 ontvanger is ook een (onhandige) mogelijkheid, die ontvangt een radio-signaal uit Duitsland.
Een Ethernet Shield gebruiken en dan de tijd op internet opvragen is iets van een paar jaar geleden.
De ESP32 omgeving komt met een voorbeeld, zo eenvoudig kan het zijn: https://github.com/espressif/arduino-esp32/blob/master/libraries/ESP32/examples/Time/SimpleTime/SimpleTime.ino.

En dan heb je nog mijn persoonlijke jarenlange pogingen om via een LDR de tijd te synchroniseren op het dag- en nachtritme. De testen tot nu toe gaan nog niet goed.

Gebruikers-avatar
Berichten: 241
Geregistreerd: 22 Jan 2013, 16:40

Re: Wat is een goed alternatief voor urenlang "delay"?

Berichtdoor zuid » 19 Dec 2019, 09:55

Als je het wil proberen via zon opkomst en zon ondergang.
KNMI geeft via onderstaande link de tijden weer.
http://weerlive.nl/delen.php
http://weerlive.nl/api/json-data-10min.php?key=demo&locatie=Amsterdam

IK heb daarnaast vastgesteld dat (mijn) esp8266 board ook na 5 dagen altijd nog geen meetbare afwijking heeft t.o.v. de werkelijke tijd..
Ik doe geen tijd update maar controleer wel elk uur of er al een verschil is met NPT tijd.
Na 5 dagen altijd nog geen verschil groter dan + of - 1 seconde.

Gebruikers-avatar
Berichten: 2655
Geregistreerd: 06 Aug 2016, 01:03

Re: Wat is een goed alternatief voor urenlang "delay"?

Berichtdoor Koepel » 19 Dec 2019, 17:03

Mijn bedoeling met de LDR is om op ieder willekeurig eenvoudig Arduino board met een LDR de tijd te kunnen bepalen. Na het aanzetten zou de Arduino na een paar dagen de tijd kunnen weten. Bijvoorbeeld een getal van 0 t/m 23 voor het uur. Soms is een lamp 's avonds feller dan het daglicht overdag (in de winter). Maar het daglicht duurt langer, dus dat zou gedetecteerd kunnen worden. Ik wil niet dat de tijd gaat verschuiven doordat 's avonds een lamp aan is. Als de code de tijd opnieuw gaat synchroniseren, dan wil ik dat toch ieder getal van het uur voorbij komt, en dat er niets wordt overgeslagen. Soms draait een Arduino op batterijen op de interne clock. Die is niet nauwkeurig dus dan is niet meer precies bekend wanneer het 24 uur later is. Om dat te programmeren is met open ogen een moeras inlopen.

Gebruikers-avatar
Berichten: 241
Geregistreerd: 22 Jan 2013, 16:40

Re: Wat is een goed alternatief voor urenlang "delay"?

Berichtdoor zuid » 19 Dec 2019, 19:46

Doe voorzichtig(in het moeras) Opgave lijkt mij vrijwel onmogelijk.
Om een goed patroon te ontdekken heb je eigenlijk veel gegevens nodig.
Om veel gegevens te bewaren heb je weer veel computerruimte nodig.
Bovendien vergt het analyseren veel rekenkracht.
Elke willekeurige Arduino en elke willekeurige plaats.
Ik vrees dat je diep in het moeras beland.

Berichten: 4064
Geregistreerd: 16 Okt 2013, 14:31
Woonplaats: s hertogenbosch

Re: Wat is een goed alternatief voor urenlang "delay"?

Berichtdoor shooter » 19 Dec 2019, 19:51

ik denk dat je om binnen een uur te kunnen werken je een database van een jaar of 10 nodig hebt, dat kan wel want je kunt de zonneschijn wel in een database vinden op internet.
maar daar ging de vraagstelling niet over.
paul deelen
shooter@home.nl

Volgende

Terug naar Arduino software

Wie is er online?

Gebruikers in dit forum: arahokol en 9 gasten