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

ARDUINO - Dwa nadajniki jeden odbiornik

mgrems 02 Sty 2015 21:14 1605 11
  • #1 02 Sty 2015 21:14
    mgrems
    Poziom 10  

    Witam
    Czy ma ktoś doświadczenie w odbieraniu danych z dwóch (lub więcej) czujników drogą radiową...

    Chcę zbierać dane z różnych czujników (temperatura, ciśnienie, przyspieszenie, itp) wysyłających dane przez moduły 443MHz i odbierać je przez jeden odbiornik, taki DataLogger.
    Umiem to robić pojedynczo z każdego czujnika i wyświetlać wartości na wyświetlaczu.

    Założenia mojego projektu są takie:
    W danej chwili może być włączona dowolna liczba czujników (od 1 do max 6). Każdy czujnik może mierzyć jakąś konkretną wielkość, a odbiornik ma rozpoznać jaką i pokazać jej wartość na wyświetlaczu wraz z jednostką. Na wyświetlaczu jest 6 pól w których mogą się pojawić dane w zależności czy jakiś czujnik pracuje czy nie.

    Proszę o sugestie, szukałem sporo po sieci, ale bezskutecznie. Będę wdzięczny za każdą podpowiedź.

    kod nadajnika ciśnienia z czujnika BMP085:

    Kod: cpp
    Zaloguj się, aby zobaczyć kod


    kod nadajnika temperatury z czujnika DS18B20:
    Kod: cpp
    Zaloguj się, aby zobaczyć kod


    W kodzie dane są poprzedzone literką oznaczającą mierzoną wielkość i wysyłane są stringi np.: p997.15 (dla ciśnienia) lub t27.05 (dla temperatury).
    Teraz muszę to odebrać żeby rozpoznać wielkość i nadać jej odpowiednią jednostkę i to jest mój problem.

    kod odbiornika, który odbiera dane (bez literki p lub t) zrobiony tylko dla temperatury wygląda tak:
    Kod: cpp
    Zaloguj się, aby zobaczyć kod


    Proszę o sugestie, szukałem sporo po sieci, ale bezskutecznie. Będę wdzięczny za każdą podpowiedź.

    0 11
  • #2 02 Sty 2015 22:19
    archanoid
    Poziom 26  

    Witam . Najprościej powinieneś użyć transceiverów i to sterownik z wyświetlaczem , czyli powiedzmy master powinien odpytywać poszczególne czujniki.

    0
  • #3 02 Sty 2015 22:29
    mgrems
    Poziom 10  

    Nie rozumiem "...Najprościej powinieneś użyć transceiverów i to sterownik z wyświetlaczem..."

    Jak napisałem, może być włączony jeden czujnik, a może być więcej...
    Odbiornik widzi jeden (np. termometr), to w pierwszej linijce wyświetli wartość i jednostkę. I tak będzie czytał i pokazywał.
    Gdy włączę drugi czujnik (np. ciśnieniomierz), to w drugiej linijce pojawi się jego wskazanie wraz z jednostką.
    Wartość i jednostka mają być rozdzielone, bo docelowo chcę je wysyłać do komputera w celu sporządzenia wykresów.

    pozdrawiam

    0
  • #4 02 Sty 2015 22:37
    archanoid
    Poziom 26  

    Witam .A próbowałeś włączyć 2 czujniki ?. Czy każdy czujnik nadaje na innym kanale .

    0
  • #5 02 Sty 2015 23:17
    mgrems
    Poziom 10  

    Witam. Mam w tej chwili dwa czujniki (ciśnienie i temperatura). Każdy nadaje w swoim czasie (delay(1000)). Wszystkie moduły pracują na tym samym kanale. Odbiornik odbiera wartości i którą odbierze tą wypisuje na wyświetlaczu (rozdzieliłem już wartość od literki "p" lub "t", które oznaczają mierzone wielkości).
    Teraz chcę zrobić tak, aby każdy pomiar był wyświetlany w oddzielnej linijce (jednej z sześciu) wraz z odpowiednią jednostką (przypisywaną na podstawie "p" lub "t", czyli hPa lub *C)

    Tylko co będzie jak zrobię więcej czujników?

    0
  • #6 02 Sty 2015 23:37
    Karaczan
    Poziom 39  

    Każdemu czujnikowi musisz nadać jakieś unikalne ID które będzie wysyłać.
    I na podstawie ID sobie to ułożysz na wyświetlaczu.
    RF433 nie jest zbyt dobrym nadajnikiem do takiego zastosowania. Twoje delaye się kiedyś rozjadą i będą jaja.
    Zainteresuj się lepiej modułem nRF24L01+.

    0
  • #7 03 Sty 2015 00:03
    piotrva
    Moderator na urlopie...

    Zgadzam się z przedmówcą - zainteresuj się modułami dwukierunkowymi.

    U Ciebie można to zrobić po harcersku - tj wraz z danymi nadawać numer nadajnika (i oczywiście sumy kontrolne) i oba niechaj nadają w odstępach czasowych będących wielokrotnościami liczb z jak największym NWW (np. 3 i 7 sekund) - wtedy co któryś raz nadajniki się zakłócą, ale co któryś raz odbierzesz dane.

    Normalnie na modułach 2 kierunkowych 1 moduł jest zawsze master (rozpoczyna transmisję) a czujniki są w trybie nasłuchu (slave).
    Master co jakiś czas wysyła do danego slave (rozróżniane np. adresami, jakimś ID, czymkolwiek) zapytanie, po czym sam przełącza się na nasłuch. Wtedy i tylko wtedy slave może nadać coś i potem zaraz przełącza się na odbiór.

    0
  • #8 03 Sty 2015 00:11
    mgrems
    Poziom 10  

    A czy zamiast ID nie wystarczą literki p i t, o których napisałem?

    Mam jeszcze jeden problem. Maksymalnie ma być 6 czujników (nadajników). Każdy jest rozpoznawany po literce (ID). Wyświetlacz ma mieć 6 wierszy w których będzie wpisywał od górnego wiersza.
    Np. Jeśli mam t1, t2 i p (dwa termometry i ciśnienie) to na wyświetlaczu ma się pojawić:

    Kod: cpp
    Zaloguj się, aby zobaczyć kod


    Jeśli teraz wyłączę termometr t2, to jego wskazanie znika, a w jego miejsce wskakuje wskazanie ciśnieniomierza. Czyli:
    Kod: cpp
    Zaloguj się, aby zobaczyć kod


    Jak włączę jeszcze inny czujnik np. światła, to zmierzony wynik wskoczy do pierwszego wolnego wiersza. itd...

    0
  • #9 03 Sty 2015 00:14
    Karaczan
    Poziom 39  

    U mnie to czujniki są masterami, a stacja jest slavem. Ze względu na zasilanie bateryjne czujników nie chcę ich trzymać w ciągłym nasłuchu. One decydują kiedy mają coś wysłać, wysyłają, usypiają nadajnik. Stacja bazowa zasilana z zasilacza, to może sobie słuchać do woli.

    Do modułów nRF24 jest fajna biblioteka. Do tego obsługa ACK i CRC i nigdy mi się nie zdarzyło żeby stacja odebrała pomylone informacje, część z jednego a część z innego czujnika.
    A w przypadku większej ilości czujników na RF433 taka sytuacja w końcu będzie mieć miejsce...

    0
  • #10 03 Sty 2015 00:21
    mgrems
    Poziom 10  

    Mam pod ręką dwa takie moduły NRF24L01. Poczytam i zobaczę co z tym zrobić. Dzięki za radę...

    Tylko, że one łączą się z Arduino po SPI, a ja mam podłączony wyświetlacz w układzie odbierającym dane.
    O jakiej bibliotece konkretnie pisałeś?

    0
  • Pomocny post
    #11 03 Sty 2015 01:05
    Karaczan
    Poziom 39  

    RF24 i RF24Network.
    https://github.com/maniacbug

    Do SPI można podłączyć wiele elementów jednak jednak jak zachowają się te 2 biblioteki razem nie mam pojęcia. A wiadomo że czasem jest to różnie napisane i bywają konflikty.
    U mnie LCD jest na I2C więc nie mam problemu.

    0
  • #12 04 Sty 2015 18:18
    mgrems
    Poziom 10  

    Znalazłem świetny projekt z wykorzystaniem czujników podłączonych pod RF24 w instalacji inteligentnego domu Link.
    Chyba to jest to, czego szukałem. Muszę przeanalizować kody...

    0