Slik legger du til et SD-kort datalogger til et Arduino-prosjekt

Arduino-prosjekter kan variere mye fra hjemmebryggingsforvaltere til værstasjoner til avansert hjemmeautomatisering. Ofte vil du logge data fra disse prosjektene. I denne veiledningen vil jeg vise deg hvordan du integrerer et SD-kort og en sanntidsmodul i et prosjekt for å tillate tidsstemplet datalogging.

Samle komponenter, verktøy og biblioteker

komponenter

  • Standard brettbrett
  • Arduino denne opplæringen bruker Nano, men de fleste modeller skal fungere
  • MicroSD-kortbruddskort
  • MicroSD-kort
  • Real Time Clock
  • Temperatur fuktighetssensor
  • 22 Gauge Hookup Wire (flere farger)
  • 9V batteriklemme med ledningsledninger

Verktøy

  • Loddejern
  • Lodd
  • Tredje håndverktøy
  • Datamaskin med Arduino IDE for programmering
  • USB-kabel passende for Arduino-Mini B for Nano

biblioteker

Last ned følgende Arduino-biblioteker fra deres arkiver. For hvert bibliotek, pakke ut mappen til Arduino / bibliotek mappe. Gi nytt navn til hver av mappene som skal være SD, RTCLib, og DHT henholdsvis. Arduino IDE kan ikke håndtere bindestrekene i filnavnene.

  • Adafruit SD bibliotek (wrapper for sdfat bibliotek) for å jobbe med SD-kortet
  • Adafruit RTCLib gaffel for å lese og stille klokken i sanntidsklokken
  • Adafruit DHT sensor Bibliotek for å lese temperatur og fuktighet

Et ord om å velge en datalogger

Data loggers er tilgjengelige som diskrete elementer og kan variere i kostnad fra $ 35 til hundrevis. Å velge riktig logger er en viktig beslutning i prosjektet. Det ville være en enorm skuffelse for å hente et dyphav observatørprosjekt for å oppdage at dataene i løpet av det siste året har blitt korrupte. 

Som med alle prosjekter må du vurdere strømforbruket, men det finnes flere andre funksjoner du vil være oppmerksom på når du velger en datalogger for et bestemt prosjekt.

Miljøforhold

Kanskje prosjektet kommer til å være i tøffe forhold. Fysiske støt, høye temperaturer, fuktighet og andre forhold vil påvirke valget. Det finnes loggere som tåler forskjellige forhold. Sørg for å vite hvor prosjektet og loggeren skal leve og velg riktig teknologi.

Grensesnitt Type

Det er serielle loggere som snakker bare om noen protokoller, I2C, RS232, CAN, SPI og mer. Grensesnittprotokollen vil påvirke hvor fort loggdataene kan skrives. Sørg for at du velger loggeren som passer med prosjektteknologien og skrivhastighetskrav.  

Loggjenoppretting

Det er ikke bra hvis de loggede dataene ikke kan hentes. Det er det ordspråklige treet som faller uten noen for å høre det. Pass på at du forstår hvordan data skal hentes fra loggeren du velger. I enkelte tilfeller av diskrete logger IC-chips, må du bygge et eksternt grensesnitt som du kan bruke til å trekke dataene tilbake fra brikken.

Tid

Noen loggere dumper bare data mens andre har utrolig nøyaktige tidsstemmer for datapostene. Som du forventer, jo mer nøyaktig tidstemplene, generelt jo høyere prisen. Hvis prosjektet krever meget høyhastighets logging som tidsstempel til nanosekunden, vil loggeren kjøre litt mer enn en logger som ikke har noen anelse om hvilken tid på dagen det er.  

Standhaftighet

Dette er hva du vil skje når du overskrider slutten av lagringen. Ordninger varierer fra stopplogging for å begynne å overskrive de eldste dataene.

Medietype / holdbarhet

Sørg for at du vurderer hvor mange ganger enhetens minne kan overskrives og hva planen er når det begynner å bryte ned. Hvis du må erstatte hele loggeren etter at 10 000 overskriver, vil verdien avhenge av hvor mange skriver du planlegger å lage per sekund.

SD-kortlogger

Ulempene med å bruke et SD-kort for logging er mange. Det er relativt billig. Du kan velge ditt eget loggingsformat og om du vil ha tidsstemmer eller ikke. Mediet kan enkelt byttes ut når det er slitt og kan fjernes raskt og leses av en hvilken som helst vanlig datamaskin.  

SD-kortlogging har også noen ulemper. 

Det er ikke det beste robuste miljøet der fuktighet kan påvirke kontaktene. Det bruker også mange dyrebare pins på en mikrokontroller. Mellom sanntidsuret (RTC) og SD-pausebryteren bruker den seks pinner av forskjellige typer.  

Jeg valgte SD-kortloggeren for denne opplæringen på grunn av enkelheten og fleksibiliteten til å jobbe med SD-kortet for å skrive og lese loggene. Viktigere, ferdighetene i å bruke SD-kortet og en RTC vil komme til nytte for en rekke andre prosjekter.

Bygg prosjektet

Følg trinnene under for å montere breadboard. Denne opplæringen bruker en enkel temperatur- og fuktighetsføler for å samle data for logging. Etter å ha fulgt trinnene, bør du ha et brødbrett som ligner på diagrammet nedenfor.

Fullført SD-kortdatalogger

Monter SD-bryterbordet

SD-kortspaltbordet kommer med gjennomgående hull, brødbrettvennlige hoder, men de er ikke festet. En rask løpemøte vil fikse det og gi deg mulighet til å sette bordet som vist på diagrammet.

Formater og sett inn SD-kortet

Sett SD-kortet inn i en datamaskin og kontroller at den er formatert med et FAT32-filsystem. Du kan trenge en MicroSD til standard SD-kortadapter. SD-kortet i komponentlisten følger med en adapter. Sett SD-kortet forsiktig inn i breakoutbordet.

Sett sammen sanntidsuret

Real Time Clock, eller RTC, kommer som et sett og vil kreve litt mer lodding å sette sammen. Alle komponentene er inkludert i settet. Følg trinnvise instruksjonene for å montere brettet, inkludert de gjennomgående hullene. 

Pass på at du setter det medfølgende batteriet i klemmen etter montering. Det fungerer ikke riktig uten at batteriet er på plass. RTC trekker bare fra batteriet når det ikke er noen spenning, så batteriet skal vare i flere år.

Feste 9V batteripakken

Mange batterisaker som den som er på dellisten ovenfor, kommer med ledninger som ikke er breadboard-vennlig. For å gjøre ledningene tilbrettet, loddetråd en ledning eller hodestift til slutten av hver ledning.

Et ord om SD-kortlesere

SD-kortlesere kan kjøpes mye billigere enn den som er anbefalt i denne opplæringen. Fangsten er imidlertid at SD-kortlesere er en 3 volt-teknologi mens Arduino bruker en 5-volts mikrokontroller. 

Dette betyr at for å kunne bruke en SD-kortleser sikkert med en Arduino, er det nødvendig med en logisk nivåomformer for å konvertere spenninger mellom de to. Dette legger til kostnader og kompleksitet. Leseren spesifisert i dellisten kan være litt dyrere, men det har flere ting å gjøre for det.

  • Den har en innebygd logisk nivåomformer slik at ingen ekstra komponenter eller ledninger er nødvendig. Det bruker ikke motstander for å redusere spenning som kan senke lesingen og skriver til kortet. Derfor kan den kobles direkte opp til Arduino trygt
  • Den bruker Micro SD-kort til et svært kompakt fotavtrykk
  • Det er mye tilgjengelig kode og eksempler på det

Leseren bruker SPI-protokollen til å kommunisere. Arduino boards leveres med visse pinner som er designet for denne protokollen. Mens det er mulig å bruke alternative stifter i en klemme, får du den raskeste og mest pålitelige ytelsen ved å bruke maskinvarepennene.

Pinnene som er angitt i skjematisk bildet, er nøyaktige for en Arduino Uno eller Arduino Nano.

Programmér Arduino

Når prosjektmaskinen er montert, er neste trinn å programmere det. Last ned pakken pakket med denne opplæringen eller fra github-depotet for dette dataloggingprosjektet.

  • Åpen datalogger.ino i Arduino IDE
  • Koble Arduino Nano til datamaskinen med USB-til-USB-minikabelen
  • Kontroller at seriell port er satt til porten datamaskinen oppdages når du koblet Arduino til Verktøy> Seriell port Meny
  • Kontroller at kortet er satt til Arduino Nano w / ATmega328 ved hjelp av Verktøy> Styret Meny
  • Kontroller at bibliotekene er installert riktig ved å klikke på Bekrefte knappen og sørg for at det ikke er noen feil
  • Koble batteriet til prosjektet. Dette virker som et skritt her, men Arduino, RTC, sensor og SD-kortleser drar nok spenning som jeg fant min USB-port ikke leverer konsekvent nok strøm, og prosjektet tilbakestilles kontinuerlig. Ta deg tid til å koble til 9V-batteriet. Da jeg gjorde dette, la jeg merke til at statusindikatoren på Arduino ble merket merkbart
  • Bruke Laste opp knappen for å trykke koden til Arduino
  • Rediger koden for å kommentere linjen: rtc.adjust (DateTime (F (__ DATE__), F (__ TIME__))); Ved å sette en // ved starten av linjen. Første gang du lastet opp koden, stiller du dato og klokkeslett for RTC til kompileringstidspunktet. Men du vil ikke beholde klokken igjen for å kompilere tid hver gang styret tilbakestilles. Laster opp koden uten dette rtc.adjust i det vil la klokken tid alene på neste oppstart
  • Last opp koden på nytt når den angitte linjen er kommentert
  • Åpne Seriell skjerm vindu ved å trykke Kontroll-Shift-M og sørg for at den er satt til 19200 baud. Du bør se Arduino initialisere med utdata som eksempelet nedenfor
