E-Privacy-Richtlinie 2009/136/EG
Cookies erleichtern die Bereitstellung unserer Dienste. Mit der Nutzung unserer Dienste erklären Sie sich damit einverstanden, dass wir Cookies verwenden.
x
Kapazitiver Feuchtigkeits- und Temperatursensor mit I2C Interface und Schaltausgang

Artikelnummer: 7316

Kapazitiver Feuchtigkeits- und Temperatursensor mit I2C Interface und Schaltausgang

Kategorie: Umwelt


8,49 €

inkl. 19% USt., versandfreie Lieferung

sofort verfügbar

Lieferzeit: 2 - 4 Werktage

Stk.


Beschreibung

Kapazitiver Feuchtigkeits- und Temperatursensor mit I2C Interface und Schaltausgang

Die Messung beruht auf dem Messprinzip des kapazitiven elektrischen Feldes. Die Temperatur wird über einen THT Widerstand, der knapp über dem Boden (bei eingestochenen Modul) liegt, gemessen. Über die I2C-Schnittstelle  können die Daten ausgelesen werden.

Eigenschaften:

  • ATtiny441 7,37MHz
  • I2C Schnittstelle
  • Standard Adresse des Moduls 0x71 die Adresse ist Softwareseitig änderbar
  • ISP Header rausgeführt
  • Schaltausgang bis 60V 360mA (Mosfet 2N7002P)
  • Schaltausgang per I2C programmierbar (default: An bei 30% Aus bei 90%)
  • Feuchtigkeit per I2C einstellbar Low Level/High Level
  • Automatische einstellung des Maximalen Feuchtegrades
  • Spannungsversorgung 3.3Volt bis 5Volt
  • Stromaufnahme Messung  ~5mA
  • Größe ca. 20x130mm

 

Register

SENSOR_GET_CAPACITANCE_PROZ 0x00 // (r) 2 bytes
SENSOR_GET_CAPACITANCE 0x01 // (r) 2 bytes
SENSOR_SET_ADDRESS 0x02 // (w) 1 byte
SENSOR_GET_ADDRESS 0x03 // (r) 1 byte
SENSOR_SET_CALIBRATE_HIGH 0x04 // (w) 1 bytes
SENSOR_GET_CALIBRATE_HIGH 0x05 // (r) 2 bytes
SENSOR_SET_CALIBRATE_LOW 0x06 // (w) 2 bytes
SENSOR_GET_CALIBRATE_LOW 0x07 // (r) 2 bytes
SENSOR_GET_TEMPERATURE 0x08 // (r) 2 bytes
SENSOR_SET_ALARM_ON 0x09 // (w) 1 byte
SENSOR_GET_ALARM_ON 0x0A // (r) 1 byte
SENSOR_SET_ALARM_OFF 0x0B // (w) 1 byte
SENSOR_GET_ALARM_OFF 0x0C // (r) 1 byte
SENSOR_RESET 0x0D // (w) n/a Ab Firmware 20 löscht dieser Parameter die kalibrierten Werte und überschreibt diese mit den Standardwerten.
für CalibrateLow 450 und CalibrateHigh 750
SENSOR_GET_VERSION 0x0E // (r) 1 bytes
SENSOR_GET_VCC 0x0F // (r) 2 bytes
SENSOR_GET_SW 0x10 // (r) 1 bytes

Arduino Bibliothek I2C Interface Befehle

  • unsigned int getCapacitance();
  • unsigned int getCapacitanceProz();
  • unsigned int getVCC();
  • bool setCalibrateHigh();
  • unsigned int getCalibrateHigh();
  • bool setCalibrateLow();
  • unsigned int getCalibrateLow();
  • int getTemperature();
  • bool setAddress(int addr, bool reset);
  • uint8_t getAddress();
  • changeAddress(int addr, bool wait = false);
  • bool setAlarmOn(int alarm);
  • uint8_t getAlarmOn();
  • bool setAlarmOff(int alarm);
  • uint8_t getAlarmOff();
  • restart();
  • uint8_t getVersion();        
  • uint8_t getSwitch();


Arduino Bibliothek (Update 04.03.2017) I2CSensor_std.zip

