Innholdsfortegnelse:

Feiltolerant temperatursensor Nettverkskontroller: 8 trinn
Feiltolerant temperatursensor Nettverkskontroller: 8 trinn

Video: Feiltolerant temperatursensor Nettverkskontroller: 8 trinn

Video: Feiltolerant temperatursensor Nettverkskontroller: 8 trinn
Video: VFFS packaging machine maintenance - How to tell if a seal bar temperature sensor (RTD) has failed 2024, November
Anonim
Feiltolerant temperatursensor Nettverkskontroller
Feiltolerant temperatursensor Nettverkskontroller

Denne instruksjonsfilen viser deg hvordan du konverterer et Arduino Uno-kort til en enkelt-kontroller for et sett med DS18B20 temperatursensorer som kan automatisere isolering av defekte sensorer.

Kontrolleren kan administrere opptil 8 sensorer med Arduino Uno. (Og mye mer med Arduino Mega eller med en liten programvareendring.)

Trinn 1: Historien bak …

For et par år siden opprettet jeg et DS18B20 temperatursensornettverk i farens drivhus for min pi-baserte varmekontroller. Dessverre var påliteligheten til kontrolleren dårlig, hovedsakelig på grunn av hyppige sensorbrudd. Jeg prøvde flere oppsett - parasittkraft, direkte strøm, koble nettverket til pi, i tillegg til å koble det til Atmega -basert tilpasset bord (som primært var å drive ventilmotorer).

Hva verre, påliteligheten til sensornettverket falt hovedsakelig om vinternettene, mens det var nesten ingen problemer om sommeren! Hva er det som skjer her?

For å undersøke hvilken sensor som forårsaker problemet, viste det seg et behov for å slå dem på/av en etter en eller aktivere en kombinasjon av dem.

Trinn 2: Slik fungerer det

DS18B20 (temperatursensoren) bruker proprietære 1-leder protokoll som lar flere sensorer dele felles datalink (den ene ledningen). Denne vanlige datakoblingen er koblet til en av Arduinos GPIO-pinner og til + 5 V via en opptrekningsmotstand-ingenting uvanlig, mange instrukser dekker dette oppsettet.

Trikset er at hver sensors strømledninger er koblet til egne (dedikerte) GPIO -pinner, slik at de kan slås på og av separat. For eksempel, hvis en sensor har Vcc -ledning koblet til pin #3 og GND til pin #2, gir innstilling pin #3 til HIGH strøm til sensoren (ingen overraskelse) mens innstilling av pin #2 til LOW gir bakken (en liten overraskelse for meg). Hvis du setter begge pinnene til inndatamodus, vil (nesten) isolere sensoren og ledningene helt - uansett hvilken feil (f.eks. En snarvei) skjer i den, vil den ikke forstyrre de andre.

(Rett å si at å koble datakabelen til noe annet som er koblet til Arduino på en eller annen måte vil faktisk forårsake forstyrrelser, men det er nesten umulig i mitt oppsett).

Legg merke til at DS18B20 bruker opptil 1, 5 mA mens en Arduino -pinne kan kilde / synke opptil 40 mA, så det er helt trygt å drive sensorer med GPIO -pinner direkte.

Trinn 3: Materiale og verktøy

Materiale

  • 1 Arduino UNO -brett
  • 3 kvinnelige pinhoder: 1 × 4, 1 × 6 og 1 × 6 (eller lengre - jeg klipper dem fra en 1 × 40 topp)
  • et lim
  • et stykke blank coopertråd (minst 10 cm)
  • et isolasjonstape
  • lodding av forbruksvarer (wire, flux …)

Verktøy

  • loddeutstyr (jern, holdere, …)
  • liten skjæretang

Trinn 4: Løs ting sammen

Løs ting sammen
Løs ting sammen

Lim de kvinnelige pinnehodene til Arduino -brettoverskrifter:

  1. 1 × 4 topptekst ved siden av "analog" pinneoverskrift, side til side med pinner A0 – A4
  2. 1 × 6 topptekst ved siden av den første digitale pinneoverskriften, side til side med pinner 2–7
  3. 1 × 6 topptekst ved siden av den andre digitale pinneoverskriften, side til side med pinner 8–13

Legg merke til at overskriftene mine er litt lengre … det har ingen ulemper og ingen fordeler antar jeg.

Trinn 5: Koble ting sammen

Koble ting sammen
Koble ting sammen
Koble ting sammen
Koble ting sammen

