🛒
0 товаров
0 руб.

Интернет-магазин «Неглупый Дом»


💾 Проект: логгер температуры на SD-карту в формате CSV

Датчик DS18B20 и модуль SD-карты

Модуль SD-карты и DS18B20 вместе пишут показания температуры в обычный CSV-файл — после снятия карты его можно сразу открыть в Excel или Google Таблицах и построить график.

Как это работает

Модуль SD-карты подключается к Arduino по той же шине SPI, что и многие другие модули (RFID, Ethernet и т.д.), и работает с картой как с обычным файлом на диске через стандартную библиотеку SD. Формат CSV (Comma-Separated Values) — это просто текстовый файл, где значения в каждой строке разделены запятыми, его "из коробки" понимает Excel, Google Таблицы и большинство программ для построения графиков, не требуя специального формата.

Ключевая деталь надёжности в этом коде — файл открывается, в него дописывается одна строка, и сразу закрывается, а не держится открытым всё время работы. Если файл остаётся открытым долго, при внезапном отключении питания (что для автономного логгера вполне реально) несохранённые данные в буфере могут быть потеряны. Закрытие после каждой записи гарантирует, что данные физически попадают на карту сразу же.

Пошаговая сборка

Так как реализации данного модуля бывают разные, если у вас на плате нет тех контактов, которые указаны ниже — сориентируйтесь по названиям контактов на своей плате.

  1. Подключите SD-модуль по SPI: CS → D4, SCK → D13, MOSI → D11, MISO → D12, VCC → 5V (большинство готовых модулей имеют свой стабилизатор на 3.3V), GND → GND.
  2. Подключите DS18B20: сигнал → D2, подтягивающий резистор 4.7 кОм между сигналом и VCC.
  3. Перед первым использованием отформатируйте SD-карту в FAT16 или FAT32 (большинство карт уже так размечены из коробки) — библиотека SD не работает с exFAT.
  4. Используйте карту небольшого объёма (до 32 ГБ) — библиотека SD для Arduino не всегда корректно работает с картами большей ёмкости.

Скетч

// ВНИМАНИЕ: рекомендую отладить код через монитор порта, так как я языковая
// модель, а не специализированный кодер, и могу что-то упустить. Основу
// и идею я накидал, но проверьте под свою схему.

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

const int csPin = 4;
#define ONE_WIRE_BUS 2
OneWire oneWire(ONE_WIRE_BUS);
DallasTemperature sensors(&oneWire);

void setup() {
  Serial.begin(9600);
  if (!SD.begin(csPin)) {
    Serial.println("Ошибка: SD-карта не найдена или не читается");
    return;
  }
  sensors.begin();

  File dataFile = SD.open("log.csv", FILE_WRITE);
  if (dataFile) {
    dataFile.println("millis,temp_c");
    dataFile.close();
    Serial.println("Лог-файл создан, начинаем запись");
  }
}

void loop() {
  sensors.requestTemperatures();
  float t = sensors.getTempCByIndex(0);

  File dataFile = SD.open("log.csv", FILE_WRITE);
  if (dataFile) {
    dataFile.print(millis());
    dataFile.print(",");
    dataFile.println(t);
    dataFile.close(); // закрываем сразу после записи, чтобы данные гарантированно сохранились
    Serial.print("Записано: ");
    Serial.println(t);
  } else {
    Serial.println("Ошибка записи на SD-карту");
  }
  delay(60000); // запись раз в минуту
}

Файл `log.csv` открывается на запись и сразу закрывается на каждой итерации — так данные гарантированно сохраняются на карту, даже если Arduino внезапно потеряет питание между записями.

Частые проблемы

Как улучшить проект

Товары по теме

Ещё модули для Arduino: Электронные модули.

← 🌐 проводная веб-метеостанция на Ethernet-мод…💿 логгер температуры на обычную USB-флешку ч… →

🎁 Купить весь комплект со скидкой 10%

Все 2 товара сразу в корзину: 163 ₽ 147 ₽ (экономия 16 ₽)

Скидка применяется автоматически при оформлении заказа, если в корзине именно этот комплект.

Остались вопросы? Проконсультируйтесь с ИИ-инженером — он уже в курсе темы статьи и сразу ответит, ничего вводить не нужно.

Корзина


Поиск



Пример: понижающий или DC-DC или mini360 или aw-023 или арт. OZ/WB/YA