27-09-2021, 15:24
Cześć wszystkim.
Stworzyłem projekt, który składa się z 4 czujników.
sht31- (temperatura i wilgotność)
sps30 - (pomiar PM)
HCHOSensor v 1.0 DFRobot (czujnik formaldehydu)
MiCS 5524 (czujnik lotnych związków organicznych)
Udało mi się je wszystkie połączyć i otrzymywałem prawidłowe wyniki. Problem zaczął się , gdy otrzymane dane chciałem wysyałać zdalnie za pomocą modułu NRF24l01. Udało mi si to połowicznie, ponieważ czujnik sps30 jak i sht31 wysyłały prawidłowe dane. Największy kłopot mam z czujnikiem od formaldehydu (DFRobot). Wszystko działa poprawnie do czasu kiedy nie wprowadzę kodu do obsługi owego czujnika. Zauważyłem, że jakby problem tkwi w komendzie "if(hchoSensor.available()>0) {". Gdy jej nie ma, wysyłam i odbieram prawidłowo dane z pozostałych czujników, lecz gdy dodam tą komendę to w monitorze portu szeregowego nie widać danych lub pojawi się tylko jedna linijka. Czy ktoś mógłby mnie naprowadzić na jakiś trop co źle robię? Będę bardzo wdzięczny
Pozdrawiam
Stworzyłem projekt, który składa się z 4 czujników.
sht31- (temperatura i wilgotność)
sps30 - (pomiar PM)
HCHOSensor v 1.0 DFRobot (czujnik formaldehydu)
MiCS 5524 (czujnik lotnych związków organicznych)
Udało mi się je wszystkie połączyć i otrzymywałem prawidłowe wyniki. Problem zaczął się , gdy otrzymane dane chciałem wysyałać zdalnie za pomocą modułu NRF24l01. Udało mi si to połowicznie, ponieważ czujnik sps30 jak i sht31 wysyłały prawidłowe dane. Największy kłopot mam z czujnikiem od formaldehydu (DFRobot). Wszystko działa poprawnie do czasu kiedy nie wprowadzę kodu do obsługi owego czujnika. Zauważyłem, że jakby problem tkwi w komendzie "if(hchoSensor.available()>0) {". Gdy jej nie ma, wysyłam i odbieram prawidłowo dane z pozostałych czujników, lecz gdy dodam tą komendę to w monitorze portu szeregowego nie widać danych lub pojawi się tylko jedna linijka. Czy ktoś mógłby mnie naprowadzić na jakiś trop co źle robię? Będę bardzo wdzięczny
Pozdrawiam
Kod:
#include <SPI.h>
#include <nRF24L01.h>
#include <RF24.h>
RF24 radio(5, 6); // CE, CSN
const byte address[6] = "00001";
#include <Arduino.h>
#include <Wire.h>
#include "Adafruit_SHT31.h"
#include <sps30.h>
#include <DFRobotHCHOSensor.h>
#include <SoftwareSerial.h>
#define SensorSerialPin 10
SoftwareSerial sensorSerial(SensorSerialPin,SensorSerialPin);
DFRobotHCHOSensor hchoSensor(&sensorSerial);
Adafruit_SHT31 sht31 = Adafruit_SHT31();
void setup() {
//HCHO
sensorSerial.begin(9600); //the baudrate of HCHO is 9600
sensorSerial.listen();
Serial.begin(9600);
//czujnik temperatury i wilgotności
while (!Serial)
delay(10); // will pause Zero, Leonardo, etc until serial console opens
Serial.println("SHT31 test");
if (! sht31.begin(0x44)) { // Set to 0x45 for alternate i2c addr
Serial.println("Couldn't find SHT31");
while (1) delay(1);
}
Serial.print("Heater Enabled State: ");
if (sht31.isHeaterEnabled())
Serial.println("ENABLED");
else
Serial.println("DISABLED");
//sps30
int sps30;
#ifndef PLOTTER_FORMAT
Serial.print("SPS sensor probing successful\n");
#endif /* PLOTTER_FORMAT */
s16 ret;
ret = sps30_start_measurement();
if (ret < 0) {
Serial.print("error starting measurement\n");
}
#ifndef PLOTTER_FORMAT
Serial.print("measurements started\n");
#endif /* PLOTTER_FORMAT */
delay(1000);
//radio
radio.begin();
radio.openWritingPipe(address);
radio.setPALevel(RF24_PA_MIN);
radio.stopListening();
}
void loop() {
if(hchoSensor.available()>0)
{
//sps30
struct sps30_measurement m;
char serial[SPS_MAX_SERIAL_LEN];
u16 data_ready;
s16 ret;
do {
ret = sps30_read_data_ready(&data_ready);
if (ret < 0) {
Serial.print("error reading data-ready flag: ");
Serial.println(ret);
} else if (!data_ready)
Serial.print("data not ready, no new measurement available\n");
else
break;
delay(100000); /* retry in 100ms */
} while (1);
ret = sps30_read_measurement(&m);
if (ret < 0)
Serial.print("error reading measurement\n");
else {
float t = sht31.readTemperature();
int pm1 = sps30_read_measurement(&m);
float h = sht31.readHumidity();
float hcho = hchoSensor.uartReadPPM();
Serial.print(t);
Serial.print(",");
Serial.print(h);
Serial.print(",");
Serial.print(m.mc_1p0);//PM 1.0
Serial.print(",");
Serial.print(m.mc_2p5);//PM 2.5
Serial.print(",");
Serial.print(m.mc_4p0);//PM4.0
Serial.print(",");
Serial.print(m.mc_10p0);//PM 10.0
Serial.print(",");
Serial.print(m.nc_0p5);//NC 0.5
Serial.print(",");
Serial.print(m.nc_1p0);//NC 1.0
Serial.print(",");
Serial.print(m.nc_2p5);//NC 4.0
Serial.print(",");
Serial.print(m.nc_4p0);//NC 4.0
Serial.print(",");
Serial.print(m.nc_10p0);//NC 10.0
Serial.print(",");
Serial.print(m.typical_particle_size);// typowe wielkości cząsteczek
Serial.print(",");
Serial.print(hcho);
Serial.println();
delay(1000);
radio.write(&t, sizeof(t));
radio.write(&h, sizeof(h));
radio.write(&m, sizeof(m));
radio.write(&hcho, sizeof(hcho));
}
}
}