Als ingenieurs / ontwikkelaars vertrouwen we altijd op de verzamelde gegevens om een systeem te ontwerpen of te verbeteren. Het vastleggen van gegevens en het analyseren ervan is een gangbare praktijk in de meeste industrieën, hier bouwen we Arduino Data Logger Project, waar we zullen leren hoe we gegevens kunnen loggen met een specifiek tijdsinterval. We zullen een Arduino-bord gebruiken om enkele gegevens (hier temperatuur, vochtigheid, datum en tijd) uit te lezen en deze tegelijkertijd op een SD-kaart en de computer op te slaan.
De opgeslagen gegevens kunnen eenvoudig worden geopend in een Excel-sheet voor verdere analyse. Om de datum en tijd te behouden, zullen we de beroemde RTC-module DS3231 gebruiken en om de temperatuur en vochtigheid te krijgen, zullen we de DHT11-sensor gebruiken. Aan het einde van het project leer je
- Hoe gegevens in te loggen op SD-kaart met datum, tijd en sensorwaarden.
- Gegevens rechtstreeks naar Excel Sheet op pc schrijven via seriële communicatie.
Vereiste materialen:
- Breadboard
- Arduino UNO (elk Arduino-bord)
- DHT11 Temperatuursensor
- DS3231 RTC-module
- SD-kaartmodule
- SD-kaart
- Draden aansluiten
- Computer / laptop
Schakelschema:
Het schakelschema voor dit Arduino temperatuurloggerproject wordt hieronder weergegeven.
Zoals in het schakelschema te zien is, zijn de aansluitingen heel eenvoudig, aangezien we ze als modules hebben gebruikt, kunnen we ze direct op een breadboard bouwen. In onderstaande tabel zijn de aansluitingen nader ingedeeld
Arduino-pin |
Module Pin |
Temperatuursensor - DHT11 |
|
Vcc |
5V |
GND |
GND |
Nc |
Nc |
Uit |
Pin 7 |
RTC-module DS3231 |
|
Vcc |
5V |
GND |
GND |
SCL |
Speld A5 |
SDA |
Speld A4 |
SD-kaartmodule |
|
Vcc |
5V |
GND |
GND |
MISO |
Pin 12 |
MOSI |
Speld 11 |
SCK |
Pin 13 |
CS |
Pin 4 |
U kunt de DHT11-temperatuursensor vervangen door een van uw sensoren waarvan u de waarden moet loggen. Je kunt LM35 controleren met Arduino om de temperatuur af te lezen.
De RTC-module DS3231 is gekoppeld aan Arduino via de I2C-communicatie (SCL, SDA) en de SD-kaartmodule is gekoppeld via de SPI-communicatie (MISO, MOSI, SCK, CS). De pinnen 4 en 7 worden door het Arduino-programma gedefinieerd als de CS-pin en outputpin, u kunt ze indien nodig naar een andere pin wijzigen. We hebben eerder een SD-kaart gekoppeld aan het Arduino in het muziekspelerproject.
Arduino Programma Uitleg:
We moeten het Arduino-programma schrijven dat het volgende kan doen.
- Lees gegevens van de DTH11-sensor (of andere gegevens die u wilt loggen).
- Initialiseer de I2C-bus om gegevens van de RTC-module te lezen.
- Initialiseer de SPI-bus om de SD-kaartmodule met Arduino te verbinden.
- Bewaar de datum, tijd, temperatuur en vochtigheid op de SD-kaart.
- Bewaar de datum, tijd, temperatuur en vochtigheid op een Excel-blad dat op een computer / laptop draait.
De bovenstaande stappen klinken misschien ingewikkeld, maar ze zijn erg gemakkelijk omdat we de bibliotheken hebben om het zware werk voor ons te doen. U moet de volgende twee bibliotheken downloaden
- DHT11-sensorbibliotheek van GitHub
- DS3231 RTC-modulebibliotheek van Rinky-Dink Electronics
Nadat u de bibliotheek heeft gedownload, voegt u ze toe aan uw Arduino IDE door te volgen
Schets-> Bibliotheek opnemen ->.ZIP-bibliotheek toevoegen
Om de gegevens van Arduino levendig in een Excel-sheet op de computer in te voeren, moeten we ook software genaamd PLX-DAQ installeren die wordt geleverd door Parallax Inc. Volg de link om het bestand te downloaden en installeer ze op basis van uw besturingssysteem. Dit zou een map met de naam PLS-DAQ op uw bureaublad moeten hebben gemaakt. We zullen er later in onze werksectie voor zorgen.
Na het toevoegen van beide bibliotheken en na het installeren van de software, kunt u de complete code gebruiken (weergegeven onderaan de tutorial) en deze uploaden naar uw Arduino. Ik heb mijn best gedaan om de code zo eenvoudig mogelijk te houden en de uitleg wordt ook gegeven via commentaarsecties. Verder zal ik de belangrijke onderdelen hieronder toelichten.
1. Gegevens lezen van DS3231:
DS3231 is een RTC-module (Real Time Clock). Het wordt gebruikt om de datum en tijd bij te houden voor de meeste elektronicaprojecten. Deze module heeft een eigen knoopcelvoeding waarmee de datum en tijd worden bijgehouden, zelfs wanneer de hoofdstroom is verwijderd of de MCU een harde reset heeft ondergaan. Dus zodra we de datum en tijd in deze module hebben ingesteld, houdt deze deze altijd bij.
Het gebruik van deze module is erg eenvoudig vanwege de bibliotheek die wordt aangeboden door Arduino.
// Initialiseer de DS3231 met behulp van de hardware-interface DS3231 rtc (SDA, SCL); void Initialize_RTC () {// Initialiseer het rtc-object rtc.begin (); // #### de volgende regels kunnen worden verwijderd om de datum en tijd voor de eerste keer in te stellen ### / * rtc.setDOW (VRIJDAG); // Stel de dag van de week in op ZONDAG rtc.setTime (18, 46, 45); // Stel de tijd in op 12:00:00 (24-uurs indeling) rtc.setDate (6, 30, 2017); // Stel de datum in op 1 januari 2014 * /}
Let op: Als u deze module voor het eerst gebruikt, moet u de datum en tijd instellen. Dit kan gedaan worden door simpelweg de opmerkingen te verwijderen zoals hierboven vermeld en de datum en tijd te schrijven. Zorg ervoor dat je ze opnieuw becommentarieert en upload, anders worden elke keer dat je het bord gebruikt de datum en tijd opnieuw ingesteld. U kunt ook RTC IC DS1307 gebruiken voor het aflezen van de tijd met Arduino.
2. Gegevens uit DHT11 lezen:
DHT11 is een temperatuur-vochtigheidssensor. Het zendt de waarden van temperatuur en vochtigheid als 8-bit data serieel via de output pin van de module. De bibliotheek leest deze gegevens met behulp van de seriële softwarefunctie van de Arduino.
#define DHT11_PIN 7 // Sensor output pin is verbonden met pin 7 dht DHT; // Sensorobject genaamd DHT void Read_DHT11 () {int chk = DHT.read11 (DHT11_PIN); }
Hier heb ik de output pin aangesloten op pin 7, als voorbeeld kun je elke pin kiezen die Software Serial ondersteunt. DHT.read bellen (pincode); leest de waarde van temperatuur en vochtigheid uit en slaat deze op in respectievelijk de parameter DHT.temperature en DHT.Humidity . Bekijk ook deze op DHT11 gebaseerde Arduino temperatuurmeting.
3. Initialiseren van de SC-kaartmodule:
void Initialize_SDcard () {// kijk of de kaart aanwezig is en kan worden geïnitialiseerd: if (! SD.begin (chipSelect)) {Serial.println ("Kaart mislukt of niet aanwezig"); // doe niets meer: terugkeer; } // open het bestand. merk op dat er maar één bestand tegelijk geopend kan zijn, // dus je moet dit bestand sluiten voordat je een ander opent. Bestand dataFile = SD.open ("LoggerCD.txt", FILE_WRITE); // als het bestand beschikbaar is, schrijf er dan naar: if (dataFile) {dataFile.println ("Datum, Tijd, Temperatuur, Vochtigheid"); // Schrijf de eerste rij van het Excel-bestand dataFile.close (); }}
Het gebruik van een SD-kaart met Arduino is eenvoudig vanwege de SD-kaartbibliotheek die standaard aan de Arduino IDE wordt toegevoegd. In de functie voor het initialiseren van de SD-kaart zullen we een tekstbestand maken met de naam "LoggerCD.txt" en de eerste rij van onze inhoud schrijven. Hier scheiden we de waarden door een "," als scheidingsteken te gebruiken. Dit betekent dat wanneer een komma wordt geplaatst, dit betekent dat we naar de volgende cel in het Excel-blad moeten gaan.
4. Gegevens schrijven naar SD-kaart
void Write_SDcard () {// open het bestand. merk op dat er maar één bestand tegelijk geopend kan zijn, // dus je moet dit bestand sluiten voordat je een ander opent. Bestand dataFile = SD.open ("LoggerCD.txt", FILE_WRITE); // als het bestand beschikbaar is, schrijf er dan naar: if (dataFile) {dataFile.print (rtc.getDateStr ()); // Datum opslaan op SD-kaart dataFile.print (","); // Ga naar de volgende kolom met een "," dataFile.print (rtc.getTimeStr ()); // Datum opslaan op SD-kaart dataFile.print (","); // Ga naar de volgende kolom met een "," dataFile.print (DHT.temperature); // Datum opslaan op SD-kaart dataFile.print (","); // Ga naar de volgende kolom met een "," dataFile.print (DHT.humidity); // Datum opslaan op SD-kaart dataFile.print (","); // Ga naar de volgende kolom met een "," dataFile.println (); // Einde van rij naar volgende rij dataFile.close ();// Sluit het bestand} else Serial.println ("OOPS !! schrijven naar SD-kaart mislukt"); }
Zoals eerder gezegd, is het onze bedoeling om de datum, tijd, temperatuur en vochtigheid op onze SD-kaart op te slaan. Met behulp van de DS3231-bibliotheek en de DHT11-bibliotheek kan onze Arduino al deze vier parameters lezen en opslaan in de volgende parameters, zoals weergegeven in de onderstaande tabel
Datum |
rtc.getDateStr ()); |
Tijd |
rtc.getTimeStr ()); |
Temperatuur |
DHT. Temperatuur |
Vochtigheid |
DHT. Vochtigheid |
Nu kunnen we deze parameters direct gebruiken om ze via de printregel op de SD-kaart op te slaan
dataFile.print (parameter);
U kunt zien dat elke parameter is gescheiden door een komma om het leesbaar te maken en een dataFile.println (); wordt gebruikt om het einde van de regel aan te geven.
5. Gegevens schrijven naar PLX-DAQ
PLX-DAQ is Microsoft Excel Plug-in-software die ons helpt om waarden van Arduino rechtstreeks naar een Excel-bestand op onze laptop of pc te schrijven. Dit is mijn persoonlijke favoriet vanwege twee redenen:
1.U kunt de gegevens tegelijkertijd schrijven en bewaken en biedt ons een manier om ze als grafieken te plotten.
2. U hebt geen RTC-module zoals DS3231 nodig om datum en tijd bij te houden. U kunt eenvoudig de datum en tijd gebruiken die op uw laptop / computer wordt uitgevoerd en deze rechtstreeks in Excel opslaan.
Om deze software met Arduino te gebruiken, moeten we de gegevens serieel in een specifiek patroon verzenden, net als het weergeven van waarde op een seriële monitor. De hoofdlijnen worden hieronder uitgelegd:
void Initialize_PlxDaq () {Serial.println ("CLEARDATA"); // wist alle gegevens van eerdere projecten Serial.println ("LABEL, datum, tijd, temperatuur, vochtigheid"); // schrijf altijd LABEL, om het als eerste regel aan te duiden} void Write_PlxDaq () {Serial.print ("DATA"); // schrijf altijd "DATA" om het volgende aan te duiden als Data Serial.print (","); // Ga naar de volgende kolom met een "," Serial.print ("DATE"); // Bewaar datum op Excel Serial.print (","); // Ga naar de volgende kolom met een "," Serial.print ("TIME"); // Bewaar datum op Excel Serial.print (","); // Ga naar de volgende kolom met een "," Serial.print (DHT.temperature); // Bewaar datum op Excel Serial.print (","); // Ga naar de volgende kolom met een "," Serial.print (DHT.humidity);// Bewaar datum op Excel Serial.print (","); // Ga naar de volgende kolom met een "," Serial.println (); // Einde van rij naar volgende rij}
De software kan trefwoorden herkennen zoals LABEL, DATA, TIJD, DATUM etc. Zoals getoond in de Initialize functie wordt het trefwoord “LABEL” gebruikt om de eerste RIJ van het Excel-blad te schrijven. Later in de Write-functie gebruiken we het trefwoord “DATA” om aan te geven dat de volgende informatie als DATA moet worden beschouwd. Om aan te geven dat we naar de volgende rij moeten gaan, moeten we een komma (",") gebruiken. Om het einde van de rij aan te geven, moeten we een Serial.println (); sturen .
Zoals eerder gezegd, kunnen we de systeemdatum en -tijd schrijven door respectievelijk de trefwoorden "DATE" en "TIME" te verzenden, zoals hierboven weergegeven.
Opmerking: gebruik geen seriële monitor bij gebruik van deze PLX_DAQ-software.
Werkende uitleg:
De werking van de Arduino Data Logger is eenvoudig. Zodra de hardware en software klaar zijn, is het tijd om het programma op je Arduino-bord te branden. Zodra uw programma wordt geüpload, worden uw temperatuur- en vochtigheidswaarden opgeslagen op uw SD-kaart. U moet de onderstaande stappen volgen om PLX-DAQ in staat te stellen in te loggen op het Excel-blad op de computer.
Stap 1: Open het "Plx-Daq Spreadsheet" -bestand dat tijdens de installatie op uw bureaublad is aangemaakt.
Stap 2: Als er een beveiligingsblok is, klik dan op Opties-> Inhoud inschakelen -> Voltooien -> OK om het volgende scherm te krijgen.
Stap 3: Selecteer nu de baudrate als “9600” en de poort waarop uw Arduino is aangesloten en klik op Connect. Uw waarden zouden moeten worden geregistreerd zoals weergegeven in de onderstaande afbeelding.
U kunt dit Excel-blad open laten en de waarden controleren terwijl ze worden geregistreerd. Terwijl dit gebeurt, zou onze SD-kaart ook dezelfde waarden hebben opgeslagen. Om te controleren of het werkt, verwijdert u gewoon de SD-kaart en opent u deze op uw computer. U zou er een tekstbestand met de naam "LoggerCD.txt" in moeten vinden. Bij het openen zou het er ongeveer zo uitzien.
Dit bestand bevat gegevens, maar het zou moeilijk zijn om ze op een notitieblok te analyseren. Daarom kunnen we het in Excel openen als een CSV-bestand (door komma's gescheiden waarden), waardoor het effectiever wordt. Om te openen in Excel
1. open Excel. Klik op Bestand-> Openen en selecteer "Alle bestanden" in de rechter benedenhoek en selecteer het "LoggerCD" -bestand van de SD-kaart. Hierdoor wordt een wizard voor het importeren van tekst geopend.
2.Klik op “Volgende” en selecteer een komma als scheidingsteken. Klik nogmaals op "Volgende". Eindig dan.
3. Nu worden uw waarden geopend in een Excel-bestand zoals hieronder weergegeven
Ik heb de waarden voor elke 5 seconden vastgelegd; u kunt ze voor elke gewenste tijd loggen door de vertragingsfunctie in het programma te wijzigen. Bekijk de onderstaande video voor een gedetailleerd begrip van de werking.
Ik hoop dat je het project leuk vond, als je twijfelt, schrijf ze dan in het onderstaande commentaargedeelte en ik zal je helpen.
Bonusverbetering - Draadloze datalogging met Arduino:
Als het je tot nu toe is gelukt, kun je met een paar vorderingen en slechts een paar regels code toevoegen, gegevens draadloos loggen.
Sluit eenvoudig een Bluetooth-apparaat zoals HC-05 aan en schrijf de gegevens naar PLX-DAQ via Bluetooth in plaats van serieel. Dat is vervang Serial.print (parameter); met BluetoothName.print (parameter); en sluit uw laptop aan op uw Bluetooth-module en selecteer de COM-poort waarop uw laptops Bluetooth is aangesloten en Taadaaa…… Binnen de kortste keren heeft u een werkend draadloos datalogging-systeem.