C++

#include

#include
#include

using namespace std;

int main(){
int fd, data;
fd = wiringPiI2CSetup(0x03);
printf("Init result: %d\n", fd);

unsigned char cLow;
unsigned char cHigh;
float ret = 0.0;

data = wiringPiI2CReadReg16(fd, 0x08);
cLow = data & 0xFF;
cHigh = data >> 8;

ret = (cLow | cHigh);
printf ("cLow: %ld cHigh: %ld\n", cLow, cHigh);
printf ("Result: %6.2f\n", ret / 10);
}

Kompilieren mit g++ i2ctest.cpp -lwiringPi -o i2ctest


Python

#!/usr/bin/python

import smbus

# I2C-Adresse des Sensors
address = 0x03
ftSensor = smbus.SMBus(1)

def readLong():
data = 0
cLow = 0
cHigh = 0
ret = 0.0
data = ftSensor.read_word_data(address,8)
cLow = data & 0xFF
cHigh = data >> 8
ret = float(cLow | cHigh) / 10
print 'cLow = %(cL)d cHigh = %(cH)d ret = %(ret).2f' % {
'cL': cLow,
'cH': cHigh,
'ret': ret,
}
print '%.2f Grad' % ret
return ret

number = readLong()
print '[readLong] %d' % number


ESP8266

Fügen Sie bitte in Ihrem SourceCode nach
"Wire.begin();"
noch zusätzlich
Wire.setClockStretchLimit(2000);
ein.

Code für ESP8266 NodeMCU oder ähnliche Boards

/**************************************************************
 * Anbindung des FT Sensors an ein ESP8266 NodeMCU Board
 * SCL an D1   (NodeMCU)
 * SDA an D2  (NodeMCU)
 * VCC an 3v3
 * GND an GND
 */
 
#include <I2CSensor_std.h>
#include <Wire.h>
#include <ESP8266WiFi.h>
 
bool SetAlarm = false;
 
I2CSensor sensor(0x71);
 
uint16_t CapacitanceHigh;
uint16_t CapacitanceLow;
 
void setup() {
   // Initialising the UI will init the display too.
  Wire.begin();
  Wire.setClockStretchLimit(2000);
  Serial.begin(115200);
 
  sensor.begin(); // reset sensor
  delay(2000); // give some time to boot up
 
  Serial.print("FT-Sensor Address: ");
  Serial.println(sensor.getAddress(), HEX);
 
  Serial.print("FT-Sensor Firmware version: ");
  Serial.println(sensor.getVersion(), HEX);
 
  CapacitanceLow = sensor.getCalibrateLow();
  CapacitanceHigh = sensor.getCalibrateHigh();
 
  Serial.print("FT-Sensor calibrate high: ");
  Serial.print(CapacitanceHigh, DEC);
  Serial.print(", FT-Sensor calibrate low: ");
  Serial.println(CapacitanceLow, DEC);
 
  Serial.print("FT-Sensor Alarm On: ");
  Serial.print(sensor.getAlarmOn(), DEC);
  Serial.print(" %");
  Serial.print(", FT-Sensor Alarm Off: ");
  Serial.print(sensor.getAlarmOff(), DEC);
  Serial.println(" %");
 
  Serial.println();
 
  delay(1000);
}
 
void loop() {
  float vcc = float(sensor.getVCC()) / 100;
  float temp = float(sensor.getTemperature() / (float)10);
  float capp = float(sensor.getCapacitanceProz());
  float cap = float(sensor.getCapacitance());

  Serial.print("VCC  :");  Serial.print(String(vcc)); Serial.println("V");
  Serial.print("Temp :");  Serial.print(String(temp)); Serial.println("C");
  Serial.print("Capp :");  Serial.print(String(capp)); Serial.println("%");
  Serial.print("Cap  :");  Serial.print(String(cap)); Serial.println("%");
  Serial.println();
 
  /*
  display.drawString(0, 0, "Temp: " + String(temp) + "C");
  display.drawString(0, 18, "Capp: " + String(capp) + "%\t");
  display.drawString(0, 36, "Cap: " + String(cap) + "%\t");
  display.display();
  */
 
  delay(10000);
 
}   


