Arduino UNO Based Environmental Data Logger with SD Card Storage
View and Edit Project In Cirkit Designer
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
- Description: A module that allows an SD card to be interfaced with a microcontroller for data storage.
- Pins: cs, sck, mosi, miso, vcc, gnd
Battery 9V
- Description: A standard 9V battery providing the power source for the circuit.
- Pins: VCC, GND
Arduino UNO
- Description: A microcontroller board based on the ATmega328P, widely used for building digital devices and interactive objects.
- Pins: UNUSED, IOREF, Reset, 3.3V, 5V, GND, Vin, A0-A5, SCL, SDA, AREF, D0-D13
Resistor
- Description: A passive two-terminal electrical component that implements electrical resistance as a circuit element.
- Properties: Resistance: 10000 Ohms
DHT22
- Description: A basic, low-cost digital temperature and humidity sensor.
- Pins: +, Out, -
BMP280
- Description: A digital barometric pressure and temperature sensor with high accuracy and low power consumption.
- Pins: SDO, CSB, SDA, SCL, GND, VCC
Wiring Details
Micro SD Card Module
- cs connected to Arduino UNO D4
- sck connected to Arduino UNO D13
- mosi connected to Arduino UNO D11
- miso connected to Arduino UNO D12
- vcc connected to Arduino UNO 5V (shared with DHT22 +, BMP280 VCC, and Resistor pin1)
- gnd connected to Arduino UNO GND (shared with BMP280 GND)
Battery 9V
- VCC connected to Arduino UNO Vin
- GND connected to Arduino UNO GND
Arduino UNO
- 5V connected to Micro SD Card Module vcc, DHT22 +, BMP280 VCC, and Resistor pin1
- GND connected to Micro SD Card Module gnd, BMP280 GND, DHT22 -, and Battery 9V GND
- Vin connected to Battery 9V VCC
- A4 (SDA) connected to BMP280 SDA
- A5 (SCL) connected to BMP280 SCL
- D2 connected to DHT22 Out (shared with Resistor pin2)
- D4 connected to Micro SD Card Module cs
- D11 connected to Micro SD Card Module mosi
- D12 connected to Micro SD Card Module miso
- D13 connected to Micro SD Card Module sck
Resistor
- pin1 connected to Arduino UNO 5V (shared with Micro SD Card Module vcc, DHT22 +, BMP280 VCC)
- pin2 connected to DHT22 Out and Arduino UNO D2
DHT22
- + connected to Arduino UNO 5V (shared with Micro SD Card Module vcc, BMP280 VCC, and Resistor pin1)
- Out connected to Arduino UNO D2 (shared with Resistor pin2)
- - connected to Arduino UNO GND
BMP280
- SDO connected to Arduino UNO GND (shared with Micro SD Card Module gnd)
- CSB connected to Arduino UNO 5V (shared with Micro SD Card Module vcc, DHT22 +, and Resistor pin1)
- SDA connected to Arduino UNO A4
- SCL connected to Arduino UNO A5
- GND connected to Arduino UNO GND (shared with Micro SD Card Module gnd)
- VCC connected to Arduino UNO 5V (shared with Micro SD Card Module vcc, DHT22 +, and Resistor pin1)
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.