Odporny na awarie sterownik sieciowy czujnika temperatury: 8 kroków
Odporny na awarie sterownik sieciowy czujnika temperatury: 8 kroków
Anonim
Odporny na awarie sterownik sieciowy czujnika temperatury
Odporny na awarie sterownik sieciowy czujnika temperatury

Ta instrukcja pokazuje, jak przekonwertować płytkę Arduino Uno w jednofunkcyjny kontroler dla zestawu czujników temperatury DS18B20 zdolnych do automatycznej izolacji wadliwych czujników.

Kontroler może zarządzać maksymalnie 8 czujnikami z Arduino Uno. (I wiele więcej z Arduino Mega lub z niewielką modyfikacją oprogramowania.)

Krok 1: Historia za…

Kilka lat temu założyłem sieć czujników temperatury DS18B20 w szklarni mojego ojca dla mojego regulatora ogrzewania opartego na pi. Niestety, niezawodność sterownika była słaba głównie z powodu częstych awarii czujników. Próbowałem wielu ustawień - moc pasożyta, zasilanie bezpośrednie, podłączenie sieci do pi, a także podłączenie jej do niestandardowej płyty opartej na Atmega (której głównym celem było napędzanie silników zaworów).

Co gorsza, niezawodność sieci czujników spadła głównie w zimowe noce, podczas gdy latem prawie nie było problemów! Co tu się do cholery dzieje?

Aby zbadać, który czujnik powoduje problem, pojawiła się potrzeba włączania/wyłączania ich pojedynczo lub włączania dowolnej ich kombinacji.

Krok 2: Jak to działa

DS18B20 (czujnik temperatury) wykorzystuje zastrzeżony protokół 1-przewodowy, który umożliwia wielu czujnikom współdzielenie wspólnego łącza danych (ten jeden przewód). To wspólne łącze danych jest podłączone do jednego z pinów GPIO Arduino i do + 5 V przez rezystor podciągający - nic niezwykłego, wiele instrukcji obejmuje tę konfigurację.

Sztuczka polega na tym, że przewody zasilające każdego czujnika są podłączone do własnych (dedykowanych) pinów GPIO, dzięki czemu można je oddzielnie włączać i wyłączać. Na przykład, jeśli czujnik ma przewód Vcc podłączony do styku 3, a GND do styku 2, ustawienie styku 3 na WYSOKI zapewnia zasilanie czujnika (bez niespodzianki), podczas gdy ustawienie styku 2 na NISKI zapewnia uziemienie (małe zaskoczenie dla ja). Ustawienie obu pinów w tryb wejścia spowoduje (prawie) całkowite odizolowanie czujnika i jego okablowania - bez względu na to, jaka awaria (np. zwarcie) wydarzy się w jego wnętrzu, nie będzie kolidował z pozostałymi.

(Można powiedzieć, że podłączenie przewodu danych do czegoś innego połączonego w jakiś sposób z Arduino rzeczywiście spowoduje zakłócenia, ale w mojej konfiguracji jest to prawie niemożliwe).

Zauważ, że DS18B20 pobiera do 1,5 mA, podczas gdy jeden pin Arduino może pobierać / pobierać do 40 mA, więc można całkowicie bezpiecznie zasilać czujniki bezpośrednio przez piny GPIO.

Krok 3: Materiały i narzędzia

Materiał

  • 1 płytka Arduino UNO
  • 3 żeńskie główki pinów: 1×4, 1×6 i 1×6 (lub dłuższe - wycinam je z jednej główki 1×40)
  • klej
  • kawałek gołego drutu miedzianego (co najmniej 10 cm)
  • taśma izolacyjna
  • materiały eksploatacyjne do lutowania (drut, topnik…)

Narzędzia

  • sprzęt lutowniczy (żelazko, uchwyty, …)
  • małe szczypce do cięcia

Krok 4: Napraw wszystko razem

Naprawiaj rzeczy razem
Naprawiaj rzeczy razem

Przyklej żeńskie nagłówki pinów do nagłówków płytki Arduino:

  1. Listwa 1×4 obok listwy „analogowej”, z boku na bok z pinami A0-A4
  2. Header 1×6 obok pierwszej cyfrowej listwy pinowej, z boku na bok z pinami 2-7
  3. Listwa 1×6 obok drugiej cyfrowej listwy pinowej, z boku na bok z pinami 8-13

Zauważ, że moje nagłówki są nieco dłuższe… przypuszczam, że nie ma żadnych wad ani zalet.

Krok 5: Połącz wszystko razem

Połącz rzeczy razem
Połącz rzeczy razem
Połącz rzeczy razem
Połącz rzeczy razem

