ferdinandkeil.com

Archive for the ‘sensor’ tag

Drahtloser Temperatur- und Luftfeuchtesensor mit dem ESP8266

without comments

20150629_224111-600

Über den ESP8266 der chinesischen Firma Espressif ist ja schon an vielen Stellen berichtet worden, aber hier nochmal die Kurzfassung: für ca. 3,– € bringen die verschiedenen ESP8266-Platinen einen Mikrocontroller mit WLAN-Schnittstelle, mehrere MB Flash und diverse Schnittstellen mit. Der Mikrocontroller kann mit eigenen Programmen beschrieben werden und damit eigene Projekte an das Internet anbinden.

Ich habe vor Kurzem ein ESP12-Modul mit passender Adapterplatine geschenkt bekommen. Als ersten Versuch mit diesem neuen Modul habe ich einen drahtlosen Temperatur- und Luftfeuchtesensor gebaut. Als Sensor habe ich den günstigen DHT11 verwendet. Dazu noch ein 3,3 V Linearregler und eine Spannungsquelle – das war’s. Das Programm habe ich in Lua geschrieben und mittels dem genialen NodeMCU Projekt auf dem ESP8266 laufen lassen. Dabei habe ich auf Code von Martin Han aufgebaut.

Der Code setzt die dht_lib ein um den Sensor auszulesen. Diese liegt im Repository von NodeMCU und muss mit auf den ESP8266 hochgeladen werden. Für den Upload des Programms habe ich ein günstiges USB-zu-seriell Modul und den ESPlorer von 4refr0nt benutzt.

-- ***************************************************************************
-- Drahtloser Temperatur- und Luftfeuchtesensor
--
-- von Ferdinand Keil
-- basierend auf Code von Martin Han
--
-- Public Domain
-- ***************************************************************************
--==================================================================
-- HTML Template
--==================================================================
CSS_Sheet=[[<html>
<head>
<meta http-equiv="refresh" content="2">
<style type="text/css">
#sensor {
  font-family:"Trebuchet MS", Arial, Helvetica, sans-serif;
  width:800px;
  border-collapse:collapse;
}
#sensor td, #sensor th {
  font-size:1em;
  border:1px solid #98bf21;
  padding:3px 7px 2px 7px;
}
#sensor th {
  font-size:1.1em;
  text-align:left;
  padding-top:5px;
  padding-bottom:4px;
  background-color:#A7C942;
  color:#ffffff;
}
#sensor tr.alt td {
  color:#000000;
  background-color:#EAF2D3;
}
</style>
</head>
<body>
<table id="sensor">
<tr>
<th>Input Source</th>
<th>Temperature</th>
<th>Humidity</th>
</tr>
<tr>
<td>DHT Temp&Humi Sensor</td>
<td>]]
CSS_2=[[ deg C</td>
<td>]]
CSS_3=[[ %</td>
</tr>
</table>
</body>
</html>
]]
--==================================================================
-- Hauptprogramm
--==================================================================
pin = 4 -- Pin mit dem der DHT11 verbunden ist
wifi.setmode(wifi.STATION)
wifi.sta.config("SSID","PASSWORD") -- WLAN Zugangsdaten
wifi.sta.connect()
dht = require("dht_lib")
humi = "Fehler"
temp = "Fehler"
-- Server starten wenn Verbindung steht
tmr.alarm(0,1000,1, function()
  if wifi.sta.getip() ~= nil then
    tmr.stop(0)
    print("NodeMcu's IP Address:"..wifi.sta.getip())
    srv=net.createServer(net.TCP, 10)
    srv:listen(80,function(conn)
      conn:on("receive",function(conn,payload)
        payload = nil
        print("Got request")
        conn:send("HTTP/1.0 200 OK\r\nServer: nodemcu-httpserver\r\nContent-Type: text/html\r\nConnection: close\r\n\r\n")
        conn:send(CSS_Sheet..temp..CSS_2..humi..CSS_3)
        conn:close()
      end)
    end)
  end
end)
-- regelmäßig den Sensor abfragen
tmr.alarm(1,1000,1, function()
  repeat
    dht.read(pin)
    tmr.wdclr()
  until dht.getHumidity() ~= nil
  temp = dht.getTemperature()/10
  humi = dht.getHumidity()/10
  print("Temperature: "..temp.." deg C, Humidity: "..humi.." %relH")
end)

Sobald sich das Modul mit dem WLAN verbunden hat können die Messwerte über einen Browser angezeigt werden. Dazu muss nur die IP-Adresse die dem Modul zugewiesen wurde aufgerufen werden. Sie Ausgabe sieht dann in etwa so aus:

browser_esp8266_dht11-600

Written by Ferdinand

Juli 1st, 2015 at 21:47

Ändern der I2C Adresse eines HYT-131 Sensors

with 4 comments

Auf der Suche nach genauen und günstigen Sensoren für meine Humidor Steuerung bin ich auf den HYT-131 von B+B Sensors aufmerksam geworden. Für knapp 20 Euro inkl. MwSt. bekommt man einen maximal ±2,0%relF genauen, kombinierten Temperatur- und Feuchtigkeitssensor. Das ist deutlich günstiger als der Sensirion SHT15 mit vergleichbaren Werten. Ein weiterer Vorteil des Sensors ist, dass er über ein Standard I²C-Interface kommuniziert.
Der I²C-Bus unterstützt bis zu 112 Geräte, vorausgesetzt diese haben unterschiedliche Adressen. Das Datenblatt des HYT-131 erwähnt zwar die Möglichkeit die voreingestellte Adresse zu ändern, erläutert aber nicht wie. Über einen Beitrag im Raspberry Pi Forum wurde ich dann darauf aufmerksam, dass der HYT-131 genauso wie der HYT-221 und HYT-271 auf einem IC von ZMDI basieren. Der IC heißt ZSSC3122, das Datenblatt habe ich angehängt. Im Datenblatt zu diesem IC finden sich allerhand Informationen, darunter wie die I²C-Adresse geändert werden kann. Der Ablauf ist wie folgt:

  1. Sobald der Sensor mit der Versorgungsspannung verbunden wurde muss innerhalb von 3-10 ms (abhängig von der internen Konfiguration) ein Befehl gesendet werden um in den Command Mode zu gelangen.
  2. In diesem Modus kann der interne EEPROM beschrieben werden, wobei die I²C-Adresse im Register Cust_Config hinterlegt ist.

Um diesen Vorgang automatisch und zuverlässig durchführen zu können habe ich eine Arduino Sketch geschrieben. Die bisherige (default 0x28) und neue Adresse werden über defines angegeben. Der Sensor wird mit dem Arduino verbunden und dieser mit der Sketch programmiert. Dann muss nur noch der Serielle Monitor gestartet und ein beliebiges Zeichen gesendet werden um den Prozess zu starten.
Bei den Sensoren die mir von B+B Sensors geliefert worden sind war das Comm_lock Flag im Register ZMDI_Config nicht gesetzt. Dadurch antwortet der Sensor auf allen I²C-Adressen. Die Sketch setzt dieses Flag, da sonst nicht getestet werden kann ob die Änderung der Adresse erfolgreich war. Mit der enthaltenen Funktion changeCommLock(...) kann diese Änderung aber auch wieder rückgängig gemacht werden.

Hinweis: Falls ein Fehler auftritt ist der Sensor unter Umständen weder unter seiner alten noch unter der neuen Adresse ansprechbar. In diesem Fall hilft es den gesamten I²C-Adressraum zu durchlaufen und auf Geräte zu prüfen.

page_white_acrobat ZSSC3122_cLite_Data_Sheet_rev_1_30

Download Icon hyt131_i2c_addr_change_release

Written by Ferdinand

April 1st, 2013 at 12:23

Humidor Steuerung – ein Hygrostat für die Zigarrenlagerung

with one comment

Vor mittlerweile fast drei Jahren habe ich auf dieser Seite die Schaltung für meinen Humidor Lüfter veröffentlicht. Die Schaltung entstand aus der Idee, die Luft im Humidor regelmäßig umzuwälzen um eine möglichst gleichmäßige Feuchtigkeitsverteilung zu erreichen. Die Schaltung funktioniert bis heute ohne Probleme – nachdem ich sie um eine Batterieüberwachung erweitert habe macht sie auch keine Akkus mehr kaputt. Aus der gleichen Zeit stammte die Idee ein digitales Hygrometer für die Zigarrenlagerung zu entwerfen.

IMG_0016-1600
Die erste Version der Humidor Steuerung

