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

Arduino-Based Piezo Sensor Data Logger with SD Card Storage

View and Edit Project In Cirkit DesignerImage of Arduino-Based Piezo Sensor Data Logger with SD Card Storage

Circuit Documentation

Summary

The circuit in question is designed to interface an Arduino UNO and an Arduino Nano with various sensors and modules, including piezo sensors, a micro SD card module, a BMP280 sensor, and a GPS NEO 6M module. The circuit is powered by 3.7V batteries and includes bridge rectifiers and electrolytic capacitors for power management. The primary function of the circuit is to collect data from the piezo sensors and the BMP280 sensor, log this data to an SD card, and communicate with a GPS module. The Arduino UNO and Nano serve as the central processing units, controlling data acquisition, storage, and communication.

Component List

Wiring Details

Arduino UNO

Piezo Sensor

Micro SD Card Module

Resistor (1M Ohm)

Bridge Rectifier

Electrolytic Capacitor

3.7V Battery

Arduino Nano

BMP280

GPS NEO 6M

Documented Code

Arduino UNO Code (Instance 1)

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

const int sensorPin = A0; // Analog pin connected to piezo sensor
File myFile;

void setup() {
    Serial.begin(9600);
    // Initialize SD card
    if (!SD.begin(10)) {
        Serial.println("SD card initialization failed!");
        return;
    }
    Serial.println("SD card is ready.");
    
    // Create/Open file
    myFile = SD.open("data.txt", FILE_WRITE);
    if (myFile) {
        myFile.println("Time (s), Voltage (V)"); // Header for data
        myFile.close(); // Close file after writing header
    } else {
        Serial.println("Error opening data.txt");
    }
}

void loop() {
    unsigned long currentTime = millis() / 1000; // Time in seconds
    int sensorValue = analogRead(sensorPin); // Read analog value from sensor
    float voltage = sensorValue * (5.0 / 1023.0); // Convert ADC value to voltage

    // Open file for writing
    myFile = SD.open("data.txt", FILE_WRITE);
    if (myFile) {
        myFile.print(currentTime); // Print time in seconds
        myFile.print(", ");
        myFile.println(voltage); // Print voltage in volts
        myFile.close(); // Close file after writing data
    } else {
        Serial.println("Error opening data.txt");
    }

    delay(100); // Delay for 100 ms (10 readings per second)
}

Arduino Nano Code

/*
 * This Arduino Sketch reads voltage data from a piezo sensor and stores it
 * on an SD card at a rate of 10 readings per second. The piezoelectricity
 * generated is stored in a connected battery.
 */

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

const int sensorPin = A0; // Analog pin connected to piezo sensor
File myFile;

void setup() {
    Serial.begin(9600);
    // Initialize SD card
    if (!SD.begin(10)) {
        Serial.println("SD card initialization failed!");
        return;
    }
    Serial.println("SD card is ready.");
    
    // Create/Open file
    myFile = SD.open("data.txt", FILE_WRITE);
    if (myFile) {
        myFile.println("Time (s), Voltage (V)"); // Header for data
        myFile.close(); // Close file after writing header
    } else {
        Serial.println("Error opening data.txt");
    }
}

void loop() {
    unsigned long currentTime = millis() / 1000; // Time in seconds
    int sensorValue = analogRead(sensorPin); // Read analog value from sensor
    float voltage = sensorValue * (5.0 / 1023.0); // Convert ADC value to voltage

    // Open file for writing
    myFile = SD.open("data.txt", FILE_WRITE);
    if (myFile) {
        myFile.print(currentTime); // Print time in seconds
        myFile.print(", ");
        myFile.println(voltage); // Print voltage in volts
        myFile.close(); // Close file after writing data
    } else {
        Serial.println