Industriële fabricage
Industrieel internet der dingen | Industriële materialen | Onderhoud en reparatie van apparatuur | Industriële programmering |
home  MfgRobots >> Industriële fabricage >  >> Manufacturing Technology >> Productieproces

Arduino SD-kaart en datalogging-zelfstudie

In deze Arduino-zelfstudie leren we hoe we een SD-kaartmodule kunnen gebruiken met het Arduino-bord. Ook in combinatie met de DS3231 Real Time Clock-module zullen we een datalogging-voorbeeld maken waarbij we de gegevens van een temperatuursensor op de SD-kaart zullen opslaan en deze in Excel zullen importeren om er een grafiek van te maken. Je kunt de volgende video bekijken of de schriftelijke tutorial hieronder lezen.

Hoe het werkt

Laten we eerst eens kijken naar de SD-kaartmodule. Het werkt met standaard MicroSD-kaarten waarvan de bedrijfsspanning 3,3 V is. Daarom heeft de module een spanningsregelaar en een niveauverschuiver zodat we hem kunnen gebruiken met de 5 V-pinnen van het Arduino-bord.

De SD-kaartmodule heeft zes pinnen, twee voor het voeden van de module, de VCC en de GND-pinnen, en nog vier pinnen voor de SPI-communicatie. Hier is hoe we het moeten aansluiten op het Arduino-bord.

Merk op dat elk Arduino-bord verschillende SPI-pinnen heeft die dienovereenkomstig moeten worden aangesloten.

U kunt de benodigde componenten voor deze Arduino-zelfstudie verkrijgen via de onderstaande links:

  • Micro SD-kaartmodule………………..
  • Arduino-bord …………………………
  • Broodplank en springdraden ……… 

Arduino SD-kaartmodulecode

Vervolgens moeten we de Arduino programmeren. Hier is een eenvoudige code:

/*
 *  Arduino SD Card Tutorial Example
 *  
 *  by Dejan Nedelkovski, www.HowToMechatronics.com
 */

#include <SD.h>
#include <SPI.h>

File myFile;

int pinCS = 53; // Pin 10 on Arduino Uno

void setup() {
    
  Serial.begin(9600);
  pinMode(pinCS, OUTPUT);
  
  // SD Card Initialization
  if (SD.begin())
  {
    Serial.println("SD card is ready to use.");
  } else
  {
    Serial.println("SD card initialization failed");
    return;
  }
  
  // Create/Open file 
  myFile = SD.open("test.txt", FILE_WRITE);
  
  // if the file opened okay, write to it:
  if (myFile) {
    Serial.println("Writing to file...");
    // Write to file
    myFile.println("Testing text 1, 2 ,3...");
    myFile.close(); // close the file
    Serial.println("Done.");
  }
  // if the file didn't open, print an error:
  else {
    Serial.println("error opening test.txt");
  }

  // Reading the file
  myFile = SD.open("test.txt");
  if (myFile) {
    Serial.println("Read:");
    // Reading the whole file
    while (myFile.available()) {
      Serial.write(myFile.read());
   }
    myFile.close();
  }
  else {
    Serial.println("error opening test.txt");
  }
  
}
void loop() {
  // empty
}Code language: Arduino (arduino)

Codebeschrijving:  Dus eerst moeten we de standaard SD- en SPI-bibliotheken opnemen, een "File" -object maken en de ChipSelect-pin van de SPI-bus definiëren, de pin 53 in mijn geval voor het Arduino Mega Board. Voor dit voorbeeld willen we dat onze code maar één keer wordt uitgevoerd, dus alle code wordt in de "setup"-sectie geplaatst, terwijl de "loop"-sectie leeg blijft.

Dus eerst moeten we de seriële communicatie starten en de ChipSelect-pin als uitvoer definiëren. We moeten dit doen omdat de ChipSelect-pin "Laag" moet zijn zodat de SPI-communicatie tussen de module en de Arduino werkt.

Vervolgens zullen we met behulp van de SD.begin()-functie de SD-kaart initialiseren en als de initialisatie succesvol is, wordt de "if"-instructie waar en de tekenreeks "SD-kaart is klaar voor gebruik". wordt afgedrukt op de seriële monitor, anders wordt de tekenreeks "SD-kaartinitialisatie mislukt" afgedrukt en wordt het programma ook beëindigd.

Vervolgens zullen we met de functie SD.open() een nieuw bestand maken met de naam "test.txt", inclusief het argument FILE_WRITE, wat betekent dat we het bestand zowel kunnen lezen als schrijven. Als het bestand al bestaat, zal de SD.open()-functie het gewoon openen.

Dus als het bestand met succes is gemaakt, zullen we eerst de tekenreeks "Writing to file" op de seriële monitor afdrukken en vervolgens de functie myFile.println() gebruiken om de tekst "Testing text 1, 2 ,3..." in de het dossier. Daarna moeten we de functie close() gebruiken om ervoor te zorgen dat de eerdere gegevens die naar het bestand zijn geschreven, fysiek op de SD-kaart worden opgeslagen.

