Cirkit Designer LogoCirkit DesignerYour all-in-one circuit design IDE Launch Cirkit Designer App

Arduino UNO Based Multi-Sensor Temperature Data Logger with OLED Display and SD Card Storage

View and Edit Project In Cirkit DesignerImage of Arduino UNO Based Multi-Sensor Temperature Data Logger with OLED Display and SD Card Storage

Circuit Documentation

Summary

This circuit is designed to read temperature data from multiple DS18B20 temperature sensors, display the data on a 0.96" OLED screen, and log the data to an SD card using an Arduino UNO microcontroller. The Arduino UNO manages the data acquisition from the temperature sensors, controls the OLED display via I2C communication, and writes the temperature data to a file on the SD card through the SPI interface.

Component List

Arduino UNO

DS18B20 Temperature Sensor (Wokwi Compatible)

Resistor

0.96" OLED

SD Module

Wiring Details

Arduino UNO

DS18B20 Temperature Sensors

Resistor

0.96" OLED

SD Module

Documented Code

/*
 * This Arduino sketch reads temperature data from multiple DS18B20 sensors,
 * displays the data on an OLED screen, and logs the data to an SD card.
 */

#include <OneWire.h>
#include <DallasTemperature.h>
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#include <SPI.h>
#include <SD.h>

#define ONE_WIRE_BUS 2
#define SCREEN_WIDTH 128
#define SCREEN_HEIGHT 64
#define OLED_RESET -1
#define SD_CS_PIN 10

OneWire oneWire(ONE_WIRE_BUS);
DallasTemperature sensors(&oneWire);
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET);
File dataFile;

void setup() {
  Serial.begin(9600);
  sensors.begin();
  if(!display.begin(SSD1306_I2C_ADDRESS, OLED_RESET)) {
    Serial.println(F("SSD1306 allocation failed"));
    for(;;);
  }
  display.display();
  delay(2000);
  display.clearDisplay();
  if (!SD.begin(SD_CS_PIN)) {
    Serial.println("Card failed, or not present");
    return;
  }
  dataFile = SD.open("datalog.txt", FILE_WRITE);
  if (!dataFile) {
    Serial.println("Error opening datalog.txt");
  }
}

void loop() {
  sensors.requestTemperatures();
  display.clearDisplay();
  display.setTextSize(1);
  display.setTextColor(SSD1306_WHITE);
  display.setCursor(0,0);
  for (int i = 0; i < sensors.getDeviceCount(); i++) {
    float tempC = sensors.getTempCByIndex(i);
    display.print("Sensor ");
    display.print(i);
    display.print(": ");
    display.print(tempC);
    display.println(" C");
    if (dataFile) {
      dataFile.print("Sensor ");
      dataFile.print(i);
      dataFile.print(": ");
      dataFile.print(tempC);
      dataFile.println(" C");
    }
  }
  display.display();
  if (dataFile) {
    dataFile.flush();
  }
  delay(2000);
}

This code initializes the sensors, display, and SD card on startup and enters a loop where it reads temperatures from the sensors, displays them on the OLED, and logs them to the SD card.