Elektroda.pl
Elektroda.pl
X
Proszę, dodaj wyjątek www.elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

Inteligentna Stacja Meteorologiczna V1 - sztuczne sieci neuronowe w praktyce

ikko 12 Gru 2011 03:04 27030 61
  • Inteligentna Stacja Meteorologiczna V1 - sztuczne sieci neuronowe w praktyce

    Przedstawiam projekt inteligentnej stacji meteorologicznej. Jest to nietypowa konstrukcja, zdolna do przewidywania temperatury powietrza atmosferycznego na kolejne 24 godziny.

    Wykorzystałem do tego celu sztuczną sieć neuronową.

    Stacja rejestruje co minutę wartość temperatury oraz prezentuje na wyświetlaczu w formie graficznej rozkład temperatury z dwóch ostatnich dni. Poza tym oblicza godziny wschodu i zachodu Słońca oraz fazę Księżyca.

    Poniższy obrazek tłumaczy trochę to, co widać na wyświetlaczu:
    Inteligentna Stacja Meteorologiczna V1 - sztuczne sieci neuronowe w praktyce

    Cel:
    Głównym założeniem projektowym było stworzenie rozbudowanego i autonomicznego rejestratora temperatury. Zależało mi też na jakimś wykresie (histogramie) pokazującym zmianę wartości temperatur w ciągu kilkudziesięciu ostatnich godzin. Innym założeniem była możliwość podłączenia zewnętrznego bardziej odległego czujnika (do kilkudziesięciu metrów). Najtrudniejszym celem była prognoza temperatury. Wykorzystałem w tym celu sztuczną inteligencję.
    Stacja mierzy na razie tylko temperaturę. Możliwe, że kiedyś dołożę do niej czujniki ciśnienia i/lub wilgotności.

    Hardware:
    Mikrokontroler: ATmega128 pracująca z częstotliwością 16MHz
    Pamięć: 64KB XRAM (64KB z 128KB) + 74HC573
    Zegar: DS1307N
    Termometr: DS18B20
    Odbiornik: RX433
    Wyświetlacz: GLCD 128*240
    Gniazdo kart pamięci: RS-MMC/SDHC

    Stacja zasilana napięciem 5V podczas pracy pobiera około 150mA prądu.

    Software:
    Nad projektem pracowałem rok czasu z licznymi przerwami. Wypełniłem moją ATmegę w 80%. Kod źródłowy składa się z 5800 linijek (i działa). Poniżej opiszę niektóre podprogramy i bloki funkcjonalne urządzenia.

    SYSTEM PLIKÓW:
    Programową obsługę systemu plików zapewnia AVR-DOS.
    Do komunikacji z kartą pamięci wykorzystałem czytnik RS-MMC/SDHC komunikujący się z mikrokontrolerem poprzez programowy interfejs komunikacyjny SPI.
    Przed każdym zapisem na karcie pamięci sprawdzana jest jej fizyczna obecność. Jeśli karty nie ma lub włożona karta posiada błędy fizyczne lub logiczne - sygnalizowany jest błąd w postaci przekreślonej ikonki z kartą. W takiej sytuacji zapis jest pomijany. Dla każdej doby jest tworzony oddzielny plik tekstowy (np. 22-05-11.txt), w którym co minutę dopisywana jest średnia arytmetyczna z 60 próbek temperatury dokonywanych co jedną sekundę. Każdy plik kończony jest krótkim raportem, wskazującym temperaturę minimalną, maksymalną oraz średnią dobową.




    Dodatkowo tworzony jest plik error.txt, w którym zapisują się daty i godziny wszystkich startów lub resetów systemu ze wskazaniem miejsca w programie, przy którym reset wystąpił.

    CZUJNIK TEMPERATURY:
    Do pomiaru temperatury wykorzystałem cyfrowy czujnik temperatury DS18B20 firmy Dallas Semiconductor. Komunikuje się on z mikrokontrolerem magistralą 1-WIRE. Czujnik umożliwia pomiar temperatur w zakresie -55C do +125C z rozdzielczością 0,0625C. Zmierzona temperatura zostaje zaokrąglona do 0,1C, choć średnia dokładność pomiaru to +/- 0,5C. Przed każdym pomiarem sprawdzana jest obecność czujnika. W razie jego braku przekreślana jest odpowiednia ikonka na wyświetlaczu. W razie wykrycia błędów w komunikacji z czujnikiem (kontrola CRC) również ikonka zostaje przekreślona. W obu przypadkach wynik aktualnego pomiaru temperatury nie zostanie wyświetlony,
    a do statystyk podkładany jest wynik ostatniej, poprawnie zmierzonej temperatury. Temperatura jest mierzona co sekundę, a wartość pomiaru wyświetlana jest z dokładnością 0,1C na w odpowiednim miejscu na wyświetlaczu. Czujnik jest podłączony do stacji kilkumetrowym przewodem.
    Daje to możliwość umieszczenia go na zewnątrz (np za oknem).

    RADIOWY CZUJNIK:
    Alternatywnie do czujnika przewodowego powstał czujnik bezprzewodowy - radiowy. Chodziło o zwiększenie mobilności stacji (możliwość postawienia jej gdziekolwiek). Sonda działa sprawnie w zasięgu do ok. 15m z kilkoma ścianami po drodze. Maksymalnym zmierzonym zasięgiem na otwartym powietrzu była odległość 120m. Częstotliwość nadawania to 433MHz. Dane wysyłane są UARTem z prędkością 1200 baud.
    Aby zminimalizować błędy zastosowałem transmisję pakietową. Co minutę wysyłane są 4 identyczne pakiety. W każdym pakiecie znajduje się 8 bajtów.
    Dwa bajty rozbiegowe, dwa bajty adresowe, dwa bajty z wartością temperatury,
    bajt statusu baterii oraz bajt kontrolny CRC.
    Odbiornik, a konkretniej podprogram odbioru odrzuca pakiet, jeśli nie spełnia on wymogów (adres, CRC).
    W czasie 20 dniowego testu sprawdzającego poprawność przesyłanych danych okazało się, że przedarło się tylko kilka fałszywych pakietów, co jest zadowalającym rezultatem. Bez transmisji pakietowej fałszywe wartości docierały nawet kilka razy w ciągu sekundy.

    Poniższy obrazek przedstawia przebieg danych w pakiecie o długości 6 bajtów.
    Inteligentna Stacja Meteorologiczna V1 - sztuczne sieci neuronowe w praktyce

    Część nadawcza składa się z mikrokontrolera ATtiny2313, nadajnika TX433 (Velleman), czujnika temperatury DS18B20 i stabilizatora 78L05. Zasilanie stanowi bateria 9V. Z obawy o niską efektywność baterii zimą (zamarzanie i szybkie zużycie baterii) czujnik radiowy jest teraz zastąpiony wersją przewodową.

    ZEGAR:
    Do pomiaru czasu wykorzystałem zegar czasu rzeczywistego DS1307N. Komunikuje się on magistralą I2C. Do układu podłączona jest bateria podtrzymującą pracę zegara (przez kilka lat) w razie braku zasilania głównego.
    Układ dysponuje pamięcią RAM (56B), w której przechowuję informacje dotyczące czasu letniego / zimowego.

    CZAS LETNI/ZIMOWY:
    Dwa razy w roku urządzenie samoczynnie zmienia czas z zimowego na letni lub odwrotnie.

    KALENDARZ:
    Czas wyświetlany jest w formie cyfrowej i analogowej. Na wyświetlaczu wyświetlane są dwa zegary oraz dwa kalendarze: tekstowy i tabelkowy.
    Na potrzeby wersji tabelkowej dodatkowo obliczane są lata przestępne.
    Aktualny dzień wskazywany jest migającym prostokątem.

    FAZY KSIĘŻYCA:
    Każdego dnia obliczana jest aktualna faza Księżyca. Prezentowana jest ona w postaci 1 z 8 ikonek przedstawiających Księżyc. Obok ikonki widnieje przybliżona jasność Księżyca wyrażana w procentach (0% - nów , 100% - pełnia). Algorytm obliczający fazę opiera się na średniej wartości miesiąca synodycznego.

    WSCHODY I ZACHODY:
    Kolejnym algorytmem astronomicznym jest algorytm obliczający godzinę wschodu i zachodu Słońca. Oblicza on pozycję Ziemi względem Słońca, uwzględniając ruch wirowy i obrotowy Ziemi. Godzina wschodu i zachodu Słońca obliczana jest dla konkretnych współrzędnych geograficznych i wyświetlana na wyświetlaczu.

    REGULACJA PODŚWIETLENIA:
    Stacja zmienia automatycznie poziom podświetlenia wyświetlacza. Posiada dwa tryby jasności podświetlenia: dzienny i nocny. Zamiast wykorzystać czujnik poziomu oświetlenia, wykorzystałem "wiedzę" stacji dotyczącą godzin wschodów i zachodów Słońca. Zmiana trybu następuje tuż po wschodzie lub zachodzie.

    BUFOR RAMKI:
    Cała zawartość ekranu przed wyświetleniem jest buforowana w zewnętrznej pamięci XRAM. Do wyświetlania tekstów wykorzystałem trzy różne typy czcionek.
    Do wyświetlania całej reszty użyłem zmodyfikowanej implementacji algorytmu Bresenhama.

    XRAM:
    W zewnętrznej pamięci XRAM przechowywany jest bufor ekranu i bufor wykresu temperatury. Przechowywane są też dane niezbędne do "przywrócenia systemu"
    po chwilowym zaniku energii lub resecie oraz kilka bajtów kontrolnych.

    PRZYWRACANIE SYSTEMU:
    Na wypadek przypadkowych resetów lub zawieszeń programu dodałem opcję "przywracania systemu". System po prostu wykrywa, jak dawno przed uruchomieniem działał poprawnie. Jeśli to było wiele godzin temu, to wykonywane jest pełne uruchomienie (kasowanie wszystkich zmiennych).
    Jeśli natomiast przerwa w działaniu systemu była np. kilkunastosekundowa,
    to system wraca do pracy, wykorzystując zmienne z pamięci XRAM. Weryfikuje wcześniej poprawność danych tej pamięci poprzez porównanie zmiennych kontrolnych w niej zawartych z wartościami oczekiwanymi.

    IKONY:
    W prawym górnym rogu ekranu widać kilka ikon.
    Pokazują one status karty pamięci (działa / nie działa / zapis) i czujnika temperatury (działa / nie działa).
    Ikona termometru z antenką wskazuje obecność i poziom sygnału czujnika radiowego. Poziom sygnału jest liczony na podstawie dzielenia liczby pakietów odebranych przez liczbę pakietów spodziewanych.
    Ikonka z baterią pokazuje poziom napięcia zasilania z ewentualnej baterii.
    Na razie jest nieaktywna, gdyż układ zasilany jest z zasilacza sieciowego.

    WYKRES TEMPERATURY:
    W dolnej części ekranu rysowany jest wykres temperatury. Właściwie jest on podzielony na dwa różne wykresy połączone ze sobą: wykres historyczny o zakresie 46 godzin i wykres prognozowany na kolejne 24 godziny.

    Część historyczna prezentuje wartości temperatur z dwóch ostatnich dni.
    Przewija się w miarę upływu czasu w lewo, a nowe wartości pojawiają się przy pionowej linii oddzielającej oba wykresy. Ten wykres przesuwany jest o jeden punkt w lewo co 20 minut. Wtedy dodawany jest kolejny punkt o wartości reprezentującej średnią arytmetyczną z 1200 ostatnich próbek temperatury dokonywanych co jedną sekundę (średnia 20-minutowa). Wykres jest rysowany metodą wielu połączonych ze sobą odcinków (dokładnie 138).
    Podczas każdej aktualizacji wykresu wykonywane jest autoskalowanie. Ustalane są wtedy wartości górnych i dolnych podziałek, a rozdzielczość pionowa ulega zmianie.
    Wykresy są rysowane poprawnie dla wartości temperatur od -40C do +100C.

    PROGNOZA:
    Jednym z najtrudniejszych etapów tworzenia tego projektu i najbardziej czasochłonnym było było opracowanie stosunkowo skutecznej metody prognozy temperatury.
    Najpierw myślałem nad metodą opartą na wykrywaniu trendów. Jednak efekty tej metody nie zadowalały mnie. Ostatecznie do prognozowania temperatury wykorzystałem sztuczną inteligencję.

    SZTUCZNA INTELIGENCJA:
    Mechanizmem sztucznej inteligencji w tym projekcie jest sztuczna sieć neuronowa.
    Pierwotnie chciałem stworzyć samouczącą się sztuczną inteligencję, opartą na behawioryzmie, uczeniu maszynowym lub sieci neuronowej. Ostatecznie zdecydowałem się na jednorazowo uczoną sztuczną sieć neuronową, ponieważ proces nauczania takiej sieci przebiega o wiele szybciej.
    Sieć neuronowa jest zbudowana z 48 neuronów i 512 synaps.
    Jest to perceptron wielowarstwowy, uczony metodą wstecznej propagacji błędów.
    Warstwa sensoryczna posiada 24 neurony. Warstwa synaptyczna (ukryta) posiada 16 neuronów. Warstwa wyjściowa posiada 8 neuronów.
    Sieć neuronowa uczona była z 10 letniej bazy danych klimatologicznych, zebranych dla miasta Wrocław.
    Do nauki przygotowałem na podstawie wymienionej bazy zestaw ok. 30 000 przykładów uczących (treningowych). Przykłady uczące były wstępnie losowo mieszane. Pozwoliło to osiągnąć zauważalnie lepsze wyniki. Proces uczenia sieci dla zbioru danych uczących z okresu 10 lat powtarzany był 50 000 razy. Nie zauważyłem efektu przeuczenia sieci (wyuczenia wzorców na pamięć). Całkowity czas uczenie sieci trwał 3 tygodnie. W tym czasie sprawdzałem wiele różnych modeli i wybrałem najbardziej optymalny.
    Zmieniałem liczbę neuronów w różnych warstwach, metodę uczenia sieci neuronowej, liczbę epok i inne drobiazgi.

    Efekty uczenia uznałem za zadowalające. Nie mam za bardzo możliwości porównania z innymi systemami, więc opieram się na własnych metodach weryfikacji.
    Poniżej wykres przedstawiający kompozycję danych prognozowanych i zmierzonych dla 9 dni (nie jest to prognoza 9 dniowa).
    Inteligentna Stacja Meteorologiczna V1 - sztuczne sieci neuronowe w praktyce

    Po sprawdzeniu poprawności prognozy temperatury dla różnych miesięcy okazało się, że średni błąd prognozy wynosi 1.7°C, a średni błąd względny wynosi 6.7%.
    Współczynnik korelacji Pearsona między danymi prognozowanymi a zmierzonymi osiągnął 0.96.
    Weryfikując funkcjonowanie sieci zauważyłem, że trochę lepiej ona sobie radzi latem niż zimą. Być może chodzi o gwałtowne skoki temperatur, występujące czasem w okresie zimowym.

    Modyfikacje:
    Planuję włożyć całość w odpowiednią obudowę i doinstalować kolejne czujniki. Myślę o czujnikach wilgotności, ciśnienia i czystości powietrza (najlepiej cyfrowych). Chcę zmienić baterię w czujniku zewnętrznym, najlepiej na jakąś niezamarzającą i wysokopojemną lub odpowiedni akumulatorek, zasilany małym panelem słonecznym.


    Fajne! Ranking DIY
    Potrafisz napisać podobny artykuł? Wyślij do mnie a otrzymasz pendrive 32GB.
  • #2 12 Gru 2011 06:29
    Jogesh
    Poziom 28  

    Wielkie ukłony dla autora. Czy mógłbyś zamieścić fotografie zmontowanego układu? Czy planujesz zamieścić schematy? Czy projekt jest komercyjny, czy czysto hobbystyczny?
    Pozdrawiam
    S.

  • #3 12 Gru 2011 07:05
    janek1815
    Poziom 38  

    W jakim języku zostało napisane te 5800 linii kodu?

  • #4 12 Gru 2011 07:54
    seba_x
    Poziom 31  

    Kawał dobrej roboty ! Czy prognoza się sprawdza ? W ilu procentach ? Mam wrażenie że prognoza powinna być oparta jeszcze o pomiar ciśnienia , wilgotności może jeszcze siły i kierunku wiatru ?

  • #5 12 Gru 2011 09:30
    marek1846
    Poziom 14  

    W to prognozowanie trochę wątpię. Wiadomo, że jutrzejsza pogoda zależy od tego jakie masy powietrza dotrą do nas. Choć to brzmi absurdalnie prognozować należy opierając się na przyszłości a nie przeszłości. Ten sposób zaproponowany przez autora sprawdza się w sytuacji ustabilizowanej pogody.

  • #6 12 Gru 2011 10:13
    Flaman11
    Poziom 17  

    marek1846 napisał:
    W to prognozowanie trochę wątpię. Wiadomo, że jutrzejsza pogoda zależy od tego jakie masy powietrza dotrą do nas. Choć to brzmi absurdalnie prognozować należy opierając się na przyszłości a nie przeszłości. Ten sposób zaproponowany przez autora sprawdza się w sytuacji ustabilizowanej pogody.


    Zgadzam się, w tamtym roku o tej porze, o ile dobrze pamiętam mieliśmy piękną zimę, a dziś za oknem sucho i świeci słońce. Natomiast sama metoda prognozowania jest bardzo ciekawa i złożona, nawet jeśli się nie sprawdzi na dłuższą metę, to i tak bym zniej nie zrezygnował :D

  • #7 12 Gru 2011 10:33
    Anonymous
    Użytkownik usunął konto  
  • #8 12 Gru 2011 12:13
    szulat
    Poziom 23  

    ikko napisał:
    Efekty uczenia uznałem za zadowalające. Nie mam za bardzo możliwości porównania z innymi systemami, więc opieram się na własnych metodach weryfikacji.

    ciekawe jak wypadłoby porównanie z następującym "algorytmem" prognozującym zawartym w jednym zdaniu: "jutro będzie tak jak dziś"
    ewentualnie druga wersja: również przewiduje że temperatura będzie taka jak poprzedniego dnia o tej samej godzinie, ale koryguje prognozę o takie samo przesunięcie o jakie obecna temperatura różni się od dnia poprzedniego

    mając wieloletnie dane mógłbyś łatwo obliczyć sprawdzalność takich prognoz stosując te same kryteria co dla twojego systemu. bo teraz to nawet trudno ocenić czy wyniki na takim poziomie sprawdzalności są łatwe czy trudne do osiągnięcia prostymi nieinteligentnymi metodami.

    tak czy inaczej - super konstrukcja! jeszcze nie widziałem sieci neuronowych w avr!

  • #9 12 Gru 2011 12:47
    grzeniu_pl
    Poziom 14  

    Projekt wyśmienity. Do dokładniejszego prognozowania pogody (temperatury)musiałbyś jeszcze uwzględnić ciśnienie atmosferyczne. Rozumię, że te kilka tysięcy linijek kody zostało napisane tylko w C ?

  • #10 12 Gru 2011 13:17
    slawek55
    Poziom 23  

    Moze głupie pytanie, ale czy AVR-DOS nie jest przypadkiem dla Bascoma? Z tego co pamietam to w sieci jest AVR-DOS, ale to tylko pod Bascom, jak sie to ma do języka C?

  • #11 12 Gru 2011 13:43
    michal.fita
    Poziom 14  

    To jest coś czego szukałem do pomiarów temperatury dla sterowania piecami akumulacyjnymi. Planujesz jakąś publikację tego projektu? Ew. sprzedaż?

    Co do wykresu i prognoz z NN, to brak mi na nim obrazowania jak prognoza ma się do rzeczywistego wyniku. Mogło by to być w formie obrazowania błędu lub pewnego wybranego punktu prognozy rysowanych razem z wykresem danych z aktualnych odczytów.

  • #12 12 Gru 2011 15:22
    nsvinc
    Poziom 35  

    Czy zastosowany NN jest feed-forward czy rekurencyjny? Jeśli rekurencyjny, to według jakiego modelu?... Jakoś nie udało mi się odfiltrować tej informacji z opisu...

  • #13 12 Gru 2011 15:29
    gothye
    Poziom 33  

    Sam projekt jest naprawdę bardzo fajny muszę to przyznać ale zastanawia mnie jedno , ponieważ do określania temperatury która jest uzależniona od innych czynników (nasłonecznienie , ciśnienie , wilgotność , lokalizacja) dlaczego te zmienne nie są jeszcze dodatkowo brane pod uwagę ??

  • #14 12 Gru 2011 15:34
    bolek
    Specjalista - oświetlenie sceniczne

    O! Cos innego, nieźle
    O ile obliczanie fazy ksieżyca, czy wsch/zach to dobry pomysł o tyle prognoza oparta na sieciach nie zapewni jakiś szczególnych efektów. Domyślam się że na ten wyjątkowy grudzień wszystko wzieło w łeb. O wiele lepiej przewidzisz pogodę w stylu szulata uzupełnionym o trend zmian ciśnienia

  • #15 12 Gru 2011 15:37
    Mipsa
    Poziom 12  

    No bardzo ciekawy projekt.
    Mnie również ciekawi język w którym zostało napisane oprogramowani.
    A co do samego działania brakuje mi nakładania się wykresów na prognozowaną temp. temperatury aktualnej . Co w istocie było by prostym sprawdzaniem w jakim stopniu prognoza sie sprawdziła .

    Podsumowując zapowiada się ciekawie.
    Może doczekamy się więcej fotek wnętrza, a może nawet pomocnych materiałów do złożenia takiej stacji.

    Pozdrawiam

  • #16 12 Gru 2011 16:25
    nsvinc
    Poziom 35  

    Prognoza oparta o NN właśnie da wymierne efekty, tyle że nie w małym systemie gdzie wejściem jest tylko temperatura(?). Układ musiałby uczyć się zależności temperatury czy opadów nie tylko na podstawie historii temperatury,ale również historii ciśnienia, wilgotności, zachmurzenia, opadów itp. Przecież mniej więcej o jakiś rodzaj NN oparte są profesjonalne systemy prognozowania, gdzie zużywa się na to setki, jeśli nie tysiące, GFLOPS...

  • #17 12 Gru 2011 17:04
    _WITAXING_
    Poziom 9  

    No naprawę szczęka opada. To chyba pierwszy taki projekt na elektrodzie. Bardzo ciekawi mnie jak wygląda ta "sztuczna inteligencja". Czy mógłby kolega zrobić zdjęcie płytki a w szczególności tej inteligencji. Na pewno każdy chciałby to zobaczyć.

    Pozdrawiam

  • #18 12 Gru 2011 17:11
    nsvinc
    Poziom 35  

    zdjęcie "tej inteligencji"? Ekhem... To autor ma zrobić zdjęcie scalaka w TQFP64? Przecież sieć NN jest zaimplementowana w oprogramowanie mikrokontrolera i jest po prostu programem; a nie sztucznie hodowane neurony!...

  • #19 12 Gru 2011 17:13
    szulat
    Poziom 23  

    nsvinc napisał:
    Przecież mniej więcej o jakiś rodzaj NN oparte są profesjonalne systemy prognozowania, gdzie zużywa się na to setki, jeśli nie tysiące, GFLOPS...

    na sieciach neuronowych działają tylko przepowiednie góralskie ;) natomiast meteorologowie symulują w swoich wypasionych komputerach nie neurony tylko zjawiska fizyczne w atmosferze

  • #20 12 Gru 2011 17:17
    nsvinc
    Poziom 35  

    For sure? Bo zdawałoby się, że te symulacje są wspomagane obliczeniami z jakichśtam odpowiednio dostosowanych sieci neuronowych... Przecież NN to przeważnie pomoc w obliczeniach, a nie treść właściwa zadania...

  • #21 12 Gru 2011 19:54
    And!
    Admin grupy Projektowanie

    Jak długo zewnętrzny czujnik działał na baterii 9V ?
    Może warto zasilić zewnętrzny czujnik z ogniwa słonecznego i akumulatorka/kondensatora ?

    Warto opublikować schematy i zdjęcia płytek oraz całości urządzenia.

    W jakim programie budowałeś oraz trenowałeś SSN ?

    Warto pomyśleć o dodatkowych neuronach wejściowych,
    dla ciśnienia atmosferycznego, oraz ew. wilgotności.

    Obecnie na warstwę wejściową podawane są kolejne próbki temperatury,
    zapisane w czasie ?

    Jak długo przelicza się ostateczna struktura sieci z zadanymi wagami,
    na procesorze AVR ?

    Robiłem kiedyś podobne próby,
    i najbardziej znaczącymi danymi była:
    temperatura oraz ciśnienie w mniejszym stopniu wilgotność/punkt rosy oraz opady,
    w najmniejszym stopniu kierunek i siła wiatru.

  • #22 12 Gru 2011 20:59
    ikko
    Poziom 11  

    kociątko napisał:
    Czy mógłbyś zamieścić fotografie zmontowanego układu? Czy planujesz zamieścić schematy? Czy projekt jest komercyjny, czy czysto hobbystyczny?.

    Jest to projekt hobbystyczny, a co do fotografii to spróbuję wkrótce coś dołączyć.

    janek1815 napisał:
    W jakim języku zostało napisane te 5800 linii kodu?

    W BASCOMie i asemblerze.

    seba_x napisał:
    Czy prognoza się sprawdza ? W ilu procentach ? Mam wrażenie że prognoza powinna być oparta jeszcze o pomiar ciśnienia , wilgotności może jeszcze siły i kierunku wiatru ?

    Średni błąd względny prognozy wynosi 6.7%. Do obliczenia błędu wykorzystałem 90 losowo wybranych prognoz z okresu 365 dni.
    Myślę, że to całkiem niezły wynik jak na analizę samej temperatury. Co do pomiaru ciśnienia, wilgotności czy prędkości wiatru to musiałbym nieco rozbudować projekt.
    Nie wystarczy tylko dołączyć kilku dodatkowych przyrządów pomiarowych, ale też trzeba przygotować serię danych treningowych koniecznych do nauczenia sieci neuronowej.
    Warstwa sensoryczna się rozszerzy, a sama sieć przerosłaby wtedy rozmiary mojej ATmegi.
    Poza tym, jeśli zdecyduję się na odpowiednie modyfikacje zwiększające sprawdzalność (dodatkowe czujniki itp), to chcę mieć jakiś model odniesienia.
    Ten projekt będzie stanowił taki model dla ewentualnych przyszłych wersji.

    lukkk napisał:
    Czy dobrze zrozumiałem ze prognoza nie "uczy się" na mierzonych przez siebie temperaturach.
    (Jeśli tak, to chyba dokładność z czasem będzie spadać?)
    Jedna rzecz mnie tylko zastanawia, a mianowicie żywotność karty przy zapisie co minutę.
    (proponowałbym zapis na eeprom-a, a na kartę raport co 24h)
    Pozdrawiam

    Prognoza nie doucza się, ale nie sądzę żeby jej dokładność miała spadać. Przeanalizowałem wartości temperatur z ostatnich 10 lat i nie zauważyłem jakichś znaczących zmian.
    Co do karty pamięci to ciekawa sugestia, ale zauważyłem jedną rzecz. Karty SD mają teoretyczną trwałość do ok 100 000 zapisów.
    Podczas testów mających na celu wykończenie karty, przekroczyła ten limit kilkukrotnie i nadal działa. Być może jeszcze zmniejszę częstotliwość zapisu.

    slawek55 napisał:
    Moze głupie pytanie, ale czy AVR-DOS nie jest przypadkiem dla Bascoma? Z tego co pamietam to w sieci jest AVR-DOS, ale to tylko pod Bascom, jak sie to ma do języka C?

    Z tego co wiem, AVR-DOS jest tylko pod BASCOMem.

    nsvinc napisał:
    Czy zastosowany NN jest feed-forward czy rekurencyjny?

    Feed-forward.

    michal.fita napisał:
    Planujesz jakąś publikację tego projektu? Ew. sprzedaż?

    Nie mam jeszcze konkretnych planów co do tego projektu.

    michal.fita napisał:
    Co do wykresu i prognoz z NN, to brak mi na nim obrazowania jak prognoza ma się do rzeczywistego wyniku. Mogło by to być w formie obrazowania błędu lub pewnego wybranego punktu prognozy rysowanych razem z wykresem danych z aktualnych odczytów.

    Podczas testów jakości prognozy widziałem dziesiątki takich porównań. Wszystkie wyglądały podobnie,
    dlatego też nie czułem potrzeby wizualizowania tego w czasie rzeczywistym.
    Testowałem sieć podkładając jej temperatury z różnych okresów z przeszłości z bazy danych i porównywałem
    temperatury prognozowane do tych które zostały zmierzone dla prognozowanego okresu.
    Inny sposób to porównanie wartości prognozowanych do tych później zmierzonych.

    gothye napisał:
    Sam projekt jest naprawdę bardzo fajny muszę to przyznać ale zastanawia mnie jedno , ponieważ do określania temperatury która jest uzależniona od innych czynników (nasłonecznienie , ciśnienie , wilgotność , lokalizacja) dlaczego te zmienne nie są jeszcze dodatkowo brane pod uwagę ??

    Myślę, że w ogóle jest trudno prognozować temperaturę dysponując tylko danymi lokalnymi.
    Trudno powiedzieć jak bardzo poprawiłyby się wyniki prognozy po uzupełnieniu systemu o dodatkowe czujniki.
    Ważne są też same warunki pomiarowe. To nie bez różnicy czy czujnik będzie leżał na asfalcie czy w zacienionym miejscu.
    Nasłonecznienie, wilgotność, ciśnienie, prędkość i kierunek wiatru, pora roku czy występowanie opadu, to zapewne tylko fragment wszystkich czynników mających wpływ na temperaturę.
    Jeśli uwzględnię je w procesie nauczania sieci neuronowej, to jest możliwe, że poprawi się jakość prognozy, ale trudno o kompletne wieloletnie dane dotyczące np. poziomu zachmurzenia.

    bolek napisał:
    Domyślam się że na ten wyjątkowy grudzień wszystko wzieło w łeb.

    Nie jest tak źle. Jakość grudniowej prognozy nie odbiega od tej na załączonym wykresie.

    Mipsa napisał:
    A co do samego działania brakuje mi nakładania się wykresów na prognozowaną temp. temperatury aktualnej . Co w istocie było by prostym sprawdzaniem w jakim stopniu prognoza sie sprawdziła .

    Nie chciałem aby nakładające się wykresy ograniczały czytelność. W końcu mogą być tylko czarne na białym tle.
    Myślałem raczej nad implementacją jakiegoś prostego algorytmu autoweryfikacji pokazującego procentowy błąd ostatniej prognozy lub średni błąd z np. 100 ostatnich prognoz.

    And! napisał:
    Jak długo zewnętrzny czujnik działał na baterii 9V ?
    Może warto zasilić zewnętrzny czujnik z ogniwa słonecznego i akumulatorka/kondensatora ?

    Nie pamiętam, ale mniej niż miesiąc. Miał stosunkowo duży średni pobór prądu.
    Może gdy zastosuję kiedyś jakiś czujnik 3V to nadajnik będzie działać dłużej.
    Myślę o czujnikach cyfrowych z kompensacją temperatury: ciśnienia lub wilgotności z wbudowanym termometrem.
    Ewentualnie dodam jakieś ogniwo słoneczne z konwerterem typu step-up.

    And! napisał:
    Obecnie na warstwę wejściową podawane są kolejne próbki temperatury,
    zapisane w czasie ?

    Sieć zbiera dane przez 72 godziny zanim pokaże prognozę.

    And! napisał:
    Jak długo przelicza się ostateczna struktura sieci z zadanymi wagami,
    na procesorze AVR ?

    Około 50ms.

    ----------------------------------------

    Dodam, że sieć nie odtwarza wzorców temperatury z przeszłości, więc nie robi jej różnicy to, że mamy ciepłą zimę. Nauczyła się tylko analizować zależności między przeszłą, a przyszłą temperaturą. Może niedługo zaprezentuję wykresy z błędami prognozy dla różnych miesięcy.

  • #23 12 Gru 2011 21:11
    djkomprez
    Poziom 21  

    Wszystko fajnie, pięknie :) ale 5800 linii kodu w takiej stacji ? to tylko Bascom
    jest do tego zdolny :)

    Co do sieci NN, jak koledzy wspomnieli wcześniej, taka prognoza ma się nijak
    do prognozy meteo, Ty wyliczasz wypadkową i to przeanalizowana wg.
    archiwalnych pomiarów. To Ci nic nie da. Prawda jest taka że sami prognozy
    nie przewidzimy za pomocą standardowych obliczeń. Do tego buduje się specjalistyczne modele pogodowe, które i tak czasem zawodzą tak więc
    sam sobie możesz odpowiedzieć na sprawdzalność Twojej temperatury.

    Ja sam zbudowałem stację meteo jako pracę dyplomową na studiach,
    ale oparta o serwer przetwarzający dane. Prognoz nawet nie implementowałem
    bo raz: niedokładne, dwa: chciałem mieć dobrą i sprawdzoną w miarę pogode
    i takiego użyłem wyliczeń modelu prognozy z Interdyscyplinarnego Centrum Modelowania.

    A co do czujników cyfrowych, ciśnienia - będziesz miał okropny błąd :) MPX-y
    są starsznie podatne na "wariowanie", są jeszcze HP02S ale te z kolei są
    oporne na oprogramowanie :) Ja u siebie użyłem MPX4115 wyskalowany wzm. op.
    tak aby rozszerzyć skale działania napięcia. Efekty są wymierne i dość zadowalające (0V-950hpa, 5v-1040hpa), dodatkowo czujnik wilgotności
    z kompensacją temperatury.

  • #24 12 Gru 2011 21:47
    And!
    Admin grupy Projektowanie

    Ciekawy projekt na debiut.

    Z ciekawości można sprawdzić jak sieć,
    odpowie na sinus, prostokąt, trójkąt, i piłę,
    ciekawy byłby też przebieg sinus o zwiększającej się częstotliwości.

  • #25 12 Gru 2011 22:05
    grzeniu_pl
    Poziom 14  

    ikko napisał:
    W BASCOMie i asemblerze.

    Rozumię, że asembler został użyty w momentach krytycznych czasowo ale czy tylko ?

  • #26 12 Gru 2011 23:18
    lemgo
    Poziom 12  

    ikko napisał:
    Sieć neuronowa uczona była z 10 letniej bazy danych klimatologicznych, zebranych dla miasta Wrocław.
    Do nauki przygotowałem na podstawie wymienionej bazy zestaw ok. 30 000 przykładów uczących (treningowych). Przykłady uczące były wstępnie losowo mieszane. Pozwoliło to osiągnąć zauważalnie lepsze wyniki. Proces uczenia sieci dla zbioru danych uczących z okresu 10 lat powtarzany był 50 000 razy.


    Szacunek za projekt.
    Skąd się bierze/kupuje historyczne dane meteo?

  • #27 12 Gru 2011 23:28
    leonow32

    Poziom 30  

    Pewnie zdecydowaną większość miejsca w pamięci zajmuje tablica z danymi do sieci, mam rację? To że program ma 5800 linii i zajmuje 80% Atmegi128 niewiele mówi... Równie dobrze można by pamięć zapchać melodyjką WAV, a zasadniczy program miałby ledwie kilkaset linii.

    Swoją drogą, szacun że do ATmegi wpakowałeś sieć neuronową. Znam ludzi, który twierdzą, że AVR-y nadają się tylko do mrugania diodami, a HD44780 to szczyt możliwości :D jak widać, możliwości procesora ograniczone są tylko wyobraźnią programisty :)

  • #28 13 Gru 2011 09:53
    drzasiek
    Specjalista - Mikrokontrolery

    A ja mam pytanie odnośnie "sieci neuronowych" bo to jest coś ciekawego, przyszłościowego myślę czym warto by się zainteresować.
    Jeszcze się tym nie interesowałem, dlatego zadam pytanie żółtodzioba:
    Skoro podłączyłeś zewnętrzną (względnie dużą) pamięć RAM to pewnie ze względu na to "uczenie się" tak? Czyli wszystko co ta sieć się nauczyła przez te 3 tygodnie przechowywane jest w pamięci ulotnej?

  • #29 13 Gru 2011 12:21
    Rolandd
    Poziom 11  

    Sieć została pewnie nauczona na komputerze a do atmegi zostały pewnie wklepane tylko wagi neuronów po procesie uczenia oraz topologia sieci.

  Szukaj w 5mln produktów