De binaire alarmklok Arduino (4 / 16 stap)

Stap 4: Tijd houden

Als u wilt bijhouden van de tijd gebruikte ik alleen de arduino, en de standaard arduino functie millis(). Deze methode zal niet helemaal exact, want de 16Mhz kristal oscillator, die beslist van de klokfrequentie van de arduinos CPU, waarschijnlijk niet precies 16 000 000 Hz zijn. Het goede nieuws is dat je meten kan hoe onjuist uw klok is en compenseren in uw code, omdat de offset constant gedurende een bepaalde periode van tijd moet.

Meten hoe onjuist je arduino is:
Zoals al eerder zei, de arduino zal hebben een kleine fout, deze fout is afhankelijk van de kristal oscillator en anders voor elke arduino, zal zijn om te meten hoeveel mijn arduino klok verschilde van de juiste tijd, ik het uitprinten van de tijd (uur, minuut en tweede variabelen) via seriële geprogrammeerd. Ik laat het lopen voor een lange tijd (Over nacht en meer) en de arduino tijd ten opzichte van een klok die ik wist was precies te zijn, aan het begin en het einde van mijn meettijd. Verdeel het tijdsverschil met de tijd die de test was voor het berekenen van de fout elk uur. Ik vond dat mijn arduino ongeveer 0,4 seconden is snel elk uur. Ik gebruikte exacttimenow.com te krijgen van de exacte tijd, maar hebt u een horloge die u weet is zeer precies te zijn, voel je vrij om die te gebruiken.
De code die ik gebruikt de tijd te houden is een aanpassing van sommige code vond ik op de arduino forums. Ik herschreef het met if-statements in plaats van de divisie en restbepaling bij deling, om te zien of er zou om het even welk verschil snelheid en vond dat de als-versie meer dan 15 keer sneller is (hoewel beide nog steeds heel snel zijn, meer info over de test hier).

Omdat ik wil andere dingen in mijn hoofdlus (zoals het controleren van de touch sensor, controleren op de knop persen, enz) gebeurt zo vaak mogelijk, ik gebruikte de snellere versie.

De code:

Elke keer als de klokfunctie heet het voegt de tijd in milliseconden sinds laatste tot een variabele m, heette wanneer er één seconde is verstreken (m > 999) de tweede variabele is verhoogd en m wordt teruggesteld. Wanneer de variabele seconden 60 bereikt, de minuut variabele wordt met één verhoogd, en seconden wordt ingesteld op nul. Hetzelfde gebeurt met de variabele minuten; Wanneer het 60 wordt bereikt, er 1 bij optellen om de uren en minuten opnieuw. De variabele uur zal worden teruggesteld wanneer het 24 is bereikt.

Om dit te compenseren dat mijn arduino 0,4 seconden sneller evey uur is, minder ik de seconden met twee seconden elk vijfde uur.

____________________________________________________________________

The clock() function:

// CLOCK VARIABLES:
#define MAX_MILLIS_VALUE 34359738
unsigned long current_millis_value = 0;
unsigned long previous_millis_value = 0;
unsigned long m = 0;
int seconds = 0;
int minutes = 0;
int hours = 0;

void clock()
{
  current_millis_value = millis();
  if (current_millis_value < previous_millis_value) // if millis overflows
  {
    m += MAX_MILLIS_VALUE - previous_millis_value + current_millis_value;
  }
  else // if millis has not overflown
  {
    m += current_millis_value - previous_millis_value;
  }
  if (m>999)
  {
    seconds++;
    m = m-1000;
  }
  if (seconds>59) // if seconds == 60
  {
    minutes++;
    seconds = 0;
  }
  if (minutes>59) // if minutes == 60
  {
    hours++;
    minutes = 0;
    if(hours%5==0) // adjust the time with -2 seconds every 5th hour.
      seconds = seconds - 2;  // this will cause seconds to be -2,
                             // therefore seconds can't be unsigned.
  }
  if (hours>23) // if hours == 24
  {
    hours = 0;
  }

 The clock() function:

 

// CLOCK VARIABLES:
 #define MAX_MILLIS_VALUE 34359738
 unsigned long current_millis_value = 0;
 unsigned long previous_millis_value = 0;
 unsigned long m = 0;
 int seconds = 0;
 int minutes = 0;
 int hours = 0;

 

void clock()
 {
   current_millis_value = millis();
   if (current_millis_value < previous_millis_value) // if millis overflows
   {
     m += MAX_MILLIS_VALUE - previous_millis_value + current_millis_value;
   }
   else // if millis has not overflown
   {
     m += current_millis_value - previous_millis_value;
   }
   if (m>999)
   {
     seconds++;
     m = m-1000;
   }
   if (seconds>59) // if seconds == 60
   {
     minutes++;
     seconds = 0;
   }
   if (minutes>59) // if minutes == 60
   {
     hours++;
     minutes = 0;
     if(hours%5==0) // adjust the time with -2 seconds every 5th hour.
       seconds = seconds - 2;  // this will cause seconds to be -2,
                              // therefore seconds can't be unsigned.
   }
   if (hours>23) // if hours == 24
   {
     hours = 0;
   }
  
   previous_millis_value = current_millis_value;
 }
  previous_millis_value = current_millis_value;
}

______________________________________________________________________

Gerelateerde Artikelen

Verstandig klok 3 - geeky alarmklok Arduino gebaseerde

Verstandig klok 3 - geeky alarmklok Arduino gebaseerde

Wise klok 3 is een open-source, zeer hackable geeky klok die veel meer dan de tijd toont. Haar belangrijkste functie is het weergeven van gebruiker-bewerkbare offertes ontvangen van een SD-kaart (zoals die worden gebruikt in foto camera's).Wise klok
Gebouw IllyClock - alarmklok Arduino gebaseerde in een koffie kan

Gebouw IllyClock - alarmklok Arduino gebaseerde in een koffie kan

bijgewerkt 4 Aug 2011Een gestroomlijnde versie is nu hier beschreven.Het doel van dit project is om te bouwen van een wekker die vergelijkbaar is met de gepresenteerd in de video hieronder.Naast de behuizing, de oorspronkelijke functie van IllyClock
Alarmklok Arduino

Alarmklok Arduino

Arduino is een verbazingwekkende machine. Dit project is slechts een van de vele. U kunt uw project volgens de instructable bouwen of uitbreiden naar meer functies als u wilt.We zullen een volledig interactieve arduino aangedreven wekker construeren.
Overschakelen van de alarmklok Arduino

Overschakelen van de alarmklok Arduino

Deze wekker werkt met de volgende producten;Arduino UnoBreadboard2 LEDs1 zoemerjumper dradenEen knop, uit een LED-zaklampStroombron (ik gebruikte mijn laptop, maar u kunt ook een accu)Deze wekker schakelt in en uit gebaseerd op wanneer de knop opent
Schud & wakker

Schud & wakker

Veel koppels ondervinden dit probleem, ze hebben om op een ander tijdstip wakker te worden. Met een normale wekker wakker beiden wanneer het alarm van gaat. Shake & Wake is de oplossing voor dit probleem. De klok met behulp van een draadloze RF signa
Zuiver binaire LED Wandklok met Arduino

Zuiver binaire LED Wandklok met Arduino

Mijn binaire Wandklok is geïnspireerd door vele binaire klokken vond ik op InstructablesLinks:LilyPad Arduino Klok:Binaire klok:Plus enkele andere binaire klok instructables.Maar...Wat ik vond ontbreekt in hen was de omvang en de grootte van het disp
Arduino binaire klok

Arduino binaire klok

Ik heb eindelijk het, de binaire klok de mensen om me heen hoorde me gesproken over voor zo lang. Ik probeerde om dit te maken tijdens de afgelopen kerstvakantie, maar tijd ontbrak, veranderde ik banen 2 keer in de afgelopen 6 maanden... dus dingen e
Arduino inzicht-Beginner LED'S en (16-bits binaire counter)

Arduino inzicht-Beginner LED'S en (16-bits binaire counter)

Hello vrienden...!!! Dit is mijn eerste tutorial op Instructables, in deze tutorial ga ik je laten zien* Het schrijven van een eenvoudig programma voor gloeiende LED-Fractie van LED programma* Leg uit analoge uitgang (PWM)* Maak een eenvoudig project
Arduino binaire klok met LED Matrix

Arduino binaire klok met LED Matrix

Deze site heeft vele mooie berichten beschrijven bouw van binaire klokken. Ik ben vreselijk wankel, echter, en moeite hebben met eventuele solderen. Ik wilde daarom maken mij uit een 8 x 8 MAX7219-gecontroleerde LED-matrix.Stap 1: Lezen van de BCD bi
Mijn Arduino binaire klok

Mijn Arduino binaire klok

Hallo uit ItaliëHoewel veel horloges binaire gemaakt zijn, was mijn project geïnspireerd voornamelijk aan dit:http:// zeer slim en grappig.Ik heb geprobeerd om het ontwerp en om toe te voegen iets persoonlijks.Ik denk dat het een goed resultaat aan h
Arduino binaire Alarm Clock (pocket formaat)

Arduino binaire Alarm Clock (pocket formaat)

ooit wilde een binaire wekker? Ik ook van jou. Dus ik keek rond op Instructables, want er veel goeden rond zijn.Wat is nog beter: ze zijn gebaseerd op de Arduino, een van mijn favoriete speelgoed.Mijn favoriet is deze: Het inspireerde mij veel, en ja
Arduino-Powered binaire Thermometer

Arduino-Powered binaire Thermometer

ik heb onlangs verworven een Arduino Uno en was op zoek naar een cool "getting started"-project. Heb ik besloten om een thermometer, als de kit heb ik alle nodige onderdelen (thermistor, draden, weerstanden, LEDs). Door middel van een paar itera
Binaire metrieke klok; eenvoudig Arduino project.

Binaire metrieke klok; eenvoudig Arduino project.

Dit is een zeer merkwaardig soort klok, die gemakkelijk kan worden gemaakt met eenvoudige voorzieningen.Om te beginnen de verklaring, zou ik willen zeggen dat ik heb altijd al tijd om metrisch. 5 uur zou mid-dag, 7:5 zou driekwart (6:00 pm), enzovoor
Bouwen van een eenvoudige binaire teller met behulp van de Arduino

Bouwen van een eenvoudige binaire teller met behulp van de Arduino

De volgende instructable zal gaan door de stappen voor het bouwen van een eenvoudige binaire teller met behulp van de volgende materialen.1 x Arduino Uno1 x drukknop5 x LED's (maar het aantal bits u wilt uw teller)1 x 10 k ohm weerstand1 x 220 ohm we