Cum să adăugați un card de date SD la un proiect Arduino

Proiectele Arduino pot varia foarte mult de la manageri de producție la domiciliu până la stații meteorologice până la automatizări avansate de acasă. Adesea, veți dori să înregistrați date din aceste proiecte. În acest tutorial vă voi arăta cum să integrați un card SD și un modul de ceas în timp real într-un proiect care să permită înregistrarea temporală a datelor.

Colectați componentele, instrumentele și bibliotecile

Componente

  • Placă standard
  • Arduino acest tutorial utilizează Nano, dar majoritatea modelelor ar trebui să funcționeze
  • MicroSD card breakout
  • Card MicroSD
  • Ceas în timp real
  • Senzor de umiditate a temperaturii
  • 22 Sârmă de mărire (mai multe culori)
  • Clește pentru baterie de 9 V cu cabluri de sârmă

Unelte

  • Ciocan de lipit
  • suda
  • Al treilea instrument de mână
  • Computer cu IDE Arduino pentru programare
  • Cablu USB potrivit pentru telefonul dvs. Arduino-Mini B pentru Nano

Biblioteci

Descărcați următoarele biblioteci Arduino din depozitele lor. Pentru fiecare bibliotecă, dezarhivați folderul în Arduino / biblioteci pliant. Redenumiți fiecare dintre folderele care urmează să fie SD, RTCLib, și DHT respectiv. ID-ul Arduino nu se poate ocupa de liniuțele din numele fișierelor.

  • Biblioteca Adafruit SD (învelitoare pentru biblioteca sdfat) pentru lucrul cu cardul SD
  • Furculița Adafruit RTCLib pentru citirea și setarea timpului în ceasul în timp real
  • Adafruit DHT senzor Bibliotecă pentru a citi temperatura și umiditatea

Un cuvânt despre alegerea unui logger de date

Dispozitivele de înregistrare a datelor sunt disponibile ca elemente discrete și pot varia în costuri de la 35 $ la sute. Alegerea loggerului potrivit este o decizie importantă în proiect. Ar fi o dezamăgire enormă pentru a recupera un proiect de observare a adâncurilor pentru a descoperi că datele din ultimul an au fost corupte. 

Ca și în cazul tuturor proiectelor, trebuie să luați în considerare consumul de energie, dar există mai multe alte caracteristici pe care doriți să le cunoașteți atunci când selectați un înregistrator de date pentru un anumit proiect.

Conditii de mediu

Poate că proiectul va fi în condiții dure. Dispersiile fizice, temperaturile ridicate, umiditatea și alte condiții vor afecta alegerea. Există loggers disponibile care pot suporta diferite condiții. Asigurați-vă că știți unde va trăi proiectul și loggerul dvs. și selectați tehnologia potrivită.

Tipul interfeței

Există înregistratori de serie care vorbesc doar despre orice protocol, I2C, RS232, CAN, SPI și multe altele. Protocolul de interfață va afecta cât de repede pot fi scrise datele jurnalului. Asigurați-vă că selectați loggerul care se potrivește cu tehnologia proiectului și cerințele de viteză de scriere.  

Recuperarea jurnalului

Nu este bine dacă datele înregistrate nu pot fi preluate. Este arborele proverbial care nu se încadrează fără ca cineva să audă. Asigurați-vă că înțelegeți modul în care datele vor fi preluate din loggerul pe care îl selectați. În unele cazuri de chips-uri discrete logger IC, va trebui să construiți o interfață externă pe care o puteți utiliza pentru a trage datele din chip.

Timp

Unele înregistrări doar dump de date, în timp ce altele au incredibil de timbre timbre pentru înregistrările de date. După cum v-ați aștepta, cu cât sunt mai precise timbrele de timp, în general, cu atât este mai mare prețul. Dacă proiectul dvs. necesită înregistrarea cu viteză foarte mare a timestampurilor în nanosecundă, loggerul va rula un pic mai mult decât un logger care nu are nicio idee despre ce oră din zi este.  

persistență

