Tidtagning på ESP8266 & arduino uno utan en RTC (realtidsklocka)? (2 / 3 steg)

Steg 2: Den verkliga provningen: hur exakt är en arduino uno / ESP8266 utan RTC?



"Men den arduino uno / ESP8266 / Wemos är felaktiga utan RTC och jag behöver noggrannhet över allt annat!"-säger skeptikern. Nästan alla arduino klocka instructables har därför en RTC enhet, även om de aldrig kommer att stängas av och behöver inte säkerhetskopiera funktion.

Jo var jag skeptiker. Men jag var frustrerad med komplext kodade internetapplikationer, skrymmande RTC enheter, librairies som inte var universellt kompatibla och frustrerad med sloppyness av det hela. Så skrev jag min egen skiss för att hålla tid som fungerar på alla arduino kompatibel mikrokontroller. Skissen är baserat bara på funktionen millis(). Denna funktion fungerar på alla microcontroller och allt det gör är att räkna i millisekunder som har förflutit sedan din senaste nollställning. Du hittar skissen nedan inklusive kommentarer explaing allt och jag också fäst den till detta instructable i en separat .ino fil. Det är smuts som är enkel att göra om du följer mina kommentarer och du kommer enkelt att kunna göra din egen anpassade version baserat på din tid att hålla behoven:

Skriven av Ruben Marc Speybrouck

osignerade långa timeNow = 0;

osignerade långa timeLast = 0;

Tid start inställningar:

int startingHour = 12;

Ange din start timme här inte nedan på int timme. Detta säkerställer korrekt daglig korrigering av tid

int sekunder = 0;

int minuter = 33.

int timmar = startingHour;

int dagar = 0;

Korrekta inställningar

Jagnt dailyErrorFast = 0; / / set det genomsnittliga antalet millisekunder din mikrokontroller är snabbt på en daglig basis

int dailyErrorBehind = 0; Ange det genomsnittliga antalet millisekunder din microcontroller tid ligger bakom dagligen

int correctedToday = 1; Ändra inte denna variabel, en betyder att tiden redan har korrigerats idag för felet i din styrelser crystal. Detta gäller för den första dagen för du bara sätta tiden när du laddat upp skissen.

void setup() { / / lägga installationen koden här, om du vill köra en gång:

Serial.BEGIN(9600); }


void loop() { / / sätta din huvudsakliga kod här, för att köra flera gånger:

timeNow = millis () / 1000; antalet millisekunder som har gått sedan boot

sekunder = timeNow - timeLast;

antalet sekunder som har gått sedan den senaste gången 60 sekunder nåddes.

om (sekunder == 60) {

timeLast = timeNow;

minuter = minuter + 1. }

om en minut har gått, börja räkna millisekunder från noll igen och lägga till en minut i klockan.

om (minuter == 60) {

minuter = 0;

timmar = timmar + 1. }


om en timme har gått ut, börja räkna minuter från noll och lägga till en timme i klockan


om (timmar == 24) {

timmar = 0;

dagar = dagar + 1.

}

om 24 timmar har passerat, lägga till en dag

om (timmar == (24 - startingHour) & & correctedToday == 0) {

Delay(dailyErrorFast*1000);

sekunder = sekunder + dailyErrorBehind;

correctedToday = 1; }

varje gång 24 timmar har gått sedan den första tidpunkten och det har inte varit återställa denna dagen innan, lägga till millisekunder eller fördröja programmet med några millisekunder.

Ändra dessa varialbes enligt din styrelse fel.

Det enda sättet att ta reda på hur långt bort din styrelser inre klocka är, är genom att ladda upp denna skiss på exakt samma tid i realtid, att låta det gå några dagar

och sedan bestämma hur många sekunder långsamt/snabbt din styrelser inre klocka är en daglig genomsnitt. (24 timmar).

om (timmar == 24 - startingHour + 2) {

correctedToday = 0; }

Låt skissen som vet att en ny dag har börjat för vad gäller korrigering, om denna linje inte var här arduiono / / skulle fortsätta att korrigera för hela timme som är 24 - startingHour.

Serial.Print ("tiden är:");

Serial.Print(Days);

Serial.Print(":");

Serial.Print(hours);

Serial.Print(":");

Serial.Print(Minutes);

Serial.Print(":");

Serial.println(seconds);

}

