1 / 15

📱 Arduino & Karta SD

Zapis i analiza danych z czujników

🌡️ 💾 📊

Lekcja Arduino - Klasa II

🎯 Cele lekcji

Czas trwania: 90 minut (2 godziny lekcyjne)

🤔 Jaki problem rozwiązujemy?

❌ Problem:

  • Arduino ma ograniczoną pamięć
  • Dane znikają po wyłączeniu
  • Trudno przeanalizować duże ilości danych
  • Brak możliwości długoterminowego monitoringu

✅ Rozwiązanie - Karta SD:

  • Duża pojemność (GB danych)
  • Trwałe przechowywanie
  • Łatwy transfer do komputera
  • Standardowy format plików

🛠️ Materiały na lekcję

Sprzęt:

  • Arduino Uno/Nano
  • Moduł karty SD
  • Karta microSD (FAT32)
  • Czujnik DHT22
  • Płytka stykowa
  • Przewody

Oprogramowanie:

  • Arduino IDE
  • Biblioteka SD
  • Biblioteka DHT
  • Excel/LibreOffice Calc

📚 Teoria - Karta SD

Jak działa komunikacja?

  • Protokół SPI - Serial Peripheral Interface
  • 4 linie komunikacyjne: SCK, MISO, MOSI, CS
  • System plików FAT32 - kompatybilność z komputerami
  • Format nazw 8.3 - FILENAME.EXT

⚠️ Ważne: Karta musi być sformatowana w FAT32!

🔌 Schemat połączeń

Arduino ➡️ Moduł SD

  • GND ➡️ GND
  • 5V ➡️ VCC
  • Pin 13 ➡️ SCK
  • Pin 12 ➡️ MISO
  • Pin 11 ➡️ MOSI
  • Pin 10 ➡️ CS

Arduino ➡️ DHT22

  • 3.3V ➡️ VCC
  • GND ➡️ GND
  • Pin 2 ➡️ DATA

⚠️ Sprawdź napięcie pracy modułu SD (3.3V vs 5V)!

🧪 KROK 1: Test karty SD

#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?

📝 KROK 2: Pierwszy zapis

// 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()!

🌡️ Program główny - Setup

#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();
  }
}

🔄 Program główny - Loop

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?

💾 Funkcja zapisu danych

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!

🧪 Testowanie programu

1

Procedura testowa:

2

Testuj czujnik:

📊 Analiza danych

Pobieranie danych:

  • Wyłącz Arduino
  • Wyjmij kartę SD
  • Włóż do komputera
  • Znajdź plik pomiary.csv

Tworzenie wykresów:

  • Otwórz w Excel/Calc
  • Zaznacz kolumny B i C
  • Wstaw wykres liniowy
  • Opisz osie i dodaj tytuł

Cel: Wizualizacja zmian temperatury i wilgotności w czasie

🌟 Zastosowania praktyczne

🏠 Dom i ogród:

  • Monitoring szklarni
  • System podlewania
  • Stacja pogodowa
  • Kontrola jakości powietrza

🏭 Przemysł:

  • Monitoring maszyn
  • Kontrola jakości
  • Bezpieczeństwo pracy
  • Optymalizacja procesów

🚗 Transport i sport:

  • Czarna skrzynka pojazdu
  • Analiza wydajności sportowej
  • Monitoring baterii
  • Diagnostyka awarii

📝 Zadania do wykonania

📚 Podstawowe:

Zmień interwał zapisu na 5 sekund

📊 Średnie:

Dodaj czujnik światła (fotorezystor)

🚀 Zaawansowane:

Stwórz funkcję sprawdzającą istnienie pliku przed utworzeniem nagłówka

🏠 Praca domowa:

Zaprojektuj rejestrator dla innego czujnika + opis zastosowań