Usually the MODBUS protocoll only supports registers based on 16-bit values. If you want to transfer custom datatypes like double, float etc. via the modbus a simple trick can be used.
Arduino
The electronics for my capacitive (water) level sensor is described here. In this article I will go a little bit in depth regarding the sensor reading and value compensation.
This is a MODBUS-node with a capacitive water level sensor, a DS12S80 temperature sensor and a RS485 interface to the main controller.
This is my first project based on CADSOFT Eagle free-version. I still have to learn a lot for creating 2-layer PCBs :-/
Long time ago I've started my personal home automation project. The first building blocks where some small PCBs for RS485 interfacing and temperature sensing. Later I've started outlining a controller architecture for my home automation projects.
Currently my infastructure looks like this:
From top to bottom:
- An Arduino Mega256 with Ethernet-Shield. The RS485 interface is assembled on a small breadboard using the LTC1487 line driver. The LCD is attached via small I2C interface to the arduino.
- An Seeeduino 328P with an attached experimental shield with an identical RS485 interface.
The Arduino Mega256 is the MODBUS master with connection the internet data collection server. The Seeeduino is acting as a MODBUS slave providing 4 analog and 1 digital register.
Read on about the next steps here:
Ich habe wieder ein bisschen mit Hardware-Basteln angefangen und folgende Zusatzschaltungen entworfen, die ich hier vorstellen möchte:
- Messverstärker - hiermit kann man z.B. den interessanten Messbereich von LM335 Thermosensoren auf den A/D Wandler des Arduino anpassen.
- Eingangsadapter für Netzspannung - hiermit kann man z.B. feststellen, ob am Anschluß des Adapters 230V~ anliegen.
- Echtzeituhr für I2C Bus - hiermit hat man über den I2C Bus des Arduino Zugriff auf eine batteriegepufferte Echtzeituhr mit Kalender
- TTL-RS485 Schnittstelle- hiermit kann man an die serielle TTL-Schnittstelle des Arduino auf ein RS485 Netzwerk zugreifen.
- Achtung - Im Schaltplan ist die Bus-Terminierung falsch. Pin 7 muss nach Masse terminiert werden. Pin 6 muss nach Vcc terminiert werden.
Die Arduino-Prozessorplatinen haben an den Rändern 3,2mm Befestigungsbohrungen. Am Anfang habe ich versucht die Platinen mit 2,5mm Zylinderschrauben und Kunststoffabstandshaltern auf dem Träger zu befestigen. Nachdem aber die Bohrungen bei manchen Arduinos recht nah an Leiterbahnen sind, habe ich dabei immer ein ungutes Gefühl gehabt.
Jetzt scheint endlich der Sketch für den Upload der Daten auf meine Webseite zuverlässig zu funktionieren.
Der neue Sketch ist hier zu finden.
Die Gesamtbeschreibung habe ich aktualisiert und auch alle Bibliotheken referenziert.
Hier eine Aufstellung meiner bisherigen Gehversuche mit den Arduino-Boards:
Dies ist der Beispielcode (Sketch). Ich habe ihn etwas überarbeitet. Auch mit der neuesten Version der Ethernet- und der Client-Library lief der Upload sehr schlecht.
Ich vermute es liegt an meinem DSL-Router. Jetzt initialisiere ich einfach das Ethernet-Interface neu, wenn ich beim Upload einen Fehler bekomme. Aktuell hat es schon fast 24h überlebt - mal sehen!