Forum: Analoge Elektronik und Schaltungstechnik (Airwick) AS-MLV-P VOC-Sensor: Wie ansteuern?


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
von Dirk K. (dekoepi)


Bewertung
0 lesenswert
nicht lesenswert
Hallo zusammen,

es gab zwar schon ältere Threads zum Applied Sensors VOC-Sensor aus dem 
Airwick Geruchssensor-Dingen, aber die führten bislang zu nichts außer 
Produktfotos: Beitrag "Geruchssensor - Air Wick Fresh Matic"

Ich habe mir so ein Teil auch mal bestellt und beherzt mit einem 
Taschenmesser auseinandergenommen, der Aufbau ist immer noch gleich. Der 
Sensor ist äußerst simpel aufgebaut: Ein Heizdraht und ein auf die 
Oxidationsprodukte reagierender Sensor. Man kann zwar keine Messung wie 
mit einem GCMS durchführen, aber "Luftverschmutzung" allgemein erkennen.

Das Datenblatt hat sogar ein Schaltbild - nur das verstehe ich schon 
nicht richtig. Da ist ein Widerstand drin, wenn ich das richtig sehe, 
zwischen GND und S2 (Sensor) - ist das ein Pulldown, also beispielsweise 
mit 10kOhm? Steht leider nicht konkret dran. Für die Heizung fehlt da 
ein Widerstand meiner Meinung nach, da der Heizdraht bis zu 41mA ziehen 
soll, bei ~2,7V @320°C Arbeitstemperatur.
https://www.appliedsensor.com/pdfs/AS-MLV-P.pdf (2 Seiten, wenig drauf.)

Habe ich das korrekt verstanden soweit? Dann bräuchte ich für 
3,3V-Speisung einen 15-Ohm-Widerstand laut der Online-Rechner für 
LED-Vorwiderstände (0,6V vernichten, 24mW Verlustleistung, 40mA kommen 
an. Bei 5V (ATmega/ATtiny) entsprechend 56,1Ohm (68 als nächster 
"Normwiderstand"), bei 2,3V zu vernichten und 33,8mA Leistung am 
Heizdraht bei 78mW Verlustleistung).

Wenn ich den Widerstand des Sensors über S1 (HIGH, OUTPUT) nach S2 
(INPUT) messe, zeigt der 50% der Spannung an für 15 Minuten an und 
danach kommen "echte" Ergebnisse.

Kommt das in etwa hin? Ich habe Google und die Board-Suche schon 
ordentlich gequält, aber keinen konkreten Aufbau gefunden dazu.

Was mich dabei wundert - der Sensor muss dann ja quasi die ganze Zeit 
laufen und zieht dann permanent 41mA (Heizdraht)+ x mA µC+ y mA Gemüse, 
was für Batteriebetrieb doch äußerst ungeeignet scheint. Oder misst man 
so etwas dann nur in einstündigen Intervallen?

Edit: Der Widerstand hängt laut Schaltbild zwischen Sensor und GND und 
nicht vor der Heizung, soweit korrigiert.

: Verschoben durch Admin
von Interessierter (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Zum strom-sparen wird immer nur kurzzeitig gemessen. Die Aufheizzeiten 
sind bei solchen Sensoren meist relativ kurz.

von Dirk K. (dekoepi)


Bewertung
0 lesenswert
nicht lesenswert
Das wäre sinnvoll. Nur wenn eine Viertelstunde nur Quatsch-Werte kommen, 
passt das ja nicht. Oder meinen die 15 Minuten nur den Sensor-Anschluss 
selbst, also S1/S2? Die dauerhaft anlassen, sozusagen, und dann 
gelegentlich heizen?

von Dirk K. (dekoepi)


Bewertung
0 lesenswert
nicht lesenswert
Die Suche nur nach 'VOC sensor' war jetzt hilfreich: Der gesuchte 
Widerstand Rl ist ein einfacher Pulldown am Sensor-Vcc. Ich werde vor 
die Heizung aber trotzdem einen kleinen Widerstand setzen zur 
Strombegrenzung. Wäre schade, wenn der Heizdraht durchglüht ...

Ein paar für mich verständlichere Bilder gibt es etwa hier: 
http://www.staceyk.org/airSensors/sensorsetup.php

von Dirk K. (dekoepi)


Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Zur Dokumentation, falls andere damit auch mal arbeiten möchten:

Ich habe den Sensor jetzt tatsächlich als Schnellschuss so angesteuert, 
mit Minimalstprogramm auf Arduino (kann hier vor Ort grade keine 
richtige IDE installieren, daher Pfusch). Zum Funktionstest reicht das 
aber erstmal.

Bekomme derzeit Werte um die (int) 225, bei anhauchen sinkt der Wert auf 
rund (int) 210-215; dürfte vor allem erhöhter Luftfeuchte anzulasten 
sein. Scheint also zu klappen!

Folgende Verdrahtung (auf dem Foto ist da noch ein kleiner Fehler ;) ):
- Heizung GND an GND.
- Heizung Vcc via 75 Ohm an PinD2.
- Sensor 1 an PinC0 (Analog 0), Pulldown 32kOhm (fiel mir heute morgen 
grad in die Finger).
- Sensor 2 an +5V.

