Som ingeniører / udviklere stoler vi altid på de indsamlede data for at designe eller forbedre et system. Optagelse af data og analyse af dem er en almindelig praksis i de fleste brancher. Her bygger vi Arduino Data Logger Project, hvor vi lærer, hvordan vi kan logge data med et bestemt tidsinterval. Vi bruger et Arduino-kort til at læse nogle data (her temperatur, fugtighed, dato og klokkeslæt) og gemme dem på et SD-kort og computeren samtidigt.
De gemte data kan let åbnes i et Excel-ark til yderligere analyser. For at opretholde datoen og klokkeslættet bruger vi det berømte RTC-modul DS3231, og for at få temperaturen og fugtigheden bruger vi DHT11-sensoren. I slutningen af projektet lærer du
- Sådan logges data på SD-kort med dato-, klokkeslæt- og sensorværdier.
- Sådan skriver du data direkte til Excel-ark på pc via seriel kommunikation.
Nødvendige materialer:
- Brødbræt
- Arduino UNO (ethvert Arduino-bord)
- DHT11 temperaturføler
- DS3231 RTC-modul
- SD-kort modul
- SD kort
- Tilslutning af ledninger
- Computer / bærbar computer
Kredsløbsdiagram:
Kredsløbsdiagrammet til dette Arduino Temperature Logger-projekt er vist nedenfor.
Som vist i kredsløbsdiagrammet er forbindelserne meget enkle, da vi har brugt dem som moduler, og vi kan direkte bygge dem på et brødbræt. Forbindelserne er yderligere klassificeret i nedenstående tabel
Arduino Pin |
Modulstift |
Temperatursensor - DHT11 |
|
Vcc |
5V |
Gnd |
Gnd |
Nc |
Nc |
Ud |
Pin 7 |
RTC-modul DS3231 |
|
Vcc |
5V |
Gnd |
Gnd |
SCL |
Pin A5 |
SDA |
Pin A4 |
SD-kortmodul |
|
Vcc |
5V |
Gnd |
Gnd |
MISO |
Pin 12 |
MOSI |
Pin 11 |
SCK |
Pin 13 |
CS |
Pin 4 |
Du kan udskifte DHT11-temperatursensoren med en hvilken som helst af din sensor, hvorfra du skal logge værdierne. Du kan kontrollere LM35 med Arduino for at læse temperaturen.
RTC-modulet DS3231 er grænseflade med Arduino ved hjælp af I2C-kommunikation (SCL, SDA), og SD-kortmodulet er grænseflade ved hjælp af SPI-kommunikation (MISO, MOSI, SCK, CS). Stifterne 4 og 7 er defineret som CS-stiften og outputstiften af Arduino-programmet, du kan ændre dem til enhver anden stift, hvis det kræves. Vi har tidligere interfacet SD-kort med Arduino i Music player-projektet.
Forklaring til Arduino-programmet:
Vi er nødt til at skrive Arduino-programmet, som kan gøre følgende.
- Læs data fra DTH11-sensor (eller andre data, som du ønsker at logge på).
- Initialiser I2C-bussen for at læse data fra RTC-modulet.
- Initialiser SPI-bussen for at interface SD-kortmodulet med Arduino.
- Gem dato, klokkeslæt, temperatur og fugtighed på SD-kortet.
- Gem dato, klokkeslæt, temperatur og fugtighed på et Excel-ark, der kører på en computer / bærbar computer.
Ovenstående trin lyder måske komplicerede, men de er meget lette, da vi har bibliotekerne til at gøre det hårde job for os. Du skal downloade følgende to biblioteker
- DHT11-sensorbibliotek fra GitHub
- DS3231 RTC-modulbibliotek fra Rinky-Dink Electronics
Når du har downloadet biblioteket, skal du føje dem til din Arduino IDE ved at følge
Skitse-> Inkluder bibliotek -> Tilføj.ZIP-bibliotek
For at føje dataene fra Arduino livligt til et Excel-ark på computeren skal vi også installere software kaldet PLX-DAQ leveret af Parallax Inc. Følg linket for at downloade filen og installere dem baseret på dit operativsystem. Dette skulle have oprettet en mappe ved navn PLS-DAQ på dit skrivebord. Vi tager os af det senere i vores arbejdssektion.
Efter at have tilføjet begge biblioteker og efter installation af softwaren kan du bruge den komplette kode (angivet nederst i vejledningen) og uploade dem til din Arduino. Jeg har forsøgt mit bedste for at holde koden så enkel som muligt, og forklaringerne gives også gennem kommentarsektioner. Yderligere vil jeg forklare de vigtige segmenter nedenfor.
1. Læsning af data fra DS3231:
DS3231 er et RTC-modul (Real Time Clock). Det bruges til at opretholde dato og klokkeslæt for de fleste af elektronikprojekterne. Dette modul har sin egen møntcelleforsyning, ved hjælp af hvilken det opretholder dato og klokkeslæt, selv når hovedstrømmen fjernes, eller MCU'en er gået gennem en hård nulstilling. Så når vi har indstillet dato og klokkeslæt i dette modul, vil det altid holde styr på det.
Brug af dette modul er meget let på grund af det bibliotek, der leveres af Arduino.
// Init DS3231 ved hjælp af hardwaregrænsefladen DS3231 rtc (SDA, SCL); ugyldig Initialize_RTC () {// Initialiser rtc-objektet rtc.begin (); // #### følgende linjer kan ikke kommenteres for at indstille dato og tid for første gang ### / * rtc.setDOW (FRIDAY); // Indstil ugedag til SUNDAY rtc.setTime (18, 46, 45); // Indstil tiden til 12:00:00 (24-timers-format) rtc.setDate (6, 30, 2017); // Indstil datoen til 1. januar 2014 * /}
Bemærk: Når du bruger dette modul for første gang, skal du indstille dato og klokkeslæt. Det kan gøres ved blot at fjerne kommentarerne som nævnt ovenfor og skrive dato og klokkeslæt. Sørg for at kommentere dem og uploade dem, ellers vil hver gang du kører tavlen blive indstillet igen. Du kan også bruge RTC IC DS1307 til at læse tiden med Arduino.
2. Læsning af data fra DHT11:
DHT11 er en temperaturfugtighedsføler. Det sender værdierne for temperatur og fugtighed som 8-bit-data serielt gennem udgangsstiften på modulet. Biblioteket læser disse data ved hjælp af Arduino's softwarefunktion.
#define DHT11_PIN 7 // Sensor output pin er forbundet til pin 7 dht DHT; // Sensorobjekt navngivet som DHT ugyldigt Read_DHT11 () {int chk = DHT.read11 (DHT11_PIN); }
Her har jeg tilsluttet output pin til pin 7 som eksempel, du kan vælge en hvilken som helst pin, der understøtter softwareseriel. Opkald til DHT.read (pin nummer); vil aflæse værdien af temperatur og fugtighed og gemme den i henholdsvis parameteren DHT. temperatur og DHT . Tjek også denne DHT11-baserede Arduino temperaturmåling.
3. Initialisering af SC-kortmodulet:
ugyldigt Initialize_SDcard () {// se om kortet er til stede og kan initialiseres: hvis (! SD.begin (chipSelect)) {Serial.println ("Kort mislykkedes eller ikke til stede"); // gør ikke mere: returner; } // åbn filen. bemærk, at kun en fil kan være åben ad gangen, // så du skal lukke denne, før du åbner en anden. File dataFile = SD.open ("LoggerCD.txt", FILE_WRITE); // hvis filen er tilgængelig, skriv til den: hvis (dataFile) {dataFile.println ("Dato, tid, temperatur, fugtighed"); // Skriv den første række i excel-filen dataFile.close (); }}
Brug af et SD-kort med Arduino er let på grund af SD-kortbiblioteket, der som standard føjes til Arduino IDE. I SD-kortets initialiseringsfunktion opretter vi en tekstfil med navnet “LoggerCD.txt” og skriver den første række af vores indhold. Her adskiller vi værdierne ved at bruge et "," som en afgrænser. Betydning, når et komma placeres, betyder det, at vi skal flytte til den næste celle i Excel-arket.
4. Skrivning af data til SD-kort
ugyldigt Write_SDcard () {// åbn filen. bemærk, at kun en fil kan være åben ad gangen, // så du skal lukke denne, før du åbner en anden. File dataFile = SD.open ("LoggerCD.txt", FILE_WRITE); // hvis filen er tilgængelig, skriv til den: hvis (dataFile) {dataFile.print (rtc.getDateStr ()); // Gem dato på SD-kort dataFile.print (","); // Flyt til næste kolonne ved hjælp af et "," dataFile.print (rtc.getTimeStr ()); // Gem dato på SD-kort dataFile.print (","); // Gå til næste kolonne ved hjælp af et "," dataFile.print (DHT.temperature); // Gem dato på SD-kort dataFile.print (","); // Gå til næste kolonne ved hjælp af et "," dataFile.print (DHT.humidity); // Gem dato på SD-kort dataFile.print (","); // Flyt til næste kolonne ved hjælp af et "," dataFile.println (); // Slut på række gå til næste række dataFile.close ();// Luk filen} ellers Serial.println ("OOPS !! Skrivning af SD-kort mislykkedes"); }
Som tidligere sagt er vores hensigt at gemme dato, tid, temperatur og fugtighed på vores SD-kort. Ved hjælp af DS3231-biblioteket og DHT11-biblioteket er vores Arduino i stand til at læse alle disse fire parametre og gemme dem i følgende parametre som vist i nedenstående tabel
Dato |
rtc.getDateStr ()); |
Tid |
rtc.getTimeStr ()); |
Temperatur |
DHT-temperatur |
Fugtighed |
DHT. Luftfugtighed |
Nu kan vi direkte bruge disse parametre til at gemme dem på SD-kortet ved hjælp af printlinjen
dataFile.print (parameter);
Du kan bemærke, at hver parameter er adskilt med et komma for at få det til at se læsbart og et dataFile.println (); bruges til at indikere slutningen af linjen.
5. Skrivning af data til PLX-DAQ
PLX-DAQ er Microsoft Excel Plug-in-software, der hjælper os med at skrive værdier fra Arduino til direkte i en Excel-fil på vores bærbare computer eller pc. Dette er min personlige favorit på grund af to grunde:
1.Du kan skrive og overvåge dataene på samme tid og giver os mulighed for at plotte dem som grafer.
2. Du har ikke brug for et RTC-modul som DS3231 for at holde styr på dato og klokkeslæt. Du kan ganske enkelt bruge datoen og klokkeslættet, der kører på din bærbare computer / computer, og gemme dem direkte på Excel.
For at bruge denne software med Arduino skal vi sende dataene serielt i et specifikt mønster ligesom at vise værdi på seriel skærm. Nøglelinjerne forklares nedenfor:
ugyldig Initialize_PlxDaq () {Serial.println ("CLEARDATA"); // rydder op i data tilbage fra tidligere projekter Serial.println ("LABEL, Date, Time, Temperature, Humidity"); // skriv altid LABEL for at angive det som første linje} ugyldigt Write_PlxDaq () {Serial.print ("DATA"); // skriv altid "DATA" for at fortælle følgende som Data Serial.print (","); // Gå til næste kolonne ved hjælp af et "," Serial.print ("DATE"); // Gem dato på Excel Serial.print (","); // Gå til næste kolonne ved hjælp af et "," Serial.print ("TIME"); // Gem dato på Excel Serial.print (","); // Gå til næste kolonne ved hjælp af et "," Serial.print (DHT.temperature); // Gem dato på Excel Serial.print (","); // Gå til næste kolonne ved hjælp af et "," Serial.print (DHT.humidity);// Gem dato på Excel Serial.print (","); // Gå til næste kolonne ved hjælp af en "," Serial.println (); // Slut på række gå til næste række}
Softwaren kan genkende nøgleord som LABEL, DATA, TIME, DATE osv. Som vist i initialiseringsfunktionen bruges nøgleordet "LABEL" til at skrive den første række i Excel-arket. Senere i skrivefunktionen bruger vi nøgleordet "DATA" for at indikere, at følgende oplysninger skal betragtes som DATA. For at indikere, at vi skal gå til næste række, skal vi bruge komma (“,”). For at angive slutningen af rækken skal vi sende en Serial.println ();.
Som sagt tidligere kan vi skrive systemets dato og klokkeslæt ved at sende nøgleordene henholdsvis "DATO" og "TID" som vist ovenfor.
Bemærk: Brug ikke seriel skærm, når du bruger denne PLX_DAQ-software.
Arbejdsforklaring:
Arbejdet med Arduino Data Logger er enkelt. Når hardwaren og softwaren er klar, er det tid til at brænde programmet ind i dit Arduino Board. Så snart dit program bliver uploadet, begynder dine temperatur- og fugtighedsværdier at blive gemt på dit SD-kort. Du skal følge nedenstående trin for at aktivere PLX-DAQ til at logge på Excel-arket på computeren.
Trin 1: Åbn filen "Plx-Daq Spreadsheet", der blev oprettet på dit skrivebord under installationen.
Trin 2: Hvis der er en sikkerhedsblok, skal du klikke på Indstillinger-> Aktivér indholdet -> Udfør -> OK for at få følgende skærmbillede.
Trin 3: Vælg nu baudhastigheden som “9600” og den port, som din Arduino er tilsluttet, og klik på Opret forbindelse. Dine værdier skal begynde at blive logget som vist på billedet nedenfor.
Du kan lade dette excel-ark være åbent og overvåge værdierne, når de bliver logget. Da dette sker, ville vores SD-kort også have gemt de samme værdier. For at kontrollere er, at det fungerer, skal du bare fjerne SD-kortet og åbne det på din computer. Du skal finde en tekstfil med navnet “LoggerCD.txt” i den. Når det åbnes, ville det se sådan ud.
Denne fil har data, men det ville være svært at analysere dem på en notesblok. Derfor kan vi åbne den på Excel som en CSV-fil (kommaseparerede værdier) og dermed gøre den mere effektiv. At åbne i excel
1.Åbn Excel. Klik på File-> Open og vælg “All file” i nederste højre hjørne, og vælg “LoggerCD” -filen fra SD-kortet. Dette åbner en tekstimportguide.
2.Klik på "Næste", og vælg komma som en afgrænser. Klik på "Næste" igen. Afslut derefter.
3.Nu åbnes dine værdier i en Excel-fil som vist nedenfor
Jeg har logget værdierne hvert 5. sekund; du kan logge dem til ethvert ønsket tidspunkt ved at ændre forsinkelsesfunktionen i programmet. For detaljeret forståelse af arbejdet, se videoen nedenfor.
Håber du kunne lide projektet, hvis du er i tvivl, skriv dem i kommentarfeltet nedenfor, så hjælper jeg dig.
Bonusforbedring - Trådløs datalogning ved hjælp af Arduino:
Når du er lykkedes indtil dette punkt, kan du med få fremskridt og bare tilføje et par kodelinjer logge data trådløst.
Tilslut blot en Bluetooth-enhed som HC-05, og skriv dataene til PLX-DAQ via Bluetooth i stedet for Serial. Det er erstat Serial.print (parameter); med BluetoothName.print (parameter); og tilslut din bærbare computer til dit Bluetooth-modul, og vælg den COM-port, som dine bærbare computere har Bluetooth tilsluttet, og Taadaaa…… Du har et fungerende trådløst dataloggingssystem på ingen tid.