Personal tools

WeatherDuino

From Frack - Hackerspace Friesland

Jump to: navigation, search
Project: WeatherDuino
WeatherDuino lcd components03.jpg
Status voltooid
Betrokkenen ,
Kennisgebied(en) Arduino
Projectcode WeatherDuino
ProjectoverzichtProject toevoegen

Een simpel Arduino Weerstationnetje dat vooralsnog temperatuur en luchtvochtigheid voor zowel binnen als buiten meet. Gebasseerd op DHT en DS18B20 sensoren.

Hardware

WeatherDuino lcd components03.jpg

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

WeatherDuino rev2.1 uncut.jpg

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

WeatherDuino main pcb.png
WeatherDuino Rev2.1 main.png

Voor een volledig uitgerust mainboard zijn de volgende onderdelen nodig:

  • Arduino Nano
  • Luchtvochtigheids sensor, twee opties:
    1. DHT11 sensor
    2. ó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:

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

WeatherDuino Rev2.1 probe pcb.png

Een probe bestaat enkel uit de volgende componenten:

  • Luchtvochtigheids sensor, twee opties:
    1. DHT11 sensor;
    2. ó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

WeatherDuino main schema.png
WeatherDuino Probe schema.png

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

WeatherDuino power overkill.jpg

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

WeatherDuino lcd components05.jpg

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:

Meer grafieken

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

WeatherDuino Probe Stevensonscreen07.jpg

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'.

Pics