Folgendes Miniprogrämmchen nutze ich grad zur Anzeige der Werte:
#define heater 0b00000100  // Heater VCC on D2 (PinD2)
#define sensor 0b00000001  // Sensor VCC/Input on A0 (PinC0)


void setup() {
  Serial.begin(115200);
  DDRD |= heater;  // Heater is OUTPUT
  PORTD &= ~(heater);  // Heater is OFF
  DDRC &= ~(sensor);  // Sensor is INPUT
}

void loop() {
  Serial.print("> ");
  PORTD |= heater; // turn on heating (connected with 75 Ohm resistor)
  delay(20);
  PORTD &= ~(heater); // turn off heating
  delay(180);
  int sensor_val = analogRead(sensor);
  Serial.println(sensor_val);
  delay(800);
}

: Bearbeitet durch User
von Dirk K. (dekoepi)


Bewertung
0 lesenswert
nicht lesenswert
Gegentest zum Anhauchen mit Herumwedeln eines 
Isopropylalkohol-getränkten Taschentuchs liefert Werte bis (int)250 und 
mehr, also bin ich auf dem richtigen Dampfer.
10 ms Aufheizen und 90 ms abwarten bis zur Messung scheinen auch zu 
reichen. Damit wäre das wirklich einigermaßen stromsparend. Muss bei 
Gelegenheit mal prüfen, was der Sensor ohne Heizung an Leistung zieht. 
Das wirkt aber wie geeignet für CR2032-getriebenen ATtiny85 (oder sogar 
nur ATtiny13), der bei schlechter Luft einen Piezopiepser anstößt :)

: Bearbeitet durch User
von Dirk K. (dekoepi)


Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Nach etwas Herumtesten scheint es, dass ich den Sensor tatsächlich 
korrekt bediene. Das angehängte ".c"-Programm ist direkt aus der 
Arduino-IDE rauskopiert, für eine richtige IDE sind also noch 
Korrekturen nötig.

Die 15 Minuten, die der Sensor Quatsch anzeigt, habe ich heute morgen 
mal mitprotokolliert. Da heizt er eigentlich nur auf und "verbrennt" im 
Wesentlichen alle Rückstände, die sich über Nacht angesammelt haben. Ich 
habe gestern auch mal tagsüber mitprotokolliert (habe die Ausgabe für 
LogView angepasst, im Anhang eine OpenFormat-.ini-Datei für LogView), 
wie das hier im Büro so aussah. Viel offenes Fenster ;) Heute sind die 
Werte wieder schlüssiger.

Vielleicht mag ja auch noch jemand damit Herumspielen. Es ist einfacher 
als vermutet :) Hier noch Bewegtbilder von dem Dingen in Aktion: 
Youtube-Video "16.06.2014 VOC Sensor on Arduino"