Aceasta este ceea ce doriți să se întâmple atunci când depășiți sfârșitul stocării. Schemele variază de la oprirea înregistrării pentru a începe suprascrierea celor mai vechi date.

Tip mediu / durabilitate

Asigurați-vă că ați evaluat de câte ori poate fi suprascrisă memoria dispozitivului și ce plan este atunci când începe ruperea. Dacă trebuie să înlocuiți tot loggerul după ce 10.000 suprascrie, valoarea va depinde de câte scrie scrieți pe planul pe secundă.

SD Card Logger

Posibilitățile de utilizare a unei cartele SD pentru înregistrare sunt multe. Este relativ ieftin. Puteți alege propriul format de înregistrare și dacă doriți sau nu timbre. Mediul este ușor de înlocuit când este uzat și poate fi eliminat rapid și citit de orice computer standard.  

Înregistrarea cardurilor SD are și unele dezavantaje. 

Nu este cel mai bun mediu robust în care umezeala ar putea afecta contactele. De asemenea, consumă o mulțime de pini prețioși pe un microcontroler. Între ceasul în timp real (RTC) și bordul SD breakout consumă șase pini de diferite tipuri.  

Am ales cardul SD pentru acest tutorial din cauza ușurinței și flexibilității de a lucra cu cardul SD pentru scrierea și citirea jurnalelor. Mai important, abilitățile de utilizare a cardului SD și a unui RTC vor fi utile pentru o varietate de alte proiecte.

Construiți Proiectul

Urmați pașii de mai jos pentru a asambla panza. Acest tutorial utilizează un senzor simplu de temperatură și umiditate pentru a culege date pentru înregistrare. După ce urmați pașii, ar trebui să aveți un tablă care arată similar cu diagrama de mai jos.

Completat card de date SD Card

Asamblați placa SD Breakout

Placa de blocare a cardului SD este prevăzută cu ghimpe prietene, plăcuțe prietenoase, dar acestea nu sunt atașate. O sesiune rapidă de lipire o va rezolva și vă va permite să așezați placa așa cum este prezentat în diagramă.

Formatați și introduceți cardul SD

Puneți cardul SD într-un computer și verificați dacă acesta este formatat cu un sistem de fișiere FAT32. Este posibil să aveți nevoie de un microSD pentru adaptorul SD Card standard. Cardul SD din lista de componente vine cu un adaptor. Introduceți cu atenție cardul SD în placa de bucle.

Asamblați ceasul în timp real

Ceasul Real Clock, sau RTC, vine ca un kit și va necesita un pic mai mult de lipit pentru a pune împreună. Toate componentele sunt incluse în kit. Urmați instrucțiunile pas cu pas pentru asamblarea plăcii, inclusiv anteturile prin gaură. 

Asigurați-vă că ați introdus bateria inclusă în clemă după asamblare. Acesta nu va funcționa corect fără ca acumulatorul să funcționeze. RTC trage numai de la baterie atunci când nu există tensiune principală, deci bateria ar trebui să dureze ani.

Atașarea clemei bateriei 9V

Multe cazuri de baterii, cum ar fi cele din lista de piese de mai sus, vin cu conductori de sârmă care nu sunt prietenoși. Pentru a face ca firele de pâslă să cupleze ușor un fir sau un cap de capăt la capătul fiecărui cablu de sârmă.

Un cuvânt despre cititorii de carduri SD

Cititoarele de carduri SD pot fi achiziționate mult mai ieftin decât cel recomandat în acest tutorial. Captura este însă că cititorii de carduri SD sunt o tehnologie de 3 volți, în timp ce Arduino utilizează un microcontroler de 5 volți. 

Acest lucru înseamnă că, pentru a folosi în siguranță un cititor de carduri SD cu un arduino un convertor de nivel logic este necesar pentru a converti tensiunile între cele două. Acest lucru adaugă costuri și complexitate. Cititorul specificat în lista de părți ar putea fi puțin mai scump, dar are mai multe lucruri care merg.

  • Are un convertor de nivel logic construit, astfel încât nu sunt necesare componente sau cablaje suplimentare. Nu utilizează rezistențe pentru a reduce tensiunea care poate încetini citirile și scrie pe card. Prin urmare, poate fi conectat direct la Arduino în condiții de siguranță
  • Utilizează cardurile Micro SD pentru o amprentă foarte compactă
  • Există multe coduri și exemple disponibile pentru aceasta

Cititorul utilizează protocolul SPI pentru a comunica. Plăcile arduino vin cu niște pini care sunt proiectați pentru acest protocol. În timp ce este posibil să utilizați pini alternativi într-un vârf, veți obține cea mai rapidă și cea mai fiabilă performanță utilizând ajutorul pinilor dedicați hardware.

Pinii indicați în imaginea schematică sunt corecți pentru un Arduino Uno sau Arduino Nano.

Programați Arduino

Cu proiectul hardware asamblat, următorul pas este să îl programați. Descărcați zipul ambalat cu acest tutorial sau din depozitul github pentru acest proiect de înregistrare a datelor.

  • Deschis datalogger.ino în IDE-ul Arduino
  • Conectați dispozitivul Arduino Nano la computer prin cablul mini-USB-USB
  • Asigurați-vă că portul serial este setat la portul detectat de computer când ați conectat dispozitivul Arduino utilizând Instrumente> Port serial meniul
  • Asigurați-vă că placa este setată la Arduino Nano w / ATmega328 utilizând Instrumente> Consiliul meniul
  • Verificați dacă bibliotecile sunt instalate corect făcând clic pe Verifica și asigurați-vă că nu există erori
  • Conectați bateria la proiect. Acest lucru pare un pas ciudat aici, dar cititorul Arduino, RTC, senzor și cardul SD trage suficientă tensiune pentru că mi-am găsit portul USB nu furniza suficientă energie suficientă și proiectul a fost resetat continuu. Asigurați-vă timpul pentru conectarea bateriei de 9V. Când am făcut asta, am observat că indicatorul de stare, condus de Arduino, sa aprins sensibil
  • Folosește Încărcați pentru a împinge codul la Arduino
  • Editați codul pentru a comenta linia: rtc.adjust (DateTime (F (__DATE__), F (__ TIME__))); Prin punerea a // la începutul liniei. Prima dată când ați încărcat codul, acesta a setat data și ora RTC la momentul compilației. Dar nu doriți să continuați resetarea ceasului pentru a compila timpul de fiecare dată când tabla se resetează. Încărcarea codului fără aceasta rtc.adjust în ea va lăsa singur timpul de ceas pe următoarea boot
  • Încărcați din nou codul cu linia setată de timp comentată
  • Deschide Monitor serial fereastră apăsând Control-Shift-M și asigurați-vă că este setat la 19200 baud. Ar trebui să vedeți inițierea Arduino cu ieșire ca exemplul de mai jos
Inițializarea unui datalogger cu versiunea RTC 1.0 Pornirea senzorului de temperatură și umiditate Pornirea cititorului SDCard și a cardului Deschiderea fișierului log pentru scriere. Pornirea ceasului în timp real 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

Note despre program

Programul datalogger îmbină funcțiile din biblioteca RTC, biblioteca DHT și biblioteca SD. Există câteva opțiuni în partea superioară a programului pe care le puteți acorda, cum ar fi numele fișierului de date și ce tip de DHT aveți. 

Totuși, toate setările implicite ar trebui să funcționeze bine dacă ați folosit componentele sugerate mai sus.

Buclă principală

Buclele principale ale programului simplu fac trei lucruri.

  • Citiți temperatura și umiditatea senzorului. Am împrumutat un cod pentru asta de la un alt tutorial pe care l-am scris: Construirea unei rețele de senzori wireless în casa ta 
  • Formatați datele preluate într-o listă separată prin virgulă pentru a le trimite la funcția jurnal
  • Trimiteți datele la logThis () funcție pentru scrierea pe card
  • Așteptați trei secunde

Repeta procesul atâta timp cât există putere și spațiu pe cardul SD.

Logging

logThis () funcția ia un șir de caractere de date ca argument, primește timpul din RTC, îl formatează cu datele și îl scrie în fișierul jurnal. Numele fișierului jurnal este specificat în #defini secțiune a programului. Schița deschide fișierul de jurnal când începe configurarea, astfel încât fișierul de înregistrări de fișiere nu trebuie să-l deschidă din nou pentru fiecare intrare din jurnal. Cripticul sprintf comanda afișată mai jos formatează datele. 

Dacă doriți să schimbați modul în care datele sunt înregistrate, asigurați-vă că sunteți familiarizat cu funcția sprintf și puteți muta elementele de formatare și date în jur. Dacă trebuie doar să rearanjați câmpurile de date, puteți schimba ordinea între virgule și fiecare lucru ar trebui să funcționeze foarte bine.

sprintf (mesaj, "% ld,% d /% d /% d% 02d:% 02d:% 02d,% s", epoca, Anul, Luna, Ziua, Oră,

În cele din urmă, dataFile.println (mesaj) comandă șirul formatat în fișier. Funcția se comportă exact ca și Serial.println comanda.

Sistemul de fișiere FAT32 aflat pe cardul SD are câteva limitări care merită să fie cunoscute. Numele fișierului trebuie să fie și în format 8.3. Cea mai mare dimensiune de fișier pe care o poate deține este un fișier de 2 GB și poate conține numai 268.173.300 de fișiere. Sperăm că puteți trăi cu aceste constrângeri puțin.

Timp

Funcțiile now.year () și prietenii efectuează munca necesară pentru citirea elementelor de timp curente (unix epoch, an, lună, zi, oră, minut, secundă) de la placa RTC și returnează valoarea.

Lucrul cool cu ​​ceasurile în timp real este că aceștia își păstrează timpul, desigur. În timp ce codul și proiectul pot să dispară, făcând alte lucruri importante, cum ar fi să vă asigurați că berea dvs. fermentează la temperatura potrivită, continuă să vă mențineți timp. Chiar dacă proiectul dvs. își pierde puterea, acesta continuă să ticăie cu o baterie independentă. 

Tot ce trebuie să faceți este să-l întrebați și vă va spune cât este momentul. Acest lucru este, desigur, perfect pentru logarea datelor. Componenta specificată în lista de piese este un cronometru acceptabil, dar specificațiile spun că poate câștiga până la două secunde pe zi. 

În cazul în care vă ține o noapte, apoi verificați ChronoDot fantezie pentru o precizie mai mare cu exact același protocol. Este complet interschimbabil cu RTC în acest proiect pentru câțiva dolari mai mult și vine complet asamblat.

Testarea 

Ați construit proiectul, l-ați programat (de două ori) și ați citit totul despre teoria operației de mai sus. E timpul să-l încercați.

  1. Setați placa undeva unde temperatura și umiditatea vor fi interesante și conectați bateria
  2. Lăsați loggerul să ruleze pentru o vreme colectând date
  3. După ce eliminați puțin energia din proiect și scoateți cardul SD
  4. Puneți cardul în adaptorul de dimensiuni complete și introduceți cardul SD în computer.
  5. Deschideți fișierul datalog.txt

Ar trebui să vedeți ceva de felul următor.

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/16 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

Concluzie

În acest tutorial v-am arătat cum să integrați un card SD și un modul ceas în timp real în proiectul dvs. Cu exemplul de cod puteți înregistra date pentru o perioadă lungă de timp, care pot fi copiate rapid și ușor pe un computer. 

După finalizarea acestui proiect, puteți încerca modificări sau upgrade-uri la acesta. Încercați să actualizați cipul de timp pentru timbre mai precise. Programul inclus include pur și simplu în același fișier, până când este plin. Puteți încerca să creați o schemă de rotație a fișierelor bazată pe date pentru a rota fișiere o dată pe săptămână. 

Nici măcar nu am menționat că firul de detectare a cardului de la cititor vă va permite să modificați schema și placa pentru a testa prezența unei cartele înainte de a încerca orice operațiuni de citire sau scriere. Mult noroc și să te distrezi experimentând.