Raspberry PI

Die Baudrate des I2C Bus muss angepasst werden!
sudo nano /etc/modprobe.d/i2c-bcm2708.conf

folgende Zeile einfügen options i2c-bcm2708 baudrate=20000

Nun mit sudo modprobe -r i2c_bcm2708 den Treiber entladen und mit sudo modprobe i2c_bcm2708 wieder laden.

Leider kann der Raspberry kein I2C Clock Stretching daher sind hier Schwierigkeiten zu erwarten.
Eine gute Ansteuerung des I2C Bus finden Sie in diesem PDF Dokument
>>Link<< 
Das Dokument wird nicht bei jeder neuen Softwareversion neu geschrieben. Eine Übersicht der Programmfunktionen gibt der Aufruf des Programms mit dem Parameter -h aus.

Besser wäre für den Raspberry Pi die Version mit serieller Schnittstelle!


Einstellvorgang

Um den Wert für den geringsten Feuchtigkeitsgehaltes der Erde einzustellen müssen sie den Befehl setCalibrateLow(); absetzen. Anschliessend können sie die Pflanze/Erde mit Wasser befeuchten/gießen. Das Modul bemerkt den Anstieg des Feuchtigkeitsgehaltes und ermittelt automatisch den höhsten Stand der Feuchtigkeit wenn dieser höher ist als der bisherige eingestellte maximalen Wert des Feuchtigkeitsgehaltes. Wenn sie eine Automatische Gießanlage verwenden, muss der Wert von AlarmOff unbedingt niedriger als 100% sein andernfalls versucht das Modul automatisch wieder den höhsten Stand der Feuchtigkeit zu ermitteln.

Normale Werte (Blumenerde) für CalibrateLow sind ca. 450 und CalibrateHigh ca. 750.

setCalibrateLow()/getCalibrateLow()  ist der tiefste Wert der zulässigen Feuchtigkeit.
setCalibrateHigh()/getCalibrateHigh() ist der höchste Wert der Feuchtigkeit. Dieser Wert wird auch automatisch ermittelt.
getCapacitance() gibt die Differenz zwischen CalibrateLow und CalibrateHigh wieder.
getCapacitanceProz() gibt die Differenz in Prozent zwischen CalibrateLow und CalibrateHigh wieder.
Der Sensor merkt wenn der Höchste Wert (CalibrateHigh) um +10 überschritten wird und startet für 2 Minuten eine Messreihe um nach absinken der Flüssigkeit einen neuen Höchstwert zu ermitteln. Diesen speichert er dann als CalibrateHigh im EEprom.
Wenn Sie den Sensor zum Beispiel nur kurz in ein Glas Wasser halten wird keine korrekte Kalibrierung durchgeführt und die Rückgabewerte von Capacitance und CapacitanzeProz stimmen nicht.

Raspberry Pi 3 serial2mqtt

Dieses Programm nimmt von der Seriellen-Schnittstelle (zum Beispiel /dev/ttyUSB0) Strings entgegen und sendet diese an den Mosquitto Broker. Mit der bash Datei serial2mqtt.sh kann das Programm im Hintergrund gestartet werden. Die Datei serial2mqtt.sh muss per chmod 755 serial2mqtt.sh ausführbar gemacht werden und kann dann per ./serial2mqtt.sh gestartet werden.

Aufbau des Seriellen Strings

{Pflanze1/cHigh,450}{Pflanze1/Switch,0}
Vor dem Koma befindet sich der TOPIC String. Nach dem Koma der Wert für den Topic.

Mit einem Arduino UNO oder anderem Board senden sie einfach an die Serielle Schnittstelle folgendes

Serial.print("{Pflanze1/cHigh,");   Serial.print(sensor.getCalibrateHigh(), DEC);   Serial.print("}");
Serial.print("{Pflanze1/Switch,"); Serial.print(sensor.getSwitch(),DEC);               Serial.print("}");

Versandgewicht: 0,01 kg
Artikelgewicht: 0,01 kg
Inhalt: 1 Einheit

Produkt Tags