Hello.
I'm trying to code an air quality sensor. I need to measure the temperature, humidity, PM25, PM10 and GPS location. I can't get my PM sensor to work with my GPS.
I am using an Arduino Uno board, a U- blox NEO -6M GPS Module and an SDS011 nova PM sensor.
I think that the PM sensor can't work with the TinyGPS++ library because I can get all the other sensors to work without the TinyGPS++ library. Or it may be something else.
Please help, I am really new to coding.
#include <SoftwareSerial.h>
#include <SDS011.h> //PM
#include <SD.h> //SD
#include <SimpleDHT.h> //temp
#include <TinyGPS++.h>//GPS
#define PM_TX 2 //PM
#define PM_RX 3 //PM
#define SD_CS_PIN 10 //SD
#define DHTPIN 9 //TEMP
#define LED_RED A1 //lys
#define LED_GREEN A0 //lys
#define GPS_RX 7
#define GPS_TX 6
SoftwareSerial gpsCom(GPS_RX, GPS_TX);
TinyGPSPlus gps;
SDS011 sds;
File file;
SimpleDHT22 dhtSensor;
void setup() {
pinMode(LED_RED, OUTPUT);
pinMode(LED_GREEN, OUTPUT);
sds.begin(PM_TX,PM_RX);
Serial.begin(9600);
//gpsCom.begin(9600);
SD.begin(SD_CS_PIN); //starter SD
char filename[]= "TESTER123.txt"; //gir filen navn
if(SD.exists(filename)){ //skriv i eksiterende fil
file = SD.open(filename, O_WRITE | O_APPEND);
Serial.println("1");
} else {
file = SD.open(filename, O_CREAT | O_WRITE);
Serial.println("Filen ble lagd");
Serial.println(" ");
}
file.flush();
}
void loop() {
delay(500)//PM
float pm25,pm10;
int error=sds.read(&pm25,&pm10);
//Serial.println("Could not read air data _pre_if_test: "+String(error));
if(!error) {
Serial.print(pm25);
Serial.print("/t");
Serial.println(pm10);
}else {
Serial.println("Could not read air data: "+String(error));
}
file.flush();
delay(1000);
//TEMP
float temperature = 0.0;
float humidity = 0.0;
dhtSensor.read2(DHTPIN,&temperature, &humidity, NULL);
Serial.print(temperature);
Serial.print("C");
Serial.print("/t");
Serial.print(humidity);
Serial.print("%");
Serial.println();
file.flush();
delay(1000);
//GPS
gpsCom.listen();
bool gpsEncodeComplete = false;
do {
if (!gpsCom.available()) {
// No new data available.
// Immediately jump to next iteration
continue;
}
gpsEncodeComplete = gps.encode(gpsCom.read());
if (!gpsEncodeComplete) {
// Data is incomplete,
// Jump to next iteration and try again
continue;
}
} while (!gpsEncodeComplete); // Loop until gps data was successfully read and encoded from GPS module
bool gpsValid = gps.location.isValid();
bool gpsUpdated = gps.location.isUpdated();
bool isUseful = gpsValid && gpsUpdated;
if (!isUseful) {
// No valid position.
// I.e. no GPS fix.
Serial.println("No valid GPS position");
digitalWrite(LED_RED, HIGH);
delay(500);
digitalWrite(LED_RED, LOW);
return;
}
digitalWrite(LED_GREEN, HIGH);
delay(500);
digitalWrite(LED_GREEN, LOW);
Serial.print("Time: ");
Serial.print(gps.date.day());
Serial.print(".");
Serial.print(gps.date.month());
Serial.print(".");
Serial.print(gps.date.year());
Serial.print(" ");
Serial.print(gps.time.hour());
Serial.print(":");
Serial.print(gps.time.minute());
Serial.print(":");
Serial.print(gps.time.second());
Serial.print(".");
Serial.print(gps.time.centisecond());
Serial.print("\t");
Serial.print("Latitude: ");
Serial.print(gps.location.lat(), 6); // Latitude in degrees
Serial.print("\t");
Serial.print("Longitude: ");
Serial.print(gps.location.lng(), 6); // Longitude in degrees
Serial.println();
file.flush();
delay(1000);
}
riktig_kode.ino (3.1 KB)