Som ingeniører / utviklere stoler vi alltid på dataene som samles inn for å designe eller forbedre et system. Registrering av data og analyse av dem er en vanlig praksis i de fleste bransjer, her bygger vi Arduino Data Logger Project hvor vi vil lære hvordan vi kan logge data med et bestemt tidsintervall. Vi vil bruke et Arduino-kort til å lese noen data (her temperatur, fuktighet, dato og klokkeslett) og lagre dem på et SD-kort og datamaskinen samtidig.
Dataene som er lagret kan enkelt åpnes i et Excel-ark for videre analyser. For å opprettholde datoen og klokkeslettet vil vi bruke den berømte RTC-modulen DS3231, og for å få temperatur og fuktighet bruker vi DHT11-sensoren. På slutten av prosjektet vil du lære
- Hvordan logge inn data på SD-kort med dato, tid og sensorverdier.
- Hvordan skrive data direkte til Excel-ark på PC via seriell kommunikasjon.
Nødvendige materialer:
- Brettbrett
- Arduino UNO (ethvert Arduino-styre)
- DHT11 temperatursensor
- DS3231 RTC-modul
- SD-kortmodul
- SD kort
- Koble ledninger
- Datamaskin / bærbar PC
Kretsdiagram:
Kretsdiagrammet for dette Arduino Temperature Logger Project er vist nedenfor.
Som vist i kretsskjemaet er tilkoblingene veldig enkle siden vi har brukt dem som moduler, og vi kan bygge dem direkte på et brødbrett. Forbindelsene er ytterligere klassifisert i tabellen nedenfor
Arduino Pin |
Modulstift |
Temperatursensor - DHT11 |
|
Vcc |
5V |
Gnd |
Gnd |
Nc |
Nc |
Ute |
Pin 7 |
RTC-modul DS3231 |
|
Vcc |
5V |
Gnd |
Gnd |
SCL |
Pin A5 |
SDA |
Fest A4 |
SD-kortmodul |
|
Vcc |
5V |
Gnd |
Gnd |
MISO |
Pinne 12 |
MOSI |
Pin 11 |
SCK |
Pinne 13 |
CS |
Pin 4 |
Du kan erstatte DHT11-temperatursensoren med hvilken som helst av sensoren din som du trenger å logge verdiene fra. Du kan sjekke LM35 med Arduino for å lese temperaturen.
RTC-modulen DS3231 er grensesnittet med Arduino ved hjelp av I2C-kommunikasjonen (SCL, SDA), og SD-kortmodulen er grensesnittet ved hjelp av SPI-kommunikasjonen (MISO, MOSI, SCK, CS). Pinnene 4 og 7 er definert som CS-pinnen og utgangspinnen av Arduino-programmet, du kan endre dem til en hvilken som helst annen pinne om nødvendig. Vi har tidligere koblet SD-kort til Arduino i Music player-prosjektet.
Arduino Program Forklaring:
Vi må skrive Arduino-programmet som kan gjøre følgende.
- Les data fra DTH11-sensor (eller andre data du vil logge).
- Initialiser I2C-bussen for å lese data fra RTC-modulen.
- Initialiser SPI-bussen for å grensesnitt SD-kortmodulen med Arduino.
- Lagre dato, klokkeslett, temperatur og fuktighet på SD-kortet.
- Lagre dato, klokkeslett, temperatur og fuktighet på et Excel-ark som kjører på en datamaskin / bærbar PC.
Ovennevnte trinn kan høres kompliserte ut, men de er veldig enkle siden vi har bibliotekene til å gjøre den harde jobben for oss. Du må laste ned følgende to biblioteker
- DHT11 sensorbibliotek fra GitHub
- DS3231 RTC-modulbibliotek fra Rinky-Dink Electronics
Når du har lastet ned biblioteket, legg dem til i Arduino IDE ved å følge
Skisse-> Inkluder bibliotek -> Legg til.ZIP-bibliotek
For å mate dataene fra Arduino livlig til et Excel-ark på datamaskinen, må vi også installere programvare kalt PLX-DAQ levert av Parallax Inc. Følg lenken for å laste ned filen og installere dem basert på operativsystemet ditt. Dette burde ha opprettet en mappe som heter PLS-DAQ på skrivebordet ditt. Vi tar oss av det senere i arbeidsdelen.
Etter at du har lagt til begge biblioteker og etter at du har installert programvaren, kan du bruke den komplette koden (gitt nederst i opplæringen) og laste dem opp til Arduino. Jeg har prøvd mitt beste for å holde koden så enkel som mulig, og forklaringene er også gitt gjennom kommentarseksjoner. Videre vil jeg forklare de viktige segmentene nedenfor.
1. Lesedata fra DS3231:
DS3231 er en RTC-modul (Real Time Clock). Den brukes til å opprettholde dato og tid for de fleste av elektronikkprosjektene. Denne modulen har sin egen myntcelle strømforsyning ved hjelp av hvilken den opprettholder dato og tid, selv når hovedstrømmen er fjernet eller MCU har gått gjennom en hard tilbakestilling. Så når vi har satt dato og klokkeslett i denne modulen, vil det alltid holde oversikt over det.
Det er veldig enkelt å bruke denne modulen på grunn av biblioteket som tilbys av Arduino.
// Start DS3231 ved hjelp av maskinvaregrensesnittet DS3231 rtc (SDA, SCL); ugyldig Initialize_RTC () {// Initialiser rtc-objektet rtc.begin (); // #### følgende linjer kan ikke kommenteres for å stille dato og klokkeslett for første gang ### / * rtc.setDOW (FRIDAY); // Sett ukedag til SUNDAY rtc.setTime (18, 46, 45); // Still tiden til 12:00:00 (24-timers format) rtc.setDate (6, 30, 2017); // Sett datoen til 1. januar 2014 * /}
Merk: Når du bruker denne modulen for første gang, må du stille inn dato og klokkeslett. Det kan gjøres ved å bare fjerne kommentarene som nevnt ovenfor og skrive dato og klokkeslett. Sørg for at du kommenterer dem og laster dem opp, ellers blir dato og klokkeslett satt igjen hver gang du kjører styret. Du kan også bruke RTC IC DS1307 for å lese tiden med Arduino.
2. Lesing av data fra DHT11:
DHT11 er en temperatursensor for fuktighet. Den sender verdiene av temperatur og fuktighet som en 8-biters data serielt gjennom utgangspinnen til modulen. Biblioteket leser disse dataene ved hjelp av programvareseriefunksjonen til Arduino.
#define DHT11_PIN 7 // Sensoruttak er koblet til pin 7 dht DHT; // Sensorobjekt kalt DHT ugyldig Read_DHT11 () {int chk = DHT.read11 (DHT11_PIN); }
Her har jeg koblet utgangspinnen til pin 7 som eksempel. Du kan velge hvilken som helst pin som støtter programvareserie. Ringer til DHT.read (pin-nummer); vil lese verdien av temperatur og fuktighet og lagre den i henholdsvis parameteren DHT. temperatur og DHT . Sjekk også denne DHT11-baserte Arduino temperaturmåling.
3. Initialisere SC-kortmodulen:
ugyldig Initialize_SDcard () {// se om kortet er til stede og kan initialiseres: if (! SD.begin (chipSelect)) {Serial.println ("Card failed, or not present"); // ikke gjør noe mer: returner; } // åpne filen. Vær oppmerksom på at bare én fil kan være åpen om gangen, // så du må lukke denne før du åpner en annen. File dataFile = SD.open ("LoggerCD.txt", FILE_WRITE); // hvis filen er tilgjengelig, skriv til den: if (dataFile) {dataFile.println ("Date, Time, Temperature, Humidity"); // Skriv den første raden i Excel-filen dataFile.close (); }}
Å bruke et SD-kort med Arduino er enkelt på grunn av SD-kortbiblioteket som vil bli lagt til Arduino IDE som standard. I SD-kortets initialiseringsfunksjon vil vi lage en tekstfil kalt "LoggerCD.txt" og skrive den første raden med innholdet. Her skiller vi verdiene ved å bruke et “,” som en avgrenser. Betydning når et komma plasseres betyr det at vi må flytte til neste celle i Excel-arket.
4. Skrive data til SD-kort
ugyldig Write_SDcard () {// åpne filen. Vær oppmerksom på at bare én fil kan være åpen om gangen, // så du må lukke denne før du åpner en annen. File dataFile = SD.open ("LoggerCD.txt", FILE_WRITE); // hvis filen er tilgjengelig, skriv til den: hvis (dataFile) {dataFile.print (rtc.getDateStr ()); // Lagringsdato på SD-kort dataFile.print (","); // Gå til neste kolonne ved å bruke et "," dataFile.print (rtc.getTimeStr ()); // Lagringsdato på SD-kort dataFile.print (","); // Gå til neste kolonne ved å bruke et "," dataFile.print (DHT.temperature); // Lagringsdato på SD-kort dataFile.print (","); // Gå til neste kolonne ved hjelp av et "," dataFile.print (DHT.humidity); // Lagringsdato på SD-kort dataFile.print (","); // Gå til neste kolonne ved hjelp av en "," dataFile.println (); // End of Row flytter til neste rad dataFile.close ();// Lukk filen} annet Serial.println ("OOPS !! Skriving av SD-kort mislyktes"); }
Som sagt tidligere, er vår intensjon å lagre dato, tid, temperatur og fuktighet på SD-kortet vårt. Ved hjelp av DS3231-biblioteket og DHT11-biblioteket vil Arduino være i stand til å lese alle disse fire parametrene og lagre dem i følgende parametere, som vist i tabellen nedenfor
Dato |
rtc.getDateStr ()); |
Tid |
rtc.getTimeStr ()); |
Temperatur |
DHT. Temperatur |
Luftfuktighet |
DHT. Luftfuktighet |
Nå kan vi bruke disse parametrene direkte til å lagre dem på SD-kortet ved hjelp av utskriftslinjen
dataFile.print (parameter);
Du kan legge merke til at hver parameter er atskilt med et komma for å få det til å se lesbart og et dataFile.println (); brukes til å indikere slutten av linjen.
5. Skrive data til PLX-DAQ
PLX-DAQ er Microsoft Excel Plug-in-programvare som hjelper oss med å skrive verdier fra Arduino til direkte i en Excel-fil på vår bærbare PC eller PC. Dette er min personlige favoritt på grunn av to grunner:
1. Du kan skrive og overvåke dataene samtidig og gi oss en måte å plotte dem som grafer.
2. Du trenger ikke en RTC-modul som DS3231 for å holde oversikt over dato og klokkeslett. Du kan bare bruke datoen og klokkeslettet som kjører på din bærbare datamaskin og lagre dem direkte på Excel.
For å bruke denne programvaren med Arduino, må vi sende dataene serielt i et bestemt mønster akkurat som å vise verdi på seriell skjerm. Nøkkellinjene er forklart nedenfor:
ugyldig Initialize_PlxDaq () {Serial.println ("CLEARDATA"); // fjerner data som er igjen fra tidligere prosjekter Serial.println ("LABEL, Date, Time, Temperature, Humidity"); // skriv alltid LABEL, for å indikere det som første linje} ugyldig Write_PlxDaq () {Serial.print ("DATA"); // skriv alltid "DATA" for å forhindre følgende som Data Serial.print (","); // Gå til neste kolonne ved å bruke et "," Serial.print ("DATE"); // Lagringsdato på Excel Serial.print (","); // Gå til neste kolonne ved å bruke et "," Serial.print ("TID"); // Lagringsdato på Excel Serial.print (","); // Gå til neste kolonne ved å bruke "," Serial.print (DHT.temperature); // Lagringsdato på Excel Serial.print (","); // Gå til neste kolonne ved å bruke et "," Serial.print (DHT.humidity);// Lagringsdato på Excel Serial.print (","); // Gå til neste kolonne ved å bruke "," Serial.println (); // End of Row flytt til neste rad}
Programvaren kan gjenkjenne nøkkelord som LABEL, DATA, TIME, DATE osv. Som vist i initialiseringsfunksjonen brukes nøkkelordet "LABEL" til å skrive den første RADEN i Excel-arket. Senere i skrivefunksjonen bruker vi nøkkelordet “DATA” for å indikere at følgende informasjon skal betraktes som DATA. For å indikere at vi må gå til neste rad, må vi bruke komma (“,”). For å indikere slutten av raden må vi sende en Serial.println ();.
Som sagt tidligere kan vi skrive systemets dato og klokkeslett ved å sende nøkkelordene henholdsvis "DATE" og "TIME" som vist ovenfor.
Merk: Ikke bruk seriell skjerm når du bruker denne PLX_DAQ-programvaren.
Arbeidsforklaring:
Arbeidet med Arduino Data Logger er enkelt. Når maskinvaren og programvaren er klar, er det på tide å brenne programmet inn i Arduino Board. Så snart programmet ditt blir lastet opp, vil temperatur- og fuktighetsverdiene dine lagres på SD-kortet ditt. Du må følge trinnene nedenfor for å gjøre det mulig for PLX-DAQ å logge inn på Excel-arket på datamaskinen.
Trinn 1: Åpne "Plx-Daq Spreadsheet" -filen som ble opprettet på skrivebordet ditt under installasjonen.
Trinn 2: Hvis det er en sikkerhetsblokk, klikker du på Alternativer-> Aktiver innholdet -> Fullfør -> OK for å få følgende skjermbilde.
Trinn 3: Velg nå overføringshastigheten som “9600” og porten som Arduino er koblet til, og klikk på Koble til. Verdiene dine skal begynne å bli logget som vist på bildet nedenfor.
Du kan la dette excel-arket være åpent og overvåke verdiene når de blir logget. Når dette skjer, ville SD-kortet vårt også ha lagret de samme verdiene. For å sjekke er at det fungerer bare å fjerne SD-kortet og åpne det på datamaskinen. Du bør finne en tekstfil med navnet “LoggerCD.txt” i den. Når det åpnes, ville det se ut som dette.
Denne filen har data, men det ville være vanskelig å analysere dem på et notisblokk. Derfor kan vi åpne den på Excel som en CSV-fil (kommaseparerte verdier), og dermed gjøre den mer effektiv. Å åpne i excel
1.Åpne Excel. Klikk på File-> Open og velg “All file” nederst i høyre hjørne og velg “LoggerCD” -filen fra SD-kortet. Dette åpner en tekstimportveiviser.
2.Klikk på "Neste" og velg komma som skilletegn. Klikk på “Neste” igjen. Så fullfør.
3. nå vil verdiene dine bli åpnet i en Excel-fil som vist nedenfor
Jeg har logget verdiene hvert 5. sekund; du kan logge dem når som helst ved å endre forsinkelsesfunksjonen i programmet. For detaljert forståelse av arbeidet, se videoen nedenfor.
Håper du likte prosjektet, hvis du er i tvil, skriv dem i kommentarfeltet nedenfor, så hjelper jeg deg.
Bonusforbedring - Trådløs datalogging ved hjelp av Arduino:
Når du har lykkes til dette punktet, kan du logge data trådløst med få fremskritt og bare legge til noen få kodelinjer.
Bare koble til en Bluetooth-enhet som HC-05 og skriv dataene til PLX-DAQ via Bluetooth i stedet for Serial. Det er å erstatte Serial.print (parameter); med BluetoothName.print (parameter); og koble den bærbare datamaskinen til Bluetooth-modulen din og velg COM-porten som bærbare PC-er Bluetooth er koblet til, og Taadaaa…… Du har et fungerende trådløst dataloggingssystem på kort tid.