Der Regensensor ist Teil des Rasenmäher-Projekts. Nasser Rasen lässt sich nicht gut mähen. Außerdem besteht das Risiko in eine Pfütze zu geraten.
Das Messprinzip
Ein kapazitiver Sensor ist zwingende Voraussetzung. Alle anderen Systeme lassen sich mit DIY-Mitteln kaum realisieren. Optische Sensoren, die auf Refelxionsänderungen beruhen, sind mechanisch/optisch aufwendig zu bauen. Ohmsche Sensoren, die auf Leitfähigkeitsänderungen beruhen, müssen wegen des direkten Kontakts mit der Umwelt passend aufwändig beschichtet werden, um der Korrision widerstehen zu können. Kapazitive Sensoren sind einfach zu bauen und zu isolieren.
Die Größe der Kapazität eines Kondensators hängt im Wesentlichen von seiner Oberflächengröße und dem umgebenden Dielektrikum ab. Die Dielektrizitätskonstante von Luft (1,0) unterscheidet sich deutlich von der von Wasser (80-88). Ein in Wasser getauchter Kondensator wird eine rund 80-fache Kapazität aufweisen. Wenn der Kondensator bei Regen nur teilweise benetzt ist, sollte die Kondensatorkapazität ein Maß für die Benetzung und damit für die Regenstärke sein.
Die aktuelle Kapazität kann anhand der Ladedauer eines vorher entladenen Kondensators gemessen werden. Dies geschieht mit Hilfe eines Mikroprozessors.
Da das Ergebnis per I²C ausgelesen werden soll, also µC o.ä. benötigt wird, ist es am einfachsten, auch die Kapazitätsmessung mit dem µC durchzuführen. Die AVRs besitzen einen internen Komparator, der hierzu genutzt werden kann.
Über den nicht-invertierenden (positiven) Eingang des Komparators wird die Zeit gemessen, die bis zum Erreichen der Referenzspannung des vorher entladenen Kondensators benötigt wird. Die Referenzspannung liegt am invertierenden (negativen) Eingang an. Überschreitet die Kondensatorspannung die Referenzspannung kippt der Ausgang des Komparators.
Der Sensor
Für den Kondensator ist es am einfachsten, eine kammartige Struktur auf eine Leiterplatte zu ätzen. Das kammartige ineinander greifen der beiden Pole bewirkt eine genügend große Oberfläche. Mein Exemplar besitzt bei eine Abmessung von 3x5 cm² eine Kapazität in Lauft von ca. 30 pF. Die Leiterbahnbreite besitzt knapp 1 mm. Engere Bahnen ergäben zwar eine höhere Kapazität und wären empfindlicher für kleine Tropfen, beinhalten aber auch das Risiko, dass die Herstellung wegen Fehlern bei der Übertragung des Musters und der Ätzung mehrere Versuche benötigt. Das wollte ich nicht, da die Empfindlichkeit für den angegeben Zweck ausreichend ist. Nach dem Ätzen und Anlöten eines Steckers wurde die Oberfläche zweifach mit Plastikspray besprüht. Diese Lackschicht dient als zum einen als Isolator und verhindert zum anderen die Korrosion. Die Schablone habe ich mit Hilfe eines Excel-Sheet entworfen (download Excel-Sheet oder PDF).
So sieht es fertig aus:
Je nach konkreter Anwendung macht es ggf. Sinn die Ableitung in der Mitte oder doppelt an beiden Rändern zu platzieren.
Die Elektronik
Der I²C-Slave soll nach altbewährter Methode über die USI eines AVR abgewickelt werden. Da beim ATtiny 45 SDA und AIN0 auf einem gemeinsamen PIN herausgeführt wird, ist dieser Chip nicht geeignet. Der nächst größere in meiner Baselkiste war ein ATtiny 44.
Die Kapazitätsmessung erfolgt, wie oben beschrieben, über die Messung der Ladedauer. Damit die Ladedauer nicht zu klein wird, wird mit einem 1 MΩ geladen (R3). Die Zeitkonstante (2·π·R·C) ist dann etwa 0,2 ms, bei 8 MHz Takt also gut auszulesen. Der nicht-invertierende Eingang des Komparators (AIN0) dient zur Messung der Kondensatorspannung. Zum Entladen des Kondensators wird er kurzfristig als Ausgang geschaltet.
Der invertierende Eingang (AIN1) wird über einen Spannungsteiler (R1, R2) auf etwa 4 Volt als
Referenz gelegt.
Das fertige Board: ...und zusammengesteckt:
(Die Abb. zeigt eine vorhergehende Version. Die Ableitung des Reset-Pins ist noch nicht vorhanden.)
Die Software
Die Software ist recht einfach. AIN0 wird als Ausgang geschaltet. Standardmäßig liegt dieser auf Low. Der Kondensator wird entladen. Nach einer kurzen Zeit wird der Eingang wieder als Input geschaltet. Der Kondensator wird nun geladen. In einer simplen Schleife wird ein Zähler solange erhöht bis die Referenzspannung erreicht wird. Der Komparator-Ausgang liegt dann auf High.
#define OUTPORT PORTB #define OUTPIN PB0 int main(void) { uint16_t cnt = 0; // Zähler zur Messung der Ladedauer des Kondensators ... while(1) { DDR(OUTPORT) |= _BV(OUTPIN); // entladen _delay_ms(10); // warten bis Kondensator sicher entladen ist cnt = 0; DDR(OUTPORT) &= ~_BV(OUTPIN); // laden while(!(ACSR & _BV(ACO))) // zählt bei trockenem Sensor bis etwa 250. Bei nassem bis über 400. cnt++; // hier kann cnt verwertet werden ... _delay_ms(200); } }Der Schleifenwert muss noch ein wenig angepasst werden, damit das Ergebnis in ein Byte passt. Das macht die I²C-Übertragung besonders einfach.
Die Montage
Hier ist noch einiges offen. Insbesondere gilt es, Überlegungen zum Winkel zur Horizontalen anzustellen.