Arduino Uno and BME680 Sensor-Based Environmental Monitoring System
View and Edit Project In Cirkit Designer
Circuit Documentation
Summary
This circuit involves an Arduino Uno R3 microcontroller interfaced with a BME680 environmental sensor. The Arduino Uno reads temperature, pressure, humidity, and gas resistance data from the BME680 sensor and prints the data to the Serial Monitor every 2 seconds.
Component List
Arduino Uno R3
- Description: A microcontroller board based on the ATmega328P.
- Pins: D8, D9, D10, D11, D12, D13, GND, AREF, SDA, SCL, D0/RX, D1/Tx, D2, D3, D4, D5, 6, D7, A5/SCL, A4/SDA, A3, A2, A1, A0, Vin, 5V, 3.3V, RESET, IOREF, NONE, USB Jack, Power Jack.
BME680
- Description: An environmental sensor that measures temperature, humidity, pressure, and gas.
- Pins: VCC, GND, SCL, SDA, SDO, CS.
Wiring Details
Arduino Uno R3
- 3.3V: Connected to BME680 VCC
- GND: Connected to BME680 GND
- A5/SCL: Connected to BME680 SCL
- A4/SDA: Connected to BME680 SDA
BME680
- VCC: Connected to Arduino Uno R3 3.3V
- GND: Connected to Arduino Uno R3 GND
- SCL: Connected to Arduino Uno R3 A5/SCL
- SDA: Connected to Arduino Uno R3 A4/SDA
Code Documentation
Arduino Uno R3 Code
#include <Adafruit_BME680.h>
#include <bme68x.h>
#include <bme68x_defs.h>
/*
* Arduino with BME680 Sensor using SoftWire library
* This sketch initializes the BME680 sensor and reads temperature,
* pressure, humidity, and gas resistance data. The data is printed
* to the Serial Monitor every 2 seconds.
*/
#include <SoftWire.h>
#include <Adafruit_Sensor.h>
#include <Adafruit_BME680.h>
// Create an instance of the sensor
Adafruit_BME680 bme;
SoftWire myWire(A4, A5); // Define SoftWire with SDA on A4 and SCL on A5
void setup() {
Serial.begin(115200);
while (!Serial);
myWire.begin(); // Initialize SoftWire
bme.setI2C(&myWire); // Set SoftWire for BME680
if (!bme.begin()) {
Serial.println("Could not find a valid BME680 sensor, check wiring!");
while (1);
}
// Set up oversampling and filter initialization
bme.setTemperatureOversampling(BME680_OS_8X);
bme.setHumidityOversampling(BME680_OS_2X);
bme.setPressureOversampling(BME680_OS_4X);
bme.setIIRFilterSize(BME680_FILTER_SIZE_3);
bme.setGasHeater(320, 150); // 320*C for 150 ms
}
void loop() {
// Perform a reading
if (!bme.performReading()) {
Serial.println("Failed to perform reading :(");
return;
}
// Print sensor data
Serial.print("Temperature = ");
Serial.print(bme.temperature);
Serial.println(" *C");
Serial.print("Pressure = ");
Serial.print(bme.pressure / 100.0);
Serial.println(" hPa");
Serial.print("Humidity = ");
Serial.print(bme.humidity);
Serial.println(" %");
Serial.print("Gas = ");
Serial.print(bme.gas_resistance / 1000.0);
Serial.println(" KOhms");
Serial.println();
delay(2000);
}
BME680 Code
void setup() {
// put your setup code here, to run once:
}
void loop() {
// put your main code here, to run repeatedly:
}
This documentation provides a comprehensive overview of the circuit, including a summary, detailed component list, wiring details, and the code used for the Arduino Uno R3 and BME680 sensor.