Ako si vyrobiť meteostanicu?

Ahojte kamaráti počasia. V nasledujúcom článku vám rozpíšem ako si vyrobiť jednoduchú meteostanicu s pripojením na internet. Na začiatok si zaobstaráme všetky potrebné veci  a súčiastky,  ktoré budeme potrebovať. Z internetu si posťahujeme softvéry a knižnice k jednotlivým čidlám. Tak poďme pekne po poriadku: Z bazošu si objednáme dosku Arduino mega 2560, čidlo DHT22, BMP085, USB TTL prevodník, napájacie pole a kábliky. Všetko nájdete na tomto odkaze: https://www.bazos.sk/search.php?hledat=arduino&hlokalita=&humkreis=25&cenaod=&cenado=&order .

Zo stránok hresan.sk, hadex.cz alebo vpcentrum.eu si objednáme stožiarik s anemometrom , ukazovateľom smeru vetra a zrážkomerom. Všetko sú to mechanické diely k meteostanici WH 1080, pre ktoré som firmware naprogramoval a nakalibroval.

Do radiačného štítu môžme namontovať čidlo DHT22, alebo môžete vyrobiť vlastný štít (pasívny alebo aktívny). Ventilátor použijeme zo starého PC. Do výkresu som dal aj zapojenie motorčeka. Podrobnejší postup nájdete na tejto stránke: http://pocasi-decin.cz/radiacni_stit_2_m.php .

Ďalšie potrebné komponenty si zakúpime v obchode s elektroinštalačným materiálom, sú to: elektroinštalačná krabica rozmery cca: 30x40x10cm, priechodky na káble (veľkosť záleží na priemere kábla aký použijete, odporúčam 0,5 mm-priemer žily v kábli), 10 kΩ odpor 0,25 W, ktorý použijeme na ukazovateľ smeru vetra, ak objednáte čidlo DHT22 ako je na obrázku nemusíte zapájať odpor ako je na výkrese!!!

Pre lepšiu predstavivosť prikladám fotografie z mojej meteostanice ako namontovať komponenty do krabice:

Napájanie dosky nechám na Vás. Ja som použil USB adaptér a 10A istič. Na výkrese som zaznačil zapojenie batérie aj DC adaptéra. Dosku možno napojiť aj cez USB kábel. Treba si vybrať jednu z možností!!

Po zaobstaraní všetkých potrebných vecí je načase zapojenie Arduino dosky k PC. Na to aby sme to dosiahli je potrebné si stiahnúť software na naprogramovanie dosky. Software stiahneme zo stránky:  https://www.arduino.cc/en/Main/Software  a následne nainštalujeme. K jednotlivým čidlám je potrebné stiahnuť tzv. Libraries (knižnice), bez ktorých by sme čidla nenaprogramovali!!! Stiahneme ich z týchto stránok:

https://github.com/nethoncho/Arduino-DHT22

https://github.com/adafruit/Adafruit-BMP085-Library

Rozbalíme ich a nakopírujeme, nasledovne: tento počítač/lokálny disk C/program files/arduino/libraries: vyhodí nám okno povolenie správcu, klikneme na pokračovať. Po zapojení dosky k PC by nám malo zobraziť dosku ktorú sme zapojili (ako je vyobrazené na obrázku) a port cez ktorý komunikuje doska z PC.

Ak port nezobrazí postupujeme nasledovne: pravým tlačítkom myši klikneme na tento počítač, klikneme na položku spravovať a vyberieme možnosť správca zariadení. Potom postupujeme podľa tohto manuálu: http://digital.ni.com/public.nsf/allkb/0F9DADF9055B086D86257841005D1773 (aktualizujeme ovládač, vyberieme driver z nášho PC, v našom prípade arduino).

Ak máme aktualizáciu za sebou a dosku nám úspešne pripojilo, môžme sa pustiť do samotného zapájania súčiastok. Postupujeme presne podľa plánu!

Keď máme zapájanie za sebou nasleduje samotné nahratie programu na dosku. Postup je nasledovný: pripojíme komplet zapojenú dosku pomocou USB káblu k PC, otvoríme program Arduino a nakopírujeme nasledovný firmware (všetko v šedom štvorci):

#include <Wire.h>

#include <Adafruit_BMP085.h>

#include "DHT.h"

const int vane = A1;

unsigned int winddir = 0.0;

int DHTPIN = A0;

#define DHTTYPE DHT22

Adafruit_BMP085 bmp;

int buttonState;

int lastButtonState = HIGH;

long lastDebounceTime = 0;

long debounceDelay = 10;

const unsigned long rainTime = 100;

const unsigned long period = 2500;

const int radio = 70;

const int anemometer = 2;

const int rainTip = 3; 

unsigned int counter = 0;

unsigned int RPM = 0;

unsigned int rainin = 0;

unsigned int dailyrainin = 0;

unsigned int rainCount = 0;

float windspeedmph = 0;

float windgustspeed = 0;

const float pi = 3.14159265;

DHT dht(DHTPIN, DHTTYPE);

void setup() {

Serial.begin(9600);

bmp.begin();

dht.begin();

Wire.begin();

pinMode(anemometer, INPUT);

digitalWrite(anemometer, HIGH);

pinMode(rainTip, OUTPUT);

 digitalWrite(rainTip, HIGH);

}

