Sensirion SDP 610 Sensor an Arduino uno anschließen ! Hilfe!!!!!

Hallo Zusammen,
seit Tagen versuche ich vergeblich von Sensirion einen Differenzdrucksensor (SDP 610) anzuschließen. Er hat eine I2C Schnittstelle. Habe es über die Scan Funktion versucht aber das Programm scannt sich zu tode ohne Ergebnis kabel habe ich richtig angeschlossen.
Kann mir jemand helfen ich bin echt am Rande der Verzweiflung.

Mehr informationen. Welchen Arduino, Schaltplan wie Du den SDP610 angeschlossen hast, eventuel statt des Schaltplans ein gutes Foto. Welchen Spannungsumsetzer verwendest Du?
Grüße Uwe

jocner:
Kann mir jemand helfen ich bin echt am Rande der Verzweiflung.

Falls Sie in einer akuten Krise sind und eine Gefahr für sich oder andere Menschen darstellen, wenden Sie sich bitte an die Telefonseelsorge (kostenfreie Rufnummern: 0800 - 111 0 111 und 0800 - 111 0 222) oder direkt an die Polizei (Telefon: 110).

Das ging ja super schnell.
Ich verwende einen Arduino uno R3. Habe jetzt mal ein Foto beigefügt wie ich Ihn angeklemmt habe. Alle Kabelfarben sind gleich nur schwarz wird zu braun. Hatte nichts anderes da.
Mittels dieser Scanfunktion habe ich versucht den Sensor zu finden. Aber er scannt und scannt und scannt und......
Bin leider ein absoluter Anfänger. Danke für die schnelle Nachricht.

#include <Wire.h>


void setup()
{
  Wire.begin();

  Serial.begin(9600);
  Serial.println("\nI2C Scanner");
}


void loop()
{
  byte error, address;
  int nDevices;

  Serial.println("Scanning...");

  nDevices = 0;
  for(address = 1; address < 127; address++ ) 
  {
    // The i2c_scanner uses the return value of
    // the Write.endTransmisstion to see if
    // a device did acknowledge to the address.
    Wire.beginTransmission(address);
    error = Wire.endTransmission();

    if (error == 0)
    {
      Serial.print("I2C device found at address 0x");
      if (address<16) 
        Serial.print("0");
      Serial.print(address,HEX);
      Serial.println("  !");

      nDevices++;
    }
    else if (error==4) 
    {
      Serial.print("Unknow error at address 0x");
      if (address<16) 
        Serial.print("0");
      Serial.println(address,HEX);
    }    
  }
  if (nDevices == 0)
    Serial.println("No I2C devices found\n");
  else
    Serial.println("done\n");

  delay(5000);           // wait 5 seconds for next scan
}

IMG_8407[1].JPG

jocner:
Ich verwende einen Arduino uno R3. Habe jetzt mal ein Foto beigefügt wie ich Ihn angeklemmt habe.

Wo sind denn da in Deiner Schaltung die externen PullUp-Widerstände für den I2C-Bus zu finden?

Kommt der Sensor schon vorbeschaltet mit einer zusätzlichen kleinen Breakout-Platine, auf der eigene PullUp-Widerstände verbaut sind? Das Datenblatt des Sensors sagt davon nichts, sondern beschreibt nur die Beschaltung mit externen PullUp-Widerständen.

Oder hast Du die externen PullUp-Widerstände für den I2C-Bus einfach weggelassen?

Wenn Du ein Multimeter hast, miss mal in einem Volt-Messbereich die Spannung zwischen GND und A4 bzw. GND und A5, wieviel Volt zeigt es an, und zwar während der Scan-Sketch läuft?

Habe als Pull-up Widerstände mal zwei 10k Potis eingebaut (wie im Datenblatt beschrieben angeschlossen).
Habe es mit und ohne die Widerstände versucht und es hatte sich nichts geändert.
Zwischen GND und A4 liegt 0,6V an
Zwischen GND und A5 liegt ebenso 0,6V an.
Die Kabel am Arduino habe ich doch richtig angeschlossen oder?

IMG_8408[1].JPG

jocner:
Zwischen GND und A4 liegt 0,6V an
Zwischen GND und A5 liegt ebenso 0,6V an.
Die Kabel am Arduino habe ich doch richtig angeschlossen oder?

Die Spannungen stimmen vorne und hinten nicht.
Und der Anschluss ist offensichtlich falsch.

Als Pin Assignment im Sensor-Datenblatt sehe ich die Reihenfolge:
Data - GND - VDD - Clock

D.h, die Clock-Leitung (SCL/A5 am Arduino Uno) liegt als Anschluss direkt neben VDD außen.
Auf Deinem Bild ist VDD als rote Leitung direkt neben der grünen Leitung angeschlossen, die zum Arduino an A4 (SDA) führt.

