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

ARDUINO NANO jako adapter 80x DS18 na USB/UART

DarekMich 06 Kwi 2016 17:14 9765 18
  • ARDUINO NANO jako adapter 80x DS18 na USB/UART

    Witam, chciałbym przedstawić swoją prototypową konstrukcję dotyczącą 1wire i słynnych czujników DS18, jak każdy układ powstał z potrzeby. Ten projekt jest Aktualizacją obecne używanego starego dosyć układu AVT AVT5330(8 x DS18) opartego na Attiny2313 - Link do dokumentacji: AVT5330

    Dlaczego taka aktualizacja byłą mi potrzebna? Otóż, układ działa świetnie, konstrukcja jest przemyślana i przez okres 4 lat użytkowania zdarzyły się pojedyncze “zwisy” tego układu(2 które pamiętam). Jest to tak na prawdę układ oparty na 2 „kostkach”, adapter usb na układzie ftdi uP Attiny2313.
    Potrzebowałem natomiast jego rozbudowy (dodania kolejnych czujników) jednak chciałem uniknąć bardzo wysokich kosztów zakupu kolejnego układu z tej serii.

    Układ jak każdy ma wady i zalety, zalety:
    proste podłączenie i działanie “od razu”
    prosta obsługa wyników

    Jego wady:
    na każdej z 8-miu linii może znajdować się jedynie 1 czujnik DS18
    względnie długi czas oczekiwania na pomiar (układ wysyła dane co każdy cykl odczytu ze wszystkich 8 linii ~2.5s)
    brak możliwości choć by podstawowej diagnostyki działania układu bez komputera (w końcu nie ma to być efekt świetlny led :)
    Brak adresowania poszczególnych czujników DS18, jedynie wyświetlanie odczytu temperatury na podstawie nr porządkowego linii do której jest podpięty czujnik
    cena układu!!!

    Przedstawiony układ poniżej charakteryzuje się następującymi założeniami (zrealizowane/do realizacji):
    [zrobione]układ ma służyć jako bezpośredni zamiennik dla wspomnianego układu AVT (tzn, jedynie odłączamy złącze z czujnikami i podłączamy do drugiego)
    [zrobione]Układ ma być konstrukcyjnie prosty (jak najmniej elementów) i przez to jak najłatwiej powtarzalny,
    [zrobione]Ma posiadać 8 linii (jak w przypadku AVT – w końcu zamiennik, jednak musi posiadać możliwość podpięcia więcej niż 1 czujnika na linie - aktualnie programowy/sprzętowy limit 10 czujników(tablica w ram) na linii – maks 8x10 = 80!!! czujnikó DS18)
    [zrobione]układ ma nie oczekiwać na pomiar z czujników tylko podać ostatnio odczytany stan czujnika zapisany w tablicy wyników co ok 1s
    [częściowo zrobione/ zmiana na etapie kompilacji]Układ ma mieć możliwość zmiany rozdzielczości danej linii na mniejszą lub większą (9,10,11 lub 12 bitów) zyskując na czasie pomiaru kosztem dokładności




    [zrobione]Układ musi być dostosowany do zasialania czujników w trybie parasite (jedynie 2 przewody do komunikacji/zasilania) na długich odległościach
    [zrobione]Układ musi potrafić wykazać brak komunikacji z danym czujnikiem (pokazuje jako temp -127*C)
    [zrobione]reinicjalizacja układu musi być najprostsza (aktualnie włączenie/wyłączenie zasilania lub wciśnięcie przycisku reset – brak opcji w przypadku zestawu AVT).


    Kody źródłowe znajdują się na końcu postu

    Zasada układu jest następująca, posiadamy 8 linii, każda potrafi adresować do 10 czujników DS18, każda z linii posiada osobno ustawianą rozdzielczość/dokładność, wyniki pomiaru zapisywane są w tablicy wyników i te przypisane są do konkretnego adresu czujnika. Tablica “wypluwana” jes co ok 1s poprzez port uart uC.



    Teraz samo założenie 1 cyklu odczytu:
    A. Inicjalizacja układu, załączenie linii A0, A1, A2, A3, A4, A5, 2, 3 jako wyjść I ustawienie ich w stan niski.(ma to na celu podpięcie wszystkich linii 1wire (wyjścia/wejścia 4,5,6,7,8,9,10,11) do napięcia 5V bez rezystorów podciągających. I odczekanie 500ms w celu umożliwienia dostarczenia odpowiedniego prądu na doładowanie kondensatorów znajdujących się w czujnikach DS18 (w końcu tryb parasite)
    B. w pętli for zmiana kolejno każdej linii zasilającej w stan wysoki(tzn dłączenie bezpośredniego zasialania danej linii 1wire i podłączenie jej pośrednio poprzez rezystor podciągający 2.2kOhm) wykrywanie dostępnej liczby podpiętych urządzeń, w przypadku wykrycia więcej niż 10, odczytywanie kolejno adresu pierwszych 10 czujników, pomiędzy kolejnymi odczytami ustawienie zasilania bezpośrednio do 5v na 5ms.
    C. Po wykryciu i zapisaniu w tablicy dostępnych adresów, następuje komenda ustawiająca rozdzielczość danej linii i wysyłany jest sygnał do wszystkich urządzeń na danej linii w celu rozpoczęcia pomiaru temperatury i podłączane jest 5V w danej linii zamiast rezystora podciągającego.
    D. Po odmierzeniu minimalnego czasu potrzebnego na konwersje następuje ponowne podłączenie rezystora podciągającego i próba odczytania wg wcześniej zapisanych w tablicy adresów i zapisanie wyników w tej samej tablicy. Po każdej odczytanej temperaturze dana linia jest na pwrót podłączana do 5V na 5ms i na powrót podłączenie rezystora podciągającego I tak aż do odczytania wszystkich możliwych urządzeń na linii. Po otrzymaniu wyniku z ostatniego adresu linia na powrót jest podłączana do 5V po czym cały proces powtarza się dla kolejnych linii.

    Inicjalizacja składa się z punktów A, B, C w głównej pętli programu używamy jedynie D

    W przerwie co 1s (niezależnie od tego na jakiej linii dokonywany był ostatni odczyt, wysyłana jest poprzez UART tablica adresów I dostępnych ostatnio pomiarów temperatury

    Dlaczego zdecydowałem się na Arduino nano, otóż jego cena w zakupie „BULK” czyli większych ilości jest śmiesznie niska 1,2$ USD (kupiony na Aliexpress), więc mówimy tu o poziomie około 5PLN, więc niemalże cenę gołego układu Atmegi, a otrzymujemy układ mieszczący się w podstawce dip30, wraz z rezonatorem kwarcowym, gniazdem USB, stabilizatorem napięcia itp. itd. - wybór oczywisty, względy czysto ekonomiczne.

    Minimalna cena do uruchomienia układu jest naprawdę niewielka w stosunku do ceny układów z serii AVT (60-80 PLN kłady do montażu, aż do 280-300 PLN zmontowane z zestawem oraz 8x DS18).

    Arduino nano- 5.50 PLN
    8 x rezystory 2.2kOhm 0.40 PLN
    płytka prototypowa 2PLN (ja już jakąś tam miałem)
    czujnik DS18 (tutaj już miałem, ale z chin) poniżej 5 PLN / czujnik

    Jeżeli chcemy zastosować układ z możliwością podciągania linii 1wire do zasilania dochodzą jeszcze 8 x N Mosfet (lub 8 x transoptor, lub 8x każdy inny tranzystor – np. BC547) oraz 8 x rezystor służący do wysterowania.

    Suma sumarum i tak koszt o kilka rzędów wielkości mniejszy niż układ sprzedawany komercyjnie.

    Teraz o samej obsłudze gotowego układu.

    Jako, że będzie to część „inteligentnego sterownika” jaki znajduje się w domu. Oprogramowanie jakie na nim się znajduje jest w php/python. Zdecydowałem się na python, który służy za podstawowy parser zmiennej string jaką otrzymujemy za pomocą uart, wynik zapisywany jest w postaci plików, tak żeby każdy program mógł wykorzystać te dane (lub programista wg własnego uznania).

    Program po połączeniu do /dev/ttyUSB0 (Raspian linux na Raspberry Pi) czyści zawartość buforów wejściowych/wyjściowych portu uart w systemie, następnie oczekuje na przyjście danych, jak już dane wejściowe się pojawią w buforze następuje odczyt i parsowanie. Wyniki są jak wspomniałem wcześniej zapisywane w katalogu /tmp/1W/ - katalog ten musi być zamontowany jako TMPFS (czyt. ramdrive)


    Teraz kilka wniosków dlaczego 8 linii, i nie podłączonych bezpośrednio do portu komputera Raspbery Pi, otóż jestem przeciwnikiem podłaczania do dosyć ważnego urządzenia jakim jest sterownik domu czego kolwiek bezpośrednio, ze względu na możliwość jego uszkodzenia, w praktyce kiedy sterownik pilnuje nastaw pieca grzewczego, boilera od wody i służy jako alarm, mówimy o potencjalnym ryzyku dla bezpieczeńśtwa i zdrowia ludzi którym ma służyć. Z drugiej strony łatwiej jest wymienić prosty sterownik na zasadzie plug&play niż całe raspberry (koszty, czas oczekiwania). Dlaczego 8 linii zamiast jednej i 2 przewody (tryb parasite). Otóż oczywistym jest fakt, że w przypadku prowadzenia 2 przewodów zamiast 3 otrzymamy trochę mniejszą plątaninę przewodów przy samym sterowniku (lepiej czytelne połączenia?) Posiadanie więcej niż jednej niezależnej linii 1wire zabezpiecza nas przed awarią całego systemu w przypadku np. uszkodzenia którejś z nich (zwarć lub nieprawidłowości pracy całej linii). Nie pada cały system a jedynie jakaś jego część. U mnie np. ze względu na zastosowany uprzednio układ AVT mamy kolejno: 4 pokoje, boiler, woda powrotna z CO i po 1 czujce na zewnątrz z każdej strony domu (razem 8 czujników – czyli limit układu). Teraz mogę po prostu dołożyć np. kolejny czujnik na zasilaniu CO (i tym samym diagnozować czy nie ma awarii pieca/grzałki) i wiele wiele innych. Posiadam starą zamrażarkę w piwnicy, czemu by nie móc wstawić czujnika do środka i ustawiać jej temperature wg uznania (np. maks -25*, czemu nie móc ustawić np. 3*, albo -5*). Poza tym posiadam jeszcze małą serwerownie, dobrze by było kontrolować powietrze w pomieszczeniu (piwnica) jak również powietrze wydmuchiwane zza komputerów/macierzy dysków. Jednym słowem otwierają się nowe możliwości zależne od naszych potrzeb/wyobraźni.

    Dlaczego układ załącza linie 1wire do 5V z pominięciem rezystorów podciągających, chodzi potencjalnie jedynie o zwiększenie długości przewodów jakie będzie można użyć do prowadzenia na połączeniu sterownik – czujnik DS18 – w moim przypadku, przy zastosowaniu przewodów do 30m (2 linie są tak długie), same rezystory podciągające 2.2kOhm wystarczają. Dlaczego 2.2kOhm, otóż takie zostały zastosowane przy wspomnianym układzie AVT – po prostu skopiowałem.

    Dlaczego Raspberry Pi, wybór jest oczywisty tylko i wyłącznie ze względu na fakt, że pobiera znikomą moc, zasilany jest od kilku lat ze wsparciem powerbanku – jednym słowem znikoma moc poboru i wystarczające zasoby sprzętowe. Poza tym, nie wykorzystuje u siebie nawet jednego portu GPIO w swoim domu, jedynie urządzenia podłączone poprzez USB / LAN – takie były założenia wstępne (żeby całość można było ustawić z każdego innego dowolnego komputera (większa elastyczność niezależna od platformy sprzętowej – można użyć każdy komputer Rpi podobny typu klony lub zwykły komputer, albo nawet maszynę w środowisku wirtualnym).

    Z góry przepraszam za jakość wykonania prototypu, miejcie na uwadze fakt, że jest to jedynie uruchomiony koncept z tą jednak różnicą, że zamierzam doprowadzić pomysł do końca i zaprojektować właściwą płytkę PCB (?Eagle?), być może i zaprojektować obudowę (?druk 3d?).

    Oprócz tego wszytskiego do uwieńczenia dzieła zostało jeszcze do spełnienia kilka założeń / pomysłow które być może nie znajdą się w końcowej wersji:

    Z racji tego, ze zostają 2 piny analogowe (A6, A7) do wykorzystania(bez możliwości wykorzystania jako cyfrowe IN/OUT – ograniczenie układu, nie programu), oraz jedno cyfrowe (D12). Pomysł jest jeszcze aby zrobić 3 pinowe złącze posiadające kolejno 5V, GND, IN, gdzie podłączane będzie przetwornica StepUp/StepDown w celu uzyskania pełnych 5V dla linii 1wire oraz mikroprzekaźnik / bądź mosfet który będzie zwierał 5V i IN kiedy moduł taki w chwili startu układu nie będzie dostępny (wydaje mi się, ze potrzebne będą jeszcze diody na liniach 1wire wychodzących z uC w tym przypadku).

    Do zaimplementowania zostaje również możliwość ustawienia rozdzielczości każdej z linii za pomocą UART oraz możliwość sprawdzenia i przywrócenia wartości domyślnych żeby nie musieć za każdym razem przekompilowywać programu ze źródeł.

    Załączam wstępny koncepcyjny schemat ideowy (moje pierwsze uruchomienie programu eagle – nie zajedźcie mnie proszę od razu za błędy), muszę popracować nad PCB i je wykonać.

    Zostaje jeszcze około 700 Bajtów ram, oraz aż 24kB flash i nie użyty eeprom, można by zapamiętać za pomocą komendy uart adresy czujników w eeprom (i pominięcie procedury wykrywania adresów po starcie układu) – po co? To już kwestia osoby która będzie tego chciała (ja widzę kilka zastosowań – nie będę tutaj wymieniał).


    Skrypt Python służący do parsowania danych z adaptera do postaci plików w katalogu w ram:

    Kod: python
    Zaloguj się, aby zobaczyć kod


    Uruchamiamy poleceniem [temp.py - nazwa naszego skryptu]:
    Kod: bash
    Zaloguj się, aby zobaczyć kod


    Żeby uruchomić nasz skrypt przy starcie systemu automatycznie, należy z poziomu zalogowanego użytkownika wykonać crontab -e i na końcu pliku dodać następujący wpis:

    Kod: bash
    Zaloguj się, aby zobaczyć kod



    Dla zainteresowanych, funkcja w php służąca do odczytywania plików juz przetworzonych przez powyższy skrypt python:
    Kod: php
    Zaloguj się, aby zobaczyć kod


    Przykłądowe wywołanie to (wyświetli wszytskie dostępne aktualnie czujniki:
    Kod: php
    Zaloguj się, aby zobaczyć kod


    Lub dla odczytu pojedyńczego po jego adresie:
    Kod: php
    Zaloguj się, aby zobaczyć kod


    efekt w przeglądarce:
    Code:
        [28a60e89060000c9] => Array
    
            (
                [raw] => 26.75
                [temp] => 26.75
                [bus] => 6
                [last_read] => 1
                [active] => 1
            )

    last_read to czas jaki upłynął od jego ostatniej aktualizacji


    Teraz to o co w tym artykule chodzi najbardziej, aktualne źródło programu:

    Kod: c
    Zaloguj się, aby zobaczyć kod


    Dane wysyłane poprzez UART są w następującym formacie:
    Code:
    W1 ID1=TEMP1 ID2=TEMP2... IDn=TEMPn r=200


    Przykład z działającego układu u mnie w domu:
    Code:
    W1 0-28e21ef604000061=24.37 1-288896f504000010=30.18 2-285e35f50400001b=23.31 3-281a9ef40400007e=25.06 4-2849c6c70600002d=13.25 5-288d1ff60400004b=24.12 6-285f0bf50400000a=42.00 7-28c73589060000c9=20.81 r=23


    r jest jedynie kolejną liczbą wiadomości jaka została właśnie wysłana

    Układ AVT wysyłał jedynie(przykłąd):
    Code:
    T1= 25.6'C T2=__._'C T3=15.1'C ... T8=32.6'C


    U mnie w domu:
    Code:
    T1=  20.7'C  T2=  57.1'C  T3=  24.0'C  T4=  11.0'C  T5=  25.1'C  T6=  22.7'C  T7=  32.1'C  T8=  24.4'C  


    Troche więcej zdjęć "nowego koncepcyjnego konwertera" :
    ARDUINO NANO jako adapter 80x DS18 na USB/UART ARDUINO NANO jako adapter 80x DS18 na USB/UART ARDUINO NANO jako adapter 80x DS18 na USB/UART ARDUINO NANO jako adapter 80x DS18 na USB/UART ARDUINO NANO jako adapter 80x DS18 na USB/UART ARDUINO NANO jako adapter 80x DS18 na USB/UART
    ARDUINO NANO jako adapter 80x DS18 na USB/UART
    ARDUINO NANO jako adapter 80x DS18 na USB/UART


    Przykładowa zawartośc pliku "28a60e89060000c9.txt":
    Code:
    26.75:6


    Format to temp:numer lini 1wire


    *Schemat jest jedynie koncepcyjny na chwile obecną, przynajmniej dopóki nie opanuję programu eagle (lub innego)



    -- EDIT --

    Załączam 2 wzory płytki PCB.

    1 wartwa rozmiar około 71mmx60mm (wydaje się łatwa do wykonania w warunkach domowych)
    oraz kompaktowa 2 warstwowa, 70mmx30mm (nieiwele większa niż samo arduino nano).

    Własnie złożyłem zamówienie na 5 szt (minimalna ilość) za $13 USD + $4 USD przesyła z czasem wykonania płytki 2-3 dni i przesyła do 7 dni (więc około 2 tygodni.

    PCBWay

    Widziałem ich płytki na Google image, oraz czytałem opinie i jakość jest dobra w stosunku do ceny, zobaczymy jak przyjdą.

    Obie wersje:
    R1 - 200 Ohm
    R2-R8, R10 - 2.2 kOhm
    R11 - R18 - 1 kOhm

    Wersja z jedną warstwą:
    R9, R19 - R24 - zwora

    ARDUINO NANO jako adapter 80x DS18 na USB/UART ARDUINO NANO jako adapter 80x DS18 na USB/UART


    Fajne! Ranking DIY
    Potrafisz napisać podobny artykuł? Wyślij do mnie a otrzymasz pendrive 32GB.
  • Metal Work Pneumatic
  • #2 06 Kwi 2016 21:22
    mkpl
    Poziom 37  

    Układ fajny :)
    Gdzie ten schemat? bo chętnie dowiedział bym się po co te transoptory.
    Myślałeś nad czujnikami via WiFi? Poziom trudności programistycznej i skomplikowania dokładnie tak jak w Twoim projekcie.

  • #3 06 Kwi 2016 21:36
    DarekMich
    Poziom 15  

    Mam wykorzystany ESP8266 przy arduino due - mierzy prąd i napięcie (a z atym moc, częstotliwość) w piwnicy, komunikacja właśnie po wifi. Programistycznie poradzić sobie z problemem jest jedynie kwestią czasu jak dla mnie. dopiero zaczynam zabawe w uP/uC :)

    W linku moja poprzednia próba zrobienia tego na Ethernet shield i Arduino Uno (póki co projekt w oparciu o ethernet poszedł "na półkę"):
    https://www.elektroda.pl/rtvforum/viewtopic.php?p=15585094#15585094

    Schemat jest w pod koniec 1 postu :)
    https://obrazki.elektroda.pl/8978956400_1459955467.jpg

    W założeniu transoptory mają podłączać bezpośrednio zasilanie pod linie 1wire w chwili gdy nie występuje na lini żadna komunikacja ("zwierają" rezystory podciągające na lini 1wire)

    ostatecznie będę chciał rozbudowac skrypt puthon o wątkowość, żeby każdy port uart był uruchamiany w osobnym wątku i w razie utraty połączenia (wypięte urządzenie) pętla głowna programu(skryptu) będzie monitorować każde pojawienie się no wpiętego urządzenia ttyUSB... i je uruchamiać, dlatego w osobnej fukcji znajduje się parser uart i dlatego też ta płytka posiada nagłówek W1 (dlaczego taki - ot kaprys :)

  • #4 06 Kwi 2016 21:40
    mkpl
    Poziom 37  

    No tak niestety kończy znakomita większość projektów ale zawsze wiedza i doświadczenie pozostaje.
    Schemat faktycznie przegapiłem. Wytłumacz mi obecność tych transoptorów bo dalej nie rozumiem.

  • Metal Work Pneumatic
  • #5 06 Kwi 2016 21:50
    DarekMich
    Poziom 15  

    zróbmy to na przykłądzie 1 lini 1 wire:
    włącza się ukłąd, uruchamiany jest transoptor który zwiera rezystor podciągający dla magistrali i na niej pojawia się napięcie zasilania (pomniejszone o spadek na transoptorze), dajemy 500ms czasu (czas nie jest bardzo ważny, jedynie dajemy czas na naładownie czujnikó na magistrali), po 500 ms sprawdzamy magistrale pod względem ilości urządzeń, i kolejno pytamy je o ich adres, po kazdym zapytaniu ustawiamy spowrotem pełne 5V na magistrali na 1-5ms i tak aż zdobędziemy wszytskie potrzbne nam adresy.
    Na koniec polecenie rozpoczęcia konwersji bez adresu urządzenia (wszytskie urządzenia na danej magistrali to robią) i znowu podłączamy linię do 5v, potem powtarzamy kolejno dla pozostałych lini.

    nie jest to konieczne w przypadku krótkich przewodów (u mnie do 30m) działa bez tego, ale w przypadku pracy z dłuższymi przewodami lub mniejszym napięciem (np 3.3v) nie bedzie wiecznego 85 stopni zamiast temperatury.

    Tutaj są transoptory, ale mysłe co bedzie lepsze tranzystory czy mosfety.
    u mnie transoptory załaczone sa stanem niskim lini, dioda led widoczna na filmie załączona jest stanem wysokim - wskazuje który transoptor aktualnie nie pracuje / która linia aktualnie jest odczytywana)

    Jak wspomniałem, nie jest to absolutnie potrzbne, wystarczy samo Arduinoi nano, i rezystory podciągające i same DS, w trybie parasite polecam 2.2kOhm, w trybie z linią zasilająca mozńa spokojnie dać 4.7kOm

    Podłączanie magistrali 1wire w stan H jest normalną praktyką w dużych topologiach tej sieci

    Najlepsze żródło wiedzy (baaaardzo obszerny artykuł w ENG):
    1 wire Guidelines

    zastosowanie transoptorów oraz te przerwy pomiędzy kolejnymi odczytami temperatury na danej magistrali bezpośrednio odnosi się do tej części projektowania 1 wire:

    Cytat:
    Parasite Powering Issues

    The 1-Wire waveform must not only be sufficient for communication, but also provide operating power for the slaves. Each slave "robs" power from the bus when the voltage on the bus is greater than the voltage on its internal energy storage capacitor. When the weight of the network becomes excessive, the current delivered by the master may not be sufficient to maintain operating voltage in the slaves.

    The worst-case scenario for parasite power is a very long sequence of zero bits issued by the master. When this occurs, the line spends most of its time in the low state, and there is very little opportunity to recharge the slaves. If the bus reaches a sufficient voltage during the recovery time between bits and if the recovery time is long enough, there is no problem. As the internal operating voltage in each slave drops, the slave's ability to drive the bus to make zero bits is reduced, and the timing of the slave changes. Eventually, when the parasite voltage drops below a critical level, the slave enters a reset state and stops responding. Then, when the slave again receives sufficient operating voltage, it will issue a presence pulse and may corrupt other bus activity in doing so. When a network has insufficient energy to maintain operating power in the slaves, failures will be data-dependent and intermittent.

  • #6 06 Kwi 2016 22:02
    mkpl
    Poziom 37  

    Myślę, że da się prościej.
    Bezpośrednio na port procesora rezystor 200R (ograniczenie max do bezpiecznych 25mA ale można ograniczyć bardziej), za rezystorem podciągnięcie 4k7 do zasilania czyli standardowo.

    Teraz procedura odczytu.
    Odczytując poprzednią linię w następnej wystawiasz logiczne 1 na wyjście, które poprzez 200R zasila DS'y. Następnie w chwili odczytu tej lini zdejmujesz stan wysoki i wystawiasz go w następnej lini a w tej lini przechodzisz do komunikacji z czujnikami.

    Zwiększenie prądu 20x (200R) z początkowego 1mA wydaje się rozsądne i całkowicie wystarczające. Masz warunki to spróbuj bo całość znakomicie upraszcza układ.

  • #7 06 Kwi 2016 22:08
    DarekMich
    Poziom 15  

    Może ujmę to też tak, mam tylko 8 czyjników - w planach rozbudowa o dodatkowe 2-3 czujniki :), długośc lini raczej się nie zwiększy. Nie jestem też przekonany odnośnie tych 200Ohm, gdyż zdejmując 1 z portu tak na prawdę przez 200 ohm zwieramy linię do 0 :). a kazdy spadek napięcia na wyjściu "czytnika" do znaczne spadki na lini (np po 30m). Pomysł jak kazdy inny. układ nawet z transoptorami/tranzystorami dalej jest wybitnie prosty :) nie ma co toż to tylko kilka elementów na krzyż. W zdecydowanej więkrzości przy zastosowanych dobrych przewodów same rezystory podciągające wystarczą. Niestety przy 4.7kOhm i parasite przy 30 m ja mam odczyt 85 stopni (problem z konwersją - wartośc początkowa po podłączeniu DS w jego rejestrze), przy 2.2 działa jak t'la la :)

  • #8 06 Kwi 2016 22:22
    mkpl
    Poziom 37  

    To nie jest tak, że jak zdejmiesz stan H z portu to przywiera na zero. Przechodząc do magistrali 1W i tak przełączasz port w stan wysokiej impedancji i pin procesora może tylko zwierać do masy nadając przez zwieranie rezystora podciągającego. Stan H i rezystor 200R ma tylko naładować w DS'ach kondensator, który jest konieczny by zasilić strukturę czujnika na czas nadawania ramki.

    Więc całość wyglądała by tak
    Wystawiamy H i ładujemy kondensator,
    Przechodzimy do nadawania ramki inicjującej,
    Wystawiamy H i ładujemy kondensator na czas konwersji,
    Odczytujemy i wystawiamy H.

    Problemy z transmisją leżą gdzie indziej. Jak sam widzisz do poprawnej komunikacji wystarczy około 1mA prądu więc rezystancja kabla niech będzie mega przesadzona i wyniesie 100R też nie wprowadzi zakłócenia do linii transmisyjnej.

    Problem leży w pojemności linii. Długość kabla zwiększa pojemność do kilku a nawet kilkunastu nF co powoduje znaczne pochylenie zboczy narastających (kwestia rezystora podciągającego) i opadających (kwestia wydolności DS'a).

  • #9 06 Kwi 2016 22:34
    DarekMich
    Poziom 15  

    Jak będę przy okazji napywał rolkę skrętki (np 100m) musze przetestować na 3.3v kilka rozwiazań.

    Wszystko na tak, to tylko sam koncept, działa bardzo dobrze, transoptory nie są potrzebne w warunkach domowych tak jak i te 200 Ohm. powinno działać dobrze bez nich. mówimy tutaj o dużej skali (dziesiątki/setki czujników) lub duże topologie sieci. w artykule powyżej przykłądy "omijania" problemów z pojemnością i zasilaniem (przełączane sieci, wiele osobnych magistrali, odseparowanie porpzez dodatkowe rezystory odsprzęgajace, dodatkowe obciążenie przy samych odbiornikach - pojemnosć - w celu stabilizacji itp itd)

    Jak przeskoczę Eagle (dziś moje pierwsze włączenie) to może warto zastanowić się nad tym, dziś czytałem o pomysłe nad separacją optyczną magistrali 1wire (tutaj trochę nam się ukłąd wtedy rozrasta) ale jak najbardzije jestem za. Przebicie kabla w ścianie i podłączenie go do sieci 230V nie wróży dobrze, tym samym przewody na zewnątrz budynku tak jak i sama długość przewodów i np wyładowania na dworze).

    Tutaj jest kompletne minimum :)

    Mam jeszcze koło tygodnia urlopu, więc jak mi dziewczynki pozwolą i żona nie będzie się czepiać że w nocy coś na kompie robie to postaram się znaleźć kompromis przy robieniu płytki.
    może płytka pośrednia wpinana zamiast czujników z optoizolatorami w obie strony z zasilaniem zewnętrznym lub z przetwornic stepup/down

    Nie zależy mi na bezwzględnym minimum - stawiam na bezawaryjność układu.

  • #10 06 Kwi 2016 22:40
    mkpl
    Poziom 37  

    Dlaczego? Od separacji magistral masz cudowne układy serii ADUM np ADUM1201, który pięknie separuje RS232 a i do 1W się nada. Dodatkiem dla całości przetwornica separująca (taka jako gotowy moduł).

    Eagle jest dosyć prosty. Ucz się od razu jak przykazano czyli najpierw schemat a potem PCB na podstawie schematu. To uczy myślenia, minimalizuje błędy i od razu weryfikuje ;)

  • #11 06 Kwi 2016 23:42
    Szymon Tarnowski
    Poziom 27  

    Ja też nie rozumiem idei tych transoptorów. Jedyne co mi przychodzi do głowy to wykorzystane ich do obsługi 2 przewodowej czujników do generowania "strong-pullup". Ale wtedy taniej, wygodniej i wydajniej jest wziąć zwykłe tranzystory, a zysku optoizolacji w tym układzie nie ma.

  • #12 07 Kwi 2016 07:07
    MAREK MRK
    Poziom 18  

    Fajnie, ale procek do odczytu temperatury przez USB to wg. mnie trochę przerost formy nad treścią. Gdyby do tego dać np. LCD do podglądu albo jakiś mały OLED (nawet po I2C) to wtedy rozumiem zasadność użycia uP do tego. Ja osobiście wolę takie rozwiązanie: Link Działa to bardzo fajnie. Po WiFi tego nie próbowałem ale myślę że bez żadnego problemu by to działało.

  • #13 07 Kwi 2016 11:21
    DarekMich
    Poziom 15  

    Szymon Tarnowski napisał:
    Ja też nie rozumiem idei tych transoptorów. Jedyne co mi przychodzi do głowy to wykorzystane ich do obsługi 2 przewodowej czujników do generowania "strong-pullup". Ale wtedy taniej, wygodniej i wydajniej jest wziąć zwykłe tranzystory, a zysku optoizolacji w tym układzie nie ma.


    Za transoptorami w układzie przemawia fakt... że nic innego w domu na tę chwilę nie mam :) po prostu, nie ma żadnych za i przeciw żeby ich użyć albo nie. Wtyd sie przyznać, ale nie posiadam nic innego, zmaówiłem sobie juz 30x bc... i 20 mosfetów w TO-9 na te i przyszłe próby.

    Eagle się pobawiłem, chcąc bardzo ograniczyć rozmiary płytki trzeba sie nieźle napocić żeby zrobiło ścieżki w 100%, chylę czoła wielu osobom które je robią i ich płytki sa na prawdę kompaktowe, schemat tutaj wydaje się jednym z łatwiejszych de facto etapów (mówimy tutaj o 1 warstwie tylko, 2 warstwy już sporo łatwiej).


    MAREK MRK napisał:
    Fajnie, ale procek do odczytu temperatury przez USB to wg. mnie trochę przerost formy nad treścią. Gdyby do tego dać np. LCD do podglądu albo jakiś mały OLED (nawet po I2C) to wtedy rozumiem zasadność użycia uP do tego. Ja osobiście wolę takie rozwiązanie: Link Działa to bardzo fajnie. Po WiFi tego nie próbowałem ale myślę że bez żadnego problemu by to działało.


    Osobiście "procek: tutaj kosztuje kilka rzędów wielkości mniej niż FT232 :)

    Osobiście widzę to tak:
    konwerter ft232 (gotowa płytka na Alle...co tam) to koszt rzędu 20-50 PLN!!!
    (łączny koszt z wysyłą itp itd) do tego jeszcze rezystory, gniazdo na DS (jakoś podłączyć trzeba i daleko nie zajdziesz. a samym ukłądem nie zdizłąasz (płytka, kwarc) koszta będą zbliżone.

    Można taniej, jeśli posiadasz port com w komputerze, ale tu nie o to chodzi w projekcie, założeniami jest m. in. fakt, że odłączasz ukłąd od Komputera, podłączasz do raspberry, O-droid, Banana-pi, albo jak już chcesz do własnego laptopa, netbooka, terminala (typu HP - najpopularniejsze itp itd).

    Osobiście rób na czym chcesz :) Twój nakład finansów, ja kieruje się po prostu ekonomią :)

    Wspominay Arduino nano (tzw "procek") do którego trzeba jedynie 8 x rezystorów (dla 8 lini, dla 1 wystarczy 1 rezystor) mówimy o kosztach rzędu 5-6 PLN za już działający układ.

  • #16 07 Kwi 2016 20:04
    DarekMich
    Poziom 15  

    Z ciekawości zajrzałem na Ali... Nano najtaniej widziałem po 1.76 / szt lub po 16.50$ za 10 sztuk, powyżej 100 już po 150$ (ciekawostka) tańsze jest Mini pro - 1.50$ i mniej

    Dodano po 4 [godziny] 47 [minuty]:

    Co sądzicie o tym schemacie:

    R1 - 200 Ohm
    R2-R8, R10 - 2.2 kOhm
    R11 - R18 - 1 kOhm
    R9, R19 - R24 - zwora

    numery wynikają z kolejności dodawania :)

    ARDUINO NANO jako adapter 80x DS18 na USB/UART

    ARDUINO NANO jako adapter 80x DS18 na USB/UART

    Jedyny schemat który dał mi 100% przy autoroute przy użyciu jednocześnie 1 warstwy. Przy użyciu 2 warstw rozmiar płytki dużo bardziej obiecujący, znalazłem usługę gdzie w tydzień moge ja mieć za

  • #17 08 Kwi 2016 11:07
    Hammerstein
    Poziom 12  

    schemat plytki ladny, ale czy nie probowales zastosowac elementy smd?? przy ich zastosowaniu uda ci sie zmiescic wszystko na plytce wielkosci arduino... tylko ze lutuje sie troche gorzej... podoba mi sie sam projekt.. wlasnie chodzi mi cos takiego po glowie od dluzszego czasu, ale nie wiedzialem jak sie do tego zabrac... zakupilem wlasnie znaczna ilosc tych czujnikow, wiec projekt sie swietnie bedzie wpisywal w moje plany :) zapewne bede sie sugerowal twoim pomyslem i bede dopingowac ci w tym, zeby ci sie udalo dokonczyc caly projekt...

  • #18 08 Kwi 2016 18:51
    DarekMich
    Poziom 15  

    Dodałem pliki z Eagle dotyczące płytki w 2 wersjach, 1-sza 1 warstwowa, oraz 2 2-u warstwowa.

    Zamówiłem juz płytki w wersji 2-u warstwowej (75mmx30mm), niestety minimalna ilość to 5szt, koszt łączny $21 USD z wysyłką, zobaczymy jak długo zajmie zanim dojdzie, jak by było wszystko ok i ktoś by był zainteresowany chętnie pozbędę się 2-3 szt (zalutowanych/zaprogramowanych) jako, że nie będę ich aż tyle potrzebował.

    Poniżej zdjęcie z koncepcyjnego panelu który korzysta z zamieszczonych skryptów python/php w pierwszym poście.

    ARDUINO NANO jako adapter 80x DS18 na USB/UART

    U mnie pełna funkcja dot. listowania termometrów w php wygląda inaczej.

    Sprawdzany jest katalog, następnie przy każdym pliku/termometrze sprawdza czy ma on swoją tablice z ustawieniami (nazwa/ kalibracja) jak nie to tworzy domyślną z kalibracją 0 i nazwą taką sama jak id termometru.

    Jak skończy sprawdzać katalog w /tmp/1W/ sprawdza wszystkie ustawienia i jak trafi na ustawienia dla ID którego nie ma w /tmp/1W dodaje go z numerem bus jako -1 (niedostępny od uruchomienia układu) i temperatura jaką mu nadaje to -127*C.

    W ten sposób uniknę sytuacji awarii termometru i np braku prądu, gdzie jak system wstanie to już po prostu go nie będzie.

    Ja planuję zostawić sobię 2 szt (plus prototyp który aktualnie działa) 3szt. oddam po kosztach zakupu, kupujący opłaca koszt wysyłki (mieszkam w UK).

  • #19 09 Kwi 2016 11:25
    DarekMich
    Poziom 15  

    Odnosnie pytania jakie dostalem na prv dotyczacego kosztow.
    Rachunek dosyc prosty:
    21/5=4.20 $ za pcb
    Zaprogramowany Nano 2$
    Lacznie 6.20$ ~ 23.50 (PLN)
    Jedyna niewiadoma rzecz to sama wysylka (ekonomiczna wysylka poczta) to podejrzewam okolice 1-2 GBP (oszacujmy na 10PLN)(wysylka zwyklego listu do PL to okolo 0.85 GBP)

    Nie licze na zysk jedynie zwrot choc czesci kosztow.
    Calosc daje cene troche ponizej zakupu samego Arduino nano w detalu od reki.

  Szukaj w 5mln produktów