Arduino-projecten kunnen sterk variëren, van thuisbrouwers tot weerstations tot geavanceerde huisautomatisering. Vaak wilt u gegevens van deze projecten loggen. In deze tutorial laat ik je zien hoe je een SD-kaart en een realtimeklokmodule in een project kunt integreren om tijdgestempelde datalogging mogelijk te maken.
Download de volgende Arduino-bibliotheken van hun repositories. Voor elke bibliotheek pakt u de map uit in de Arduino / bibliotheken map. Hernoem alle mappen die moeten zijn SD, RTCLib, en DHT respectievelijk. De Arduino IDE kan de streepjes in de bestandsnamen niet aan.
Dataloggers zijn beschikbaar als afzonderlijke elementen en kunnen in prijs variëren van $ 35 tot honderden. Het kiezen van de juiste logger is een belangrijke beslissing in het project. Het zou een enorme teleurstelling zijn om een diepzee-waarnemersproject op te halen om te ontdekken dat de gegevens van het afgelopen jaar corrupt waren.
Zoals bij alle projecten moet u rekening houden met het stroomverbruik, maar er zijn verschillende andere functies waarvan u op de hoogte wilt zijn wanneer u een datalogger voor een bepaald project selecteert.
Misschien zal het project in moeilijke omstandigheden verkeren. Fysieke schokken, hoge temperaturen, vochtigheid en andere omstandigheden zullen de keuze beïnvloeden. Er zijn loggers beschikbaar die bestand zijn tegen verschillende omstandigheden. Zorg dat u weet waar uw project en logger zullen leven en selecteer de juiste technologie.
Er zijn seriële loggers die zowat elk protocol spreken, I2C, RS232, CAN, SPI en meer. Het interfaceprotocol heeft invloed op hoe snel de loggegevens kunnen worden geschreven. Zorg ervoor dat u de logger selecteert die past bij de projecttechnologie en schrijfsnelheidseisen.
Het heeft geen zin als de gelogde gegevens niet kunnen worden opgehaald. Het is de spreekwoordelijke boom die valt zonder dat er iemand in de buurt is om het te horen. Zorg ervoor dat u begrijpt hoe gegevens moeten worden opgehaald uit de logger die u selecteert. In sommige gevallen van discrete logger IC-chips, moet u een externe interface bouwen die u kunt gebruiken om de gegevens terug te halen van de chip.
Sommige loggers dumpen alleen gegevens, anderen hebben ongelooflijk nauwkeurige tijdstempels voor de gegevensrecords. Zoals je zou verwachten, hoe accurater de tijdstempels, hoe hoger de prijs. Als uw project zeer snelle logging vereist dat tijdstempels naar de nanoseconde, zal de logger iets meer dan een logger uitvoeren die geen idee heeft hoe laat het is.
Dit is wat u wilt wanneer u het einde van de opslag overschrijdt. Regelingen variëren van stopregistratie om te beginnen met het overschrijven van de oudste gegevens.
Zorg ervoor dat u kunt evalueren hoe vaak het geheugen van het apparaat kan worden overschreven en wat het plan is wanneer het wordt afgebroken. Als u de hele logger na 10.000 overschrijvingen moet vervangen, is de waarde afhankelijk van het aantal schrijfbewerkingen dat u per seconde wilt maken.
De voordelen van het gebruik van een SD-kaart voor het loggen zijn talrijk. Het is relatief goedkoop. U kunt uw eigen logbestandsindeling kiezen en aangeven of u tijdstempels wilt. De media zijn gemakkelijk te vervangen als ze versleten zijn en kunnen snel worden verwijderd en worden gelezen door elke standaardcomputer.
Het registreren van SD-kaarten heeft ook een aantal nadelen.
Het is niet de beste ruige omgeving waar vocht de contacten kan beïnvloeden. Het verbruikt ook veel kostbare pinnen op een microcontroller. Tussen de realtime-klok (RTC) en de SD-breakout-kaart verbruikt deze zes verschillende pinnen.
Ik koos de SD-kaartlogger voor deze tutorial vanwege het gemak en de flexibiliteit van het werken met de SD-kaart voor het schrijven en lezen van de logboeken. Wat nog belangrijker is, de vaardigheden van het gebruik van de SD-kaart en een RTC zal van pas komen voor een verscheidenheid aan andere projecten.
Volg de onderstaande stappen om het breadboard samen te stellen. Deze tutorial gebruikt een eenvoudige temperatuur- en vochtigheidssensor om gegevens te verzamelen voor logboekregistratie. Na het volgen van de stappen zou je een breadboard moeten hebben die lijkt op het onderstaande schema.
Voltooid SD-kaart dataloggerHet breakout-bord van de SD-kaart wordt geleverd met gaten in doorvoergaten, breadboard-vriendelijke koppen, maar ze zijn niet bevestigd. Een snelle soldeersessie corrigeert dat en stelt u in staat om het bord te plaatsen zoals weergegeven in het diagram.
Plaats de SD-kaart in een computer en controleer of deze is geformatteerd met een FAT32-bestandssysteem. Mogelijk hebt u een MicroSD-naar-standaard SD-kaartadapter nodig. De SD-kaart in de componentenlijst wordt geleverd met een adapter. Steek de SD-kaart voorzichtig in de breakout-kaart.
De Realtime Clock of RTC board komt als een kit en zal wat meer soldeerwerk vereisen om samen te stellen. Alle componenten zitten in de kit. Volg de stapsgewijze instructies om het bord te monteren inclusief de doorvoerkoppen.
Zorg ervoor dat u de meegeleverde batterij na montage in de clip steekt. Het zal niet goed werken zonder dat de batterij op zijn plaats zit. De RTC put alleen uit de batterij als er geen netspanning is, dus de batterij moet jaren meegaan.
Veel batterijbehuizingen zoals die in de onderdelenlijst hierboven worden geleverd met draadaansluitingen die niet geschikt zijn voor breadboards. Om de leads op een breadboard vriendelijk te maken, soldeer je een draad of header pin aan het einde van elke draad.
SD-kaartlezers kunnen veel goedkoper worden gekocht dan degene die in deze zelfstudie wordt aanbevolen. De vangst is echter dat SD-kaartlezers een 3-volt-technologie zijn, terwijl de Arduino een 5-volt micro-controller gebruikt.
Dit betekent dat voor een veilige gebruik van een SD-kaartlezer met een Arduino een logisch niveau-omzetter nodig is om spanningen tussen de twee om te zetten. Dit voegt kosten en complexiteit toe. De lezer die in de onderdelenlijst wordt gespecificeerd, is misschien een beetje duurder, maar er zijn verschillende dingen die ervoor zorgen.
De lezer gebruikt het SPI-protocol om te communiceren. Arduino-kaarten worden geleverd met bepaalde pinnen die zijn ontworpen voor dit protocol. Hoewel het mogelijk is om andere pins in een snuifje te gebruiken, krijgt u de snelste en meest betrouwbare prestaties door gebruik te maken van de hardware-specifieke pinnen.
De pinnen aangegeven in de schematische afbeelding zijn nauwkeurig voor een Arduino Uno of Arduino Nano.
Nadat de projecthardware is samengesteld, is de volgende stap om het te programmeren. Download de zip die is verpakt met deze tutorial of vanuit de github-repository voor dit datalogproject.
datalogger.ino
in de Arduino IDErtc.adjust (DateTime (F (__ DATE__), F (__ TIME__)));
Door een //
aan het begin van de regel. De eerste keer dat u de code hebt geüpload, worden de datum en tijd van de RTC ingesteld op het tijdstip van compileren. Maar je wilt niet steeds de klok opnieuw instellen om de tijd te compileren telkens wanneer het bord wordt gereset. De code uploaden zonder dit rtc.adjust
daarin zal de kloktijd alleen blijven bij de volgende startInitialisatie van datalogger met RTC-versie 1.0 Starttemp- en vochtigheidssensor Starten SD-kaartlezer en -kaart Openen logbestand voor schrijven. Real-timeklok starten Niet beschikbaar: 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
Het datalogger-programma combineert functies uit de RTC-bibliotheek, DHT-bibliotheek en SD-bibliotheek. Er zijn enkele opties bovenaan het programma die u kunt afstemmen, zoals de naam van het gegevensbestand en welk type DHT u hebt.
Alle standaardinstellingen werken echter prima als u de hierboven voorgestelde componenten hebt gebruikt.
De hoofdlus van het programma eenvoudig doet drie dingen.
logThis ()
functie voor schrijven naar de kaartHet herhaalt het proces zolang er stroom en ruimte op de SD-kaart is.
De logThis ()
functie neemt een tekenreeks van gegevens als een argument, haalt de tijd uit de RTC, formatteert deze met de gegevens en schrijft deze naar het logbestand. De naam van het logbestand wordt gespecificeerd in de #bepalen
deel van het programma. De schets opent het logbestand wanneer de installatie start, zodat de logger het niet opnieuw hoeft te openen voor elke logboekinvoer. Het cryptische sprintf
onderstaande opdracht geeft de gegevens op.
Als u wilt wijzigen hoe de gegevens worden vastgelegd, zorg er dan voor dat u bekend bent met de sprintf-functie en dat u de opmaak en gegevenselementen kunt verplaatsen. Als u alleen de datumvelden opnieuw moet rangschikken, kunt u gewoon hun volgorde tussen de komma's wijzigen en alles zou goed moeten werken.
sprintf (bericht, "% ld,% d /% d /% d% 02d:% 02d:% 02d,% s", epoch, Year, Month, Day, Hour, Minute, Second, logmessage);
eindelijk, de dataFile.println (bericht)
opdracht schrijft de opgemaakte tekenreeks naar het bestand. De functie gedraagt zich net als de Serial.println
commando.
Het FAT32-bestandssysteem dat zich op de SD-kaart bevindt, heeft enkele beperkingen die het weten waard zijn. De bestandsnaam moet ook in een 8.3-indeling zijn. De grootste bestandsgrootte die het kan bevatten, is een bestand van 2 GB en het kan slechts 268.173.300 bestanden bevatten. Hopelijk kun je een beetje met deze beperkingen leven.
De functies now.year ()
en vrienden voeren het werk uit dat nodig is om de huidige tijdselementen (unix tijdperk, jaar, maand, dag, uur, minuut, seconde) van het RTC-bord te lezen en de waarde terug te geven.
Het leuke van realtime klokken is dat ze natuurlijk de tijd houden. Hoewel de code en het project andere belangrijke dingen kunnen doen, zoals ervoor zorgen dat uw bier op de juiste temperatuur gist, blijft het gewoon de tijd bijhouden. Zelfs als je project zijn kracht verliest, blijft het tikken met een onafhankelijke batterij.
Het enige wat u hoeft te doen is het vragen en het zal u vertellen hoe laat het is. Dit is natuurlijk perfect voor het loggen van gegevens. Het onderdeel dat in de onderdelenlijst wordt gespecificeerd, is een goedwerkende tijdwaarnemer, maar volgens de specificaties kan het tot twee seconden per dag oplopen.
Als dat je een nacht wakker houdt, bekijk dan de fraaie ChronoDot voor een hogere precisie met exact hetzelfde protocol. Het is volledig uitwisselbaar met de RTC in dit project voor een paar dollar meer en het komt volledig geassembleerd.
Je hebt het project gebouwd, het (twee keer) geprogrammeerd en leest alles over de bovenstaande theorie. Het is tijd om het uit te proberen.
datalog.txt
Je zou zoiets als het volgende moeten zien.
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
In deze tutorial heb ik je laten zien hoe je een SD-kaart en een realtimeklokmodule kunt integreren in je project. Met de voorbeeldcode kunt u gegevens voor een langere periode loggen die snel en gemakkelijk naar een computer kunnen worden gekopieerd.
Na het voltooien van dit project, kunt u enkele wijzigingen of upgrades proberen. Probeer de tijdchip te upgraden voor nauwkeurigere tijdstempels. Het meegeleverde programma schrijft gewoon opnieuw naar hetzelfde bestand totdat het vol is. U zou kunnen proberen een op datum gebaseerd bestandrotatieregeling te maken om bestanden één keer per week te draaien.
Ik noemde niet eens de kaartdetectiekabel van de lezer waarmee je het schema en de kaart kunt wijzigen om te testen of er een kaart aanwezig is voordat je lees- of schrijfbewerkingen uitprobeert. Veel geluk en veel plezier met het experimenteren.