Indholdsfortegnelse:

Fejltolerant temperatursensor Netværkscontroller: 8 trin
Fejltolerant temperatursensor Netværkscontroller: 8 trin

Video: Fejltolerant temperatursensor Netværkscontroller: 8 trin

Video: Fejltolerant temperatursensor Netværkscontroller: 8 trin
Video: SBA 355: How to Read Plans and Specs 2024, Juli
Anonim
Fejltolerant temperatursensor netværkskontroller
Fejltolerant temperatursensor netværkskontroller

Denne instruktør viser dig, hvordan du konverterer et Arduino Uno-kort til en enkelt-anvendelig controller til et sæt DS18B20 temperatursensorer, der er i stand til automatisk isolering af defekte sensorer.

Controlleren kan styre op til 8 sensorer med Arduino Uno. (Og meget mere med Arduino Mega eller med en lille softwareændring.)

Trin 1: Historien bag …

For et par år siden oprettede jeg et DS18B20 temperatursensornetværk i min fars drivhus til min pi-baserede varmestyring. Desværre var controllerens pålidelighed dårlig, hovedsagelig på grund af hyppige sensorafbrydelser. Jeg prøvede flere opsætninger - parasitkraft, direkte strøm, tilslutning af netværket til pi samt tilslutning af det til Atmega -baseret brugerdefineret kort (som primært havde til formål at drive ventilmotorer).

Hvad værre var, sensornetværkspålideligheden faldt hovedsageligt i løbet af vinternætterne, mens der næsten ikke var problemer om sommeren! Hvad fanden sker der her?

For at undersøge hvilken sensor der forårsager problemet, opstod der et behov for at tænde/slukke dem en efter en eller aktivere en kombination af dem.

Trin 2: Sådan fungerer det

DS18B20 (temperatursensoren) anvender proprietær 1-leder protokol, der gør det muligt for flere sensorer at dele fælles datalink (den ene ledning). Dette fælles datalink er forbundet til en af Arduinos GPIO-ben og til + 5 V via en pull-up-modstand-intet ualmindeligt, mange instruktører dækker denne opsætning.

Tricket er, at hver sensors strømledninger er forbundet til egne (dedikerede) GPIO -ben, så de kan tændes og slukkes separat. For eksempel, hvis en sensor har Vcc -ledning tilsluttet pin #3 og GND til pin #2, giver indstilling pin #3 til HIGH strøm til sensoren (ingen overraskelse), mens indstilling af pin #2 til LOW giver jord (en lille overraskelse for mig). Indstilling af begge ben til input -tilstand vil (næsten) fuldstændigt isolere sensoren og dens ledninger - uanset hvilken fejl (f.eks. En genvej) der sker inden i den, vil den ikke forstyrre de andre.

(Retfærdigt at sige, at tilslutning af datakablet til noget andet, der på en eller anden måde er forbundet til Arduino, virkelig vil forårsage interferens, men det er næsten umuligt i mit setup).

Bemærk, at DS18B20 bruger op til 1, 5 mA, mens en Arduino -pin kan kilde / synke op til 40 mA, så det er helt sikkert at drive sensorer direkte fra GPIO -ben.

Trin 3: Materiale og værktøjer

Materiale

  • 1 Arduino UNO bord
  • 3 kvindelige pinhoveder: 1 × 4, 1 × 6 og 1 × 6 (eller længere - jeg skar dem fra en 1 × 40 header)
  • en lim
  • et stykke bar kooperatråd (mindst 10 cm)
  • et isoleringstape
  • loddematerialer (tråd, flux …)

Værktøjer

  • loddeudstyr (jern, holdere, …)
  • små skæretænger

Trin 4: Fix ting sammen

Fix tingene sammen
Fix tingene sammen

Lim de kvindelige pinhoveder til Arduino board headers:

  1. 1 × 4 header ved siden af "analog" pin header, side til side med ben A0 – A4
  2. 1 × 6 header ved siden af første digitale pin header, side til side med pins 2–7
  3. 1 × 6 header ved siden af den anden digitale pin header, side til side med ben 8–13

Bemærk, at mine overskrifter er lidt længere … det har ingen ulemper og ingen fordele, formoder jeg.

Trin 5: Kør ting sammen

Kør tingene sammen
Kør tingene sammen
Kør tingene sammen
Kør tingene sammen

