Så här lägger du till ett SD-kort datalogger till ett Arduino-projekt

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.

Samla komponenter, verktyg och bibliotek

Komponenter

  • Standardbräda
  • Arduino denna handledning använder Nano, men de flesta modeller ska fungera
  • MicroSD-kortbrytningsbräda
  • MicroSD-kort
  • Riktig tids klocka
  • Temperaturfuktighetssensor
  • 22 Gauge Hookup Wire (flera färger)
  • 9V Batteri med ledningsledningar

Verktyg

  • Lödkolv
  • Löda
  • Tredje handverktyg
  • Dator med Arduino IDE för programmering
  • USB-kabel lämplig för din Arduino-Mini B för Nano

bibliotek

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.

  • Adafruit SD-bibliotek (omslag för sdfat-bibliotek) för att arbeta med SD-kortet
  • Adafruit RTCLib gaffel för att läsa och ställa in tiden i realtidsklockan
  • Adafruit DHT-sensor Bibliotek för att läsa temperatur och fuktighet

Ett ord om att välja en dataloggare

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.

Miljöförhållanden

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.

Gränssnittstyp

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.  

Loghämtning

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.

Tid

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.  

Uthållighet

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.

Mediatyp / hållbarhet

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.

SD-kortloggare

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.

Bygg projektet

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 Datalogger

Montera SD-brytningskortet

SD-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.

Formatera och sätt in SD-kortet

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.

Montera realtidsklockan

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.

Fäst 9V-batteriet

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.

Ett ord om SD-kortläsare

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.

  • Den har en inbyggd logisk nivåkonverterare så att inga extra komponenter eller ledningar behövs. Det använder inte motstånd för att minska spänningen som kan sakta ner läsningarna och skriva till kortet. Därför kan den anslutas direkt till Arduino på ett säkert sätt
  • Det använder Micro SD-kort för ett mycket kompakt fotavtryck
  • Det finns mycket tillgänglig kod och exempel på 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.

Programera Arduino

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.

  • Öppna datalogger.ino i Arduino IDE
  • Anslut Arduino Nano till datorn med USB-till-USB-minikabeln
  • Kontrollera att seriell port är inställd på porten som datorn upptäckte när du anslöt Arduino med Verktyg> Seriell port meny
  • Kontrollera att kortet är inställt på Arduino Nano w / ATmega328 med hjälp av Verktyg> Styrelse meny
  • Verifiera att biblioteken installeras korrekt genom att klicka på Kontrollera knappen och se till att det inte finns några fel
  • Anslut batteriet till projektet. Detta verkar vara ett udda steg här, men Arduino, RTC, Sensor och SD-kortläsare alla drar tillräckligt med spänning som jag hittade min USB-port gav inte tillräckligt med ström och projektet ständigt återställdes. Ta dig tid att ansluta 9V-batteriet. När jag gjorde det såg jag att statusindikatorn som ledde på Arduino lyser märkbart
  • Använd Ladda upp knappen för att trycka koden på Arduino
  • Redigera koden för att kommentera raden: rtc.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 start
  • Ladda upp koden igen med den tidsinställda raden kommenterad
  • Öppna Serial Monitor fönster genom att trycka på Kontroll-skift-M och se till att den är inställd på 19200 baud. Du bör se Arduino initialisera med utgången som exemplet nedan
Initialisering 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

Anteckningar om programmet

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.

Main Loop

Programmets huvudslinga gör det enkelt att göra tre saker.

  • Läs temperatur och fuktighet från sensorn. Jag lånade lite kod för detta från en annan handledning som jag skrev: Att bygga ett trådlöst sensornätverk i ditt hem 
  • Formatera den hämtade dataen i en kommaseparerad lista för att skicka till loggfunktionen
  • Skicka data till logThis () funktion för skrivning till kortet
  • Sova i tre sekunder

Det upprepar processen så länge som det finns makt och utrymme på SD-kortet.

Skogsavverkning

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.

Tid

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.

Testning 

Du har byggt projektet, programmerat det (två gånger) och läs allt om operationsteorin ovan. Det är dags att prova det.

  1. Ställ brädan upp någonstans temperaturen och luftfuktigheten kommer att vara intressant och plugga in batteriet
  2. Låt loggen köra ett tag och samla in data
  3. Efter lite ta bort strömmen från projektet och ta bort SD-kortet
  4. Sätt kortet i fullstorad adapter och sätt in SD-kortet i datorn.
  5. Öppna filen 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

Slutsats

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.