Arduino metering en HomeServer met bijv 1Wire
Geplaatst: za 02 feb 2013, 09:40
In navolging op mijn vorige post over vloersensoren heb ik een kleine wijziging in mijn systeem aangebracht.
In eerste instantie had ik de 1Wire sensoren in parasite modus staan maar daar ben ik van terug gekomen. Voor korte afstanden werkt dat prima maar omdat ik onlangs een 10-tal extra sensoren toegevoegd heb kwam ik in de problemen.
Ik heb het systeem daarom omgebouwd naar gevoede sensoren met Arduino datalogging naar HomeServer.
Hoe zit het nu:
De DS18B20 sensoren zijn ieder voorzien van een stuk CAT5 netwerkkabel waarbij je drie draden gebruikt en aan het uiteinde een RJ45 stekker gemonteerd zit. De lengte kun je of standaard op 1, 3 of 5 meter houden of gewoon naar wat je nodig hebt.
Je kan deze kabels of zelf maken of een netwerkkabel van geschikte lengte opofferen door een stekker er af te knippen.
De blauwe draad verbind je met pin 2 (DQ) van de DS18B20 sensor, de blauw/wit met pin 1 (GND) blauw en dan OF de oranje draad OF de groene draad met pin 3 (Vdd) van de sensor. Let op de keuze die je hier maakt want dat bepaalt de verdere opbouw van je 1-wire netwerk. Er is niet echt een standaard over welke draad nu de Vdd zou moeten zijn en de ene schrijft pin 2 voor van de RJ45 stekker en de ander pin 6. Beide worden gebruikt voor een +5V signaal. De andere draden kun je afknippen en gebruik dan een krimpkousje om alles netjes af te werken. Je kunt steeds vaker 1wire sensoren kopen met reeds aangezette kabel en RJ45 stekker maar die zijn wel een stuk duurder.
Als master gebruik ik nu een Arduino Ethernet (compatible). Ik heb op pin 8 van de Arduino en de +5v en GND ook weer een stuk CAT5 kabel bevestigd met RJ45 stekker. Gebruik dezelfde kleuren als hierboven genoemd. Zet over de pin8 en de Vcc een 4k7 weerstandje anders werkt het niet met de 1Wire sensoren.
De RJ45 stekkers zijn dus allemaal op dezelfde manier bedraad en kun je nu met RJ45 splitters op elkaar aansluiten. 2op1 splitterblokjes kun je voor een paar euro makkelijk kopen en ik gebruik ze als aftakkers. Dus 1 stekker als invoer, 1 stekker als doorgaand naar de volgende splitter en de laatste dan als aftakker naar de sensoren. Heb je meerdere sensoren vlakbij elkaar zitten dan kun je evt 1op4 of 1op6 splitters gebruiken.
Het programma in de Arduino is relatief eenvoudig. Het maakt via DHCP automatisch verbinding met je netwerk en gaat daarna periodiek, in mijn geval elke 10 seconden, alle sensoren zoeken. Van iedere gevonden sensor wordt dan de waarde uitgelezen en dmv een UDP pakketje op het netwerk gezet richting de HomeServer. De inhoud van ieder UDP pakketje is een text regel zoals "OneWire Sensor: 286DD169020000: 21.5" In de HomeServer maak je per sensor nummer een ontvangregel aan via 'Communication IP/EIB telegram [reception]' In het tabblad From kies je voor UDP, poort 9988 en bijv 192.168.1.0 / 255.255.255.0 als verzendende netwerk.
In het tabblad Receive definieer je 3 blokken, als eerste 'Any desired data', dit om evt rommel op de lijn te negeren.
Als tweede blok kies je 'Text' met Value ' OneWire Sensor: 286DD169020000:' , dit is om de juiste UDP pakket te detecteren
En als derde blok kies je de bestemming 'Value as plain text' en kies je het GroepAdres. Hierbij wordt dan de waarde volgend op het vorige blok in het opgegeven GA geplaatst. Eventueel kun je in het tabblad Commands nog een extra actie uit laten voeren, bijv knipper een lamp als er een pakketje binnenkomt.
De mogelijkheden zijn vrijwel onbegrensd want behalve temperaturen kun je natuurlijk ook nog andere signalen op deze manier doorsturen naar de HomeServer.
Via je webbrowser HS/debug list kun je bij Event Empfang zien of het allemaal goed verloopt.
In eerste instantie had ik de 1Wire sensoren in parasite modus staan maar daar ben ik van terug gekomen. Voor korte afstanden werkt dat prima maar omdat ik onlangs een 10-tal extra sensoren toegevoegd heb kwam ik in de problemen.
Ik heb het systeem daarom omgebouwd naar gevoede sensoren met Arduino datalogging naar HomeServer.
Hoe zit het nu:
De DS18B20 sensoren zijn ieder voorzien van een stuk CAT5 netwerkkabel waarbij je drie draden gebruikt en aan het uiteinde een RJ45 stekker gemonteerd zit. De lengte kun je of standaard op 1, 3 of 5 meter houden of gewoon naar wat je nodig hebt.
Je kan deze kabels of zelf maken of een netwerkkabel van geschikte lengte opofferen door een stekker er af te knippen.
De blauwe draad verbind je met pin 2 (DQ) van de DS18B20 sensor, de blauw/wit met pin 1 (GND) blauw en dan OF de oranje draad OF de groene draad met pin 3 (Vdd) van de sensor. Let op de keuze die je hier maakt want dat bepaalt de verdere opbouw van je 1-wire netwerk. Er is niet echt een standaard over welke draad nu de Vdd zou moeten zijn en de ene schrijft pin 2 voor van de RJ45 stekker en de ander pin 6. Beide worden gebruikt voor een +5V signaal. De andere draden kun je afknippen en gebruik dan een krimpkousje om alles netjes af te werken. Je kunt steeds vaker 1wire sensoren kopen met reeds aangezette kabel en RJ45 stekker maar die zijn wel een stuk duurder.
Als master gebruik ik nu een Arduino Ethernet (compatible). Ik heb op pin 8 van de Arduino en de +5v en GND ook weer een stuk CAT5 kabel bevestigd met RJ45 stekker. Gebruik dezelfde kleuren als hierboven genoemd. Zet over de pin8 en de Vcc een 4k7 weerstandje anders werkt het niet met de 1Wire sensoren.
De RJ45 stekkers zijn dus allemaal op dezelfde manier bedraad en kun je nu met RJ45 splitters op elkaar aansluiten. 2op1 splitterblokjes kun je voor een paar euro makkelijk kopen en ik gebruik ze als aftakkers. Dus 1 stekker als invoer, 1 stekker als doorgaand naar de volgende splitter en de laatste dan als aftakker naar de sensoren. Heb je meerdere sensoren vlakbij elkaar zitten dan kun je evt 1op4 of 1op6 splitters gebruiken.
Het programma in de Arduino is relatief eenvoudig. Het maakt via DHCP automatisch verbinding met je netwerk en gaat daarna periodiek, in mijn geval elke 10 seconden, alle sensoren zoeken. Van iedere gevonden sensor wordt dan de waarde uitgelezen en dmv een UDP pakketje op het netwerk gezet richting de HomeServer. De inhoud van ieder UDP pakketje is een text regel zoals "OneWire Sensor: 286DD169020000: 21.5" In de HomeServer maak je per sensor nummer een ontvangregel aan via 'Communication IP/EIB telegram [reception]' In het tabblad From kies je voor UDP, poort 9988 en bijv 192.168.1.0 / 255.255.255.0 als verzendende netwerk.
In het tabblad Receive definieer je 3 blokken, als eerste 'Any desired data', dit om evt rommel op de lijn te negeren.
Als tweede blok kies je 'Text' met Value ' OneWire Sensor: 286DD169020000:' , dit is om de juiste UDP pakket te detecteren
En als derde blok kies je de bestemming 'Value as plain text' en kies je het GroepAdres. Hierbij wordt dan de waarde volgend op het vorige blok in het opgegeven GA geplaatst. Eventueel kun je in het tabblad Commands nog een extra actie uit laten voeren, bijv knipper een lamp als er een pakketje binnenkomt.
De mogelijkheden zijn vrijwel onbegrensd want behalve temperaturen kun je natuurlijk ook nog andere signalen op deze manier doorsturen naar de HomeServer.
Via je webbrowser HS/debug list kun je bij Event Empfang zien of het allemaal goed verloopt.