Rejestrowanie danych jest kluczowym aspektem wielu IoT, monitorowanie środowiska i projekty oparte na czujnikach. Z Arduino i moduł karty SD, możesz przechowuj dane czujników, znaczniki czasu i inne odczyty Do przyszłej analizy. Ten przewodnik pokaże, jak to zrobić Podłącz moduł karty SD do Arduino, pisz i odczyt dane oraz rozwiąż problemy z typowymi problemami.
1. Czego potrzebujesz
✅ Board Arduino (Uno, Mega, Nano itp.)
✅ Moduł karty Micro SD (oparty na SPI)
✅ Karta microSD (sformatowana FAT32, zalecana 2 GB - 32 GB)
✅ Przewody zworki
✅ Czujniki (opcjonalnie, np. DHT11, BMP280 itp.)
🔹 Notatka: Moduł SD komunikuje się z Arduino za pomocą SPI (szeregowy interfejs peryferyjny).
2. Okablowanie modułu karty SD do Arduino
Pin modułu karty SD | Arduino Uno Pin | Mega Pin Arduino |
---|---|---|
VCC | 5v | 5v |
GND | GND | GND |
Miso | 12 (SPI Miso) | 50 (SPI Miso) |
Mosi | 11 (SPI Mosi) | 51 (SPI MOSI) |
SCK | 13 (SPI SCK) | 52 (SPI SCK) |
CS (Chip Select) | 10 (SPI CS) | 53 (SPI CS) |
3. Instalowanie wymaganej biblioteki
- Otwarte Arduino Ide.
- Idź do Szkic → Dołącz bibliotekę → Zarządzaj bibliotekami.
- Szukaj Sd i zainstaluj Biblioteka SD autorstwa Arduino.
4. Inicjowanie karty SD (test, jeśli działa moduł SD)
Użyj następujących Podstawowy kod testowy Aby sprawdzić, czy moduł SD działa:
#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
}
Co robi ten kod:
✔ Inicjuje Moduł SD.
✔ Wydruki „Karta SD jest gotowa” Jeśli zostanie wykryte.
✔ Wydruki „Inicjalizacja karty SD nie powiodła się!” Jeśli wystąpi błąd.
🔹 Rozwiązywanie problemów:
✅ Sprawdź, czy karta SD jest Fat32 sformatowane.
✅ Zapewnić Prawidłowe okablowanie (Miso, Mosi, SCK i CS).
✅ Wypróbuj inny PIN CS (np. 4 zamiast 10) i zaktualizuj kod.
5. Pisanie danych do karty SD
Ten przykład tworzy plik (data.txt
) i zapisuje odczyty czujników.
#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
}
Co robi ten kod:
✔ Tworzy lub otwiera data.txt
.
✔ Pisze „Cześć, to dziennik testowy!” do pliku.
✔ Zamyka plik po napisaniu.
🔹 Funkcje obsługi plików:
✔ SD.open("filename.txt", FILE_WRITE);
→ Otwórz plik do pisania.
✔ dataFile.println("Text");
→ Zapisz dane do pliku.
✔ dataFile.close();
→ Zamknij plik, aby zapisać dane.
6. Czytanie danych z karty SD
Użyj tego kodu, aby Odczytaj i wyświetl dane z karty 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
}
Co robi ten kod:
✔ Otwiera się data.txt
do czytania.
✔ Drukuje zawartość pliku do Monitor szeregowy.
🔹 Wskazówka: Upewnij się, że plik istnieje przed przeczytaniem Aby uniknąć błędów.
7. Dane czujnika rejestrowania do karty SD
Ten przykład dziennika Dane dotyczące temperatury i wilgotności z czujnika DHT11.
Wymagane komponenty
✅ DHT11 Czujnik temperatury i wilgotności
✅ Biblioteka DHT (biblioteka czujników Adafruit DHT)
Okablowanie dla czujnika DHT11
Pin DHT11 | PIN Arduino |
---|---|
VCC | 5v |
GND | GND |
DANE | 2 |
Kod: rejestrowanie danych DHT11 do karty 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
}
Co robi ten kod:
✔ Czyta Temperatura i wilgotność z Czujnik DHT11.
✔ Rejestruje dane log.txt
Na karcie SD.
✔ Drukuje wartości do Monitor szeregowy.
8. Wskazówki dotyczące rozwiązywania problemów
Problem: Karta SD nie została wykryta?
✅ Upewnij się, że karta SD jest Fat32 sformatowane.
✅ Dwukrotnie sprawdź Okablowanie MISO, MOSI, SCK i CS.
✅ Próbować inna karta SD (Niektóre karty są niezgodne).
Problem: Dane nie zapisują?
✅ Zawsze Zamknij plik używając dataFile.close();
.
✅ Zapewnić wystarczająco dużo miejsca do przechowywania jest dostępny na karcie SD.
9. Praktyczne zastosowania
✔ System monitorowania pogody - Temperatura dziennika, wilgotność i ciśnienie powietrza.
✔ Monitorowanie energii - Nagrywać napięcie i prąd odczyty w czasie.
✔ Śledzenie GPS - Sklep szerokość i długość geograficzna Dane z modułu GPS.
✔ Rejestrowanie zdarzeń - Nagryj wyzwalacze czujnika lub naciśnięcia przycisków.
10. Wniosek
Za pomocą Moduł karty SD z Arduino to świetny sposób Przechowuj dane czujnika, rejestrowanie zdarzeń lub utwórz przenośny rejestrator danych. Z Komunikacja SPI, możesz łatwo Przeczytaj i zapisz pliki, czyni to idealne Projekty IoT i automatyzacji.