#include <Adafruit_PM25AQI.h>
// Pin definitions
#define THERMISTOR_PIN A0 // Analog pin for the thermistor
#define PRESSURE_PIN A1 // Analog pin for the pressure sensor
Adafruit_PM25AQI aqi;
// Variables for temperature, pressure, and altitude
float temperature; // Temperature in degrees Celsius
float pressure; // Pressure in millibars
float altitude; // Altitude in meters
void setup() {
Serial.begin(9600);
while (!Serial) {
delay(10);
}
// Initialize PM2.5 sensor communication
if (!aqi.begin_UART(&Serial)) {
Serial.println("Could not find PM2.5 sensor, check wiring!");
while (1);
}
}
void loop() {
// Read analog voltage from thermistor
int sensorValue = analogRead(THERMISTOR_PIN);
float voltage = sensorValue * (5.0 / 1023.0); // Convert raw value to voltage
temperature = voltage * (-16.343) + 49.544; // Convert voltage to temperature in Celsius
// Read pressure value from pressure sensor
int pressureValue = analogRead(PRESSURE_PIN);
pressure = ((pressureValue / 1024.0) + 0.095) / 0.0009; // Convert pressure value to millibars
// Calculate altitude using the formula with updated air density
float P0 = 101325; // Standard pressure at sea level in Pa
float rho = 1.2690; // Density of air at 5°C and sea level in kg/m^3
float g = 9.81; // Acceleration due to gravity in m/s^2
float P = pressure * 100; // Convert pressure to Pascals
altitude = (P - P0) / (rho * g); // Calculate altitude
// Read PM2.5 sensor data
PM25_AQI_Data data;
if (!aqi.read(&data)) {
Serial.println("Could not read from PM2.5 sensor");
delay(500);
return;
}
// Print temperature, pressure, and altitude
Serial.print("TEMPERATURE = ",temperature," C");
Serial.print(------------------------------------);
Serial.println("PRESSURE = ",pressure," millibars");
Serial.print(------------------------------------);
Serial.println("ALTITUDE = ",altitude," meters");
Serial.print(------------------------------------);
Serial.print(------------------------------------);
Serial.print();
// Print PM2.5 sensor data
Serial.println("PM SENSOR DATA:");
Serial.print("PM 2.5:",data.pm25_standard);
Serial.print(------------------------------------);
Serial.print("PM 10:",data.pm100[1] _standard);
Serial.print(------------------------------------);
Serial.print(------------------------------------);
Serial.println();
delay(5000); // Delay for 5 seconds before next reading
}