Tijdwaarneming op ESP8266 & arduino uno zonder een RTC (Real Time CLock)? (2 / 3 stap)

Stap 2: De werkelijke TEST: hoe nauwkeurig is een arduino uno / ESP8266 zonder RTC?


"Maar de arduino uno / ESP8266 / Wemos is onnauwkeurig zonder RTC en ibehoefte nauwkeurigheid boven alles!"-zegt de scepticus. Bijna alle arduino klok instructables zijn daarom voorzien van een RTC-eenheid, zelfs als ze zijn never gonna worden uitgeschakeld en niet de back-up functie vereisen.

Nou was ik ook scepticus. Maar ik was gefrustreerd met ingewikkeld gecodeerde internettoepassingen, omvangrijk RTC eenheden, documentatiecentra die niet universeel toepasbare, en gefrustreerd met de sloppyness van dit alles waren. Dus schreef ik mijn eigen schets om te houden van de tijd die op een arduino compatibel microcontroller werken zal. De schets is uitsluitend gebaseerd op de millis()-functie. Deze functie werkt op een microcontroller en alles wat het doet is het tellen van de milliseconden dat is verstreken sinds uw laatste reset. U vindt de schets hieronder met inbegrip van opmerkingen explaing alles en ik ook aan het dit instructable in een aparte Ino bestand. Het is vuil eenvoudig te maken als u mijn reacties volgen en u gemakkelijk zult om uw eigen aangepaste versie op basis van uw behoeften van de tijdwaarneming te maken:

Geschreven door Ruben Marc Speybrouck

unsigned long timeNow = 0;

unsigned long timeLast = 0;

De instellingen van de tijd start:

int startingHour = 12;

uw startende uur hieronder, niet op int uur. Dit zorgt voor een nauwkeurige dagelijkse correctie van tijd

int seconden = 0;

int minuten = 33;

int uur = startingHour;

int dagen = 0;

Nauwkeurigheid instellingen

Iknt dailyErrorFast = 0; / / het gemiddelde aantal milliseconden van uw microcontroller tijd snel op een dagelijkse basis is set

int dailyErrorBehind = 0; het gemiddelde aantal milliseconden die van uw microcontroller tijd achter op een dagelijkse basis is instellen

int correctedToday = 1; Wijzig deze variabele, niet een betekent dat de tijd is reeds gecorrigeerd vandaag voor de fout in uw planken kristal. Dit geldt voor de eerste dag omdat je gewoon de tijd wanneer u de schets geüpload instellen.

void setup { / / zetten uw setup-code hier, om het eenmalig uit te voeren:

Serial.begin(9600); }


void loop { / / zet uw belangrijkste code hier, om het herhaaldelijk uitvoeren:

timeNow = millis () / 1000; het aantal milliseconden dat is verstreken sinds de boot

seconden = timeNow - timeLast;

het aantal seconden dat is verstreken sinds de laatste keer 60 seconden werd bereikt.

Als (seconden == 60) {}

timeLast = timeNow;

minuten = minuten + 1; }

Als één minuut is verstreken, start tellen milliseconden vanaf nul opnieuw en voeg één minuut op de klok.

Als (minuten == 60) {}

minuten = 0;

uren = uur + 1; }


Als een uur is verstreken, beginnen tellen vanaf nul minuten en één uur toe te voegen aan de klok


Als (uren == 24) {}

uren = 0;

dagen = dagen + 1;

}

als 24 uur verstreken zijn, voegt u één dag

Als (uren == (24 - startingHour) & & correctedToday == 0) {}

delay(dailyErrorFast*1000);

seconden = seconden + dailyErrorBehind;

correctedToday = 1; }

telkens 24 uur zijn verstreken sinds de aanvankelijke begintijd en het is niet deze eergisteren reset, toevoegen van milliseconden of vertraging van het programma met enkele milliseconden.

Het wijzigen van deze varialbes volgens de fout van je board.

De enige manier om erachter te komen hoe ver uw planken interne klok is, is door het uploaden van deze schets op precies hetzelfde moment als de real-time, te laten lopen voor een paar dagen

en dan bepalen hoeveel seconden langzaam/snel uw interne klok van de planken is op een dagelijkse gemiddelde. (24 uur).

Als (uren 24 - startingHour + 2 ==) {}

correctedToday = 0; }

Laat de schets weten dat een nieuwe dag is begonnen voor wat betreft correctie, als deze regel niet hier de arduiono is / / zou blijven om te corrigeren voor een hele uur thats 24 - startingHour.

