数据记录是许多关键方面 物联网,环境监测和基于传感器的项目。与 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。安装所需的库
- 打开 Arduino IDE.
- 去 草图→包括库→管理库.
- 搜索 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通信,您可以轻松 读写文件,使其理想 物联网和自动化项目.