WeatherDuino
Een simpel Arduino Weerstationnetje dat vooralsnog temperatuur en luchtvochtigheid voor zowel binnen als buiten meet. Gebasseerd op DHT en DS18B20 sensoren.
Hardware
Een WeatherDuino is er in twee uitvoeringen:
- Serieel met 20x4 HD44780 LCD
- Ethernet only
Beide bestaan uit dezelfde basis onderdelen.
Voor rond de 30 euro kan een volledig uitgeruste WeatherDuino gerealiseerd worden, dat bestaat dan uit één Mainboard, drie Probes, de Ethernetcontroller én de LCD.
Wegens te veel fluctuerende prijzen op Ebay zijn de prijzen per component weggehaald. Haal ze wel van ebay want binnen Nederland zijn de onderdelen domweg veel te duur.
PCB's
De Rev2 PCB's zijn inmiddels uitverkocht.
- Single-layer design
- Alles voogesneden.
Op dit moment zijn de Rev. 2.1 PCB's beschikbaar:
- Dual-layer design
- Niet gesneden.
- Een PCB bevat:
- Het mainboard;
- vier probes;
Door grotere inkoop is de prijs per WeatherDuino drastisch lager: €1,95 voor een ongesneden PCB.
Mainboard
Voor een volledig uitgerust mainboard zijn de volgende onderdelen nodig:
- Arduino Nano
- Luchtvochtigheids sensor, twee opties:
- DHT11 sensor
- óf DHT22 sensor
- Dallas DS18B20 OneWire Temperature sensor
- 3x RJ45 socket
- 4x 10k Ohm weerstand
- 4.7k Ohm weerstand
- 4pins enkele rij male header
- Enkele draden/draadbruggen
- Optioneel: 2x 15pins enkele rij female header
De 2x 15pins headers zijn nodig indien de arduino niet op de printplaat gesoldeerd word. Let op: Een DHT22 is aan te raden wegens veel grotere nauwkeurigheid! Deze zijn echter significant duurder dan DHT11's!
De LCD Uitvoering heeft ook de volgende componenten nodig:
- 20x4 HD44780 LCD
- 2k Ohm Potmeter
- 1k Ohm Potmeter
- Schakelaartje
- 2x 16 pins enkele rij female headers
- 2x 16 pins enkele rij male headers
- 16 aderige flatcable
- 3 pins female header
- 3 pins male header
- 3x flexibele draad
Let op: Stem de potmeter af op jou specefieke display, door onderlinge verschillen tussen LCD's kunnen de benodigde weerstandswaardes anders zijn.
De Ethernet uitvoering heeft de volgende componenten nodig:
- ENC28J60 Ethernet Module (Vraag Failbaitrvoor juiste versie)Failbaitr Rol: deelnemer Deskundig met: Arduino, CNC, CNC-Frezen, Canvas, Digitale Fabricatie, ENC28J60, Glasvezel lassen, HTML, Hydroponics, Javascript, LPD8806, Linux, Mercurial, Programmeren, Python, Robotica, Software, Stappenmotor Beginnend met: Elektronica Werkt aan: Geen projecten :(
De module kan direct op het printje gesoldeerd worden of doormiddel van een kabel aangesloten worden:
- 2x 10 pins dubbele rij female header
- 10 pins 'Shrouded Header'
- 10 aderige flatcable
Probes
Een probe bestaat enkel uit de volgende componenten:
- Luchtvochtigheids sensor, twee opties:
- DHT11 sensor;
- óf DHT22 sensor.
- Dallas DS18B20 OneWire Temperature sensor
- RJ45 socket
Let op: Een DHT22 is aan te raden wegens veel grotere nauwkeurigheid! Deze zijn echter significant duurder dan DHT11's!
Sensoren
De WeatherDuino bevat twee types sensoren, DHTxx en DS18B20. Wegens de lage kosten van deze types sensoren en de reeds aanwezige Arduino libraries hiervoor zijn ze bij uitstek geschikt voor een dergelijk project. Tevens wegens de brede voedingsspanning welke de sensoren accepteren is het mogelijk om deze over lange afstand nog altijd te voeden en uitlezen.
DHT
Een DHT sensor bevat een soort van 'OneWire' bus. Helaas is deze bus 'adresloos' waardoor er maar één sensor per bus aangesloten kan worden. Deze sensoren bevatten ook een temperatuur sensor, maar de temperatuurmeting is heel erg onnauwkeurig. Hierom is ervoor gekozen om enkel de luchtvochtigheidsfunctie te gebruiken.
De WeatherDuino is compatible met zowel de DHT11 als de DHT22 en beide sensoren hebben dezelfde pin-out.
DHT11
De DHT11 is de goedkoopste van de twee, dit is terug te vinden in het meetbereik en nauwkeurigheid van de sensor:
- Relatieve vochtigheid: 20% - 90% (5% Nauwkeurigheid)
- Temperatuur bereik: 0°C - 50°C (2°C Nauwkeurigheid)
- Voedingsvoltage: 3.3v - 6v.
DHT22
De DHT22 is ongeveer twee a drie keer zo duur als een DHT11, hiervoor krijg je echter het volgende terug:
- Relatieve vochtigheid: 0% - 100% (2% Nauwkeurigheid)
- Temperatuur bereik: -40°C - 125°C (0,2°C Nauwkeurigheid)
- Voedingsvoltage: 3.3v - 6v.
DS18B20
De Dallas DS18B20 is een OneWire Bus sensor welke met adressen werkt. Dit houd in dat er meerdere sensoren op dezelfde databus aangesloten kunnen worden maar ook dat er voor elke sensor het 'adres' achterhaald moet worden. Het adres is te achterhalen middels de OneWire Address Finder.
Deze sensor bied een bijzonder goede gevoeligheid voor de lage kosten:
- Temperatuur bereik: -55°C - 125°C (0,5°C Nauwkeurigheid)
- Resolutie is instelbaar van 9 tot 12 bits
- Voedingsvoltage: 3.3v - 5.5v
Aansluit schema
Het aansluiten van de componenten dient als volgt te zijn:
DS18B20 Pinout
De Dallas OneWire Bus bevind zich op Arduino Digital Pin 2
Pin | Functie | Beschrijving |
---|---|---|
1 | Gnd | Ground |
2 | Data | OneWire Bus |
3 | Vcc | 3.3-5.5v Voeding |
DHT Pinout
De WeatherDuino verwacht de DHT voor 'Probe 1' op Digital Pin 3, voor 'Probe 2' op Digital Pin 4, enzovoorts.
Pin | Functie | Beschrijving |
---|---|---|
1 | Vcc | 3.3-6v Voeding |
2 | Data | Digitale databus (Naar Arduino Digital pins 3 t/m 6) |
3 | N/C | Niet aangesloten |
4 | GND | Ground |
LCD Pinout
De LCD word in 4bits modus aangestuurd, hierom zijn pins 7 t/m 10 niet aangesloten.
Pin header | LCD | Beschrijving |
---|---|---|
1 | Gnd | Ground |
2 | Vcc | +5v Voeding |
3 | Contrast | 2k Ohm Potmeter naar Gnd |
4 | RS | Pin D13 |
5 | RW | Pin D12 |
6 | Enable | Pin D11 |
7 | DB0 | N/C |
8 | DB1 | N/C |
9 | DB2 | N/C |
10 | DB3 | N/C |
11 | DB4 | Pin D10 |
12 | DB5 | Pin D09 |
13 | DB6 | Pin D08 |
14 | DB7 | Pin D07 |
15 | Backlight Vcc | +5v Voeding |
16 | Backlight Gnd | 1k Ohm Potmeter naar Ground |
ENC28J60 Pinout
Let op: Er staan hier geen pin-nummers vermeld, deze volgordes willen nog wel eens verschillen tussen de verschillende printplaten. Op het moederbord, naast de 10 pins header, staat een tabel met daarin welke functie op welke positie hoort.
ENC28J60 | Beschrijving |
---|---|
Vcc | 3.3v Voeding |
Gnd | Ground |
SPI SCK | Pin D13 |
SPI S0 | Pin D12 |
SPI CI | Pin D11 |
SPI CS | Pin D08 |
RJ45 Pinout
De pin-out van de RJ45 connectoren welke gebruikt worden voor de remote probes:
Pin | Ader | Functie |
---|---|---|
1 | Oranje-wit | Ground / N/C |
2 | Oranje | +5v Voeding |
3 | Groen-wit | Ground / N/C |
4 | Blauw | OneWire Bus |
5 | Blauw-wit | Ground / N/C |
6 | Groen | DHT Data bus |
7 | Bruin-wit | Ground / N/C |
8 | Bruin | Ground |
Voeding
Het voeden van de WeatherDuino kan op drie manieren:
- Middels de USB aansluiting
- Middels de +5v lijn (Header op mainboard)
- Middels de 7~12v DC INPUT (Header op mainboard)
Let wel op, bij het voeden middels de DC INPUT header word de voeding geleverd door de interne voltage regulator in de Arduino. Deze kan niet genoeg vermogen leveren om een LCD Backlight te voeden, indien er toch voor deze optie gekozen word, zorg dat de backlight switch uit staat. Het beste resultaat word behaald als de Arduino direct gevoed word met 5 volt, danwel via USB. In de LCD uitvoering is via USB juist handig in verband met data-logging.
Data
Er zijn twee mogelijkheden voor het uitvoeren van de gegevens van de WeatherDuino:
- Ethernet
- LCD / Serial
Ethernet
Deze code is ontwikkeld en werkzaam, de arduino zal met deze code UDP broadcast paketten uitsturen welke het mac-address, het aantal probes en de probe-data bevatten. Er is een UDP listener programma ontwikkeld dat de UDP paketten uitleest en ze op de terminal print. Deze code is vrij simpel aan te passen met een andere verwerkende achtergrond zoals een RRD store.
De eerste 3 bytes zijn de laatste 3 bytes van het MAC address. De vierde byte is het aantal probes (voor toekomst compatiblity van het protocol) Daar opvolgende bytes zijn per 3: (temperatuur in graden celsius, temperature achter de comma, luchtvochtigheid in %)
LCD / Serial
De LCD uitvoering van de WeatherDuino heeft altijd dubbele uitvoer: Zowel via het display als via Serial (57600 baud).
- Serial output is JSON, in het volgende format:
{ "WeatherDuino": [ { "Probe": N, "Temp": 21.87, "Humid": 46.00 }, { "Probe": N+1, "Temp": 13.56, "Humid": 65.00 } ] }
- LCD Output is te zien op de foto hier rechts. Effectief één regel per probe.
Er staat sample code op Github welke de Serial output van de WeatherDuino verwerkt met behulp van RRD-tool. De data van de vier probes word weggeschreven in RRD files en vervolgens worden er periodiek grafieken gegenereerd met het volgende resultaat:
Sensorgebruik
Probes
De 'Remote Probes' krijgen hun 5V voeding van het Mainboard en werken niet in parasite power mode. Op basis van gebruik van standaard UTP (24awg, 0,2mm²) is het daarom theoretisch mogelijk om maximaal 100 meter afstand te overbruggen vanaf het mainboard. Met 100 meter UTP is de voltage drop ongeveer 1,68 volt waardoor er 3,3v overblijft bij de probes: Precies genoeg om binnen de specificaties van de sensoren te blijven.
Buitengebruik
Het mainboard zelf is bedoelt voor gebruik binnendeurs. De externe probes daarintegen zouden wel buiten gehangen kunnen worden. Om nauwkeurige metingen te krijgen buiten, moeten die echter wel beschermd worden tegen direct zonlicht en neerslag. Dit kan bereikt worden door een zogenaamd 'Stevenson Screen' te bouwen. Dit bestaat effectief uit een aantal witte/lichte schalen boven elkaar met beperkte ruimte ertussen. De bovenste schaal is tevens het 'deksel' van de behuizing en is dus dicht, alle lagere schalen zijn van binnen open waardoor er een ruimte ontstaat waar een sensor beschermd opgehangen kan worden. De vorm van een schaal zorgt ervoor dat er een luchtstroom langs de sensoren loopt. Er zijn diverse screens te vinden voor 3d printing, waaronder deze : http://www.thingiverse.com/thing:83969 of http://www.thingiverse.com/thing:713219
Let op: Als de DHT22 probe constant een waarde van 99,9% luchtvochtigheid doorgeeft kan het zijn dat de sensor defect is geraakt. Ondanks dat de operationele specificaties zeggen dat deze 0-100% luchtvochtigheid en -40 tot +80 graden aankan, gaat het toch mis. Dit schijnt te maken te hebben met de condensvorming. De sensor is niet per definitie kapot, dit schijnt op te lossen te zijn door de sensor voor langere tijd te laten 'drogen'.