Arduino: Drucksensor ( SEN-09673 ) Tutorial

Reading Time: 2 minutes

Da ich zur Zeit noch an meinem Projekt für den Wettbewerb „Mach flott den Schrott“ bastele und dabei ein Drucksensor zum Einsatz kommen soll, schreibe ich hier schnell ein kurzes Tutorial zur Nutzung des SEN-09673 Drucksensors mit dem Arduino.

Welcher Sensor?
Ich verwende für dieses Tutorial den Drucksensor SEN-09673 (Datenblatt), dieser ist auf der Abbildung (unten) zu sehen. Der Sensor ist sehr klein und ist somit für mein Projekt bestens geeignet. Ein Nachteil des Sensors ist allerdings das er mit ca. 4 – 6 Euro nicht gerade günstig ist. Den Sensor gibt’s zum Beispiel bei Watterott electronic GmbH oder etwas günstiger bei Sparkfun Electronics.

Theorie zum Sensor
Der Sensor misst eine Veränderung des elektrischen Wiederstands. Wenn kein Druck auf den Sensor ausgeübt wird, so ist der Wiederstand größer als 1 MΩ. Bei maximal messbarem Druck liegt der Wiederstand bei ca. 2.5 kΩ.

Der Aufbau
Ein Pin des Sensors wird auf 5V gelegt. Der zweite Pin des Sensors wird auf den Analog Pin 0 gelegt. Zusätzlich wird noch ein Wiederstand auf den Analog Pin 0 gelegt. Das andere Ende des Wiederstandes wird auf GND gelegt. Die Abbildung unten zeigt die genaue Verkabelung im Detail.

Die Programmierung
Alles was nun noch fehlt, sind ein paar Zeilen Code. Listig 1 zeigt einen Beispiel Code, welcher die gemessenen Werte des Drucksensors auf dem Seriellen Port ausgibt.

Listing 1:

/*Variablen initialisieren*/
int analogPin = 0;
int val = 0;

void setup(){
/*Seriellen Port initialisieren*/
  Serial.begin(9600);
}

void loop(){
/* Wert einlesen */
   val = analogRead(analogPin);
/* gelesenen Wert auf dem Seriallen Port ausgeben*/
   Serial.println(val);
/*Kurze Zeit Warten */
   delay(500);
}

Das wars auch schon. Die Werte die der Sensor erzeugt werden über den Analog Pin 0 eingelesen und in der Variable val gespeichert. Diese wird anschließend über den Seriellen Port ausgegeben.

