czujników - RS485 czy I2C?

Feb 07, 2014 81 Replies

Pracując nad projektem stacji pogodowej muszę zdecydować się na magistralę po której będę odczytywał informacje z czujników. W tej chwili wiem, że niektóre z nich w finalnej wersji płytki będą umieszczone na tym samym PCB co MCU i kontroler Ethernetu. Tak będzie chociażby w przypadku czujnika ciśnienia, który (tak samo jak m.in. RTC) będzie podłączono do magistrali I2C.



Problem zaczyna się w przypadku tych czujników, które będę musiał umieścić poza skrzynką z elektroniką. Najbliżej będzie mógł się znajdować sensor temperatury i wilgotności powietrza. Czy wystarczy przedłużyć magistralę I2C poza skrzynkę (tak mniej-więcej metr kabla) i ewentualnie odizolować czymś takim?



formatting link
Nie wykluczam jednak, że w przyszłości będą chciał dodać do stacji kolejne czujniki, które będą się znajdowały trochę dalej - pomiar prędkości i kierunku wiatru, nasłonecznienia itp. Jak bardzo mógłby "wydłużyć" I2C? Może jednak lepszym pomysłem będzie zastosowanie magistrali różnicowej, na skrętce, np. RS485 albo CAN?



Czy jeśli już zastosuję taką magistralę w projekcie, to w ogóle opłaca się łączyć jakiekolwiek zewnętrzne urządzenia za pomocą I2C? Może lepiej sklecić osobny modulik na jakimś ATTiny, niech czyta dane z czujników i wysyła je po właściwej magistrali?



A może w ogóle nie powinienem się bawić kablami, tylko zastosować któryś z tanich transceiverów ISM na SPI?


W dniu 2014-02-07 18:50, Atlantis pisze:

Najtaniej, prosto i bardzo skutecznie - RS485. Po stronie MCU (tak twojej "centralki" jak i np attiny przy czujnikach) obsługa banalna (bo to zwykły rs, szeregowy port jest prosty i oprzykładowany z każdej strony). Przecież nie potrzebujesz tam megabitów przepustowości.

Raczej tak. Wymyśl sobie jakiś protokół komunikacyjny na wspólną magistralę - centralka jako master, czujniki jako slave każdy ze swoim nr, jakiś stały format ramki i zasady odpowiedzi, enumeracji czujników itp, a wtedy pomiar z każdego typu czujnika (niezależnie od tego, czy fizycznie na czujniku analogowym, na ds18b20, czy na pirometrze, czujniku ciśnienia czy wiatru czy czegoś innego) będziesz mógł łatwo przeformatować na jego attiny i wcisnąć spójnie do jednego systemu/bazy/wizualizacji - uniezależniając się całkowicie od fizycznych czujników, które możesz dorabiać, przerabiać, przeprogramowywać - bez ruszania już "serca" stacji. Np stacja odlicza czujniki metodą wysyłania kolejnych nr cyklicznie i oczekiwania na odpowiedz, a każdy czujnik - który "usłyszy swój nr" odpowiada w formacie np Nr_czujnika,zmierzona_wartosc_w_int16 (bo chyba taka precyzja ci wystarczy?, gdzie 0=0'C, 0=0m/s, 1000=1000hPa itp ). Dzięki temu łatwo to będzie do jakiegoś np rrdtoola wrzucać do wizualizacji.

To już zależy od ciebie, jak sobie hardware całości wymyślasz. Nie ma problemu użyć np RF24L01P na 2.4GHz, bo jest niedrogi (~10zł za modulik na spi, bez dodatkowych wzmacniaczy mocy), i ma zasięgu kilkadziesiąt meetrów, tylko po co? Obsługa magistrali radiowej (tzn samego modułu radiowego) to trochę więcej kodu, niż prosta obsługa rs232/485 w przerwaniach "odebrałem znak" i "wyślij znak"

W dniu 2014-02-07 18:50, Atlantis pisze:

konkretnego czujnika lub do wszystkich.

problemu. U mnie sprawa jest prosta, bo zbieram tylko dane typu temperatura,

ogrzewanie czy nie.

Marcin

On 07.02.2014 23:10, Marcin wrote:

Pozdrawiam Jakub Rakus

formatting link

| sibi@drut.org GG:23319 tel +48 696455098 http://drut.org/ | http://www.allegro.pl/show_user_auctions.php?uid=338173

news:ld3si3$rv4$ snipped-for-privacy@node2.news.atman.pl...

zabezpieczenie tylko ESD).

P.G.

W dniu 2014-02-08 08:18, Piotr Gałka pisze:

Największe problemy przy długiej linii pojawiają się gdy na jej końcach nie są podciągnięte D+ do VCC i D_ do masy.

I to jest bardzo słuszna koncepcja. Śmiem twierdzić, że ważniejsza niż terminatory linii.

W dniu 2014-02-08 01:49, BartekK pisze:

Dokładnie tak, lepiej bym tego nie ujął. A czasami jest jeszcze gorzej, bo zaczyna lecieć woda po ścianie, która potem zamarza itd... :) Czekałem na ocieplenie klimatu, ale się nie doczekałem, to trzeba samemu coś z tym zrobić.

Marcin

Problem występuje głównie na płaskich dachach, zwłaszcza przy dużych powierzchniach. Przy skośnych tak czy inaczej wszystko spłynie. Na płaskich czy słabo nachylonych robi się ba dachu basen z wodą i woda wnika do środka i cieknie po ścianach.

W dniu 2014-02-08 01:08, Jakub Rakus pisze:

W pierwszej wersji urządzenia planowałem użyć po prostu SN75176 (takie akurat mam pod ręką). Powinienem jednak odejść od tego założenia i kupić lepsze scalaki? Zajrzałem do noty i z tego co widzę SN75176 ma zalecaną temperaturę pracy powyżej 0 stopni C. Niby samą skrzynkę z centralką mogę umieścić gdzieś wewnątrz budynku, ale z samymi sensorami już tak dobrze nie będzie...

Tak właściwie jak to jest z maksymalną ilością urządzeń na magistrali RS485. Czytałem gdzieś, że nie jest to ograniczenie programowe, ale chodzi o warstwę elektryczną. Czyżby więc liczba ta odnosiła się do transceiverów określonego typu i problem był możliwy do obejścia przez zastosowanie lepszych scalaków?

I jeszcze jedno pytanie chodzi mi po głowie. Jak wygląda praca z większą ilością urządzeń master na jednej magistrali? Teraz raczej nie będę miał takiej potrzeby, ale kto wie, czy za kilka lat nie zabiorę się za jakąś prostą automatykę domową (zdalne gaszenie światła, wykrywanie otwartych drzwi, itp.)

W dniu 2014-02-07 20:16, BartekK pisze:

Dobry pomysł. Generalnie początkowo myślałem, żeby centralka zajmowała się wstępnym segregowaniem danych i wysyłała je przez HTTP POST jako zmienne o konkretnych nazwach, które z drugiej strony odbierałby jakiś skrypt PHP. Teraz jednak zastanawiam się czy lepszym pomysłem nie będzie proste forwardowanie tego w pakietach UDP, które będą zawierały numer węzła na magistrali (0 mogłoby oznaczać samą centralkę, która też będzie miała parę czujników), numery kolejnych czujek podłączonych do węzłów i wartości pomiarów.

Dzięki temu nie musiałbym kompilować nowego wsadu przy okazji każdej rozbudowy systemu o nowy czujnik. Wystarczyłoby dopisać kilka formułek do skryptu po stronie serwera, który odbierałby dane i wrzucał do bazy/pliku.

Z tymi temperaturami to jest tak, że to może i działać, ale producent już tego nie gwarantuje. Z doświadczenia wiem, że zwykłe MAXy na zakres

0-70st.C głupiały.

Dokładnie tak, pierwotnie specyfikacja RS485 zakłada max. 32 odbiorniki. Przy stosowaniu odbiorników tzw. wysokoimpedancyjnych może ich być znacznie więcej.

Różne systemy automatyki domowej używające RS485 i pochodnych mają różne ograniczenia, ale oscyluje to w granicach 100-200 urządzeń. Ważny jest także iloczyn (długość przewodów * prędkość transmisji).

Np. dziwne kable ułożone przez ekipę budowlaną, ewentualnie kable poskładane po drodze z kilku kawałków, bo gdzieś tam koparka dziabnęła, gdzieś indziej ukradli, gdzieś tam osłona kabla naruszona i wilgoć zeżarła izolację itp. itd. Potem się okazuje że nawet punkt-punkt nie chce działać, a co dopiero myśleć o większej ilości urządzeń.

W dniu 2014-02-08 19:55, Jakub Rakus pisze:

Z tego co widzę MAX481 w wersji "E" są dostępne w TME:

formatting link
Jednak co dziwne, w opisie wymieniona jest temperatura pracy 0-70 stopni C. Pomyłka?

MAX481 do nich należy?

Hmm... Mógłbym zapytać jaki kabel do RS485 mógłbyś polecić i jaki jest jego orientacyjny koszt? Jak powinno się prowadzić magistralę? Dopuszczalne jest stosowanie niezbyt długich odgałęzień prowadzących do urządzenia, czy też jedynym akceptowalnym rozwiązaniem są dwa kable - wchodzący i wychodzący z urządzenia?

Czy jest jakiś standard, który określałby sposób wykonywania połączeń? Tak samo jak w Ethernecie mamy patch panele i RJ45, tutaj są jakieś zalecane złączki?

Może być, osobiście mam do czynienia z magistralami rs485 na których pracują jednocześnie max481 od maxima, sp481 od sipexa i jeszcze jakieś układy z serii adm z analog devices.

Wewnątrz pomieszczenia taka skrętka ethernetowa (ale ekranowana) będzie bardzo dobra. Jak na zewnątrz ją wsadzisz w jakąś rurkę to też może być. No i możesz pozostałymi żyłami zasilanie prowadzić.

Z założenia RS485 powinien pracować w topologii magistrali. I należy się tego trzymać, żeby potem nie dociekać dlaczego nie działa.

Join the Discussion

Have something to add? Share your thoughts — no account required.

Didn't find your answer?

Ask the community — no account required