Tilslutning af 1-leder buslinjen:

  1. Tilslut alle ledninger til limede overskrifter på "digital" side (ved siden af ben 2–13) ved at lodde et stykke bar ledning til dem
  2. Lod enden af denne ledning til SCL -pinledning (internt forbundet til A5)
  3. Tilslut alle ledninger til limet header på "analog" side (ben A0 – A3) ved at lodde et stykke bar ledning til dem
  4. Lod enden af denne ledning til A4- og A5 -ledninger (jeg brugte A5 og A6, fordi jeg har et bræt, der har A6 og A7)
  5. Lod en 4k7 modstand mellem den anden ende af denne ledning og +5 V pin ledning

Bemærkninger:

  • Stifterne A0 – A5, selvom de er mærket "analog", kan også bruges som GPIO digitale ben.
  • SCL -pin på "digital" side er internt forbundet til A5 på "analog" side; forbundet til overskrifterne, danner dette 1-leder buslinjen
  • A4 (brugt som analog indgang) måler bussens spænding til diagnostiske formål. Det er grunden til, at den er direkte forbundet med bussen.
  • Jeg brugte A6 i stedet for A4, fordi jeg har et bræt, der har A6 & A7; oprindeligt ville jeg bruge A7 som 1-wire busmasteren, men disse to ben kan ikke konfigureres til at være digitale GPIO'er.
  • For at forhindre forkert tilslutning af sensorkonnektorerne kan du udelade / afbryde den ubrugte kontakt (ikke forbundet til nogen ledning) fra hvert hanstik og indsætte det i det tilsvarende hul i det limede stifthoved.

Trin 6: Tilslutning af sensorerne

Tilslutning af sensorerne
Tilslutning af sensorerne

Du har lige oprettet en matrix med otte 2 × 2 stik. Du kan lodde og samle 2 × 2 Dupont -stik til sensorkabler og slutte dem til disse stik. Softwaren konfigurerer stifterne, så lige pins er GND -pins og ulige pins er Vcc -pins. For hver sensor er Vcc pin bare GND pin + 1. En af de to andre pins i 2 × 2 stikket (en af de to i det limede og loddede header) er til datatråden på sensoren. Det er ligegyldigt, hvilken du bruger.

Trin 7: Controller -software

Controller -software
Controller -software

SerialThermometer -skitsen kører controlleren. Du kan finde det på github. Åbn og upload ved hjælp af Arduino IDE.

Trin for trin:

  1. Åbn din Arduino IDE, og installer DallasTemperature -biblioteket og alle dets afhængigheder via Sketch | Inkluder bibliotek | Administrer biblioteker.
  2. Klon git -arkiv. Hvis du ikke kender git, skal du downloade og pakke denne zip ud hvor som helst på din computer.
  3. Åbn SerialThermometer -skitse i din Arduino IDE.
  4. Tilslut dit modificerede Arduino -kort til din computer ved hjælp af USB -kabel (standard måde)
  5. Upload skitsen ved hjælp af din Arduino IDE
  6. Åbn seriel skærm via værktøjer | Seriel skærm
  7. Du bør se diagnostisk output, der indeholder flere fysiske målinger efterfulgt af temperaturmålinger - hver sensorstik på en enkelt linje. Hvis sensortallet er forskelligt, når det tændes separat og når alt tændes sammen), løser diagnosen, indtil det er løst. Men rolig, også diagnostisk giver temperaturmålinger!

Se kommenteret billede for flere detaljer om diagnostisk output.

Trin 8: Konklusion

Jeg har en stærk følelse af, at mine sensornetværksfejl blev forårsaget af høj kapacitans i mine lange ledninger - omkring 10 m LIYY 314 (3 × 0, 14 mm²) kabel til hver sensor. Mine eksperimenter viste, at kommunikation bryder, hvis der er kapacitans omkring eller højere end 0,01 μF mellem 1-leder bus og jord, jeg tror, fordi 4k7 pull-up modstand ikke er i stand til at trække bussen til + 5 V hurtigt nok til at overholde protokolgrænser.

I mit setup sker det, når mere end 3 sensorer er forbundet sammen. Derefter slinger controlleren i diagnosecyklussen og måler temperatursensor-for-sensor (hvad er også fedt …)

Men også 5. sensor (28: ff: f2: 41: 51: 17: 04: 31) ser ret syg ud (måske forkert lodning), så jeg kan undersøge nærmere!

Anbefalede: