Witam wszystkich majsterkowiczów,
dzisiaj chciałbym zaprezentować wam jak zrobić internetową stację meteorologiczną, dzięki której będziemy mogli sprawdzić aktualną temperaturę w naszym domu i za oknem, ciśnienie oraz sumę opadów, z każdego miejsca w którym mamy dostęp do internetu.
Jest to mój pierwszy artykuł na Majsterkowie i pierwszy projekt na Arduino. Jeżeli zauważycie jakiekolwiek błędy piszcie w komentarzach, to poprawię artykuł. ;)
Co nam będzie potrzebne?
• Arduino, w moim przypadku Leonardo
• Moduł sieciowy ENC28J60
• Czujnik temperatury DS18b20, w moim przypadku 2 sztuki
• Czujnik opadów deszczu YL-83
• Publiczne IP
Biblioteki:
• etherShield
• ETHER_28J60
• OneWire
• DS18B20.
• Wire
• DallasTemperature
• BMP180
Od czego zacząć?
Na początku trzeba wszystko podłączyć tak jak na schemacie poniżej.
Następnie wgrywamy kod do naszego Arduino, jeżeli chcemy zmienić IP naszego komunikatora na dostępny w naszej sieci, zmieniamy go w wyznaczonej linijce kodu.
Podłączamy teraz nasz moduł sieciowy do sieci. Aby sprawdzić czy wszystko działa lokalnie czyli w naszej sieci, wpisujemy ustawiony adres IP do paska adresu naszej przeglądarki.
Aby można było korzystać z naszej stacji spoza sieci lokalnej, musimy przekierować porty, i skonfigurować router z publicznym IP, czyli DDNS, jeżeli nie wiemy czy mamy publiczne IP wystarczyć wejść w link poniżej.
Jak to zrobić można zobaczyć w internecie, zależy od routera. Jeżeli już przekierujemy port na 80, i będziemy posiadali publiczne IP możemy sprawdzić aktualne dane z naszych czujników spoza sieci lokalnej, po wpisaniu zewnętrznego IP w pasek adresu przeglądarki.
Tutaj możemy sprawdzić nasz publiczny/zewnętrzny adres IP.
Dane z czujników są wyświetlane ” w całościach”, PHP nie wyświetla reszty po przecinku, nie doszedłem do tego jak to zrobić.
Za ewentualne błędy przepraszam, jest to mój pierwszy projekt na Arduino, i artykuł na Majsterkowie.
W razie sugestii i pytań proszę pisać w komentarzach. Dziękuje, Pozdrawiam :)
Bardzo lubię wszystkie projekty związane z Arduino, więc daję 5
Dzięki! :D
Ja też daję 5, bo lubię kiedy ktoś czerwonym przewodem prowadzi VCC, a czarnym GND.
Mam nadzieję, że nabierzesz rozsądku do czasu kiedy otrzymasz prawo do głosowania w tym kraju.
Nadzieja, nadzieja, czyja to matka? Jak to mówią … ona zawsze umiera ostatnia, więc żyj długo inż. Zawodny
PS.
Nie wiem w jakim celu skierowałeś ten komentarz w moją stronę, ale w kaszę nie dam sobie dmuchać.
Na rysunku z Fritzinga jest “kompaktor”. Co to jest?
Taki “konwerter”.
To jest efekt końcowy? Na pająka ? Nie boisz się ze się rozpadnie ? Gdzie jest jakaś obudowa ?
Dla mnie słabiutko. Czekam na kolejna cześć projektu, bo mam nadzieje, że to nie jest koniec.
Nie rozpadnie się, planuję to przenieść na Atmegę i płytkę uniwersalną, w obudowie tego nie umieściłem, bo chcę to rozbudować. ;)
do czego używasz zmiennej altitude ? bo chyba nie jest to potrzebne – czyli poziom ciśnienia seaLevelPressure też nie jest potrzebny… ??
float altitude = barometer.GetAltitude(seaLevelPressure);
Autor oblicza wysokość npm zakładając ciśnienie poziomu morza:
“float seaLevelPressure = 99400;”
Kubaa
Poza tym prognozy pogody nie podają ciśnienia bezwzględnego ale to na poziomie morza
///////////////SealevelPressure
float cisnieniePoziomuMorza = (barometr.readSealevelPressure(260) / 100);
-gdzie 260 to wysokość npm w metrach dla Twojej stacji.
// Print out the Pressure.
ethernet.print(“Cisnienie: “);
ethernet.print(cisnieniePoziomuMorza);
Poza tym, proponuję używać w miarę możliwości czujników AMS3202 (DHT22) ponieważ oprócz temp. bezwzględnej dają także odczyt temp. odczuwalnej (heatIndex).
Możesz zerknąć na mój kod
Dzięki ;)
Aktualnie dane przesyłane są na Thingspeak, tutaj można podejrzeć: https://thingspeak.com/channels/220990
Wysyłam na “hosting”, bo jedna domena na IP już jest, a serwera żeby mieć 2 IP nie mam,.
Myślałem nad wysyłaniem na jakiś zewnętrzny serwer i podłączenie tego pod domenę.
Witaj, podeślesz bibliotekę ETHER_28j60 ? Bo mam problemy z tą która udało mi się znaleźć.
po co termometry, skoro w bmp180 jest termometr?
Dokładność termometru wbudowanego w BMP180 to ok +- 2 C a dokładność DS18B20 to +- 1 C.
Dodatkowo odczyt z DS18B20 tak nie skacze jak z BMP180.
Ta decyzja ma więc jak najbardziej sens.