Nyheter i Android, Telefoner, Prylar Och Recensioner

Hur och varför man lägger till en realtidsklocka till Arduino

Att hålla tid på Arduino-projekt är inte så lätt som du kanske tror: när datoranslutningen inte finns där, slutar din strömlösa Arduino helt enkelt att fungera, inklusive dess interna ticker.

För att hålla din Arduino synkroniserad med omvärlden kommer du att behöva vad som kallas en “Real Time Clock-modul”. Så här använder du en.

Vad är poängen med en realtidsklocka (RTC)?

Din dator synkroniserar sannolikt sin tid med internet, men den har fortfarande en intern klocka som fortsätter att gå även utan internetanslutning eller strömmen är avstängd. När du använder en Arduino ansluten till en dator har den tillgång till korrekt tid från din systemklocka. Det är ganska användbart, men de flesta Arduino-projekt är designade för att användas utanför en dator – vid vilken tidpunkt, varje gång strömmen kopplas ur eller Arduino startas om, har den absolut ingen aning om vad klockan är. Den interna klockan återställs och börjar räkna från noll igen nästa gång den slås på.

Om ditt projekt har något att göra med att behöva tiden – som min nattlampa och soluppgångsklocka – kommer detta helt klart att bli ett problem. I det projektet kom vi runt problemet genom att manuellt ställa in tiden varje natt på ett ganska grovt sätt – användaren tryckte på återställningsknappen precis innan de gick och la sig, vilket gav en manuell tidssynkronisering. Det är uppenbarligen inte en idealisk långtidslösning.

En RTC-modul är en extra krets som kräver ett litet knappcellsbatteri, som fortsätter att räkna tiden även när din Arduino är avstängd. Efter att ha ställts in en gång – kommer den att behålla den tiden under batteriets livslängd, vanligtvis ett bra år eller så.

Relaterad  Vem äger Twitch? (Ultimat Gudie)

TinyRTC

Den mest populära RTC för Arduino heter TinyRTC och kan köpas för runt $5-$10 på eBay. Du kommer med största sannolikhet att behöva förse dig med ditt eget batteri (det är olagligt att skicka dessa utomlands till många ställen), och några headers (stiften som går in i hålen, som du måste löda in själv).

Det här är modulen jag har:

Den har till och med en inbyggd temperatursensor, men batteriet räcker längre om du inte använder det.

Antalet hål på den saken ser ganska skrämmande ut, men du behöver bara fyra av dem; GND, VCC, SCL och SDA – du kan använda de relevanta stiften på vardera sidan av RTC-modulen. Du pratar med klockan med hjälp av I2C-protokollet, vilket innebär att endast två stift används – en för “klockan” (en seriell kommunikationsdataklocka, inget att göra med tid) och en för data. Faktum är att du till och med kedjar upp till 121 I2C-enheter på samma två stift – kolla in denna Adafruit-sida för ett urval av andra I2C-enheter du kan lägga till, för det finns många!

Komma igång

Anslut din TinyRTC-modul enligt diagrammet nedan – den rosa DS-linjen behövs inte, eftersom det är för temperatursensorn.

Ladda sedan ner Time- och DS1307RTC-biblioteken och placera de resulterande mapparna i din /bibliotek mapp.

Avsluta och starta om Arduino-miljön för att ladda i biblioteken och exemplen.

Du hittar två exempel i DS1307RTC-menyn: ladda upp och kör Ställ klockan exempel först – detta kommer att ställa in RTC till rätt tid. Den faktiska koden är inte värd att gå in på i detalj, vet bara att du måste köra den en gång för att utföra den första tidssynkroniseringen.

Relaterad  Project xCloud: Se hur bra streamingtjänsten fungerar på en Switch!

Titta sedan på exemplet användning med LäsTest.


#include <DS1307RTC.h>
#include <Time.h>
#include <Wire.h>
void setup() {
Serial.begin(9600);
while (!Serial) ; // wait for serial
delay(200);
Serial.println("DS1307RTC Read Test");
Serial.println("-------------------");
}
void loop() {
tmElements_t tm;
if (RTC.read(tm)) {
Serial.print("Ok, Time = ");
print2digits(tm.Hour);
Serial.write(':');
print2digits(tm.Minute);
Serial.write(':');
print2digits(tm.Second);
Serial.print(", Date (D/M/Y) = ");
Serial.print(tm.Day);
Serial.write("https://www.makeuseof.com/");
Serial.print(tm.Month);
Serial.write("https://www.makeuseof.com/");
Serial.print(tmYearToCalendar(tm.Year));
Serial.println();
} else {
if (RTC.chipPresent()) {
Serial.println("The DS1307 is stopped. Please run the SetTime");
Serial.println("example to initialize the time and begin running.");
Serial.println();
} else {
Serial.println("DS1307 read error! Please check the circuitry.");
Serial.println();
}
delay(9000);
}
delay(1000);
}
void print2digits(int number) {
if (number >= 0 && number < 10) {
Serial.write('0');
}
Serial.print(number);
}

Observera att vi även har tagit med kärnan Wire.h bibliotek – detta kommer med Arduino och används för att kommunicera över I2C. Ladda upp koden, öppna seriekonsolen vid 9600 baud och titta på och din Arduino visar aktuell tid varje sekund. Underbar!

Den viktigaste koden i exemplet är att skapa en tmElements_t tm – detta a strukturera som vi kommer att fylla med den aktuella tiden; och den RTC.read(tm) funktion, som hämtar den aktuella tiden från RTC-modulen, lägger den i vår tm struktur och returnerar sant om allt gick bra. Lägg till din felsöknings- eller logikkod i den “if”-satsen, som att skriva ut tiden eller reagera på den.

Nu när du vet hur du får rätt tid med Arduino kan du prova att skriva om soluppgångslarmprojektet eller skapa en LED-ordklocka – möjligheterna är oändliga! Vad ska du göra?

Bildkrediter: Snootlab Via Flickr

Om författaren

James Bruce (720 publicerade artiklar)

James har en BSc i artificiell intelligens och är CompTIA A+ och Network+ certifierad. När han inte är upptagen som Hardware Review Editor, gillar han LEGO, VR och brädspel. Innan han började på MakeUseOf var han ljustekniker, engelskalärare och datacenteringenjör.

Relaterad  Treyarch: vår kultur har ingen plats för sexism, rasism och trakasserier

Mer från James Bruce

Prenumerera på vårt nyhetsbrev

Gå med i vårt nyhetsbrev för tekniska tips, recensioner, free e-böcker och exklusiva erbjudanden!

Klicka här för att prenumerera