Hallo zusammen,
ich habe alles zusammengelötet und mal in einer hohen Blumenvase getestet.
Dazu habe ich mir einen Sketch (meinen ersten, nicht lachen!) gemacht, der an die serielle Konsole reported:
Code: Alles auswählen
/*
Reads voltage across 250 Ohm Resistor which is in series with 4-20mAmp Sensor
www.circuits4you.com
*/
const int sensorPin=A0;
// the setup routine runs once when you press reset:
void setup() {
// initialize serial communication at 9600 bits per second:
Serial.begin(9600);
}
// the loop routine runs over and over again forever:
void loop() {
// read the input on analog pin 0:
float sensorValue = analogRead(sensorPin);
float SensorLength = 500; // maximale Eintauch- bzw. Messtiefe in cm meines konkreten Sensors, muesste als definierbare Variable umgesetzt werden
float ResultCase; // Gemessener Inhalt in % bezogen auf maximae Fuellhoehe
float FillHeight = 130; // maximaler Füllstand in cm in meinem konkreten Fall, muesste als definierbare Variable umgesetzt werden
float CaseWidth = 157;
float Result; // Gemessener Inhalt in % bezogen auf maximale Messtiefe
float CaseLength = 412;
float ContentLiters;
float Offset = 214; //
Result = ((sensorValue-Offset)*100.0)/(1024.0-Offset); //214 is offset, 4mAmp is 0
ResultCase = Result*SensorLength/FillHeight;
ContentLiters = CaseWidth * CaseLength * FillHeight / 1000 /100 * ResultCase;
// print out the value you read:
if(Result>0)
{
Serial.print("Pin Voltage: ");
Serial.println(sensorValue);
Serial.print("Sensor Output: ");
Serial.print(Result);
Serial.println(" %");
Serial.print("bei konkreter Hoehe: ");
Serial.print(ResultCase);
Serial.println(" %");
Serial.print("In Litern: ");
Serial.print(ContentLiters);
Serial.println(" l");
}
else
{
Serial.println("Sensor Error"); //Show error if value is less than 4mAmp
}
delay(2000); // delay in between reads for stability
}
Das läuft prima und ziemlich präzise. Offset musste ich etwas höher einstellen, vielleicht liegt das daran, dass ich nur vier Batteiren dahatte (6 V) und keine Akkus (5,2 V).
Ich habe allerdings am WE viele Stunden erfolglos damit verbracht, auf dieser Basis Jeromes HB-UNI-Sen-LEV-US.ino anzupassen, aber das übersteigt meine Fähigkeiten doch um ein Vielfaches, und Tutorials oder eine Doku der AskSam-Spezifika konnte ich nicht finden. Vielleicht gibt es ja irgendwo einen ähnlichen, aber exzessiv kommentierten Sketch, an dem ich mich abarbeiten könnte? Ansonsten muss ich wohl auf eine helping hand warten
Ich denke aber, dass ich auch an der Verdrahtung etwas ändern muss.
Wenn ich es richtig verstehe, versorgt Jeromes ursprünglicher Sketch den US-Sensor über digitalWrite(SENSOR_EN_PIN, HIGH) und digitalWrite(SENSOR_EN_PIN, LOW) nur in Intervallen mit Spannung – um Batterie zu sparen?
Code: Alles auswählen
switch (this->getList1().sensorType()) {
case JSN_SR04T:
digitalWrite(SENSOR_EN_PIN, HIGH);
_delay_ms(250);
digitalWrite(SENSOR_TRIG_PIN, LOW);
delayMicroseconds(2);
digitalWrite(SENSOR_TRIG_PIN, HIGH);
delayMicroseconds(10);
digitalWrite(SENSOR_TRIG_PIN, LOW);
m_value = pulseIn(SENSOR_ECHO_PIN, HIGH, 26000);
m_value = (m_value * 1000L / 57874L);
digitalWrite(SENSOR_EN_PIN, LOW);
break;
Wenn dem so ist, sollte ich auch den Stepup (→ 24 V) nicht direkt am Batteriekasterl anschließen, sondern auch an einem 5-V-Pin des Arduino?
Standort 1: FS20 + Homematic mit CUL und FHEM (immer aktuelle Ver.) auf Raspberry Pi
Standort 2: Homematic (Wired + einige Funkmodule) über CCU2 und PocketHome HD, VCCU auf Raspberry
3 x Raspi3 mit piCorePlayer/Kodi für Multiroom Audio (+ Tablets/iPeng/iPods)