Serial.Print ("de tijd is:");

Serial.Print(Days);

Serial.Print(":");

Serial.Print(hours);

Serial.Print(":");

Serial.Print(minutes);

Serial.Print(":");

Serial.println(seconds);

}

Ik liep de code op een wemos D1 zowel een arduino uno. Ik stel de tijd gelijk is aan de tijd van:http://www.timeanddate.com/ op middernacht dag nul (Natuurlijk hoef te beginnen bij middernacht!-ik opgenomen instellen tijdcode boven void setup). Na één dag en 9 uur was het verschil tussen de tijd op mijn microcontrollers en deze website ongeveer één seconde. Ik heb dit gecontroleerd door het nemen van een screenshot van mijn seriële monitor aan de ene kant van het scherm en de webpagina opent aan de andere kant. (zie foto).

Na ongeveer 3 dagen, op zowel mijn arduino en wemos werd de klok ongeveer 2-2,5 sec snel. dat is 274 seconden een jaar uit of net iets meer dan vier en een halve minuut. Dat is onaanvaardbaar! Nee, niet echt. Ik voegde enkel een regel code aan mijn schets waarmee de tijd op mijn microcontrollers worden gecorrigeerd door het uitstellen van het programma slechts een beetje elke 24 uur of door het toevoegen van een paar milliseconden elke dag. In mijn geval ongeveer 0,75 seconden elke dag. En daar heb je het, lange termijn in de buurt van tweede nauwkeurige tijdwaarneming met geen gedoe op elk bord!

Hier is de correctie code allemaal samen in de praktijk nogmaals zodat je gemakkelijk het hele plaatje zien kon

Nauwkeurigheid instellingen

int dailyErrorFast = 0; het gemiddelde aantal milliseconden van uw microcontroller tijd snel op een dagelijkse is basis int dailyErrorBehind = 0; / / set van het gemiddelde aantal milliseconden van uw microcontroller tijd achter op een dagelijkse basis int correctedToday = 1 is; / / Wijzig deze variabele, niet een betekent dat de tijd is reeds gecorrigeerd vandaag voor de fout in uw planken kristal. Dit geldt voor de eerste dag omdat je gewoon de tijd wanneer u de schets geüpload instellen.:

Als (uren == (24 - startingHour) & & correctedToday == 0) {}

delay(dailyErrorFast*1000);
seconden = seconden + dailyErrorBehind; correctedToday = 1;}

elke keer als 24 uur zijn verstreken sinds de aanvankelijke begintijd en er niet opnieuw deze eergisteren)

Als (uren 24 - startingHour + 2 ==) {correctedToday = 0;}

Laat de schets weten dat een nieuwe dag is begonnen voor wat betreft correctie, als deze regel niet hier de arduiono is
zou blijven om te corrigeren voor een hele uur thats 24 - startingHour.

Gerelateerde Artikelen

Instellen van een Real Time Clock (RTC) met een Arduino Pro Micro

Instellen van een Real Time Clock (RTC) met een Arduino Pro Micro

Voor een groot aantal projecten moet u kunnen weten de real time. Het precieze seconden, de tijd van de dag, of de datum van de maand, is een RTC Real Time Clock Module het antwoord op deze behoefte.Met een standby verbruik, geavanceerde nauwkeurighe
Zet uw Arduino Uno in een USB-HID-Mididevice

Zet uw Arduino Uno in een USB-HID-Mididevice