Initialisering av datalogger med RTC versjon 1.0 Start Temp og fuktighetssensor Start SDCard-leser og kort Åpning loggfil for skriving. Starte sanntidsklokke 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

Notater om programmet

Datalogger-programmet blander sammen funksjoner fra RTC-biblioteket, DHT-biblioteket og SD-biblioteket. Det er noen alternativer i toppen av programmet som du kan stille, for eksempel navnet på datafilen og hvilken type DHT du har. 

Alle standardverdier skal imidlertid fungere bra hvis du brukte komponentene som er foreslått ovenfor.

Main Loop

Hovedløkken i programmet gjør det enkelt tre ting.

  • Les temperatur og fuktighet fra sensoren. Jeg lånte noen kode for dette fra en annen opplæring jeg skrev: Bygg et trådløst sensornettverk i ditt hjem 
  • Formater de hentede dataene i en kommaseparert liste for å sende til loggfunksjonen
  • Send dataene til logThis () Fungerer for å skrive til kortet
  • Sov i tre sekunder

Det gjentar prosessen så lenge det er strøm og plass på SD-kortet.

logging

De logThis () funksjonen tar en tegnstreng av data som et argument, får tiden fra RTC, formater den med dataene og skriver den til loggfilen. Logfilnavnet er spesifisert i #definere del av programmet. Skissen åpner loggfilen når oppsettet starter slik at filloggeren ikke trenger å åpne den for hver loggoppføring. Den kryptiske sprintf Kommandoen som vises nedenfor formater dataene. 

Hvis du vil endre hvordan dataene logges, må du være sikker på at du er kjent med sprintf-funksjonen, og du kan flytte formaterings- og dataelementene rundt. Hvis du bare trenger å ombestille datafeltene, kan du bare endre rekkefølgen mellom kommaene, og alt skal fungere helt fint.

sprintf (melding, "% ld,% d /% d /% d% 02d:% 02d:% 02d,% s", epoke, år, måned, dag, time, minutt, andre, logmessig melding);

Endelig, den dataFile.println (melding) kommandoen skriver den formaterte strengen til filen. Funksjonen oppfører seg akkurat som Serial.println kommando.

FAT32-filsystemet som er på SD-kortet, har noen begrensninger verdt å vite. Filnavnet må også være i et 8.3-format. Den største filstørrelsen den kan holde, er en 2GB-fil, og den kan bare inneholde 268.173.300 filer. Forhåpentligvis kan du leve med disse begrensningene for litt.

Tid

Funksjonene now.year () og venner utfører arbeidet som kreves for å lese gjeldende tidselementer (unix epoke, år, måned, dag, time, minutt, sekund) fra RTC-styret og returnere verdien.

Den kule tingen om sanntidsklokker er at de holder tid selvfølgelig. Mens koden og prosjektet kan gå av, gjør andre viktige ting som å sørge for at ølene gjærer til riktig temperatur, går det bare på å holde tiden. Selv om prosjektet mister strøm, fortsetter det å tikkes med et uavhengig batteri. 

Alt du trenger å gjøre er å spørre det, og det vil fortelle deg hvilken tid det er. Dette er selvfølgelig perfekt for logging av data. Komponenten som er spesifisert i dellisten, er en god tidsspenning, men spesifikasjonene sier at den kan få opptil to sekunder om dagen. 

Hvis det holder deg oppe en natt, så sjekk ut ChronoDot-fargene for høyere presisjon med nøyaktig samme protokoll. Det er helt utbytbart med RTC i dette prosjektet for noen få dollar mer, og det kommer fullt sammen.

testing 

Du har bygget prosjektet, programmert det (to ganger), og les alt om operasjonsteorien ovenfor. Det er på tide å prøve det ut.

  1. Sett bordet opp et sted, temperatur og fuktighet vil være interessant og plugge inn batteriet
  2. La loggeren kjøre en stund innsamling av data
  3. Etter litt fjern strøm fra prosjektet og fjern SD-kortet
  4. Sett kortet inn i adapteren i full størrelse og sett inn SD-kortet i datamaskinen.
  5. Åpne filen datalog.txt

Du bør se noe som følger.

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

Konklusjon

I denne veiledningen har jeg vist deg hvordan du integrerer et SD-kort og en sanntidsmodul i prosjektet. Med eksempelkoden kan du logge data i lengre tid som raskt og enkelt kan kopieres til en datamaskin. 

Etter at du har fullført dette prosjektet, kan du prøve noen endringer eller oppgraderinger til det. Prøv å oppgradere tidsbrikken for mer nøyaktige tidsstemmer. Det medfølgende programmet skriver ganske enkelt til samme fil igjen og igjen til den er full. Du kan prøve å lage en datoper basert filrotasjon for å rotere filer en gang i uken. 

Jeg nevnte ikke engang kortdetektorkabelen fra leseren som vil tillate deg å endre skjematisk og styret for å teste for tilstedeværelsen av et kort før du prøver å lese eller skrive operasjoner. Lykke til og ha det gøy å eksperimentere.