Arduino meteostanice Žamberk – popis

Už dlouho sním o pořádné meteostanici a díky arduinu se mi konečně sen splnil.

LCD_1

Meteostanice je postavená na desce arduino mega.

Stanice má tyto funkce:

  • měření vnitřní a vnější teploty a vlhkosti vzduchu – čidla DHT22

  • měření rychlosti větru – anemometr

  • měření tlaku vzduchu – čidlo BMP180

  • měření osvětlení

  • modul RTC – DS1307

  • zobrazení hodnot na LCD 4×20 znaků

  • ukládání na SD kartu

  • odesílání na web

20140621_123111

první test anemometru

20140622_091553

testování anemometru a čidla vnitřní teploty a vlhkosti

20140703_170739

kalibrace anemometru

20140703_172139

kalibrační sestava 🙂

20140704_114102

hotový držák vnějších čidel

cidla

nainstalovaný držák venkovních čidel

tma

přidělané čidlo tmy

LCD_1

Čelní panel 1.stránka. Zobrazuje se: aktuální čas a datum; vnitřní teplota a vlhkost; venkovní teplota a vlhkost; rychlost větru v m/s a v km/h

LCD_2

Čelní panel 2. stránka. Zobrazuje se: tlak vzduchu; intenzita tmy; stav odeslání na web

meteostaniceV5_2

Zadní panel

meteostaniceV5_3

vnitřek

meteostaniceRGBledorientační vizuální zobrazení teploty pomocí RGB LED, která je připojená na PWM výstupy arduina takže lze namixovat různé barvy

ZDE si můžete stáhnout aktuální firmware meteostanice ve verzi 5.0. Program je řádně okomentovaný takže by neměl být problém vyznat se v něm.

A ZDE je verze 5.1 s možností nastavení vlastní statické IP adresy.

MeteostaniceV5final_zapojeni

A tady je konečně zapojení. Snad se v tom dá vyznat.

Aktuální data z meteostanice najdete ZDE

 