Vervolgens zullen we zien hoe we uit het bestand kunnen lezen. Dus nogmaals, we zullen dezelfde functie gebruiken, SD.open(), maar deze keer omdat het bestand "test.txt" al is gemaakt, zal de functie het bestand gewoon openen. Vervolgens gebruiken we de functie myFile.read() om uit het bestand te lezen en het op de seriële monitor af te drukken. De functie read() leest eigenlijk slechts één teken tegelijk, dus daarom moeten we de "while"-lus en de functie myFile.available() gebruiken om alle tekens of de hele eerder geschreven gegevens te lezen. Aan het einde moeten we het bestand sluiten.

Na het uploaden van de code naar de Arduino, als alles in orde is, verschijnt het volgende op de seriële monitor.

Zoals we kunnen zien, is de SD-kaart met succes geïnitialiseerd, is het schrijven ernaar ook gelukt en is ook het lezen van de geschreven gegevens of de tekenreeks "Testtekst 1, 2 ,3..." succesvol gelezen. Als we de SD-kaart op onze computer openen, kunnen we het gemaakte "test.txt" -bestand en de geschreven tekst erin zien.

Arduino SD-kaart datalogging

Laten we nu nog een interessanter voorbeeld maken van datalogging van een temperatuursensor. Voor dat doel gebruiken we de DS3231 Real Time Clock-module die ook een ingebouwde temperatuursensor heeft. Meer details over het aansluiten en gebruiken van deze module vind je in mijn vorige tutorial.

Dus laten we, nadat we de twee modules op de Arduino hebben aangesloten, de code voor dit voorbeeld eens bekijken.

/*
 *  Arduino Temperature Data Logging
 *  
 *  by Dejan Nedelkovski, www.HowToMechatronics.com
 */

#include <SD.h>
#include <SPI.h>
#include <DS3231.h>

File myFile;
DS3231  rtc(SDA, SCL);

int pinCS = 53; // Pin 10 on Arduino Uno

void setup() {
    
  Serial.begin(9600);
  pinMode(pinCS, OUTPUT);
  
  // SD Card Initialization
  if (SD.begin())
  {
    Serial.println("SD card is ready to use.");
  } else
  {
    Serial.println("SD card initialization failed");
    return;
  }
  rtc.begin();    
}
void loop() {
  Serial.print(rtc.getTimeStr());
  Serial.print(",");
  Serial.println(int(rtc.getTemp()));
 
  myFile = SD.open("test.txt", FILE_WRITE);
  if (myFile) {    
    myFile.print(rtc.getTimeStr());
    myFile.print(",");    
    myFile.println(int(rtc.getTemp()));
    myFile.close(); // close the file
  }
  // if the file didn't open, print an error:
  else {
    Serial.println("error opening test.txt");
  }
  delay(3000);
}Code language: Arduino (arduino)

Codebeschrijving:  Eerst moeten we de bibliotheken opnemen die nodig zijn voor beide modules, vervolgens de twee objecten maken en ze in de setup-sectie initialiseren.

In de lussectie die de functie Serial.print() gebruikt, zullen we de tijd- en temperatuurwaarden op de seriële monitor afdrukken, met een "komma" ertussen en een nieuwe regel na de temperatuurwaarde. We hebben deze vorm van de lijnen nodig zodat we ze gemakkelijk kunnen importeren en een grafiek kunnen maken in Excel. Merk ook op dat de temperatuurwaarden worden omgezet in gehele getallen.

Dus dezelfde waarden worden ook geschreven in het nieuw gemaakte "test.txt" -bestand en aan het einde hoeven we alleen een vertraging toe te voegen die het interval van het opnemen van de temperatuurgegevens vertegenwoordigt.

Na het uploaden van de code begint de Arduino elke 3 seconden de temperatuurwaarden op te slaan. Na een tijdje kunnen we de SD-kaart op onze computer openen om de resultaten te zien.

Voor het maken van een grafiek in Excel moeten we dit bestand importeren en zo doen we dat:

In het gegevensmenu moeten we op de knop "Gegevens uit tekst" klikken en het tekstbestand selecteren. Hier zullen we "Gescheiden" kiezen en op volgende klikken, en in de tweede stap, selecteer de komma als scheidingsteken en voltooi vervolgens de wizard.

Dit proces zal dus de tijd- en temperatuurwaarden in afzonderlijke kolommen invoegen. Nu hoeven we alleen maar beide kolommen te selecteren en in het invoegmenu "Lijndiagram invoegen" te selecteren. Hiermee wordt de grafiek gemaakt waarin we de temperatuurwaarden elke 3 seconden kunnen zien.

Dat is alles voor deze tutorial. Stel gerust een vraag in het opmerkingengedeelte hieronder.


Productieproces

  1. [Video] Machine (PLC) datalogging en dashboarding uitgelegd
  2. Arduino RFID Lock-zelfstudie
  3. Een Arduino-energiemonitor en datalogger bouwen
  4. LCD-animatie en gaming
  5. Temperatuur- en vochtigheidsdatalogger
  6. Python3- en Arduino-communicatie
  7. FM-radio met Arduino en RDA8057M
  8. Tutorial Arduino-vingerafdruksensor
  9. Arduino-zelfstudie:minipiano
  10. Raspberry Pi en Arduino-laptop
  11. Arduino-zelfstudie 01:Aan de slag