ich habe nur rudimentäre Programmierkenntnisse, mit denen ich aber bisher beim ARDUINO gut zurecht gekommen bin. Nun komme ich aber nicht mehr weiter.
Ich möchte Feinstaubdaten vom SDS11 auslesen und diese Daten auf einer SD-Karte speichern.
Für das Auslesen habe ich einen funktionsfähigen Sketch erstellt, ebenso für das Speichern von Daten. Leider laufen die Bibliotheken nicht gemeinsam.
"SdsDustSensor.h" und <SPI.h> mit <SD.h>
führen zu einem "Stillstand. Keine Serielle Ausgabe mehr. Nichts geht. Alle Hinweise, die ich gefunden habe ende mit dem Hinweis: andere Bibliotheken verwenden, doch ich finde keine Passenden, die zusammenarbeiten. Hat hier vielleicht jemand eine passende Kombination oder eine andere Lösung?
Im englischen Teil des Forum müssen die Beiträge und Diskussionen in englischer Sprache verfasst werden. Deswegen wurde diese Diskussion in den deutschen Teil des Forums verschoben.
Der Sensor arbeitet mit der seriellen Schnittstelle, da wundert es, dass es nicht funktioniert.
Wie hast du den angeschlossen ?
An D0 und D1, dann hast du Probleme mit der Ausgabe.
Nutze SoftwareSerial für den Sensor, da kannst du andere freie Pins verwenden.
Ok, es sieht danach aus, dass die Sensor-Library schon eine eigene SoftwareSerielle verwendet.
Diese kenne ich nicht und kann nur den Tipp geben, das evtl. mit der "richtigen" SoftwareSerial oder mit einem anderen Controller arbeiten, der eine zusätzliche HardwareSerielle bietet.
Du könntest evtl. auch andere Pins für die serielle verwenden. Z.B. D8 und D9.
#include <SPI.h>
#include <SD.h>
const int chipSelect = 10; //10 is default by shield, but normally on Pin 4
int interval = 5; //Log to SD Card every 5 seconds
long timer;
String SensorDaten_1, SensorDaten_2;
void setup() {
Serial.begin(9600);
delay(3000);
Serial.println("Initializing SD card...");
if (!SD.begin(chipSelect)) {
Serial.println("SD Card error");
return;
}
Serial.println("card initialized");
}
//************************************************ L O O P *********************
void loop() {
if ((timer + interval * 1000) < millis()) {
timer = millis();
DatenAuslesen(); //Get your value
DatenSichern(); //Write value to SD
}
}
//*******************************************************************************
void DatenAuslesen() {
SensorDaten_1 = "My Value";
SensorDaten_2 = timer;
}
void DatenSichern() { //Write to SD card
String AusgabeZeile = SensorDaten_1 + ";" + SensorDaten_2;
File dataFile = SD.open("datalog.csv", FILE_WRITE);
if (dataFile) {
dataFile.println(AusgabeZeile);
dataFile.close();
Serial.println(AusgabeZeile);
}
else {
Serial.println("error writing datalog.txt");
}
}
Karte wird beschrieben, wenn sie vorhanden ist, sonst gibt es eine Meldung. Alles OK
Auch der zweite läuft:
#include "SdsDustSensor.h"
int rxPin = 6; // SDS TxD am UNO 2: RxD
int txPin = 7; // SDS RxT am UNO 3: TxD
SdsDustSensor sds(rxPin, txPin); // Anschluss gekreuzt siehe oben
float pm25;
float pm10;
float StartZeit, LaufZeit; // Zeitpunkt der Messung
void setup() {
Serial.begin(9600);
sds.begin();
Serial.println(sds.queryFirmwareVersion().toString()); // prints firmware version
Serial.println(sds.setActiveReportingMode().toString()); // ensures sensor is in 'active' reporting mode
Serial.println(sds.setCustomWorkingPeriod(2).toString()); // sensor sends data every 2 minutes
}
void loop() {
PmResult pm = sds.readPm();
SerielleAusgabe();
if (pm.isOk()) {
StartZeit = millis();
Serial.print("PM2.5 = ");
Serial.print(pm.pm25);
pm25 = pm.pm25;
Serial.print(", PM10 = ");
Serial.println(pm.pm10);
pm10 = pm.pm10;
Serial.println(pm.toString()); // if you want to just print the measured values, you can use toString() method as well
} else {
LaufZeit = (millis() - StartZeit)/1000; // ACHTUNG loop delay is set to 5s aber der Sensor sendet alle 5 Mintuten Daten
Serial.print("Keine neuen Daten. Warte ca. ");
Serial.print(120-LaufZeit,0);
//Serial.print(pm.statusToString());
Serial.print(" s letzte Messwerte: pm25 = ");
Serial.print(pm25);
Serial.print(" und pm10 = ");
Serial.println(pm10);
}
delay(5000);
}
void SerielleAusgabe(){
}
Nun sollen die Feinstaubdaten uaf der Karte gesichert werden. Aber die Bibliotheken mögen sich nicht. GRRRRRRRRRRRRRRRR...