64 komentářů u „Arduino meteostanice Žamberk – popis“

  1. Dobry den.
    Velmi ma zaujala vasa stranka riesenie meteostanice. Dlho hladam nieco podobne. Na stranke mate dostatok info, len by som Vas chcel poprosit ci by nebolo mozne spisat zoznam vami pouzivanych cidiel. Presny typ arduino boardu a presne cidla.
    Chyba mi tu este meranie smeru vetra. Planujete nieco podobne do svojeho projektu zakomponovat?
    S arduinom som uplny zaciatocnik, ale uz dlhe roky programujem. Sice v c#, ale to bz nemalo vadit.
    Za kazdu radu vam budem velmi vdacny.
    Dakujem
    Rudo
    Ba

    1. Ahoj.
      Diky za chvalu.
      Desku mam pouzitou Arduino mega s ethernet shieldem se slotem na SD kartu. Cidla teploty a vlhkosti jsou DHT22, cidlo tlaku BMP180, cidlo osvetleni z aukra a modul RTC DS1307 – NEBRAT strasne se rozchazi cas.

      Jinak smer vetru resit nemusim protoze mam meteostanici u zdi baraku a tam fouka furt stejne:-)

      1. Mam pouzitych viac aplikacii s DS1307 a je celkom presny, vsetko zalezi na pouzitom krystali (vyrobca). Mam jeden z ciny a ten utekal za mesiac asi minutu, vymena krystalu s GM pomohla.

      2. Dobrý den,moc pěkná práce.Chtěl bych podle vašeho návodu postavit meteostanici pro naše letiště.Můžu se zeptat kde jste nakupoval díly???

  2. dobry den velmi pekny project :P, mam nieco podobne len som som sa chcel spytat ten kryt na tie senzori ste vytvorili s coho ? dakujem

    1. Ahoj. Diky 🙂 Kryt na senzory (radiační štít – google poradí s návodem;-)) mam udelany z misek pod kvetinace. Inspiroval sem se na netu 😉

  3. Dobrý den, bylo by možné mě kontaktovat na email. Chtěl bych se Vás zeptat zda by to fungovalo i s jinými senzory. Jinak úžasný projekt
    Díky moc

  4. Ahoj , tak v první řadě velká
    pochvala 🙂 a palec nahoru.
    Mel bych dotaz, mám taky rozpracovanou stanici, zatím jen na webu teplota a vlhkost zde http://178.22.113.235 , je to jen základ. Mam arduino jako server, chtěl bych ty stránky trošku zlepšit, nejaké barvy a třeba doplnit o min. a max teplotu. Je to realné ? Dík za případnou radu 🙂

    1. Ahoj,
      dík za pochvalu. Taky to máš pěkný, jednoduchý přehledný.
      K dotazu: na arduinu sem server dělal jen pár pokusů takže nevim. Největší problém bude málo paměti ale nejaky barvy a mozna jednoducha grafika by neměl být problém. V html neumim tak moc neporadim. Min. a max. teplotu bys musel nějak ukládat v arduinu a pak jí jen zobrazit, nezkoušel sem nevim 😀
      Moc sem asi neporadil ale sem zvědavej na tebe 😉

    2. ahoj nieco take mam aj ja spravene ak by si potreboval pomoct staci sa ozvat, rad pomozem, mam to medzi 2 ardionami bezdrotovo… A pochvalu davam aj ja je to super 😉 tu som nadobudol inspiraciu, citavam kazdy novy clanok… lukacenko9(zavinac)hotmail.com

    1. Ahoj, já mam udělaný vlastní dráty a na každém připájený pin z pinové lišty. Tam kde to jde se snažím spíš pájet (na snímače)

    1. Bohužel schéma zapojení nemám. Teď ale pracuju na 6.verzi meteostanice a k tý už snad schéma udělám 🙂 Jinak na dotazy rád odpovím 😉

      1. Aha dobre ďakujem za odpoveď a smiem vedieť kedy ta 6 verzia bude hotová je to naliehavé. Potrebujem to do leta spraviť a ešte nemám objednane súčiastky.

        1. Ahoj, stačí se kouknout a uvidíš že už je hotová verze 5.0 final včetně schématu a zdrojáku. Další vylepšení neplánuju, mam ted rozdělaný další věci 😉

  5. Zdar, některý obrázky a třeba i firmware ti nejdou otevřít O:-) Hodí to „stránka nenalezena“… Já jen tak 😉

  6. Super,
    take nieco by som chcel tiez postavit, ale s doplnenim cidla CO2, v dnesnej dobe ked su tesne plastove okna je to dost podstatna info kedy treba vetrat, hlavne u pasivnych domov moze byt na zaklade tejto informacie spustane vetranie.

  7. Nemůžu se na to zbarvování RGB ledky koukat 😀
    Zkus tenhle kód. Mělo by to být nějak od -50 do 50 °C

    Offset = 50
    BarvaR = (Teplota + Offset) * 2.55
    BarvaG = (Offset – Abs(Teplota)) * 0.02 * 255
    BarvaB = 255 – ((Teplota + Offset) * 2.55)

    Není to uplně dokonalý… uprostřed (na 0) je to spíš zelený, takže by to chtělo posunout offset, nebo si s tím celkově pohrát. Ale to spíš podle LEDky 😉

          1. no uz mam objednane 🙂 noo mam arduino nano prosim kde by to bolo dobre zapojit ? kolko vystupov mam ten anometer ? dakujem pekne

          2. Arduino nano podporuje preruseni na pinech D2 a D3. Anemometr ma dva draty,jeden zapojis na arduino a druhy na GND.

    1. //u arduino nano je přerušení INT0 na pinu 32 a INT1 na pinu 1
      //podle zvoleného pinu se upraví program

      //#define AN 1 // příjem z anemometru na pin 1 INT1
      #define AN 32 // příjem z anemometru na pin 32 INT0

      // definice konstant měření větru
      const float pi = 3.14159265; // číslo pí
      int period = 1000; // Measurement period (miliseconds)
      unsigned int Sample = 0; // Sample number
      unsigned int counter = 0; // B/W counter for sensor
      unsigned int RPM = 0; // Revolutions per minute
      int anemo = 91; // konstanta pro výpočet rychlosti větru

      // proměnné

      float speedwind = 0; // rychlost větru (m/s)
      float vitr = 0; // rychlost větru km/h

      void setup()
      {
      Serial.begin(9600);
      // nastavení pinů
      pinMode(2, INPUT);
      digitalWrite(2, HIGH);

      }

      void loop()
      {
      anemometr(); // měřění větru

      Serial.print(vitr);
      Serial.println(„km/h“);
      }

      //////////////////Měření rychlosti větru/////////////////

      void anemometr()
      {
      windvelocity();
      RPMcalc();
      WindSpeed();
      vitr = speedwind * 3,6;
      }

      void windvelocity(){
      speedwind = 0;
      counter = 0;
      attachInterrupt(0, addcount, CHANGE); //přerušení INT0 na pin 32
      //attachInterrupt(1, addcount, CHANGE); //přerušení INT1 na pin 1
      unsigned long millis();
      long startTime = millis();
      while(millis() < startTime + period) {
      }
      detachInterrupt(0); //přerušení INT0 na pin 32
      //detachInterrupt(1); ////přerušení INT1 na pin 1
      }

      void RPMcalc(){
      RPM=((counter/2)*60)/(period/1000); // Calculate revolutions per minute (RPM)
      }

      void WindSpeed()
      {
      speedwind = ((2 * pi * anemo * RPM)/60) / 1000; // Calculate wind speed on m/s
      }

      void addcount()
      {
      counter++;
      }

      Zkus, měl by fungovat 🙂

      1. Na panelák bych chtěl taktéž použít anemometr WH1080 a měřit pouze rychlost větru.

        Z anemometru vedou tedy jen dva drátky. Stačí tedy jakýkoliv jeden drát připojit na GND a druhý na D2 nebo D3 bez nutnosti anemometr napájet? 🙂

        1. Ano, jeden drát GND a druhý na libovolný pin podporující přerušení (podle arduina). V anemometru je jen jeden spínací kontakt takže není potřeba cokoli napájet 😉

      2. Tak jsem kód vyzkoušel, ale při kompilaci mně to vypíše:
        WARNING: Category “ in library ArduinoUnit is not valid. Setting to ‚Uncategorized‘

        Kód se do Arduina nano zapíše a monitor krásně rychlost větru ukazuje. Jen mám problém s tím, že když mám anemometr u větráku, háže to 20 m/s, přitom ruční Windmaster2 mně ukáže maximálně 2 až 3 m/s 🙂

        1. U větráku to je těžko říct tam neovlivníš různý turbulence který to třeba můžou zkreslovat. Chce to zkusit přímo ve větru nebo z auta třeba 🙂

          1. Spíš mně přijde divné, že když naprosto minimálně točím s anemometrem, tak méně jak 2 m/s mně to nechce ukázat. Přitom Vy na meteostanici máte i 0,57 m/s. Budu to muset prozkoumat čím to může být.

          2. Prosim te mi tykej;-) To spatne koukas, me to ukazuje v km/h. Tam bude asi problem:-)

    1. Zdravím,
      chci se zeptat na čem ti běží ta tvoje webová stránka s daty?
      Je to nějaká šablona, nebo vlastní tvorba?

      Nebyl by případně nějaký odkaz na ten sw?

  8. Skvělý projekt, je to velmi propracované a bylo myšleno na všechno, co v té chvíli bylo zapotřebí.
    díky za takový projekt.
    Mám Arduino Mega, jsem amatér co se týče programování, bylo by možné pomoci s kodem, kdybych chtěl zjednodušit podobný projekt?
    Chtěl bych zobrazovat datum, čas, vlhkost, rychlost větru a tlak.
    Můj displej 20×4 využívám s převodníkem kdy stačí dva kabely na zobrazování. Bohužel ve snaze se přiblížit k nějakému závěru jsem to vzdal, kvůli kodu, který neumím upravit ke svým potřebám.
    děkuji za odpověd

  9. Čau, potřebuji poradit ohledně anemometru a výpočtu rychlosti větru. Dá se nějak matematicky odvodit (podle počtu lopatek, rozestupu a průměru misek a anemometru) výpočet pro různé rychlosti větru dle Beafurtovy stupnice? Nechce se mi to pochybně kalibrovat jízdou na kole nebo autem. Chci si to postavit pro svou potřebu(létám s RC kluzáky 🙂 ) A ještě na Arduino UNO je to na pinech pro PWM?(digital 2-3)?

    1. Ahoj, nejak vypocitat to urcite de ale netusim jak, proto sem to delal jak sem delal. Jinak pripojeni je na prerusovaci vstupy INT. Na arduino uno pin2 a 3, jak pises.

  10. @Teodor
    Obávám se, že kalibrace anemometru jízdou na kole nebo v autě je jediné správné řešení (pokud tedy nemáš přístup do větrného tunelu). Výpočet samozřejmě možný je, ale ten rozhodně nezahrnuje takové vlivy, jako je tření na ložisku anemometru a podobně. Podle mě se sebelepším výpočtem k správnému výsledku nedobereš. Proto se musí dělat ta kalibrace, aby se zjistil rozdíl mezi výpočte a realitou…

  11. Měl bych dotaz k čidlu „tmy“. Na Vašem obrázku ho máte nainstalovaný na radiačním štítu a z obrázku je patrné, že na tom čidlu svítí nějaká LEDka. Jak je to zařízené, že ta rozsvícená LEDka neovlivňuje čidlo?

  12. Dobrý den, vaše meteostanice se mi moc líbí a chtěl bych se jí pokusit sestavit. Mám ale problém s knihovnou arduimo.h kterou nemohu nikde najít. Prozradíte mi kde se dá stáhnou?
    Předem moc děkuji. Roman

  13. Kluci, docela hezky, ale bohuzel dost omezeny na presnost mereni rychlosti vetru. To me moc mrzi.
    Uz jen podle vyberu cidla a principu mereni je videt, jake hodnoty se budou JEN zobrazovat.
    Takze kdyz se lopatky budou otacet tak pomalu, ze arduino nacita za merenou 1s jen 1 impulz, tak dle uvedeneho vypoctu vychazi RPM na 0.
    Kdyz nacita 2 impulzy za danou dobu, tak RPM je 60 (viz. zdrojovy kod). Pri 3 impulzech je taky 60 a to jen proto, protoze delit se to ma 2 az na konci.. pak vyjde RPM spravne 90.(coz je jedna vec, ale i kdyz opravite vzorec a budete delit 2 az na konci, tak stale bida)
    Takze:
    1 (imp.) – 0 (RPM) – 0 (km/h)
    2 (imp.) – 60 (RPM) – 1.72 (km/h)
    3 (imp.) – 90 (RPM) – 2.57 (km/h)
    4 (imp.) – 120 (RPM) – 3.43 (km/h)…. takhle muzu pokracovat.
    Takze vidime, jake rychlosti uvidime na displeji. Zacne to hodnotou 0 km/h a pak se bude postupne pricitat cislo 1.72 pri postupnem zrychlovani.

    Mozna bych to bral, ale v tom pripade bych rozhodne nezobrazoval desetinna cisla. Bude to porad jen orientacni mereni – skoda.

    Takze dochazim k zaveru, ze s timto cidlem, ktere nam hodi pouze 2 impulzy na 360°, mereni s vetsim rozlisenim neudelame.
    (snad jsem nikoho nenastval, zvlaste pak autora clanku.)

    Ahoj
    Martin

    1. Rozhodně děkuju za podnětný komentář. Souhlasím s tebou že je to jen orientační, ale kdybys znal umístění tak vůbec neřešíš přesnost 😀

  14. Diego,
    ted tedy rozumim, proc moc neresis presnost u tohoto cidla 🙂
    Ale jen cvicne – neuvazoval jsi spis pouzit metodu mereni doby mezi 2 impulzy (=180°) nebo 3 impulzy (=360°) ?
    Potom vypocet pro obvodovou rychlost (v=s/t)… to zas neni tak tezke..
    Ja to asi vyzkousim a kdyztak bych dal vedet.
    Ahoj a praci zdar 😉
    Martin

Napsat komentář

Vaše emailová adresa nebude zveřejněna. Vyžadované informace jsou označeny *