Forum: Mikrocontroller und Digitale Elektronik ATTiny45 Spannung am Pin 2 zur Feuchtigkeitsmessung nutzen


von Petr t. (vicon)


Angehängte Dateien:

Lesenswert?

Hallo liebe Community,

ich habe hier ein Problem mit meinem ATTiny45.
Ich hoffe man kann im Schaltplan alles erkennen, wenn nicht bitte fragen 
:)
Ich habe vor mit meinem ATTiny45 die Feuchtigkeit über einen Sensor zu 
messen,
In der Praxis sieht es so aus das der Feuchtigkeitssensor einen 
Widerstand hat (den der Erde im Blumentopf), dieser ist mit dem Pin 2 an 
Pin 3 verbunden, der Analog Eingang ist Pin 3, von dort geht ein 10kOhm 
Widerstand auf Masse.
Ich habe den ATTiny45 über einem Arduino Uno programmiert, andere 
Programme ohne Sensor laufen.
Im Programm läuft es so ab das am Pin 2 die Spannung ist ( pinMode(2, 
OUTPUT) )
Wenn jetzt der Widerstand vom Feuchtigkeitssensor steigt (Erde Trocken) 
soll die LED anfangen zu blinken.
Das Blinken funktioniert unabhängig vom Sensor, aber sobald ich das 
blinken vom Sensor abhäng mache geht es nicht mehr.

int led = 0;
int Voltage = 3; // 5V für Spannungsteiler Sensor
int Sensor = 4; // Analog Sensor Eingang
int threshold = 400; // MUSS ANGEPASST WERDEN!!!!!!!!!!!!!!!!!!

void setup() {
  pinMode(led, OUTPUT);
  pinMode(Voltage, OUTPUT);
}

void loop() {
  int analogValue = analogRead(Sensor);
  digitalWrite(Voltage, HIGH);
  delay(200);

  if (analogValue < threshold) {
  digitalWrite(led, HIGH);
  delay(100);
  digitalWrite(led, LOW);
  delay(100);
  digitalWrite(led, HIGH);
  delay(100);
  digitalWrite(led, LOW);
  delay(100);
  digitalWrite(led, HIGH);
  delay(100);
  digitalWrite(led, LOW);
  delay(10);

  }
  else {
   digitalWrite(Voltage, LOW);
   digitalWrite(led, LOW);
   }
  digitalWrite(Voltage, LOW);
  delay(200);


  }

Das ist der gesamte Code, ich hoffe das ihr mir helfen könnt.
Danke im voraus.

von Pastor Braune (Gast)


Lesenswert?

Led ohne Vorwiderstand ?
Feuchte messen in Blumenerde eigentlich nur mit Wechsesp. Oder Kapazitiv 
!

Such hier mal nach “gies o mat“ da geht's genau um diese Thema.

von Petr t. (vicon)


Lesenswert?

@Pastor Braune

Die LED hat einen Widerstand in meiner aufgebauten Schaltung, habe Ihn 
hier nur nicht eingezeichnet.
Die beiden Widerstände (Sensor und 10kOhm) sollen einen Spannungsteiler 
darstellen und je nachdem wie sich der Widerstand an dem Sensor ändert, 
misst man am Analog Eingang etwas anderes.
Danke für die Info.

von Jojo S. (Gast)


Lesenswert?

Petr tiom schrieb:

> int analogValue = analogRead(Sensor);
>   digitalWrite(Voltage, HIGH);

sind die Zeilen nicht vertauscht? Du versuchst bei ausgeschaltetem 
Sensor zu messen.

von Andi (Gast)


Lesenswert?

Die (trockene/ wenig feuchte) Erde hat einen relativ hohen Widerstand,
was zusammen mit den 10k Ohm- Teiler nicht funktionieren wird.
Der Eingangswiderstand des TINNY ist ebenfalls relativ niederohmig (s. 
Datenblatt). Du wirst einen Emitterfolger am Eingang benötigen, damit
das funktioniert.

von Ulrich H. (lurchi)


Lesenswert?

Je nach den Elektrode könnte der 10 K Widerstand etwas klein sein. 
Besser wäre auch eine Messung mit Wechselstrom, denn Gleichstrom kann 
über Elektrolyse die Elektroden angreifen, bzw. die Pflanzen stören. Die 
Gepulste Messung ist schon nicht so schlecht - da würde dann schon ein 
Kondensator (z.B. 100 nF) in Reihe zur Sonde (etwa am Pin 3) ausreichen 
um kleinen Gleichstrom mehr zu haben.
Der ADC Eingang ist schon recht hochohmig - je nachdem wie oft gewandelt 
wird im Bereich 1-100 MOhm, das ist nicht das Problem.

Das Hauptproblem wird die falsche Reihenfolge sein: Richtig ist es erst 
Pin3 auf High, dann ggf. kurz (Bereich 1-100 µs) warten, dann die 
AD-Wandlung und dann kann Pin 3 auch schon wieder auf Low. Mit 
Kondensator sollte die Pause bis zur nächsten Messung eher so ab 1 ms 
aufwärts sein.

Eventuell sollte man die Messung auch mehrmals machen und mitteln um 
nicht etwa durch 50 Hz Störungen falsche Werte zu bekommen.Als Anfang 
etwa 4 Werte im Abstand von je 5 ms.

von Petr t. (vicon)


Lesenswert?

Hallo,
danke das ihr so Zahlreich geantwortet habt.
@Jojo S.
Ich habe die beiden Zeilen ausgetauscht, hat aber zu keiner Änderung 
geführt.

@Andy
Ich habe diese Seite gefunden wo es mit einem 10kOhm Widerstand gemacht 
wurde.
http://arduinodiy.wordpress.com/2012/02/24/attiny-for-your-garden/

@Ulrich H.
Das ganze wird mit einem kleinen Akku betrieben und Platzmäßig ist da 
auch nicht sonderlich viel. Ich habe, um die Pflanze vor der Elektrolyse 
zu schützen, im Programm das so festgelegt das der Pin 2 immer auf Low 
ist und keine Spannung hat, erst beim prüfen soll die Spannung 
zugeschaltet werden und über Pin 3 gemessen werden.
Wie du es aufgeschrieben hast hört sich dein Ansatz interessant an, 
könntest du ihn hier zeigen wie du es vom aufbau (Bildlich) mach 
würdest?
Danke.

von Ulrich H. (lurchi)


Lesenswert?

Ob der 10 K Widerstand passt, hängt vom Abstand und der Größe der 
Elektroden ab. Es könnte ggf. etwas mehr sein. Bis etwa 100 K sollte das 
auch für den ADC noch kein Problem sein.

Wenn man nur relativ selten und kurz misst (etwa jede Stunde 1 Messung 
mit vielleicht 4 Pulsen zu je 100 µs), sollte sich das mit der 
Elekrolyse auch noch in Grenzen halten. Wenn man will könnte man halt 
noch einen Kondensator (100 nF gibt es auch als SMD Bauform 0402, wenn 
es sein muss - da braucht man schon fast eine Lupe) in Reihe zu den 
Elektroden haben, wenn man gepulst misst - es sollte aber auch ohne 
gehen.

Ob man den Pin 2 in der nicht aktiven Zeit auf GND oder weiter als 
Eingang lässt hat da wenig Einfluss. Das ist eher eine Frage wie 
empfindlich die Schaltung auf Störungen und ESD (elektrostatische 
Entladungen, wenn etwa jemand dem Blumentopf anfasst) reagiert. Da wäre 
ein schalten auf GND vermutlich sicherer, wenn auch noch nicht perfekt.

Die wichtigste Änderung wäre aber das Programm, damit der zeitliche 
Ablauf passt.
So wird es relativ schwierig die richtige Schwelle zu finden. Für die 
ersten Tests sollte man die Messwerte irgendwie Ausgeben - etwa per UART 
an den PC, notfalls auch ins EEPROM Schreiben, und dann per ISP 
auslesen. Zum Stromsparen sollte man die entsprechenden Modes des µC 
nutzen, denn die meiste Zeit wird der nichts zu tun haben.

von Petr t. (vicon)


Lesenswert?

@Ulrich H.
Danke für deine Hinweise.
Ich hatte das ganze mit meinem Arduino Uno bereits am laufen gehabt.
Da hat es funktioniert.
Hier ein Foto von dem Feuchtigkeitssensor, genau den gleichen habe ich
http://i.bosity.com/office_cache/261/14008331/220000011383903644_14008331_4_image.jpg
Wegen ESD mache ich mir keine Gedanken, es hat nichts kritisches an der 
Stelle wo der Sensor benutzt wird.
Der Akku hat 180mAh und wird tagsüber mit Solar geladen.
Ich möchte nicht sonderlich mit Impulsen arbeiten, sondern ca. 5 
Sekunden Spannung an den Sensor anliegen lassen, dann die Spannung am 
Analog Eingang messen und die Spannung abschalten.

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
Noch kein Account? Hier anmelden.