Kabling av 1-tråds busslinje:

  1. Koble alle ledninger til limte overskrifter på "digital" side (ved siden av pinner 2–13) ved å lodde et stykke ledning til dem
  2. Lodd enden av denne ledningen til SCL -pinledningen (internt koblet til A5)
  3. Koble alle ledninger til limt topptekst på "analog" side (pinner A0 – A3) ved å lodde et stykke ledning til dem
  4. Lodd enden av denne ledningen til A4- og A5 -ledninger (jeg brukte A5 og A6 fordi jeg har et brett som har A6 og A7)
  5. Lodd en 4k7 -motstand mellom den andre enden av denne ledningen og en +5 V -pinledning

Merknader:

  • Pinnene A0 – A5, selv om de er merket som "analoge", kan de også brukes som digitale GPIO -pinner.
  • SCL -pinne på "digital" side er internt koblet til A5 på "analog" side; koblet til topptekstene, danner dette 1-tråds busslinje
  • A4 (brukt som analog inngang) måler bussenes spenning for diagnostiske formål. Det er grunnen til at den er koblet direkte til bussen.
  • Jeg brukte A6 i stedet for A4 fordi jeg har et brett som har A6 & A7; opprinnelig ønsket jeg å bruke A7 som 1-leder bussmester, men disse to pinnene kan ikke konfigureres til å være digitale GPIO.
  • For å forhindre feil tilkobling av sensorkontaktene kan du utelate / kutte ut den ubrukte kontakten (ikke koblet til noen ledning) fra hver hannkontakt og sette den inn i det tilsvarende hullet i den limte pinnehodet.

Trinn 6: Koble til sensorene

Koble til sensorene
Koble til sensorene

Du har nettopp opprettet en rekke med åtte 2 × 2 stikkontakter. Du kan lodde og montere 2 × 2 Dupont -kontakter til sensorkabler og koble dem til disse kontaktene. Programvaren konfigurerer pinnene slik at jevne pinner er GND -pinner og merkelige pinner er Vcc -pinner. For hver sensor er Vcc -pinnen bare GND -pin + 1. En av de to andre pinnene i 2 × 2 -kontakten (en av de to i den limte og loddede overskriften) er for datatråden til sensoren. Det spiller ingen rolle hvilken du bruker.

Trinn 7: Kontrollerprogramvare

Kontrollprogramvare
Kontrollprogramvare

SerialThermometer -skissen kjører kontrolleren. Du finner den på github. Åpne og last opp med Arduino IDE.

Steg for steg:

  1. Åpne Arduino IDE og installer DallasTemperature -biblioteket og alle dets avhengigheter via Sketch | Inkluder bibliotek | Administrer biblioteker.
  2. Klon git -depot. Hvis du ikke er kjent med git, kan du laste ned og pakke ut denne zip -en hvor som helst på datamaskinen.
  3. Åpne SerialThermometer skisse i Arduino IDE.
  4. Koble det modifiserte Arduino -kortet til datamaskinen din med USB -kabel (standard måte)
  5. Last opp skissen med din Arduino IDE
  6. Åpne Serial Monitor via Tools | Seriell skjerm
  7. Du bør se diagnostisk utgang som inneholder flere fysiske målinger etterfulgt av temperaturavlesninger - hver sensorkontakt på en linje. Hvis sensortallet er forskjellig når det slås på separat og når alt slås på samtidig), løser diagnosen til det er løst. Men ikke bekymre deg, også diagnostikk gir temperaturmålinger!

Se kommentert bilde for mer detaljert informasjon om diagnostisk utgang.

Trinn 8: Konklusjon

Jeg har en sterk følelse av at sensorens nettverksfeil skyldes høy kapasitans for mine lange ledninger - rundt 10 m LIYY 314 (3 × 0, 14 mm²) kabel for hver sensor. Eksperimentene mine viste at kommunikasjon bryter hvis det er kapasitans rundt eller høyere enn 0,01 μF mellom 1-leder buss og jord, jeg tror fordi 4k7 pull-up motstand ikke er i stand til å trekke bussen til + 5 V raskt nok til å overholde protokollgrenser.

I mitt oppsett skjer det når mer enn 3 sensorer er koblet sammen. Deretter sløyfes kontrolleren i diagnosesyklusen, og måler temperatursensor-for-sensor (det som er kult også …)

Men også 5. sensor (28: ff: f2: 41: 51: 17: 04: 31) ser ganske syk ut (kanskje feil lodding), så jeg kan undersøke nærmere!

Anbefalt: