Zapis i analiza danych z czujników
Lekcja Arduino - Klasa II
Czas trwania: 90 minut (2 godziny lekcyjne)
⚠️ Ważne: Karta musi być sformatowana w FAT32!
⚠️ Sprawdź napięcie pracy modułu SD (3.3V vs 5V)!
#include <SD.h>
const int chipSelect = 10;
void setup() {
Serial.begin(9600);
Serial.println("Test karty SD...");
if (!SD.begin(chipSelect)) {
Serial.println("❌ Błąd: Karta SD nie działa!");
return;
}
Serial.println("✅ Karta SD działa prawidłowo!");
}
✅ Sprawdź: Czy w monitorze szeregowym pojawia się komunikat o sukcesie?
// Test zapisu danych
File testFile = SD.open("test.txt", FILE_WRITE);
if (testFile) {
testFile.println("Hello Arduino SD!");
testFile.close();
Serial.println("✅ Test zapisu: OK");
} else {
Serial.println("❌ Błąd zapisu pliku");
}
Ważne: Zawsze pamiętaj o close()
po każdym open()
!
#include <SD.h>
#include <DHT.h>
#define DHT_PIN 2
#define DHT_TYPE DHT22
DHT dht(DHT_PIN, DHT_TYPE);
const int chipSelect = 10;
unsigned long previousMillis = 0;
const long interval = 10000; // 10 sekund
void setup() {
Serial.begin(9600);
dht.begin();
if (!SD.begin(chipSelect)) {
Serial.println("❌ Błąd karty SD!");
while(1);
}
// Utworzenie nagłówka CSV
File dataFile = SD.open("pomiary.csv", FILE_WRITE);
if (dataFile) {
dataFile.println("Czas[ms],Temperatura[C],Wilgotnosc[%]");
dataFile.close();
}
}
void loop() {
unsigned long currentMillis = millis();
if (currentMillis - previousMillis >= interval) {
previousMillis = currentMillis;
float temperatura = dht.readTemperature();
float wilgotnosc = dht.readHumidity();
if (!isnan(temperatura) && !isnan(wilgotnosc)) {
zapiszDane(currentMillis, temperatura, wilgotnosc);
} else {
Serial.println("⚠️ Błąd odczytu czujnika");
}
}
}
Technika: Używamy millis()
zamiast delay()
- dlaczego?
void zapiszDane(unsigned long czas, float temp, float wilg) {
File dataFile = SD.open("pomiary.csv", FILE_WRITE);
if (dataFile) {
dataFile.print(czas);
dataFile.print(",");
dataFile.print(temp, 2);
dataFile.print(",");
dataFile.println(wilg, 2);
dataFile.close();
Serial.print("📝 Zapisano: ");
Serial.print(temp);
Serial.print("°C, ");
Serial.print(wilg);
Serial.println("%");
}
}
Format CSV: Comma Separated Values - łatwo otworzyć w Excel!
Cel: Wizualizacja zmian temperatury i wilgotności w czasie
Zmień interwał zapisu na 5 sekund
Dodaj czujnik światła (fotorezystor)
Stwórz funkcję sprawdzającą istnienie pliku przed utworzeniem nagłówka
Zaprojektuj rejestrator dla innego czujnika + opis zastosowań