terwijl een Arduino Uno bouwen op basis van Midi-Controller voor Ableton Live, stuitte ik op het HIDUINO-project (http://code.google.com/p/hiduino/). U kunt uw Arduino Uno (of een ander apparaat met een AVR-USB-chipset zoals de 8u2) in een driverless
Arduino Nano en Visuino: 7 Segment Display klok met MAX7219 en DS1307 Real Time Clock(RTC)

Arduino Nano en Visuino: 7 Segment Display klok met MAX7219 en DS1307 Real Time Clock(RTC)

DS1307 Real timerklok zijn wijd-beschikbaar low-cost I2C RTC modules. Ze komen met een klok en een kleine batterij, en wanneer aangesloten op de Arduino, annuleerteken vieren voetspoor van real-time zelfs wanneer de Arduino board is niet aangedreven.
Arduino Nano: DS1307 real-time Clock(RTC) met Visuino

Arduino Nano: DS1307 real-time Clock(RTC) met Visuino

DS1307 Real timerklok zijn wijd-beschikbaar low-cost I2C RTC modules. Ze komen met een klok en een kleine batterij, en wanneer aangesloten op de Arduino, annuleerteken vieren voetspoor van real-time zelfs wanneer de Arduino board is niet aangedreven.
Arduino Nano: DS1302 real-time Clock(RTC) met Visuino

Arduino Nano: DS1302 real-time Clock(RTC) met Visuino

DS1302 Real timerklok zijn wijd-beschikbaar low-cost RTC modules. Ze komen met een klok en een kleine batterij, en wanneer aangesloten op de Arduino, annuleerteken vieren voetspoor van real-time zelfs wanneer de Arduino board is niet aangedreven.In d
Raspberry Pi - Real Time Clock (RTC)

Raspberry Pi - Real Time Clock (RTC)

In dit project, zullen we maken een Real Time Clock (RTC) die de tijd voor je Raspberry Pi houden, zelfs als deze is uitgeschakeld.Real Time Clock is essentieel voor elke Micro-controllers tijd te houden zelfs als deze is uitgeschakeld. Zonder een Ne
Hoe het bouwen van een Arduino Uno op een BreadBoard

Hoe het bouwen van een Arduino Uno op een BreadBoard

Als je net als en mij en geniet van elektronische bouwprojecten dan u zou hebben samengewerkt met de Arduino Uno. De Arduino uno is de meest populaire micro controller van de serie en heeft een grote collectie van bibliotheken die werken met het zeer
ESP8266 WiFi DS18B20 temperatuursensor (ESP8266 Arduino IDE zonder Arduino)

ESP8266 WiFi DS18B20 temperatuursensor (ESP8266 Arduino IDE zonder Arduino)

In deze tutorial zullen we laten zien hoe bouwen ESP8266 WiFi temperatuursensor met DB18B20. Zullen we gebruik maken van Arduino IDE, maar zonder Arduino. Gegevens zal worden verzonden naar EasyIoT server (Windows of Raspberry Pi) op het mooi scherm
Mini arduino Plotter zonder een servomotor

Mini arduino Plotter zonder een servomotor

In dit project die zal ik u tonen hoe zet van twee oude DVD-schijven in een mini plotter.this project is eenvoudig en gemakkelijk om te doen en maakt een goede praktijk, als je wilt om een echte CNC machine (dit is waarom ik begon dit project voor te
Instellen van Real Time Clock (RTC) op Raspberry Pi

Instellen van Real Time Clock (RTC) op Raspberry Pi

Opmerking: er waren enkele problemen met het geluid op de YouTube-video. Ik zal heb het tijdelijk neer genomen en een vaste video uploaden en de koppeling snel bijwerken. Sorry voor het ongemak.Raspberry Pi is een hardware-klok aan boord niet opgenom
1 LED spel met Arduino Uno en een RGB LED

1 LED spel met Arduino Uno en een RGB LED

soms heb ik gewoon die dagen waar ik wil echt graag iets netjes met de Arduino die ik heb liggen, maar ik weet dat ik heb niet het geduld voor een meer betrokken project dat meer dan een dag of zo nemen zult. Dit is voor een van die dagen.Het uitgang
Real Time Clock (RTC) met LinkIt ONE

Real Time Clock (RTC) met LinkIt ONE

Ooit geplakt met een project waarvoor u een real timerklok (een klok die u vertelt de datum & tijd en niet alleen hoeveel (milli) seconden verstreken sinds u het aan de macht verbonden)?Je hebt 2 opties:Gebruik van de GPS en de tijd uitstappen daarIn
YouTube Stats weergeven op een 320 x 240 Pixel LCD-scherm met een Arduino Uno

YouTube Stats weergeven op een 320 x 240 Pixel LCD-scherm met een Arduino Uno

Deze kleine Instructable zal u tonen hoe te een 320 x 240 pixel LCD scherm aangesloten op een Arduino Uno met een schild netwerk ook gebruiken, om te tonen stats voor Youtube-kanalen.Ik heb dit gemaakt als ik wilde om te zien hoeveel abonnees en stan
ESP8266 Web Server (zonder Arduino)

ESP8266 Web Server (zonder Arduino)

Hey daar,Een paar weken geleden heb ik creëerde een project met een ESP8266 genoemd: ESP8266 Web Server zonder een Arduino.Dat is precies wat je gaat om te bouwen, als u alle stappen in dit Instructable volgen.Het verbazingwekkend wat je kunt doen me