Mit einem Pro Mini (3,3V / 8Mhz) sollen 4 Bodenfeuchte Sensoren ausgelesen werden.
Es handelt sich um kapazitive Sensoren - die Ansteuerung der jeweiligen Sensoren entspricht folgender Schaltung : Hier
Sofern ich das verstanden habe, gibt es am Pro Mini nur einen Pin, der Frequenzen messen (eigentlich zählen?) kann: Pin 5.
Meine Überlegung:
Die 4 Sensoren werden nach der Reihe mit Spannung versorgt, bleigen kurz eingeschalten, Pin 5 misst die jeweilige Frequenz und anschließend geht der gemessene Pin wieder auf LOW und der nächste Sensor wird angesprochen. Soweit die Theorie..
Der Code
#include <FreqCounter.h>
//Sensors
#define Moist_Input 5
const int Moist_Sens[] = {6,4,3,2};
long int measure_tmp;
long int measure[4];
short int i;
void setup() {
Serial.begin(9600);
Serial.println("Frequency Counter");
i=0;
}
long int frq;
void loop() {
for(int i=0;i<=3;i++){
pinMode(Moist_Sens[i], OUTPUT);
digitalWrite(Moist_Sens[i], HIGH);
delay(10);
FreqCounter::f_comp= 8;
FreqCounter::start(100);
while (FreqCounter::f_ready == 0)
measure[i] =FreqCounter::f_freq;
delay(500);
digitalWrite(Moist_Sens[i], LOW);
}
for (int i=0;i<=3;i++){
String str1 = "Sensor" + i;
String str2 = str1 + i;
String str3 = str2 + "= ";
Serial.println(str3 + measure[i]);
}
}
Leider funktioniert das nicht, der gemessene Wert der Sensoren bliebt 0. Entferne ich jedoch die for-Schleife im Messzyklus und ersetze das "i" durch einen fixen Wert ( also nur 1 Sensor), funktionierts.
Anscheinend geht sich da irgendetwas zeitlich nicht aus.?
Hoffe jemand von euch kann meinen Fehler entdecken.
Du nutzt die Arduino Pins als Spannungsversorgung für die Schmitt-Trigger. Das ist absolute Sch... auf deutsch gesagt.
Du müßtest die zu messenden Signale mit jeweils einem UND Gatter zum Meßeingang Pin 5 gezielt freischalten/durchlassen. Die Schmitt-Trigger versorgst du ganz normal dauerhaft mit (+).
Und dann musst du bestimmt noch eine Anpassung vornehmen, weil ich davon ausgehe das die Lib einen 16MHz µC erwartet, deiner aber nur mit 8MHz taktet. Dein Ergebnis sollte nicht dem entsprechen was zu erwarten wäre.
Hoffe jemand von euch kann meinen Fehler entdecken.
Da du ja offensichtlich mit deinem Verfahren auf den Hammer gelaufen bist....
Und auch die Diagnostischen Methodiken, naja, noch nicht hinreichend weit entwickelt sind....
Kann ich ja mal einen Alternativvorschlag machen:
Nicht die Frequenz messen, sondern mit pulseIn() die Pulsweite.
Denn PulseIn() tuts mit jedem Pin!?!
bitte um Verständnis. Bin totaler Anfänger und taste mich an die Thematik im Trial & Error verfahren heran.
Dass die Sache etwas holprig ist und vor Unwissenheit förmlich stinkt, war mir bewusst.
Also Danke erstmal für die Hilfe!
@Doc_Arduino
War ja auch eigentlich der Plan, sämtliche Schmitttrigger ständig mit + zu versorgen und dann die Signale durchzuschalten. Dachte mir nur das geht mit den Pins als Spannungsversorgung einfacher.
Werde mir die Sache mit dem UND-Gatter noch genauer ansehen.
@combie
das mit PulseIn() haut leider nicht hin, bzw ist das Ergebnis nicht auswertbar.
Werde nun mal versuchen mit Hilfe von Transistoren und den I/0 Pins den jeweiligen Messwert durchzuschalten.
@combie
das mit PulseIn() haut leider nicht hin, bzw ist das Ergebnis nicht auswertbar.
Aha...
Über welche Frequenzen reden wir hier?
Nachtrag:
Mein UNO, mit 16MHz tuts auch bei 100kHz noch ganz gut, siehe Anhang.
Links siehst du die Frequenzangabe meines Oszis, rechts den Seriellen Monitor des Arduinos.
Das gemessene Signal kommt aus einem Funktionsgenerator.
Dann tuts dein 8MHz Dingen sicherlich noch bis 50kHz