25 Gedanken zu “Arduino: Drucksensor ( SEN-09673 ) Tutorial

  1. hallo,

    lässt sich das auch bei folgendem sensor realisieren?

    https://www.sensortechnics.com/download/DS_Standard-LBA_E_11691.pdf

    beste grüße

    pfeili

    • Mit Sicherheit lässt sich ein ähnlicher Aufbau auch mit diesem Sensor realisieren. Leider habe ich gerade keinen zur Hand. Das Datenblatt liefert aber alle benötigten Informationen.

      Gruss
      Mario

  2. hallo mario,

    im datenblatt steht, welche pins alle auf gnd kommen müssen. kannst du mir vielleicht kurz skizzieren, wie ich das auf meinem breadboard durchführe?

    liefert der sensor als output wirklich eine stromstärke? kann ich diese auch über einen analogen input einlesen?

    sorry für die dummen fragen. ich bin absoluter neuling auf diesem gebiet.

    viele grüße

    pfeili

  3. die zweite frage hat sich erübrigt. er liefert 0,5…4,5V.

    • Sorry, ich hab zur Zeit viel zu tun da dauert das Antworten schon mal etwas länger. Also wie du ja selber schon richtig erkannt hast kannst du die Spannung mit dem analogen Input auslesen. Allerdings kann ich dir gerade keinen genauen Tipp für die Verkabelung geben, die Seite mit dem Datanblatt scheint ( zur Zeit?) down zu sein.

      Dumme Fragen gibt es nicht, dumm ist nur, wer nicht fragt. 🙂

  4. hallo mario,

    du hast recht. scheinbar hat die firma ihre internetpräsenz umgestellt. hier der aktuelle link:

    https://www.sensortechnics.com/cms/upload/datasheets/DS_Standard-LBA_E_11691.pdf

    vielleicht kannst du bei gelegenheit doch mal reinschauen.

    dein script verstehe ich, da ich die tutorials teilweise schon durchgearbeitet habe.

    viele grüße und danke für deine mühe.

    pfeili

  5. hallo mario,

    ich habe jetzt den anschluss so vorgenommen, wie auf dem bild hier (und es funktioniert rein qualitativ erstmal):

    https://s7.directupload.net/file/d/2769/lyj8ucln_jpg.htm

    nun meine fragen:

    1. sollte ich einen widerstand vor +5v legen?

    2. was gibt er mir mit deinem script auf dem seriellen monitor aus? das sind erstmal keine spannungswerte, sondern zahlen (z.b. 110, 111… je nach meinem anliegenden druck). wie kann ich daraus spannungen erhalten, denn eigentlich steht ja, dass der sensor zwischen 0,5 und 4,5 V augibt.

    3. war es richtig, dass ich das unidirectional device anzapfe oder muss ich bidirectional nehmen?

    beste grüße und vielen dank für deine ermutigung.

    felix

  6. hallo mario,

    ich bin mittlerweile schon weiter. die integer-werte entstehen natürlich aus der a/d-wandlung, d.h. weil die auflösung desselben 10 bit beträgt, muss ich mir meine spannung erst mit

    U = 5 V * wert (in bit) / 1024 bit

    ausrechnen. somit wäre frage 2 geklärt. nach dieser erkenntnis hat sich auch frage 3 erledigt, denn der anschluss ist so korrekt. ich habe es anhand eines schrägrohrmanometers nachgeprüft.

    mittlerweile lese ich den arduino über matlab aus, was super funktioniert.

    beste grüße

    pfeili

    • Hallo pfeili,

      sorry dass ich im Moment nicht immer gleich dazu komme auf deine Kommentare zu antworten. Ich freue mich das du es so weit geschafft hast. Danke das du deine Erfahrungen über den Sensor hier teilst. Ich glaube es wäre Interessant ein Tutorial über den Sensor zu schreiben. Wo hast du den Sensor gekauft bzw. wo liegt der preislich ca. ?

      Danke & Gruss
      Mario

  7. hallo mario,

    ja, das könnte man tun. der sensor ist von der firma sensortechnics für etwa 70 € gekauft worden und hat einen messbereich von 500 pa.

    unter

    https://www.gomatlab.de/drucksensor-kontinuierlich-auslesen-und-plotten-t21892.html

    finden sich meine ersten ansätze zum auslesen mittels matlab. schreib mir einfach, wie du dir das mit dem tutorial vorstellst.

    beste grüße

    pfeili

  8. hallo mario,

    da schieb ich gleich noch eine frage hinterher: kann ich denn einen zweiten sensor am arduino mit 5v versorgen (z.b. über eine art spannungswandlung des 3,3v ausgangs) oder benötige ich dann auch ein zweites arduino? gibt es vielleicht ein arduino, welches mehrere +5v-pins zur verfügung stellt oder wie kann man dieses problem anderweiteig lösen?

    beste grüße

    pfeili

    • Hallo Pfeili,

      es gibt auch noch den Arduino Mega, der hat allerdings soviel ich weiß auch nur einen 5v PIN.
      Wenn es nur um die Versorgungsspannung geht, häng den zweiten Sensor doch einfach an den gleichen 5v PIN, das geht ohne Probleme.
      Du brauchst natürlich für den INPUT einen anderen Analog PIN als für den ersten Sensor, aber davon sind ja noch reichlich frei.

      Gruss
      Mario

  9. hallo mario,

    das mit dem analogen input war mir schon klar. 😉
    wieviele sensoren kann ich denn dann mit der einen spannungsversorgung betreiben? das wird ja begrenzt sein, denn da geht doch die stromstärke in die knie, oder?

    beste grüße

    pfeili

  10. hallo mario,

    und noch eine frage: muss ich als refereznzwert wirklich die 5v der spannungsversorung ansetzen oder die 4v differenz, die zwischen 0,5v und 4,5v outputsignal bestehen?

    beste grüße

    pfeili

  11. hast du schon mal einen bmp085-sensor ausgelesen. alle versuche dies mithilfe diverser inet-beispielen zu tun, scheiterten bei mir.

    beste grüße

    pfeili

  12. Hey,
    wie groß muss der Widerstand sein?!

  13. Ja habe jetzt mal den Widerstand eingelötet, programm schreib ich noch. Das ist aber nicht der Widerstand der von dem Sensor verändert wird oder?!

  14. Hallo,

    Danke für die Anleitung!

    Warum muss man eigentlich einen Wiederstand zwischen Analog Pin 0 und GND einbauen ?

    Beste
    Grüße

  15. hallo mario (oder jemand anderes),

    muss ich als referenzwert für die umrechnung in die spannung wirklich die 5v der spannungsversorung ansetzen oder die 4v differenz, die zwischen 0,5v und 4,5v outputsignal bestehen? das ist mir noch nicht ganz klar.

    beste grüße

    pfeili

  16. Wie wirkt sich die Wahl des Widerstandes aus? Muss ich einen 10kOhm oder 100kOhm nutzen?

  17. Ist diese Schaltung auch schon fertig kaufbar oder haste die selbst zusammengebaut?

  18. Hallo,
    ist zwar schon steinalt der letzte Post, aber um es genau zu sagen sollte der Redner schon etwas näher auf das Thema eingehen. Es gibt viele die dies Nachgebaut haben aber nicht wissen wie sie die Werte die angezeigt werden umrechnen sollen. Ich glaube viele haben einen Analog Sensor der im Spannungsbereich von 0,5-4,5V Arbeitet.
    Da die Arduinos eine Interne RevSpannung von 1.1V liefern kann man dies als Reverenz benutzen.
    hier ein kleiner Auszug

    float vcc, vsensor, result = 0, psi, bar;
    for (int i = 0; i < mittel; i++)
    {
    vcc = analogReadBG(0x1f); // dummy Read
    vcc = 1.1 * 1024 / analogReadBG(0x1e) * 1000; // Bandgab Referenz bestimmen 1.1 V Default
    #ifdef DEBUG // Ausgabe im Serialen Monitor deaktiviert
    Serial.println(analogReadBG(DS_Pin[channel]));
    #endif
    vsensor = (float) analogReadBG(DS_Pin[channel]) * vcc / 1024; // Messwert mit korrektem spannungsbeszug
    result += vsensor;

    da ja erst ab 0,5V angefangen wird also 0,5V = 0 PSI und 4,5V = 60 PSI "Beispiel von meinem Sensor" muss natührlich diese differnz von 0,5V abgezogen werden

    psi = (float)(result / mittel)- 500; // in mV spannungsdifferenz auf 0 – type PSI

    Damit auch keine Negativen Drücke Angezeigt werden sollte man

    if (psi 0 PSi damit keine negativen drücke angezeigt werden
    }

    Verwenden.

    Nun kommt die Ausgabe für 2 Sensoren da ich 2 Verwende

    switch (type) {
    case 60:
    case 5:
    psi = (type / 4.0) * (psi/1000) *100.0;
    break;
    default: // Fehler bei den Parametern
    return 0;
    }
    bar = psi * 0.0689; // Ausgabe in Bar

    So ich hoffe das hilft etwas weiter.

  19. Sorry Bearbeiten geht ja nicht. Er hat Hier nicht alles Angezeigt also Nachtrag

    if (psi 0 PSi damit keine negativen drücke angezeigt werden
    }

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

Kommentare werden moderiert. Es kann etwas dauern, bis dein Kommentar angezeigt wird.

Diese Website verwendet Akismet, um Spam zu reduzieren. Erfahre mehr darüber, wie deine Kommentardaten verarbeitet werden.