Gdy zaczynałem moją przygodę z AVR, jedną z pierwszych zrobionych przeze mnie konstrukcji był zegar z termometrem, reprezentujący wartości na przemian co 7 sekund na czterech siedmiosegmentowych wyświetlaczach. Nie było tam żadnego układu RTC, mózgiem był attiny2313. Mimo, że to był jeden z pierwszych w moim życiu projektów na uC to zegar był naprawdę dokładny (jak na tamtejsze moje umiejętności). W ciągu roku różnica wynosiła może 2 minuty, odliczanie na timerze. Służył mi kilka lat, jedyny problem to usytuowanie czujnika temperatury. Był to DS18b20, na ścianie od strony wschodniej. Powodowało to latem mocne przekłamanie wyników w godzinach porannych, mimo stosowania białych osłon na czujnik. W końcu, na początku roku padła decyzja, żeby stworzyć coś nowego. Powoli zacząłem kompletować części. Ogólnie nie jestem zwolennikiem całego arduino, ale obecność tego na rynku ma dla mnie jeden, bardzo wielki plus. Dzięki tak dużej popularności (i przez to konkurencji) dostępne są na rynku przeróżne moduły w przystępnych cenach.
Zaczęło się od zakupu czujnika wilgotności DHT22. Ma on całkiem przyzwoite parametry, w przeciwieństwie do DHT11. Zakupiłem również czujnik ciśnienia atmosferycznego BMP180. Jako czujnik temperatury nieśmiertelny DS18b20. Może ktoś zapytać dlaczego, skoro zarówno DHT jak i BMP również mają możliwość pomiaru temperatury. Czujnik dallasa ma jednaj lepsze parametry.
Niestety możliwości montażu części pomiarowej uniemożliwiły wykonywanie pomiaru prędkości i kierunku wiatru. Do zmierzenia został jeszcze opad. Początkowo myślałem o wykonaniu prostej płytki do wykrywania obecności opadu. Jednak zagłębiając się w informację o pomiarze opadu, dowiedziałem się, że można w prosty sposób wykonać pomiar opadu. Najprościej zrobić to za pomocą deszczomierza korytkowego. Zasada jest prosta. Dwa symetryczne korytka podparte centralnie. Po napełnieniu jednego, zachwiana zostaje równowaga, korytko przechyla się i poprzez kontaktron daje impuls. To odpowiada pewnej, stałej wartości opadu. Jakiś czas rozglądałem się za uszkodzonymi fabrycznymi rozwiązaniami. Niestety wtedy nie znalazłem nic ciekawego, jak już było, to cena zaporowa.
Ale skoro zasada działania taka prosta, to czemu nie zbudować samemu? Zaczęło się od budowy korytka. Do tego celu wykorzystałem materiał prosty w obróbce, laminat dwustronny. Wyciąłem odpowiednie kształty i polutowałem:
Potem pomalowałem i dorobiłem całą resztę: (
Już mokre po pierwszych testach )
Jako obudowa zastosowałem rurę PCV 110mm, do tego biały lejek z marketu.
Tak prezentuje się gotowy deszczomierz:
Potem już tylko pomiary i przeliczenia, co ile występuje impuls. Wyszło 0,2mm. Trochę się natrudziłem, aby 2ml wody powodowało przechylenie korytka, ale udało się.
Gdy posiadałem już wszystkie czujniki, w wolnych chwilach zajmowałem się ich uruchamianiem. Nie lubię korzystać z gotowców (w zasadzie wcale z nich nie korzystam
), poza tym jak znalazłem jakiś program dla BMP180 to zajmował 98% procesora. Napisałem całkowicie własne procedury opierając się na dokumentacjach technicznych modułów. Wykonałem również odpowiednią osłonę na ich umiejscowienie (wzorując się na profesjonalnych rozwiązaniach).
Są to podstawki pod doniczki, koniecznie ciemne (aby nie przepuszczały światła!), pomalowane na biało i skręcone z sobą z odstępami na swobodny przepływ powietrza.
Pozostało już tylko wykonać płytkę dla części pomiarowej, oczywiście w eagle:
Jako, że płytka będzie w dość niekorzystnych warunkach, postanowiłem ją trochę lepiej zabezpieczyć przed utlenianiem (od razu zaznaczam, to nie jest soldermaska, ma jedynie na celu zatrzymać utlenianie miedzi).
Kształt płytki podyktowany został poprzez obudowę hermetyczną, dodane zostały dławnice kablowe.
Dzięki wykonaniu małych nacięć na dole obudowy, płytki nie trzeba przykręcać.
W układzie pomiarowym wykorzystałem atmege8, początkowo do komunikacja planowałem wykorzystać UART, dlatego też kwarc z tych „RS-o lubnych”
Na koniec całość poleciała za okno:
Przyszedł więc czas na wykonanie drugiej części. Zastanawiałem się jakiś czas, w jaki sposób prezentować dane. Typowe wyświetlacze alfanumeryczne odpadały ze względu na ich rozmiar i czytelność z większych odległości.Myślałem nad jakimś mniejszym wyświetlaczem LCD (około 7-10”), jednak w końcu zdecydowałem się na chyba najlepsze rozwiązanie w stosunku czytelność /pobór prądu. Wybór padł na wyświetlacze siedmiosegmentowe. Prosta matematyka, wyświetlaczy musi być 16. W prawdzie multipleksowałem już bez problemu 10 wyświetlaczy jednocześnie, jednak musimy dać wtedy dużo większy prąd chwilowy, aby średni był odpowiedniej wartości. Dlatego tutaj postanowiłem już podzielić to na 4 grupy po 4 wyświetlacze.
Jakiś czas temu udało mi się dorwać prawie nieużywane wyświetlacze SA30-21EWA. Ich wysokość to 11cm, wysokość znaku 7,6cm! Napisał bym, że są duże, ale w porównaniu do
BIG Magic RGB Clock w wykonaniu syna Pana Mirka, są to mrówki. Więc umówmy się, duże jak na zastosowanie domowe
Pozostałe wyświetlacze to już typowo znak 14,3mm (0,56”). Trochę wymieszane WK i WA. To dlatego, że czerwonych posiadam naprawdę spore zapasy WK, również zielone w zapasach znalazłem WK. Pozostałe dwa kolory musiałem zakupić, a były tylko WA. Tak więc przystąpiłem do zaprojektowania i wykonania płytki. Aby wyświetlacze były odpowiednio rozmieszczone, płytka ma swoje rozmiary-23,5x10cm. Niestety z braku dwustronnego laminatu o tych wymiarach w sklepie, musiałem zastosować jednostronny i kilka zworek.
Następnie przyszedł czas na wykonanie PCB, oczywiście metodą żelazkową. Zresztą płytka zaprojektowana tak, że firma by jej nie wykonała, niektóre ścieżki są za blisko, ale wykonując płytkę samemu w domu, z doświadczeniem kto mi tego zabroni?
Niecałe 12 minut i płytka była wytrawiona, żadnych zwarć, żadnych podtrawień (
jeszcze trochę mokra )
Do tego warstwa opisowa:
No i polutowana już płytka:
Widać na niej jeden moduł oraz miejsce na drugi, ale o tym za chwilę.
Potem pierwsze testy samego multipleksowania:
Do obsługi wyświetlaczy wykorzystałem 5 rejestrów przesuwnych z zatrzaskiem 74HC595, cztery połączone kaskadowo do sterowania segmentami i jeden do wspólnych anod/katod wyświetlaczy. Aby sygnał aktywny był wspólny dla wyświetlaczy WA i WK zastosowałem negator na wejściu ostatniego rejestru, dla wyświetlaczy godzin nie było to konieczne, gdyż ULN2003 zapewnia negację sygnału.
Na płytce znajduje się PCF8563 wraz z podtrzymaniem bateryjnym. Znajdują się tam również dwa moduły, jeden to nRF24l01, bajecznie tani (nabyłem niedawno większą ilość), komunikacja po SPI. Do czego on służy? Ano od kiedy posiadałem wspomniany w pierwszych zdaniach zegar z termometrem, zaczęły się wędrówki innych domowników do mojego pokoju, w celu sprawdzenia temperatury. Potem wykonałem już drugi termometr z DS18b20, który teraz przerobiłem dodając nRF24l01, aby odczyty były bardziej dokładne. Tak więc temperatura wysyłana jest drogą radiową (2,4GHz) do innego pokoju. Zastosowałem tam procesor attiny2313, obudowa to odpowiednio ukształtowany kawałek uszkodzonego routera
Drugi moduł to ESP8266, internetowy moduł wi-fi (niestety nie atnel-wi-fi
wykorzystywałem to, co miałem w swoich zapasach ). Służy on do synchronizacji czasu z internetu, oraz wysyłania danych na www, ale o tym za chwilę. Synchronizacja czasu odbywa się raz dziennie, dodatkowo po każdej utracie zasilania. W razie niedostępności serwera, braku internetu itp. czas przetrzymuje układ PCF.
Coś na temat samej komunikacji między układem pomiarowym, a układem do prezentowania wyników. Początkowo planowałem (z pewnych względów) komunikację poprzez UART, potem jednak z tego zrezygnowałem i postanowiłem wykorzystać najprostszą komunikację –szeregową synchroniczną, mamy więc linię zegarową i linię danych, układ pomiarowy pracuje jako slave. Dane odczytywane i odświeżane na wyświetlaczach są co 5 sekund. Wysyłana jest również suma kontrolna (CRC), bo pomimo 5 metrowego przewodu ekranowanego, czasem coś może zakłócić komunikację.
Jeśli chodzi o zasilanie, to tutaj poszedłem trochę na skróty. Postanowiłem tym razem nie tworzyć od podstaw, a jedynie przerobić to co było pod ręką. A co było? Kilka zasilaczy z DVD, napięcia pasują prawie że idealnie. Z wszystkich które miałem wybrałem jeden, o najlepszej budowie. Niestety większość z ich to budżetówki o tak małych rdzeniach, że podczas pracy bez obciążenia znacznie się nagrzewają. Na szczęście znalazł się jeden, porządnie zbudowany. Usunąłem linię -12V, 22V, 30V,7V,3.3V. Zostały mi napięcia 5V i 12V dla dla wyświetlaczy godzin. Jak jednak wiadomo występują pewne spadki napięcia na układzie ULN, tranzystorach, więc potrzebowałem napięcia 13.7V. Jedna dioda prostownicza w układzie sprzężenia zwrotnego załatwiła sprawę, w takich przetwornicach zazwyczaj stabilizacja jest na linii 5V. W prawdzie napięcie na linii 12V (odpowiednio 13.7V) zależy teraz trochę od obciążenia linii 5V to jednak zastosowałem diodę o dobrych parametrach. Pomiary wykazały, że jest ok
Tak więc skoro dane mają być prezentowane na stronie www, to strona się tworzyła, ja w tym czasie przystąpiłem do wykonywania obudowy.
Udało mi się dorwać dość spory kawał laminatu dwustronnego 1,5mm, dla porównania na zdjęciu linijka 30cm:
Laminat ma to do siebie, że jest prosty w obróbce i łatwy do łączenia. Mimo to, było z tym naprawdę sporo roboty i zajęło sporo czasu. Początkowo polutowałem coś takiego:
Mogą niektórych zastanawiać dodatkowe otwory. Dwa są w miejscach anten modułów, bo wiadomo, że laminat jest cały z miedzi i pewnie by tam coś ekranowało. Dodatkowy jest w miejscu baterii, dlaczego? Zielone wyświetlacze miały krótkie nóżki, więc nie mogłem wystawić wyświetlaczy wyżej płytki. Zastosowałem najniższe gniazdo baterii jakie miałem a i tak zabrakło 1mm, ale tego i tak nie będzie widać
Następnie po oczyszczeniu i odtłuszczeniu laminatu pomalowałem całą płytę tylną oraz wnętrze części przedniej obudowy na czarno:
Myślę, że na uwagę zasługuje sposób zamykania obudowy. Żadne śrubki nie wchodziły w grę. Dodatkowo aby mieć możliwość regulowania odległości na każdym rogu (aby ustawić równe odstępy wyświetlaczy od warstwy z filtrami) wymyśliłem dość ciekawe rozwiązania. W każdym rogu wlutowałem mosiężną gwintowaną tulejkę. Wkręcam w nią śrubę z łbem płaskim, na który nakleiłem magnes neodymowy (nakleiłem, żeby magnes zawsze zostawał na śrubce). Na części przedniej obudowy w rogach przylutowałem blaszki. Teraz wkręcają lub wykręcają poszczególną śrubkę, reguluje odległość w każdym rogu. Gdyby kogoś interesowało, czy magnesy nie są za małe, stanowczo nie. Początkowo zastosowałem większe, ale wtedy były już problemy z otwarciem obudowy
Każdy z dużych wyświetlaczy przykręcony za pomocą 4 śrub, wyświetlacze miały gotowe otwory
Czas na pierwsze przymiarki, jeszcze nie wygląda to za ładnie:
No i przyszedł czas na wykonanie panelu przedniego. Już od dawna miałem w głowie wizję, jak będzie to wyglądać, miało być prosto, czytelnie:
Jednak po dłuższym namyśle (brałem pod uwagę między innymi to, że w niektórych drukarniach nie zaczernia całkowicie papieru), doszedłem do wniosku, że jednak za ciemne.
Zdecydowałem się na używany już w innym projekcie kolor:
Udałem się do najbliższej agencji reklamowej i wydrukowałem na papierze o gramaturze 300, jeden połysk i jeden mat. Rozmiar wydruku A3, koszty całe 2,5zł/sztuka
Pomimo, że układ prosty, zaprojektowanie tego również zajęło kilka godzin, trzeba było wszystko precyzyjnie zwymiarować i przenieść do programu graficznego.
Po namyśle, porównaniu, wybrałem połysk.
Teraz potrzebny był precyzyjny nożyk, dobra linijka, najlepiej aluminiowa (dłuższe plastikowe często są krzywe) i klej, przy tej grubości papieru pozwoliłem sobie na butapren.
Pierwsze przymiarki, już nabiera to wyglądu:
Wcześniej wkleiłem filtry dla wyświetlaczy. Jakiś czas myślałem, skąd takie pozyskać. Pojechałem do pierwszego lepszego marketu, a że jest sierpień, więc jest wysyp artykułów szkolnych. Znalazłem kolorowe koszulki w formacie po rozłożeniu A3, miały odpowiednią sztywność, przeźroczyste, a nie matowe. Wręcz idealne:
No i dopiero teraz zaczęło to wyglądać:
Zostało jeszcze powiesić na ścianę (
kable jeszcze niepoukładane)
Schemat wygląda następująco:
Ktoś dociekliwy zauważy brak kondensatora od AREF do masy. Od początku planowałem regulację jasności świecenia wyświetlaczy (do tego celu wykorzystałem fototranzystor). Niestety na etapie projektowania zapomniałem o tym i wspomniało mi się ma samym końcu, gdy płytka już była ukończona. O ile dodałem rezystor i miejsce na wprowadzenie przewodów dla fototranzystora, o kondensatorze zupełnie zapomniałem. Jednak nie ma co popadać w paranoję, to nie jest precyzyjny układ pomiarowy, jako napięcie odniesienia wykorzystuję napięcie zasilania i bez kondensatora również działa- bo czemu miało by nie działać. A że mamy gorsze parametry przetwornika ADC? - to tylko pomiar oświetlenia.
Sam program na oba układy został napisany w (tak, muszę to powiedzieć
) bascomie. Był to chyba ostatni program napisany przeze mnie w bascomie. Od września zabieram się za C, myślę, że zaopatrzę się w bluebook
jak to tradycyjnie u mnie nie udostępniam źródeł. Dla zainteresowanych wsady do procesorów, jeśli jest ktoś zainteresowany realizacją konkretnego zagadnienie odpowiem w komentarzach.
Słów kilka o samym ciśnieniu. BMP180 wykonuje pomiar ciśnienie bezwzględnego, jest to ciśnienie, jakie obecnie działa na czujnik. Jednak my przyzwyczajeni jesteśmy do ciśnienia względnego, czyli zredukowanego do poziomu morza. Widomo, że ze zmianą wysokości, zmienia się też ciśnienie. Projektant BIG Magic LED RGB CLOCK nie miał z tym problemu, gdyż ZSEE w szczecinie leży prawie że na poziomie morza, zaledwie kilka metrów różnicy. Moja stacja położona jest 250m nad poziomem morza, więc konieczne były obliczenia. Ciśnienie względne oblicza się na podstawie wartości ciśnienia bezwzględnego, aktualnej temperatury oraz wysokości n.p.m. Obliczenia wykonuję bez wykorzystania liczb zmiennoprzecinkowych, udało mi się wyciągnąć uproszczony wzór na obliczenie tego ciśnienia. Maksymalny odchył od wartości realnej to 1hPa, a obliczeń jest dużo mniej, więc jak na moje potrzeby wystarcza. Natomiast na stronie WWW obliczenia wykonywane są z użyciem wzorów „precyzyjnych”. Gdyby kogoś interesował wzór uproszczony, proszę o kontakt na PW.
Jeśli chodzi o stronę WWW zdałem się na brata, informatyka, który takim czymś zajmuje się na co dzień. W prawdzie wykonywał ją bez udziału grafika (tworzenie strony to zazwyczaj wspólna praca kilku speców), ale jak na moje oko i tak jest idealna
Co minutę poprzez zapytanie GET na stronę wysyłane są odczyty temperatury, ciśnienia, wilgotności i opadu. Resztą zajmuj serwer. Generowane są wykresy dzienne, miesięczne i roczne. Dla ciśnienia jest to zarówno wartość względna jak i bezwzględna. Prezentowane są również wartości maksymalne/minimalne. Co tu dużo mówić, sami zobaczcie.
http://meteo.2eu.pl/Strona równie ciekawie prezentuje się na telefonach komórkowych.
Podziękowania:Chciałbym tutaj bardzo podziękować bratu za pracę włożoną w stworzenie strony i udostępnienie domeny.
Podziękowania kieruję również w stronę właściciela firmy
slotex.pl, za udostępnienie serwera.
Występują jeszcze dwa problemy, które muszę rozwiązać. Błędem był zakup niebieskich wyświetlaczy. Pomimo zastosowania rezystorów 4k7 (tak, to nie jest pomyłka) próby na przeróżnych filtrach (nawet łączonych kolorach) kolor niebieski ciągle z większej odległości wygląda na rozmazany.
Druga sprawa, przy mocnych wiatrach z północy albo południa deszczomierz potrafi wygenerować błędny impuls, nic dziwnego, jest on mocno odsunięty od ściany. Muszę ustabilizować konstrukcję poprzez wspawanie dodatkowego wzmocnienia. Dlatego na chwilę obecną wartość opadu może być błędna, myślę, że to kwestia kilku dni. Z tego też powodu mogą być małe przerwy w funkcjonowaniu strony.
W cały projekt włożyłem naprawdę sporo pracy i czasu, ale patrząc na funkcjonalność myślę, że było warto. Jego wykonanie było bardzo rozłożone w czasie. Plany była na początku roku, osłona wraz z czujnikami powstała już w marcu, deszczomierz na początku lipca, dopiero teraz, gdy miałem więcej czasu prace wyraźnie przyśpieszyły.
Teraz marzy mi się jeszcze stworzenie widget-u do androida z aktualnymi odczytami. Nie jest to sprawa pilna, ale myślę, że kiedyś powstanie -tym bardziej teraz, gdy Pan Mirek udostępnia takie świetne poradniki.