: Bearbeitet durch User
von Projekt-Gruppe (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Hallo Dirk,

wir versuchen gerade eben auch deinen Funktionsaufbau zu realisieren. 
Haben dazu aber noch eine kurze Frage: Die Heizung Vcc via 75 Ohm an 
PinD2 sind in deinem Fall die 3,3V oder?

von Dirk K. (dekoepi)


Bewertung
0 lesenswert
nicht lesenswert
Arduino läuft mit 5V; den 3,3V-Anschluss habe ich nicht genutzt. Zudem 
geht die Heizung dort auf GND; an Pin D2 ist Heizung dann an bei setzen 
auf HIGH.

Bei 3,3V hatte ich irgendwas von 15 Ohm grob errechnet.
Mach das aber einfach per PWM, also einfach über rund 20ms jeweils 1ms 
an, 1ms aus.

von Rudolph (Gast)


Bewertung
0 lesenswert
nicht lesenswert

von Projekt-Gruppe (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Hallo Dirk,

wir sind jetzt auch soweit jetzt versuchen wir gerade deinen code von 
hier:
http://pastebin.com/RVVtzSSh
in C zu übersetzen. Haben dabei gerade aber noch paar Probleme, da wir 
nicht viel Erfahrung mit Programmieren haben. Kannst du uns einen Ansatz 
zeigen wie wir es in C Programmieren könnten.
Vielen Dank für die Hilfe!

von Dirk K. (dekoepi)


Bewertung
0 lesenswert
nicht lesenswert
Das Einfachst-Programm da oben kompiliert direkt in der Arduino-GUI 
1.5r2.
Der Pastebin-Code auch. Einfach reinkopieren, Board wählen, Prozessor 
wählen, fertig.

"In C" ist etwas - gelinde gesagt - schwammig formuliert. Mein Code dort 
ist C. Er nutzt nur die Ardiuno-Klassenbibliothek. Der Pastebin-Code ist 
davon so gut wie frei, da fehlen aber noch #include-Dateien. Auf Anhieb 
fallen mir da

#include <stdio.h>
#include <stdint.h>

... und sicherlich noch irgendwelche #include <avrXYZ.h>

für die Registerdefinitionen ein. Da ich aber hier auf der Arbeit meine 
"Plain C"-Entwicklungsumgebung nicht habe, kann ich da grad nicht 
nachgucken, welche includes das wohl wären.

Ich kenne zudem eure Toolchain nicht.

: Bearbeitet durch User
von flora (Gast)


Bewertung
0 lesenswert
nicht lesenswert
HI dekoepi,

danke für deine Anleitung.

Ich versuche anhand diese Anleitung meine Schaltung zu bauen 
http://www.heise.de/make/artikel/Wider-dem-Mief-2235138.html?artikelseite=3

Es steht, dass man ein 10kOhm Widerstand nehmen kann, das ist mein Fall. 
Aber die RGB LED leuchtet blau und ich bekomme keine Werte in arduino 
console. Habe ich etwas falsches gemacht?

Liebe Grüße

von flora (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Hallo dekoepi,

sind die dargestellten Werten in ppm oder in ppb?

Liebe Grüßen

von Dirk K. (dekoepi)


Bewertung
0 lesenswert
nicht lesenswert
Hallo Flora,

wie ich da geschrieben habe - der Widerstand ist willkürlich gewählt. 
10kOhm passen. Werte sollten auf jeden Fall kommen - hast du mit der 
korrekten Baudrate verbunden? Welche Version des Sketches/Programmes 
hast du genommen? Wirklich alles korrekt beschaltet? (Im Zweifel mal ein 
Foto machen.)

Die Werte sind ohne jede Einheit. Der Sensor lässt sich ohne 
Kalibrierung dafür nicht einsetzen, sondern kann dir nur grob anzeigen: 
Viel, mittel, wenig VOCs.

Du kannst selber die Schwellwerte anpassen, indem du bei der Messung den 
Sensor mal Isopropyl-Dämpfen (zB Händedesinfektion) oder Ethanol 
zuwedelst. damit kommst du an den oberen Grenzwert; damit lässt sich 
dann ein sinnvoller Wertebereich definieren. EInfach über längere Zeit 
laufen lassen und selber einschätzen - ja, jetzt könnte mal Frischluft 
fällig sein, was zeigt der Sensor an? :)

: Bearbeitet durch User
von smuk (Gast)


Bewertung
0 lesenswert
nicht lesenswert
MoinMoin

leider scheint es das Air Wick ding nicht mehr zu geben. Habt ihr ne 
Idee wo man entweder noch einen bekommt oder eine Alternative?

vg Smuk

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.