SDS011 am Arduino Uno

Hallo,

ich habe mir einen SDS011 Partikelsensor zugelegt.
Nun habe ich das Problem, dass der Sensor keine Daten über Serial schicken will.

Angeschlossen habe ich in so:

Sensor-RX an Arduino 0
Sensor-TX an Arduino 1
Sensor-5V an 5V
Sensor-GND an GND

Den Code verwende ich:

#define LEN 9
unsigned char incomingByte = 0;   
unsigned char buf[LEN];
int PM2_5Val = 0;
int PM10Val = 0;
void setup() {
        Serial.begin(9600);     
}
void loop() {
        int i;
        unsigned char checksum;
        // send data only when you receive data:
        if (Serial.available() > 0) {
          // read the incoming byte:
          incomingByte = Serial.read();

          if (incomingByte == 0xAA) {
            Serial.readBytes(buf, LEN);
            if ((buf[0] == 0xC0) && (buf[8] == 0xAB)) {
              for (i=1; i<=6; i++) {
                checksum = checksum + buf[i];
              }
              if (checksum == buf[7]) {
                PM2_5Val=((buf[2]<<8) + buf[1])/10;
                PM10Val=((buf[4]<<8) + buf[3])/10;
                Serial.print("PM2.5: ");   
                Serial.print(PM2_5Val);
                Serial.println("  ug/m3");     
                Serial.print("PM10 : ");   
                Serial.print(PM10Val);
                Serial.println("  ug/m3");   
                Serial.println();                 
             }
              else {
                Serial.println("checksum Error");
              }
            }
            else {
              Serial.println("frame error");
            }
          }
        } else 
        {
        Serial.println("Serial = 0");
        }

        delay(5000);
}

Beim ausführen kommt eben “Serial = 0”.

Woran kann es liegen?

Viele Grüße
Felix

Sie verwenden offensichtlich Rx/Tx als Anschluss für den Sensor und als Ausgabekanal für Seriellen Monitor. Das geht natürlich nicht!
Wenn der Serielle Monitor mit Serial.print(…) genutzt werden soll, muss der Sensor - z.B. per SoftwareSerial - an andere Pins angeschlossen werden.

Wie SoftwareSerial funktioniert, ist auf den Arduino-Seiten bestens beschrieben.

Danke für die Antwort, nun funktioniert es!

So, naja soweit habe ich die Daten vom Sensor auslesen können. Wenn ich aber die über Ethernet auf einen Server senden will, dann funktioniert das nur einmal, bei zweiten mal wird dann nur noch mit den Server verbunden, aber die Daten vom Sensor erhalte ich nicht mehr.

#include <Wire.h>
#include <SPI.h>
#include <Ethernet2.h>
#include <SDS011-select-serial.h>
#include <SoftwareSerial.h>



byte mac[] = { };
const char *server = "x.x.x.x";
EthernetClient client;



float p10,p25;
int error;

SoftwareSerial mySerial(51, 52); // TX, RX
SDS011 my_sds(mySerial);


void setup() {
  Serial.begin(9600);
  mySerial.begin(9600);


  Serial.print("Initializing DHCP connection...");
  if (Ethernet.begin(mac) == 0) {
    Serial.println("failed! ");
  }
  else {
    Serial.println("done!");
  }


}


void loop() {

   mySerial.listen();
  error = my_sds.read(&p25,&p10);
    if (! error) {
  Serial.println(p25);
  Serial.println(p10);
    }
      submitValues();

delay(1000);
}




void submitValues() {


    if (client.connect(server, 80)) {

    Serial.println("connecting...");


    //Packet

  }


    if (client.connected()) {
    client.stop();
    delay(500);
  }


}

Wenn ich Ethernet komplett raus nehme, dann geht es plötzlich wieder …

Viele Grüße

SDS011 am Arduino Uno
...
SoftwareSerial mySerial(51, 52); // TX, RX

Seit wann hat ein UNO 53 Pins?

combie:
Seit wann hat ein UNO 52 Pins?

Hab vergessen zu sagen, dass ich zum Mega gewechselt habe. Sorry!

Ja, das hast du vergessen.

Ich halte es für eine sehr komische Idee, das EthernetShield und den SDS011 an den gleichen Pins betreiben zu wollen.
Das muss doch scheppern, oder?

Und überhaupt: Sage mir doch mal, warum du bei einem Mega mit SoftwareSerial rum hampelst?
Der Mega hat 4 HardwareSerial Ports.

combie:
Auch halte ich es für eine komische Idee, das EthernetShield und den SDS011 an den gleichen Pins betreiben zu wollen.
Das muss doch scheppern, oder?

Das EthernetShield benutzt doch nicht die Pins 51 und 52, des wegen nutzte ich sie ja für den SDS011.

Das EthernetShield benutzt doch nicht die Pins 51 und 52,

Das ist ein Irrtum.

combie:
Und überhaupt: Sage mir doch mal, warum du bei einem Mega mit SoftwareSerial rum hampelst?
Der Mega hat 4 HardwareSerial Ports.

Ich hab SoftwareSerial rausgeschmissen und dafür Serial1 verwendet. Nun klappts!
Hätte garnicht gedacht, dass das Shield die Pins verwendet. :confused:

Danke für deine Hilfe!

Hätte garnicht gedacht, dass das Shield die Pins verwendet.

Das kann man problemlos herausfinden.
Denn das ist gut dokumentiert.

Danke für deine Hilfe!

Gerne doch.