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

Arduino UNO Based Environmental Data Logger with SD Card Storage

View and Edit Project In Cirkit DesignerImage of Arduino UNO Based Environmental Data Logger with SD Card Storage

Circuit Documentation

Summary

This circuit is designed to collect environmental data using a DHT22 sensor for temperature and humidity measurements and a BMP280 sensor for pressure and altitude readings. The data is processed by an Arduino UNO microcontroller and stored on an SD card using a Micro SD Card Module. A 9V battery powers the system. The Arduino UNO also interfaces with the sensors and the SD card module via digital and analog pins. A resistor is included in the circuit for pull-up purposes on the DHT22 data line.

Component List

Micro SD Card Module

Battery 9V

Arduino UNO

Resistor

DHT22

BMP280

Wiring Details

Micro SD Card Module

Battery 9V

Arduino UNO

Resistor

DHT22

BMP280

Documented Code

/**
 * This example demonstrates how to collect temperature and humidity measurements
 * from the Adafruit DHT11 sensor. Measurements are printed out to the serial monitor.
 *
 * - Make sure to first install the following libraries through the Arduino Library Manager:
 *   - DHT Sensor Library (by Adafruit)
 *   - Adafruit Unified Sensor (by Adafruit)
 * - When you open the serial monitor to view measurements from the DHT11, make sure
 * that you select 9600 baud so that the serial monitor can receive data from the Arduino.
 *
 * This example was originally written by Adafruit Industries LLC.
 */

#include <DHT.h>
#include <Adafruit_Sensor.h>
#include <Adafruit_BMP280.h>
#include <SPI.h>
#include <SD.h>

// Define pins
#define DHTPIN 2       // Pin where the DHT22 is connected
#define DHTTYPE DHT22  // DHT 22 (AM2302)
#define BMP_SCK  (13)
#define BMP_MISO (12)
#define BMP_MOSI (11)
#define BMP_CS   (10)
#define SD_CS    4     // Chip select pin for the SD card module

// Initialize DHT sensor
DHT dht(DHTPIN, DHTTYPE);

// Initialize BMP280 sensor
Adafruit_BMP280 bmp; // I2C by default

// SD Card
File dataFile;

void setup() {
  Serial.begin(9600);

  // Start DHT sensor
  dht.begin();
  
  // Start BMP280 sensor
  if (!bmp.begin()) {
    Serial.println("Could not find a valid BMP280 sensor, check wiring!");
    while (1);
  }

  // Start SD card
  if (!SD.begin(SD_CS)) {
    Serial.println("Card failed, or not present");
    while (1);
  }
  
  // Create or open data file
  dataFile = SD.open("datalog.txt", FILE_WRITE);
  if (dataFile) {
    dataFile.println("Temperature, Humidity, Pressure, Altitude");
    dataFile.close();
  }
}

void loop() {
  // Reading temperature and humidity from DHT22
  float humidity = dht.readHumidity();
  float temperature = dht.readTemperature();

  // Reading pressure and altitude from BMP280
  float pressure = bmp.readPressure() / 100.0F; // Pressure in hPa
  float altitude = bmp.readAltitude(1013.25); // Altitude based on standard sea level pressure

  // Check if any reads failed and exit early (to try again)
  if (isnan(humidity) || isnan(temperature) || isnan(pressure) || isnan(altitude)) {
    Serial.println("Failed to read from sensors!");
    return;
  }
  
  // Print readings to Serial Monitor
  Serial.print("Temperature: ");
  Serial.print(temperature);
  Serial.print(" °C, Humidity: ");
  Serial.print(humidity);
  Serial.print(" %, Pressure: ");
  Serial.print(pressure);
  Serial.print(" hPa, Altitude: ");
  Serial.print(altitude);
  Serial.println(" m");
  
  // Write data to SD card
  dataFile = SD.open("datalog.txt", FILE_WRITE);
  if (dataFile) {
    dataFile.print(temperature);
    dataFile.print(", ");
    dataFile.print(humidity);
    dataFile.print(", ");
    dataFile.print(pressure);
    dataFile.print(", ");
    dataFile.println(altitude);
    dataFile.close();
  } else {
    Serial.println("Error opening datalog.txt");
  }
  
  // Delay before next reading
  delay(2000);
}

This code is designed to run on the Arduino UNO microcontroller. It initializes the DHT22 and BMP280 sensors, reads temperature, humidity, pressure, and altitude data, and logs the data to an SD card. The code also includes error handling for sensor initialization and data logging.