void loop() {

float windDir =(analogRead(vane)* 5.00 / 1023.0);

if ((windDir > 4.90)||(windDir < 0.50))

(winddir = 0.0);//N

if ((windDir >=0.51 )&&(windDir < 0.90))

(winddir= 90);//E

if ((windDir >= 0.91)&&(windDir < 1.70))

(winddir= 135);//SE

if ((windDir >= 1.71)&&(windDir < 2.50))

(winddir = 180.0);//S

if ((windDir >= 2.51)&&(windDir < 3.40))

(winddir = 45);//NE

if ((windDir >= 3.41)&&(windDir < 3.90))

(winddir = 225);//SW

if ((windDir >= 3.91)&&(windDir < 4.50))

(winddir = 0.0);//N

if ((windDir >= 4.51)&&(windDir < 4.70))

(winddir = 315);//NW

if ((windDir >= 4.71)&&(windDir < 4.89))

(winddir = 270);//W

float humidity = dht.readHumidity();

float tempf = dht.readTemperature(true);

float baro = (bmp.readPressure()/100)*1.0222;

windvelocity();

RPMcalc();

WindSpeed();

Rain();

rainCount++;

counter++;

Serial.println();

Serial.print("$,winddir=");

Serial.print(winddir, 1);

Serial.print(",windgustspeedmph=");

Serial.print(windspeedmph, 1);

Serial.print(",windspeedmph=");

Serial.print(windspeedmph, 1);

Serial.print(",humidity=");

Serial.print(humidity, 1);

Serial.print(",rainmm=");

Serial.print((rainin /2.0)/6.66666667);

Serial.print(",tempf=");

Serial.print(tempf, 1);

Serial.print(",pressurehpa=");

Serial.print(baro, 1);

Serial.print(",");

Serial.println("#");

}

void windvelocity(){

windspeedmph = 0;

counter = 0;

attachInterrupt(0, addcount, RISING);

unsigned long millis();

long startTime = millis();

while(millis() < startTime + period) {

}

detachInterrupt(0);

}

void RPMcalc(){

RPM=((counter*4)*60)/(period/1000);

}

void WindSpeed(){

windspeedmph = ((2 * pi * radio * RPM)/60) / 1000;

}

void addcount(){

counter++;

}

//Rain Trigger

void Rain(){

int reading = digitalRead(rainTip);

if (reading != lastButtonState) {

// reset the debouncing timer

lastDebounceTime = millis();

}

if ((millis() - lastDebounceTime) > debounceDelay) {

if (reading != buttonState) {

attachInterrupt(1,addrain,CHANGE);

}

}

lastButtonState = reading;

}

void addrain(){

(dailyrainin)++;

(rainin)++;

}

Po úspešnom nahraní firmweru otvoríme v programe arduino monitor sériového portu (okienko s lupou), aby sme sa presvedčili, že nám program správne pracuje. Skontrolujeme najmä ukazovateľ smeru vetra, či nám správne ukazuje stupne svetových strán (na ukazovateli sú vyobrazené svetové strany):

N-0, NE-45, E-90, SE-135, S-180, SW-225, W-270, NW-315,

Ďalej zrážkomer: jedno preklopenie=0,3mm

Barometer: porovnáme s aktuálnou hodnotou tlaku, ktorú nájdeme na stránke SHMÚ.

Anemometer: rýchlosť je prekalibrovaná na míle – mph!!!

Teplota: je uvedená v °F!!!

Ak by nastal problém so stupňami svetových strán, alebo s tlakom dajte mi prosím vedieť! Anemometer, zrážkomer, teplota a vlhkosť budú fungovať na 100% Ďalej si do PC stiahneme softvér Weather Display zo stránky: http://www.weather-display.com/index.php   a nainštalujeme.

Na to, aby nám komunikovala stanica zo softvérom, je potrebné stiahnúť driver na USB TTL prevodník. Nájdeme ho na tejto stránke: http://www.prolific.com.tw/US/ShowProduct.aspx?p_id=225&pcid=41   pripojíme USB TTL k PC a nainštalujeme. Otvoríme program Weather Display a ideme do ponuky:  Control Panel-station type and settings-vyberieme stanicu Arduino/Sparkfun USB a hodnotu Baud Rate zaškrtneme 9600 –Close/Save a zavrieme okno. Prejdeme do ponuky: Com/IP port-Comport Number a vyberieme číslo portu, pod ktorým je stanica pripojená k PC, klikneme na OK. V ponuke: Units and Other Settings klikneme na Units/Wind chill a nastavíme si jednotky, ktoré sa nám budu zobrazovať v programe. Ostatné nastavenia nechávam na vás. Je toho naozaj neúrekom. Program ponúka odosielanie údajov na vašu  e-mailovú schránku, na web pomocou FTP prenosu, upozornenie pomocou alarmovej funkcie, pri náhlej zmene počasia, odosielanie údajov na server Weather Underground pomocou rapid fire funkcie (musíte mať zaregistrovanú stanicu) atď… Tu nájdete pomocné videá na doladenie všetkých funkcií programu: http://www.weather-display.com/youtubevideos.php .