Jag sprang koden på både en wemos D1 och en arduino uno. Jag ställa in tiden lika med tiden från:http://www.timeanddate.com/ på midnatt dag noll (du har uppenbarligen inte att starta vid midnatt!-Jag ingår tid ange koden ovan void setup). Efter en dag och 9 timmar var skillnaden mellan tiden på min mikrokontroller och denna hemsida ca en sekund. Jag kollade detta genom att ta en skärmdump av min följetong bildskärm på ena sidan av skärmen och har webbsidan öppnar på andra sidan. (se bild).

Efter ca 3 dagar, på både min arduino och wemos var klockan ca 2 till 2,5 sek snabbt. Det är 274 sekunder ett år off eller drygt fyra och en halv minut. Som är oacceptabelt! Nej, inte riktigt. Jag har precis lagt en rad kod till min skiss som korrigerar tiden på min microcontrollers antingen genom att fördröja programmet bara lite varje 24 timmar eller genom att lägga till några millisekunder varje dag. I mitt fall ca 0,75 sekunder varje dag. Och där har du det på lång sikt nära andra exakt tidtagning med nej bråken någon ombord!

Här är korrigering koden alla tillsammans i praktiken ännu en gång så du kan lätt se hela bilden

Korrekta inställningar

int dailyErrorFast = 0; Ange det genomsnittliga antalet millisekunder din mikrokontroller är snabbt på en daglig grund int dailyErrorBehind = 0; / / set det genomsnittliga antalet millisekunder din mikrokontroller är bakom på en daglig basis int correctedToday = 1; / / ändra inte denna variabel, en betyder att tiden redan har korrigerats idag för felet i din styrelser crystal. Detta gäller för den första dagen för du bara sätta tiden när du laddat upp skissen.:

om (timmar == (24 - startingHour) & & correctedToday == 0) {

Delay(dailyErrorFast*1000);
sekunder = sekunder + dailyErrorBehind, correctedToday = 1;}

varje gång 24 timmar har gått sedan den första tidpunkten och det har inte varit återställa denna dagen innan)

om (timmar == 24 - startingHour + 2) {correctedToday = 0;}

Låt skissen som vet att en ny dag har börjat för vad gäller korrigering, om denna linje inte var här arduiono
skulle fortsätta att korrigera för hela timme som är 24 - startingHour.

Se Steg
Relaterade Ämnen

ESP8266 WiFi DS18B20 temperaturgivare (ESP8266 Arduino IDE utan Arduino)

I den här guiden visar vi hur man bygger ESP8266 WiFi temperatursensor med DB18B20. Vi kommer att använda Arduino IDE, men utan Arduino. Data kommer att skickas till EasyIoT server (Windows eller Raspberry Pi) för fin uppvisning och loggning.Se fler...

Hårddisk Clock (HDD klocka med Arduino Uno)

