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.
[…] 1x Drucksensor […]
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
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
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. 🙂
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
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
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
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
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
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
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
hast du schon mal einen bmp085-sensor ausgelesen. alle versuche dies mithilfe diverser inet-beispielen zu tun, scheiterten bei mir.
beste grüße
pfeili
Hey,
wie groß muss der Widerstand sein?!
Ich weiß nicht mehr genau welche Größe ich gewählt hatte. Versuch es mal z.B. mit 100 kΩ
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?!
Hallo,
Danke für die Anleitung!
Warum muss man eigentlich einen Wiederstand zwischen Analog Pin 0 und GND einbauen ?
Beste
Grüße
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
Wie wirkt sich die Wahl des Widerstandes aus? Muss ich einen 10kOhm oder 100kOhm nutzen?
Ist diese Schaltung auch schon fertig kaufbar oder haste die selbst zusammengebaut?
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.
Sorry Bearbeiten geht ja nicht. Er hat Hier nicht alles Angezeigt also Nachtrag
if (psi 0 PSi damit keine negativen drücke angezeigt werden
}