Die Idee blieb in der Planungsphase stecken, bis ich mir Anfang 2012 endlich einen Ruck gab das Ganze umzusetzen (auch bedingt durch den Fund passender LC-Displays in meiner Teile-Kiste). Daraus entstand die erste Version der Humidor Steuerung. Bei Jakob Kleinen’s Sammelbestellung im mikrocontroller.net Forum ließ ich zwei Platinen fertigen und baute sie anschließend auf. Bis auf einen kleinen Fehler bei der Beschaltung des Drehgebers lief die Steuerung ohne Problem. Aus einem Testprogramm entwickelte sich die Firmware mit allen nötigen Features. Meine Ergebnisse veröffentlichte ich im Zigarrenforum. Die positiven Kommentare dort ermutigten mich schließlich eine zweite, verbesserte Version zu entwerfen. Die möchte ich nun hier vorstellen.

humidor_controller_top 20121028_215039
Die neue, verbesserte Version

Die Steuerung ist letztlich ein Hygrostat mit integrierter Zeitschaltuhr um handelsübliche PC-Lüfter anzusteuern. Insgesamt stehen vier Lüfter-Kanäle zur Verfügung die unabhängig voneinander programmiert werden können. An den Sensor Anschluss können verschiedene Sensor-Typen angeschlossen werden, die Firmware erkennt den richtigen Typ dann automatisch. Nicht auf dem Bild zu sehen (weil auf der Rückseite) ist ein Summer, der bei unterschreiten einer eingestellten Feuchtigkeit Alarm gibt. Außerdem ist eine Alarm-LED integriert, die durch das Loch über dem Glock-Symbol scheint.

humidor_controller_v35_sch detail_luefter_kanal
Schaltplan und Beschaltung eines Lüfter-Kanals

Die Lüfter-Kanäle sind alle identisch aufgebaut. Der Summer ist an die 12V Versorgungsspannung angeschlossen und wird ähnlich wie die Lüfter geschaltet. Jeder Kanal verfügt über einen N-Kanal Schalt-MOSFET im SOT-23 Package. Mögliche Typen sind z.B. der IRLML2502 oder GF2304. Jeder Kanal kann mit mindestens 500mA belastet werden, damit kann die Schaltung nahezu alle erhältlichen Lüfter betreiben.
Zum Schutz des MOSFETs und zur Entstörung der Schaltung sind dem Lüfter eine Schutzdiode und eine Kondensator parallel geschaltet.

Die Steuerung kann über USB mit einer neuen Firmware geflasht werden. Dazu wurde der verbaute ATmega168 mit dem USBaspLoader programmiert. Um den Bootloader zu aktivieren muss der Drehgeber gedrückt werden wenn die Schaltung mit der Spannungsversorgung verbunden wird.

Die fertige Schaltung sitzt in einem Standard-Gehäuse wie eine Frontplatte. Es muss nur ein Loch für die Hohlstecker-Buchse gebohrt werden, die auf der Rückseite der Platine angeschlossen wird.

Das verwendete Display HMC16223SG ist leider nicht mehr erhältlich. Aufgrund seiner kleinen Abmessungen ist es perfekt für ein kompaktes Gerät geeignet. Einen adäquaten Ersatz konnte ich bisher nicht finden, die nächste Version wird wohl ein anderes Display verwenden.

Die Firmware für die Steuerung basiert auf meinem Taskmanager. Sie ist so weit wie möglich modular aufgebaut. Es wurde auch ein Menü-System verwendet, das auf dem Code des Butterfly GCC-Ports aufbaut.
Die Firmware um Funktionen für weitere Lüfterkanäle oder mehrere Sensoren zu erweitern, sollte kein Problem sein. Die aktuelle Firmware verbraucht ~10,5kB Flash, der Bootloader 4kB – es ist also noch Platz für Erweiterungen. Alternativ kann ein ATmega328 verbaut werden.

sensor_board_v10 20130320_133231-1600
Die Sensor-Platine: als 3D-Modell und fertig aufgebaut



Die Sensor-Platine ist mit folgenden Sensoren kompatibel:

Die Sensor-Platine wird mit 12V versorgt und hat einen lokalen Spannungsregler (LP2980-N), um Spannungsverluste über die Zuleitung sowie Störungen zu reduzieren.

Downloads

Die Firmware steht unter MIT Lizenz, die Hardware Quelldateien unter der TAPR Lizenz. Die Dateien sind hier zu finden:

Written by Ferdinand

März 20th, 2013 at 15:47