Detta är ett roligt projekt som kan göras enkelt och också billigt. I detta instructable vi kommer att förklara steg för steg hur man gör denna vackra POV klocka.Använda materialet:Arduino Uno,Tiny RTC modul,ULN 2003,IR diod och IR transistor (använd...

Hur man programmerar Arduino Pro Mini använder Arduino Uno och ArduShield - utan kablar

Huvudsyftet med denna anvisning är att visa dig hur man programmerar i mest lätt sätt Arduino Mini eller Arduino Pro Mini med Arduino UNO och ArduShield – utan kablar.Steg för steg handledning, med några åtgärder för att hoppa av Awesome PCB.Steg 1 -...

ESP8266 Web Server (utan Arduino)

Hej där,För några veckor sedan jag har skapat ett projekt med en ESP8266 som heter: ESP8266 Web Server utan en Arduino.Det är precis vad du kommer att bygga, om du följer alla steg i detta Instructable.Det är fantastiskt vad du kan göra med denna $4...

Skicka mail med ESP8266 och Arduino UNO

Hur man får Adafruits "send_email_smtp.ino" till Skicka e-post med ESP8266 och Arduino UNO.Och eliminera problemet med "inget svar från modul" många har.Modulen fungerar på 3.3V logik enligt dokumentationen, men jag hade inga problem m...

Ansluta ESP8266-01 till Arduino UNO / MEGA och BLYNK

Detta är en handledning för att visa dig hur du flash en firmware-ESP8266-01 och ansluter till Blynk med hjälp av en ESP8266 - 01 som en Arduino wifi sköld.Maskinvara som behövs:* Arduino Uno/Mega* Hoppare ledningar* USB A till USB B-kabelESP8266-01P...

Ansluta till Blynk med ESP8266 som Arduino Uno wifi sköld (endast Mac)

Detta är en handledning för att visa dig hur du ansluter till Blynk med hjälp av en ESP8266 - 01 som en Arduino Uno wifi sköld. Denna handledning är mycket detaljerad att hjälpa de som är väldigt ny på det här.-Maskinvara som behövs:Arduino UnoHane t...

Den första användningen av ESP8266 med Arduino Uno

I dag ska jag visa dig att hur kan vi förbereda våra modul ESP8266 som ska användas med Arduino UNO.Behovet av lista:1. Arduino UNO (med USB-kabel som ansluten till datorn via USB-kabel, även det kommer att använda sin spänning)2. din dator (om du ka...

Lägga upp skisser till Arduino Pro Mini använder Arduino UNO styrelsen (utan att ta bort Atmel Chip)

Detta beskriver en procedur för att använda Arduino UNOS inbyggda USB till Serial(TTL) converter ladda upp skisser till Arduino Pro Mini styrelsen utan att behöva ta bort UNO'S Atmel mikro-controller chip. Detta är användbart för dem har börjat med A...

Hur ladda upp koder till Lilypad Arduino utan FTDI med hjälp av Arduino Uno

Idag, ska jag visa dig som jag brukade hade ett problem med min FTDI modul medan jag försöker ladda upp någon - på Arduino IDE designat - koder från min dator till Lilypad Arduino Atmega328 ombord.Faktiskt, måste du använda dina FTDI moduler som vanl...

Hur man gör den enklaste bakbord Arduino Uno... NÅGONSIN! -Breduino! (& Hur ladda upp skisser rakt till det!) With Additional Hardware Options - UPDATED - JULY 2013

Steg 1: Avsnitt 1 - byggnad reglerade 5 volts strömkälla! Okay now before i start, something about my notes for my step-by-step PICTURE instructables that i Love to create:"Jag brukade märka alla mina bilder i min instructables men det verkar instruc...

Visa YouTube statistik på en 320 x 240 Pixel LCD-skärm är ansluten till en Arduino Uno

Detta lilla Instructable visar dig hur att använda en 320 x 240 pixel LCD skärm ansluten till en Arduino Uno med en nätverk sköld för, att visa statistik för Youtube-kanaler.Jag skapade den här som jag ville se hur många prenumeranter och åsikter jag...

4 x 4 X 4 ledde kub med Arduino Uno

Som någon som är mycket nytt för digital elektronik var denna LED cube kul att göra, utmanande och en bra lektion i lödning. Om du har lite tålamod (64 LED's för att löda!) och stadiga händer, detta projekt kommer att vara väl värt det i slutändan!St...

Hur man bygger en Arduino Uno på en skärbräda

Om du är som och mig och njuta av elektroniska byggprojekten då du kanske har arbetat med Arduino Uno. Arduino uno är den mest populära micro controller i serien och har en stor samling bibliotek vilket göra att arbeta med det mycket lätt. Så det sku...

Arduino UNO som AtMega328P programmerare

Efter att ha fått min första Arduino UNO, insåg jag snart att det är opraktiskt att använda en UNO för varje projekt. Som med mikrochip familjen av MCU, jag ville ha ett enkelt sätt att programmet fristående kretsar och chips.Söka på internet, var de...

DIY Bluetooth telefon kontrollerade BB-8 Droid med Arduino UNO

Jag är ett stort Star Wars fan och när jag såg Star Wars: The Force vaknar tänkte jag att jag behöver en BB-8 droid. Det var häftigt hur detta lilla område flyttade i filmen. Så jag bestämde mig för att jag ska göra denna droid som baseras på Arduino...

ThermoClock: En OpenSource Arduino UNO OLED klocka som mäter även temperatur

Hej, alla!Idag ska jag visa dig hur man gör An OpenSource Arduino UNO OLED klocka att också åtgärder temperatur. Detta projekt är en OpenSource och det är öppet för alla. Det kräver inte någon särskild ingenjör färdigheter, och tar dig mindre än någr...

Adafruit wave sköld + arduino uno R3 = larm (knight rider)

Hey!Vårt lager gick sönder ett tag sedan och de har stulit två cyklar och min laptop som jag bara har reparerat. Den bärbara datorn är inte värt mycket, men det är (var) av en massiv, personliga värde för mig och det är ganska synd om något blir hack...

Allt i en Prototyping pläterar för Arduino Uno

Rev3ProtoPack är en Arduino Uno breadboarding platta som gör att du kan prototyp kretsar vart du än går. Den har ett 9 volts batteri innehavaren, Arduino Uno antistatisk stötfångare ärende och en halv storlek bakbord kortplats, så du har alla kompone...