使用Arduino和SD卡模块进行数据记录

Data Logging with Arduino and an SD Card Module

数据记录是许多关键方面 物联网,环境监测和基于传感器的项目。与 Arduino和SD卡模块, 你可以 存储传感器数据,时间戳和其他读数 用于将来的分析。本指南将向您展示如何 将SD卡模块连接到Arduino,编写和读取数据,并解决常见问题。


1。你需要什么

Arduino董事会 (UNO,Mega,Nano等)
微型SD卡模块(基于SPI)
microSD卡(FAT32格式,2GB – 32GB建议)
跳线
传感器(可选,例如DHT11,BMP280等)

🔹 笔记: SD模块使用Arduino通信 SPI(串行外围界面).


2。将SD卡模块接线到Arduino

SD卡模块销 Arduino Uno Pin Arduino Mega Pin
VCC 5V 5V
gnd gnd gnd
味o 12(SPI MISO) 50(SPI MISO)
莫西 11(Spi Mosi) 51(Spi Mosi)
SCK 13(SPI SCK) 52(SPI SCK)
CS(芯片选择) 10(SPI CS) 53(SPI CS)

3。安装所需的库

  1. 打开 Arduino IDE.
  2. 草图→包括库→管理库.
  3. 搜索 SD 并安装 SD库Arduino.

4。初始化SD卡(测试SD模块是否有效)

使用以下内容 基本测试代码 检查SD模块是否有效:

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

const int chipSelect = 10;  // Set CS pin for SD card

void setup() {
    Serial.begin(115200);
    Serial.print("Initializing SD card...");

    if (!SD.begin(chipSelect)) {
        Serial.println("SD card initialization failed!");
        return;
    }
    Serial.println("SD card is ready.");
}

void loop() {
    // Nothing here
}

该代码的作用:

✔ 初始化 SD模块.
✔ 印刷 “ SD卡已经准备好” 如果检测到。
✔ 印刷 “ SD卡初始化失败了!” 如果有错误。

🔹 故障排除:
✅ 检查SD卡是否是 FAT32格式化.
✅ 确保 正确接线 (Miso,Mosi,SCK和CS)。
✅ 尝试另一个 CS引脚(例如4而不是10) 并更新代码。


5。将数据写入SD卡

这个示例 创建一个文件(data.txt)并写传感器读数.

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

const int chipSelect = 10;  

void setup() {
    Serial.begin(115200);
    if (!SD.begin(chipSelect)) {
        Serial.println("SD card initialization failed!");
        return;
    }
    
    File dataFile = SD.open("data.txt", FILE_WRITE);
    if (dataFile) {
        dataFile.println("Hello, this is a test log!");
        dataFile.close();
        Serial.println("Data written to SD card.");
    } else {
        Serial.println("Failed to open file.");
    }
}

void loop() {
    // Nothing here
}

该代码的作用:

✔ 创建或打开 data.txt.
✔ 写信 “你好,这是一个测试日志!” 到文件。
✔ 写作后关闭文件。

🔹 文件处理功能:
SD.open("filename.txt", FILE_WRITE); →打开文件供书写。
dataFile.println("Text"); →将数据写入文件。
dataFile.close(); →关闭文件以保存数据。


6。从SD卡读取数据

使用此代码 从SD卡读取和显示数据.

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

const int chipSelect = 10;

void setup() {
    Serial.begin(115200);
    if (!SD.begin(chipSelect)) {
        Serial.println("SD card initialization failed!");
        return;
    }

    File dataFile = SD.open("data.txt");
    if (dataFile) {
        Serial.println("Reading file...");
        while (dataFile.available()) {
            Serial.write(dataFile.read());  // Print file content
        }
        dataFile.close();
    } else {
        Serial.println("Failed to open file.");
    }
}

void loop() {
    // Nothing here
}

该代码的作用:

✔ 打开 data.txt 用于阅读。
✔ 将文件的内容打印到 串行监视器.

🔹 提示: 确保文件 阅读前存在 避免错误。


7。将传感器数据记录到SD卡

此示例日志 DHT11传感器的温度和湿度数据.

所需的组件

DHT11温度和湿度传感器
DHT库(Adafruit DHT传感器库)

DHT11传感器的接线

DHT11引脚 Arduino Pin
VCC 5V
gnd gnd
数据 2

代码:将DHT11数据记录到SD卡

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

#define DHTPIN 2      // Pin connected to DHT sensor
#define DHTTYPE DHT11 // Define sensor type (DHT11 or DHT22)
DHT dht(DHTPIN, DHTTYPE);

const int chipSelect = 10;

void setup() {
    Serial.begin(115200);
    dht.begin();

    if (!SD.begin(chipSelect)) {
        Serial.println("SD card initialization failed!");
        return;
    }
}

void loop() {
    float temp = dht.readTemperature();
    float humidity = dht.readHumidity();

    if (isnan(temp) || isnan(humidity)) {
        Serial.println("Failed to read from DHT sensor!");
        return;
    }

    File dataFile = SD.open("log.txt", FILE_WRITE);
    if (dataFile) {
        dataFile.print("Temperature: ");
        dataFile.print(temp);
        dataFile.print(" °C, Humidity: ");
        dataFile.print(humidity);
        dataFile.println(" %");
        dataFile.close();
    } else {
        Serial.println("Failed to write to SD card.");
    }

    Serial.print("Logged: Temp = ");
    Serial.print(temp);
    Serial.print(" °C, Humidity = ");
    Serial.println(humidity);

    delay(2000);  // Log every 2 seconds
}

该代码的作用:

✔ 阅读 温度和湿度 来自 DHT11传感器.
✔ 记录数据 log.txt 在SD卡上。
✔ 将值打印到 串行监视器.


8。故障排除提示

问题: SD卡未检测到?
✅ 确保SD卡为 FAT32格式化.
✅ 双检查 MISO,MOSI,SCK和CS接线.
✅ 尝试 不同的SD卡 (有些卡不兼容)。

问题: 数据不保存?
✅ 总是 关闭文件 使用 dataFile.close();.
✅ 确保 足够的存储空间 可在SD卡上可用。


9。实际应用

天气监测系统 - 对数温度,湿度和气压。
能源监测 - 记录 电压和电流 随着时间的推移读数。
GPS跟踪 - 店铺 纬度和经度 来自GPS模块的数据。
事件记录 - 记录传感器触发器或按钮按下。


10。结论

使用一个 SD卡模块与Arduino 是一个好方法 存储传感器数据,日志事件或创建便携式数据记录器。和 SPI通信,您可以轻松 读写文件,使其理想 物联网和自动化项目.

发表评论

Notice an Issue? Have a Suggestion?
If you encounter a problem or have an idea for a new feature, let us know! Report a problem or request a feature here.