Da müßtest Du mal dringend die Anschlüsse überprüfen:
Entweder hast Du am Sensor GND und VDD verwechselt, die Betriebsspannung falsch herum gepolt und dann sind Data (SDA) und Clock (SCL) richtig angeschlossen.

Oder Du hast GND und VDD richtig gepolt am Sensor angeschlossen, dann sind Data (SDA) und Clock (SCL) genau vertauscht angeschlossen.

Bei korrekten Anschluß solltest Du folgende Spannungen messen können:

Bei Verwendung externer PullUp-Widerstände sollte die Spannung zwischen GND-SDA und GND-SCL: zwischen 3.3 und 3.6 Volt betragen.

Hallo,
zunächst mal vielen Dank für deine entgegengebrachte Hilfe.
Zwischen GND und SDA sowie zwischen GND und SCL liegen nun 3,3 V an. Anschlüsse habe ich überprüft.
DATA-A4
Clock - A5
GND- GND
VND-3,3V
I2C Scanner
Scanning...
Hab nochmal ein Foto hinzugefügt

Irgendwie ist da der Hund vergraben. Der Scanner läuft und läuft. Dürfte doch keine 10 Minuten dauern oder?
Was kann es noch sein das Teil anzusprechen?

jocner:
DATA-A4
Clock - A5
GND- GND
VND-3,3V

OK.

Und auf welche Widerstandswerte hast Du jetzt Deine Potis eingestellt, die Du da als Notbehelf mangels geeigneter PullUp-Festwiderstände eingelötet hast?

Im Zweifelsfall nochmal je einen Draht an den Potis ablöten und im Ohm-Messbereich den Widerstand ausmessen. Der PullUp-Widerstand sollte bei je zwischen ca. 3300 und 4700 Ohm liegen (3.3K bzw. 3K3 bis 4.7K bzw. 4K7). Hast Du das überprüft, dass die Potis so eingestellt sind und danach auch nicht verstellt werden?

jocner:
Irgendwie ist da der Hund vergraben. Der Scanner läuft und läuft. Dürfte doch keine 10 Minuten dauern oder?

Nö, der Scanner zeigt die Adresse nach wenigen Sekunden.
Wenn Du nach 10 Sekunden keine Anzeige hast, kannst Du aufhören zu scannen.

Hi,

ich habe mich auch schon mal mit dem Sensor beschäftigt.
Das Datenblatt ist leider nicht so einfach zu lesen...
Hat jemand den Sensor (mit dazugehöriger SW) am laufen?
Würde mich gerne mal über den Code dazu unterhalten...

In meinem Projekt habe ich die SHT-lib modifiziert und um die SDP-spezifischen Inhalte erweitert.
Leider kann ich die Ergebnisse kaum kontrollieren, da der Sensor so super Empfindlich ist (SDP-610 025PA).

Würde mich über Feedback/Kontakte freuen.

Bis dann,
Bernhard

Hier:
http://www.sensirion.com/en/products/differential-pressure-sensors/download-center/
gibt es sample code.

Viel Erfolg!

Hi,

leider kann ich den Code von Sensirion nicht auf den Arduino übertragen.
Ich hatte die Lib für die SHT-Temp/Humi-Sensoren mir angeschaut und einige Änderungen hinzugefügt.
Eigentlich wäre das der beste Ort für kleine Veränderungen.

Wäre cool, wenn das jemand machen könnte.... (bin leider nur in HW stark...)

Gruß,
Bernhard

ich stehe gerade vor der selben Aufgabe....

hat es inzwischen jemand geschafft?
(also was den Code betrifft, nicht den Anschluss)

tia, beat

habe das hier gefunden (google nach sdp6xx arduino):

funktioniert bei mir soweit (konnte es noch nicht quantitativ testen)

https://www.google.ch/url?sa=t&rct=j&q=&esrc=s&source=web&cd=1&cad=rja&uact=8&ved=0CCsQFjAA&url=http%3A%2F%2Fforum.arduino.cc%2Findex.php%3Faction%3Ddlattach%3Btopic%3D232512.0%3Battach%3D78642&ei=qbo-VPDNIYbkaPqcgJgO&usg=AFQjCNGb6j87pR68uPS0R2KmxHFvuVjkKA&sig2=2ia_ud9e72KEo6iPZ6m3Dw&bvm=bv.77412846,d.bGQ

https://www.google.ch/url?sa=t&rct=j&q=&esrc=s&source=web&cd=2&cad=rja&uact=8&ved=0CDAQFjAB&url=http%3A%2F%2Fforum.arduino.cc%2Findex.php%3Faction%3Ddlattach%3Btopic%3D232512.0%3Battach%3D78641&ei=qbo-VPDNIYbkaPqcgJgO&usg=AFQjCNEB7i7R0d1qm83FCDUwL_fXavV-2w&sig2=XXwapClP9G4u-ZOpC287hw&bvm=bv.77412846,d.bGQ

viel spass mit den sensoren :slight_smile:

Hallo,
Ich bin auch gerade dabei, ein Senserion Differenzdrucksensor SDP610-25Pa an ein Adruino Uno (Modell R3) anzuschliesen. Die oberen Posts haben mir viel geholfen, Danke! Ich habe jetzt ein Sketch, mit dem Code von Jocner geladen, und den Sensor mit den Pull-Up Resistors angeschlossen. Beim Scannen, erkennt der Arduino dass der Sensor engeschlossen ist. Ich schafe aber nicht Messwerte auszulesen. Ich habe die SDP6xx.h und SDP6.ccp Deteiin von smatt's links in eine Ordener mit Namen SDP6xx gepackt, und diesen in meinen Libraries Order. Dann habe ich im Sketch über Sketch>Library importieren die Library hinzugefügt. Dann steht im Sketch #include <SDP6xx.h> wie bei Wire.h, nur dass bei Wire die Schrift orange ist, und bei SDPxx ist sie schwarz. Ich bekamm uach nicht die erwartete Bestatigungsnachricht nach dem importiern der Labrary. Ich habe mir bei verschiedene Quellen Anleitungen zu dem Einfügen einer Library durchgelesen, und alles probiert, aber die SDPxx Library installiert immer noch nicht korrekt. Hat noch jemand anders solche Erfahrungen gehabt? und hat jemand eine Lösung gefunden?,
Marcus

bei mir läuft diese sketch:

#include <Wire.h>
#include <SDP6xx.h>

void setup()
{
  Wire.begin(); 
  Serial.begin(115200);
}


void loop()
{
   Serial.println(SDP6xx.readPA());
   delay(100);
}

Hallo Smatt,
Ich habe diese Code auch hochgeladen; dich bekomme Werte raus, was ja schon ein großer Schritt in die richtige Richtung ist! Allerdings sind da viele fehlerhafte Werte... also da kommen eine Reihe von Werten wie 65523 und dann mehr plausible wie 2 oder 3. Ich habe die Baud Rate und die Verzögerung verändert, aber bekomme immer solche komischen Werte.

Auf dieser Seite: pressure sensor read out via AVR - YouTube
hat hboy007 geschrieben: "You'll need to properly initialize the sensor and discard some readings after reset/ parameters change as well as include bitrate dependent timeouts to detect hangups."

Bekommst du keine komische Werte?
Danke für die Code!
alles gute,
Marcus

ja, das stimmt. Wie gesagt, habe die Werte noch nicht quantitativ überprüft.
Die Library geht von einem unsigned integer aus, es kommt aber ein signed vom sensor. Um mal etwas mit dem Sensor zu spielen: Werte 0-32768 enstprechen einer Druckdifferenz in der einen Richtung, Werte 65536-32769 in der anderen Richtung.
Das funktioniert bei mir ganz grob.

Ich sehe, der letzte Post ist schon älteren Datums. Hoffentlich schaut hier trotzdem mal wer vorbei. Grund:

Ich habe den Code verwendet, den smatt am 22.10.14 gepostet hat mit nur einer Änderung: Ich musste die Baudrate auf 19200 herunter nehmen, um auf dem Serialmonitor noch etwas vom Sensor zu erhalten. Tiefer geht auch, aber bei einer höheren kommt nichts mehr. Hat da jemand eine Vermutung?

Die Signale, die der Sensor liefert sind auch ganz interessanter Natur. Sie springen weitgehend zufällig zwischen 0.00 und 4369.00 hin und her. Gebe ich einen konstanten Druck auf den Sensor kriege ich zwar auch konstant höhere Werte zurück. Dazwischen hat es aber immer wieder Nullen. Dazu habe ich zwei Fragen:

Erstens, woher kommt der Range??? Das Ding ist bei mir auf 12bit was 4096 entspricht...
Zweitens, warum springt der teilweise so wild vom einen zum anderen Anschlag des Wertebereichs?

Herzlichen Dank!

Wir verwenden einen Sensirion SDP610-025PA +/- 25Pa Messbereich an Arduino UNO R3
Clock (SCL) an A5
Data (SDA) an A4
VDD an 3,3 V
GND an GND Arduino Board
A5 und A4 sollten je mit ca. 4,7k gegen 3,3V versehen werden siehe I2C 3,3,V an I2C 5V auf der Arduino Webseite, alternativ einen Pegelwandler für I2C verwenden.

zur Wire Lib gibt es eine gute Präsentation s. Anhang

In dem programm Atemgurt2.ino vvon Tobias Otto 2015, tobias.otto@rub.de wird gezeigt wie der Drucksensor ausgelesen wird und wie die 16 Bit zusammengestzt werden.

Das Beispiel beruht auf der Dokumentation von Sensirion, dort auf der Seite findet sich der Quellcode für Mikrocontroller

Atemgurt2.ino (6.61 KB)

Wire_Lib_02.pdf (111 KB)