Arduino-projekten kan variera mycket från hemmabryggare till väderstationer till avancerad hemautomatisering. Ofta vill du logga in data från dessa projekt. I denna handledning visar jag dig hur du integrerar ett SD-kort och en realtidsklockmodul i ett projekt för att tillåta tidsstämplad datalogging.
Hämta följande Arduino-bibliotek från deras repositorier. För varje bibliotek, plocka ut mappen i Arduino / bibliotek mapp. Byt namn på var och en av mapparna som ska vara SD, RTCLib, och DHT respektive. Arduino IDE kan inte hantera bindestreck i filnamnen.
Data loggers är tillgängliga som diskreta element och kan variera i kostnad från $ 35 till hundratals. Att välja rätt loggare är ett viktigt beslut i projektet. Det skulle vara en enorm besvikelse att hämta ett djuphavsobservatörsprojekt för att upptäcka att uppgifterna under det senaste året har skadats.
Som med alla projekt måste du överväga strömförbrukningen men det finns flera andra funktioner som du vill vara medveten om när du väljer en datalogger för ett visst projekt.
Kanske kommer projektet att vara i svåra förhållanden. Fysiska störningar, höga temperaturer, fuktighet och andra förhållanden påverkar valet. Det finns loggar tillgängliga som klarar olika förhållanden. Var noga med att veta var ditt projekt och loggar kommer att leva och välj rätt teknik.
Det finns seriella loggers som talar bara om alla protokoll, I2C, RS232, CAN, SPI och mer. Gränssnittsprotokollet påverkar hur snabbt loggdatan kan skrivas. Se till att du väljer loggaren som passar projektsteknologin och skrivhastighetskraven.
Det är inte bra om den loggade data inte kan hämtas. Det är det ordspråkiga trädet som faller utan någon för att höra det. Se till att du förstår hur data ska hämtas från den loggare du väljer. I vissa fall av diskreta logger IC-chips måste du bygga ett externt gränssnitt som du kan använda för att dra data tillbaka från chippet.
Vissa loggers dumpar bara data medan andra har otroligt korrekta tidsstämplar för dataposterna. Som du förväntar dig, ju mer exakt tidstämplarna, i allmänhet ju högre priset. Om ditt projekt kräver mycket höghastighetsloggning som timestamps till nanosekunden kommer loggen att springa lite mer än en loggare som inte har någon aning vilken tid på dagen det är.
Det här är vad du vill hända när du överskridit lagrets slut. Scheman varierar från stopploggning för att börja skriva över de äldsta data.
Se till att du utvärderar hur många gånger enhetens minne kan skrivas över och vad planen är när den börjar bryta ner. Om du måste byta hela loggen efter att 10 000 skrivit över, kommer värdet att bero på hur många skriver du planerar att göra per sekund.
Uppgångarna att använda ett SD-kort för loggning är många. Det är relativt billigt. Du kan välja ditt eget loggningsformat och om du vill ha tidstämplar eller ej. Mediet kan enkelt bytas ut när det är slitet och kan snabbt avlägsnas och läsas av någon vanlig dator.
SD-kortloggning har också några negativa effekter.
Det är inte den bästa robusta miljön där fukt kan påverka kontakterna. Den förbrukar också mycket värdefulla stift på en mikrokontroller. Mellan realtidsklockan (RTC) och SD-kretskortet förbrukar man sex stift av olika slag.
Jag valde SD Card logger för denna handledning på grund av den lätta och flexibla arbetet med SD-kortet för att skriva och läsa loggarna. Ännu viktigare är att kompetensen att använda SD-kortet och en RTC kommer att vara till nytta för en rad andra projekt.
Följ stegen nedan för att montera brödbrädet. Denna handledning använder en enkel temperatur- och fuktighetssensor för att samla data för loggning. Efter att du följt stegen borde du ha ett brödbräda som liknar diagrammet nedan.
Slutförd SD-kort DataloggerSD-kortets brytbräda är försedd med genomgående hål, brettbräda vänliga rubriker, men de är inte fästa. En snabb lödningstid fixar det och låter dig sitta på brädet enligt bilden.
Sätt SD-kortet i en dator och kontrollera att det är formaterat med ett FAT32-filsystem. Du kan behöva en MicroSD till standard SD-kortadapter. SD-kortet i komponentlistan levereras med en adapter. Sätt in SD-kortet försiktigt i brytbrädet.
Realtidsklockan eller RTC-kortet kommer som ett kit och kommer att kräva lite mer lödning att sätta ihop. Alla komponenter ingår i satsen. Följ instruktionerna för steg för steg för att montera brädan inklusive hålhuvudena.
Se till att du sätter in det medföljande batteriet i klippet efter montering. Det fungerar inte korrekt utan att batteriet är på plats. RTC drar endast från batteriet när det inte finns någon huvudspänning, så batteriet ska ligga i åratal.
Många batteriladdare som den som finns i listorna ovan kommer med ledningar som inte är breadboard-vänliga. För att göra ledarna brödbräda vänlig lödning en ledning eller huvudstift till slutet av varje ledningsledning.
SD-kortläsare kan köpas mycket billigare än den som rekommenderas i denna handledning. Fångsten är dock att SD-kortläsare är en 3-volts-teknik medan Arduino använder en 5-volts mikrokontroller.
Detta innebär att för att säkert använda en SD-kortläsare med en Arduino behövs en logisk nivåomvandlare för att omvandla spänningar mellan de två. Detta bidrar till kostnad och komplexitet. Läsaren som anges i dellistan kan vara lite dyrare, men det har flera saker att göra för det.
Läsaren använder SPI-protokollet för att kommunicera. Arduino brädor levereras med vissa stift som är konstruerade för detta protokoll. Medan det är möjligt att använda alternativa stiften i en nypa, får du den snabbaste och mest pålitliga prestandan genom att använda hårdvaruförsedda stiften.
Stiften angivna i den schematiska bilden är korrekta för en Arduino Uno eller Arduino Nano.
När projekthårdvaran är monterad är nästa steg att programmera det. Ladda ner zip-paketet med denna handledning eller från githubförvaret för detta dataloggprojekt.
datalogger.ino
i Arduino IDErtc.adjust (DateTime (F (__ DATE__), F (__ TIME__)));
Genom att sätta en //
i början av linjen. Första gången du laddade upp koden ställer du in datum och tid för RTC till tiden för kompileringen. Men du vill inte fortsätta klockan för att kompilera tiden varje gång styrelsen återställs. Uppladdning av koden utan detta rtc.adjust
i det lämnar klockan enbart på nästa startInitialisering av datalogger med RTC version 1.0 Start Temp och luftfuktighetssensor Start SDCard-läsare och kort Öppning loggfil för skrivning. Starta Realtidsklocka Unixtime: 1405787147 1405787148,2014 / 7/19 16: 25: 48,69,80,40.00 1405787151,2014 / 7/19 16: 25: 51,69,80,40,00 1405787155,2014 / 7/19 16:25: 55,69,80,40,00 1405787158,2014 / 7/19 16: 25: 58,69,80,40,00 1405787162,2014 / 7/19 16: 26: 02,69,80,40,00 1405787165,2014 / 7/19 16:26:05, 69.80,40.00
Datalogger-programmet kombinerar funktioner från RTC-biblioteket, DHT-biblioteket och SD-biblioteket. Det finns några alternativ i toppen av programmet som du kan ställa in som namn på datafilen och vilken typ av DHT du har.
Alla standardvärden ska dock fungera bra om du använde komponenterna som föreslagits ovan.
Programmets huvudslinga gör det enkelt att göra tre saker.
logThis ()
funktion för skrivning till kortetDet upprepar processen så länge som det finns makt och utrymme på SD-kortet.
De logThis ()
funktionen tar en teckensträng av data som ett argument, får tiden från RTC, formaterar den med data och skriver den till loggfilen. Loggfilnamnet anges i #definiera
del av programmet. Skissen öppnar loggfilen när installationen startar så att filloggaren inte behöver öppna den igen för varje loggpost. Den kryptiska sprintf
Kommando som visas nedan formater data.
Om du vill ändra hur data är inloggade, se till att du är bekant med sprintf-funktionen och du kan flytta formaterings- och dataelementen runt. Om du bara behöver ändra om datumfälten kan du bara ändra sin ordning mellan kommatecken och allting borde fungera bra.
sprintf (meddelande, "% ld,% d /% d /% d% 02d:% 02d:% 02d,% s", epok, år, månad, dag, timme, minut, sekund, logmeddelande);
Slutligen, den dataFile.println (meddelande)
Kommando skriver den formaterade strängen till filen. Funktionen beter sig som Serial.println
kommando.
FAT32-filsystemet som finns på SD-kortet har några begränsningar värda att veta. Filnamnet måste också vara i ett 8,3-format. Den största filstorleken kan innehålla en 2GB-fil och den kan bara innehålla 268.173.300 filer. Förhoppningsvis kan du leva med dessa hinder för lite.
Funktionerna now.year ()
och vänner utför det arbete som krävs för att läsa aktuella tidselement (unix epok, år, månad, dag, timme, minut, sekund) från RTC-styrelsen och returnera värdet.
Det snygga med klockor i realtid är att de håller sig självklart. Medan koden och projektet kan gå av gör andra viktiga saker som att se till att din öl fermenterar vid rätt temperatur, fortsätter det bara att hålla tiden. Även om ditt projekt förlorar ström, tänds det med ett oberoende batteri.
Allt du behöver göra är att fråga det och det kommer att berätta vilken tid det är. Detta är självklart perfekt för loggning av data. Komponenten som anges i dellistan är en lämplig tidtagare, men specifikationerna säger att det kan ta upp till två sekunder om dagen.
Om det håller dig en natt, kolla in den fina ChronoDot för högre precision med exakt samma protokoll. Det är helt utbytbart med RTC i det här projektet för några dollar mer och det kommer helt monterat.
Du har byggt projektet, programmerat det (två gånger) och läs allt om operationsteorin ovan. Det är dags att prova det.
datalog.txt
Du borde se något som följande.
1405787012,2014 / 7/19 16: 23: 32,69,80,40,00 1405787015,2014 / 7/19 16: 23: 35,69,80,40,00 1405787019,2014 / 7/19 16: 23: 39,69,80,40,00 1405787022, 2014/7/19 16: 23: 42,69,80,40,00 1405787026,2014 / 7/19 16: 23: 46,69,80,40,00 1405787029,2014 / 7/19 16: 23: 49,69,80,40,00 1405787053,2014 / 7/19 16: 24: 13,69,80,40,00
I denna handledning har jag visat dig hur du integrerar ett SD-kort och en realtidsklockmodul i ditt projekt. Med exempelkoden kan du logga in data under en längre tid som snabbt och enkelt kan kopieras till en dator.
När du har avslutat det här projektet kan du prova några ändringar eller uppgraderingar till det. Försök att uppgradera tidschipet för mer exakta tidsstämplar. Det medföljande programmet skriver helt enkelt till samma fil om och om tills den är full. Du kan försöka skapa ett datumbaserat filrotationsschema för att rotera filer en gång i veckan.
Jag nämnde inte ens kortdetekteringstråden från läsaren som tillåter dig att ändra schematisk och styrelse för att testa för närvaron av ett kort innan du försöker läsa eller skriva. Lycka till och ha kul att experimentera.