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
Zum strom-sparen wird immer nur kurzzeitig gemessen. Die Aufheizzeiten sind bei solchen Sensoren meist relativ kurz.
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?
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
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:
1 | #define heater 0b00000100 // Heater VCC on D2 (PinD2)
|
2 | #define sensor 0b00000001 // Sensor VCC/Input on A0 (PinC0)
|
3 | |
4 | |
5 | void setup() { |
6 | Serial.begin(115200); |
7 | DDRD |= heater; // Heater is OUTPUT |
8 | PORTD &= ~(heater); // Heater is OFF |
9 | DDRC &= ~(sensor); // Sensor is INPUT |
10 | }
|
11 | |
12 | void loop() { |
13 | Serial.print("> "); |
14 | PORTD |= heater; // turn on heating (connected with 75 Ohm resistor) |
15 | delay(20); |
16 | PORTD &= ~(heater); // turn off heating |
17 | delay(180); |
18 | int sensor_val = analogRead(sensor); |
19 | Serial.println(sensor_val); |
20 | delay(800); |
21 | }
|
:
Bearbeitet durch User
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
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: http://youtu.be/7umR9nnQQuo
:
Bearbeitet durch User
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?
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.
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!
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
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
Hallo dekoepi, sind die dargestellten Werten in ppm oder in ppb? Liebe Grüßen
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
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
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.