Okablowanie magistrali 1-wire:

  1. Połącz wszystkie wyprowadzenia przyklejonych głowic po stronie „cyfrowej” (przylegające do pinów 2-13) lutując do nich kawałek gołego drutu
  2. Przylutuj koniec tego przewodu do przewodu stykowego SCL (wewnętrznie podłączonego do A5)
  3. Połącz wszystkie wyprowadzenia przyklejonej listwy po stronie „analogowej” (piny A0-A3) lutując do nich kawałek gołego drutu
  4. Końcówkę tego przewodu przylutuj do wyprowadzeń A4 i A5 (ja użyłem A5 i A6 bo mam płytkę która ma A6 i A7)
  5. Przylutuj rezystor 4k7 między drugim końcem tego przewodu a przewodem pinowym +5 V

Uwagi:

  • Piny A0-A5, chociaż oznaczone jako „analogowe”, mogą być również używane jako piny cyfrowe GPIO.
  • Pin SCL po stronie „cyfrowej” jest wewnętrznie podłączony do A5 po stronie „analogowej”; podłączony do nagłówków, tworzy linię magistrali 1-wire;
  • A4 (używane jako wejście analogowe) mierzy napięcie magistrali w celach diagnostycznych. Dlatego jest bezpośrednio połączony z autobusem.
  • Użyłem A6 zamiast A4, ponieważ mam płytę, która ma A6 i A7; pierwotnie chciałem użyć A7 jako 1-wire bus master, ale te dwa piny nie mogą być skonfigurowane jako cyfrowe GPIO.
  • Aby zapobiec błędnemu podłączeniu złączy czujników, można pominąć / wyciąć nieużywany styk (nie podłączony do żadnego przewodu) z każdego złącza męskiego i włożyć go do odpowiedniego otworu w wklejonej listwie kołkowej.

Krok 6: Podłączanie czujników

Podłączanie czujników
Podłączanie czujników

Właśnie stworzyłeś tablicę ośmiu gniazd 2x2. Możesz przylutować i zmontować złącza Dupont 2×2 do kabli czujników i podłączyć je do tych gniazd. Oprogramowanie konfiguruje piny tak, że nawet piny to piny GND, a piny nieparzyste to piny Vcc. Dla każdego czujnika pin Vcc to tylko pin GND + 1. Jeden z pozostałych dwóch pinów gniazda 2×2 (jeden z tych dwóch w nagłówku klejonym i lutowanym) jest przeznaczony do przewodu danych czujnika. Nie ma znaczenia, którego używasz.

Krok 7: Oprogramowanie kontrolera

Oprogramowanie kontrolera
Oprogramowanie kontrolera

Szkic SerialThermometer uruchamia kontroler. Możesz go znaleźć na githubie. Otwórz i prześlij za pomocą Arduino IDE.

Krok po kroku:

  1. Otwórz swoje Arduino IDE i zainstaluj bibliotekę DallasTemperature i wszystkie jej zależności za pośrednictwem Sketch | Dołącz bibliotekę | Zarządzaj bibliotekami.
  2. Sklonuj repozytorium git. Jeśli nie znasz git, pobierz i rozpakuj ten zip w dowolnym miejscu na swoim komputerze.
  3. Otwórz szkic SerialThermometer w swoim Arduino IDE.
  4. Podłącz zmodyfikowaną płytkę Arduino do komputera kablem USB (standardowy sposób)
  5. Prześlij szkic za pomocą swojego Arduino IDE
  6. Otwórz monitor szeregowy za pomocą narzędzi | Monitor szeregowy
  7. Powinieneś zobaczyć wyjście diagnostyczne zawierające kilka pomiarów fizycznych, a następnie odczyty temperatury - każde gniazdo czujnika na jednej linii. Jeśli liczba czujników różni się, gdy są włączone osobno i gdy wszystkie są włączone razem), pętle diagnostyczne do momentu rozwiązania. Ale nie martw się, również diagnostyka zapewnia pomiary temperatury!

Zobacz obraz z adnotacjami, aby uzyskać więcej informacji na temat danych wyjściowych diagnostycznych.

Krok 8: Wniosek

Mam silne wrażenie, że awarie mojej sieci sensorowej spowodowane były dużą pojemnością mojego długiego okablowania - około 10 m kabla LIYY 314 (3×0,14 mm²) na każdy sensor. Moje eksperymenty wykazały, że komunikacja przerywa się, jeśli jest pojemność około 0,01 μF między magistralą 1-wire a masą, myślę, że ponieważ rezystor podciągający 4k7 nie jest w stanie podciągnąć magistrali do +5 V wystarczająco szybko, aby spełnić ograniczenia protokołu.

W mojej konfiguracji dzieje się tak, gdy więcej niż 3 czujniki są ze sobą połączone. Następnie sterownik zapętla się w cyklu diagnostycznym, mierząc czujnik po czujniku (co też jest fajne…)

Ale też piąty czujnik (28:ff:f2:41:51:17:04:31) wygląda dość źle (może źle lutuje), więc mogę zbadać dalej!

Zalecana: