sensoren

hallo,
ich mochte einen honeywell hih 3610 feuchtesensor an den arduino anschliessen.das teil gibt einen analogwert von 0 - 3,9 volt aus für 0 bis 100 % feuchte.wie passe ich das an den hardwareeingang,welcher ja von 0 bis 5 volt geht,an? für ein beispiel wäre ich sehr dankbar.

gruss peter

Wozu willst du das anpassen? Knapp 4v am Analogeingang ist doch nahezu perfekt. Zumindest besser, als mit Operationsverstärkern eine entsprechende externe Beschaltung umzusetzen, die dann vielleicht noch temperaturkompensiert werden muss etc. pp.

sie wie er ist anklemmen und mit map die werte anpassen
Sollte doch gehen oder

naja,dachte halt das die scala des eingangs bei 0-5 volt eben 0-100 % sind.was zeigt das ding dann an wenn ein volt fehlt? wenn beim sensor 4 volt 100% sind würde die anzeige ja nen geringeren wert anzeigen.das sollte dann schon angepasst sein.wie kann man das programmseitig lösen.bei ner abb freelance nehme ich einfach nen scalierer.leider bin ich beim arduino noch anfänger.

Der Analogeingang nimmt zwar 0-5V an und gibt sie als Wert zwischen 0 und 1023 aus. Wenn du nun maximal 3,9V als Eingangssignal anlegst, bekommst du also einen Wertebereich von 0 bis 799 heraus. Diese wiederum kannst du mappen (Befehl: map ()) oder schlichtweg durch 8 teilen, um auf deine 0 bis hundertprozentige Luftfeuchtigkeit zu kommen.

aha,das ist schon mal was.ich verschenke zwar etwas auflösung aber für nen humidor ist das immer noch genau genug.wenn du mir jetzt noch eine info gibts was genau mappen ist und wie ich das mache,wäre mein problem gelöst.gibts irgendwo eine deutsche beschreibung der befehle?
vielleicht kannst du mal ein paar zeilen beispielcode eines mappings geben?
danke für euro mühe.
gruss peter

also,
soll heissen 0-799 entspricht 0-100% feuchte.und das wird mit dem map befehl gemacht?? und der gemappte wert wird dann an ein z.b. lcd ausgegeben..richtig verstanden?

Genau, mappen ist im Prinzip die Umwandlung eines Eingangsbereiches auf einen Ausgangsbereich. Wenn die Anwendung zeitkritisch ist, würde ich jedoch eher durch 8 dividieren bzw. 3 mal bitshiften. Ansonsten frohes Gelingen!

ich glaube:

newwert= map(oldwert, 0,799,0,100);

Beispiel ist richtig, aber nicht unbedingt verständlich. Wenn das Beispiel für diesen konkreten Fall herhalten soll, sollte man die Variablen auch entsprechend benennen, bspw. gleich so:

feuchte = map (analogRead(0), 0, 799, 0, 100);

Na komm, ich bin selber noch neu und mir nie sicher ob das stimmt was ich sage.
Wie oft habe ich schon eine Antwort auf ein Thema verfasst und dann wieder gelöscht weil ich mir nicht sicher bin obs auch wirklich stimmt.

Ich habe es aber versucht! :slight_smile:

peter178:
aha,das ist schon mal was.ich verschenke zwar etwas auflösung aber für nen humidor ist das immer noch genau genug. ...

Hallo Peter

Eine solche Aussage hätte mir in meiner Schulzeit sofort eine negative Benotung eingebracht.

Eine Auflösung die größer als der Meßfehler ist, ergibt einfach nur erfundene Zahlen.

Aus dem Datenblatt:
RH Genauigkeit ±2% RH bei 5V und 25 Grad.
RH Interchangeability ±5% RH, 0-60% RH; ±8% @ 90% RH typical (Maximale Exemplarstreuung, verschiedene Sensoren zeigen verschiedere Werte an; kann durch Messung eines genauen bekannten Wertes und Änderung der Umrechnungsformel für jeden Sensor calibiert werden.)
RH Linearity ±0.5% RH typical
RH Hysteresis ±1.2% RH span maximum
RH Repeatability ±0.5% RH (Wiederholungsgenauigkeit)
RH Response Time, 1/e 15 sec in slowly moving air at 25 °C
RH Stability ±1% RH typical at 50% RH in 5 years ( Änderung nach 5 Jahren)

Daraus ergibt sich:
Kleine Meßwerte sind ungenauer als größe da der Fehler immer in %RH (absolute Werte) angegeben ist.
Wenn der Sensor nicht kalibriert ist kann der Meßfehler zwischen 5 und 10%RH liegen.
Der relativer Fehler ist bei 100% RH dann 5% bis 10% bei 50% RH aber 10% bis 20% des Meßwertes.
Bei dieser Betrachtung ist es egal ob Du die Spannung des Sensors mit ca 5mV auflösung liest oder mit umgerechnet 4mV Auflösung wenn du ihn auf 5V verstärken würdest.
Wenn 100%RH als 799 ADC gelesen werden dann heißt das, das ca 40 ADC Fehler drin sind. Es hat keinen sinn eine größere Auflösung als 1% RH anzuzeigen wobei diese Werte auch schon nicht richtig sind.

Hoffe ich bin verständlich.

Viele Grüße Uwe

edit:
Nachtrag.
Ich rate das Datenblatt zu lesen: http://content.honeywell.com/sensing/prodinfo/humiditymoisture/009012_2.pdf
Der Sensor ist Lichtempfindlich.
Die Sensorspannung ist 0%RH sind 0,8V und 100% RH sind 3,90V bei 25 grad Celsius.
darum ist die Umrechnung :
feuchte = map (analogRead(0), 0, 799, 0, 100);
falsch. richtig ist:
feuchte = map (analogRead(0), 164, 799, 0, 100);
nochmal Grüße Uwe

erstmal danke für die schnelle hilfe.jetzt ist es mir klar.
:slight_smile:

Okay, ich bin von den Angaben des Threadstarters ausgegangem, dass der Wertebereich bei 0 losgeht. Ein Blick ins Datenblatt verrät selbstverständlich mehr. Und damit zeigen sich die Vorteile der problemlose map()-Nutzung. Das ließe sich sicher auch mathematisch lösen, aber map() ist hier einfach komfortabel und selbsterklärend.

sth77:
Das ließe sich sicher auch mathematisch lösen, ...

Durchaus. Die Funktion ist in WMath.cpp definiert und besteht aus einem simplen Einzeiler:

long map(long x, long in_min, long in_max, long out_min, long out_max)
{
  return (x - in_min) * (out_max - out_min) / (in_max - in_min) + out_min;
}