Inhoudsopgave:

Fouttolerante temperatuursensor netwerkcontroller - Ajarnpa
Fouttolerante temperatuursensor netwerkcontroller - Ajarnpa

Video: Fouttolerante temperatuursensor netwerkcontroller - Ajarnpa

Video: Fouttolerante temperatuursensor netwerkcontroller - Ajarnpa
Video: COB-pitch 20: Fouttolerante systemen 2024, Juli-
Anonim
Fouttolerante temperatuursensor netwerkcontroller
Fouttolerante temperatuursensor netwerkcontroller

Deze Instructable laat je zien hoe je een Arduino Uno-bord omzet in een controller voor één doel voor een set DS18B20-temperatuursensoren die in staat zijn om defecte sensoren automatisch te isoleren.

De controller kan tot 8 sensoren beheren met Arduino Uno. (En nog veel meer met Arduino Mega of met een kleine softwarewijziging.)

Stap 1: Verhaal achter …

Een paar jaar geleden heb ik een DS18B20 temperatuursensornetwerk opgezet in de kas van mijn vader voor mijn pi-gebaseerde verwarmingscontroller. Helaas was de betrouwbaarheid van de controller slecht, voornamelijk als gevolg van frequente sensorstoringen. Ik heb meerdere opstellingen geprobeerd - parasitaire voeding, directe voeding, het netwerk verbinden met pi en het verbinden met een op Atmega gebaseerd aangepast bord (met als primaire doel om klepmotoren aan te drijven).

Erger nog, de betrouwbaarheid van het sensornetwerk daalde vooral tijdens de winternachten, terwijl er in de zomer bijna geen problemen waren! Wat is hier in godsnaam aan de hand?

Om te onderzoeken welke sensor het probleem veroorzaakt, ontstond de behoefte om ze een voor een aan/uit te zetten of een combinatie ervan in te schakelen.

Stap 2: Hoe het werkt

DS18B20 (de temperatuursensor) maakt gebruik van een eigen 1-draads protocol waarmee meerdere sensoren een gemeenschappelijke datalink kunnen delen (die ene draad). Deze gemeenschappelijke datalink is verbonden met een van Arduino's GPIO-pinnen en met + 5 V via een pull-up-weerstand - niets ongewoons, veel instructables dekken deze opstelling.

De truc is dat de stroomkabels van elke sensor zijn aangesloten op eigen (dedicated) GPIO-pinnen, zodat ze afzonderlijk kunnen worden in- en uitgeschakeld. Als een sensor bijvoorbeeld een Vcc-kabel heeft die is aangesloten op pin #3 en GND op pin #2, levert het instellen van pin #3 op HOOG stroom voor de sensor (geen verrassing) terwijl het instellen van pin #2 op LAAG zorgt voor aarde (een kleine verrassing voor mij). Door beide pinnen in de invoermodus in te stellen, worden de sensor en de bedrading (bijna) volledig geïsoleerd - ongeacht welke storing (bijvoorbeeld een snelkoppeling) erbinnen plaatsvindt, het zal de andere niet storen.

(Eerlijk gezegd zal het verbinden van de datakabel met iets anders dat op de een of andere manier met Arduino is verbonden inderdaad interferentie veroorzaken, maar het is bijna onmogelijk in mijn opstelling).

Merk op dat de DS18B20 tot 1, 5 mA verbruikt, terwijl één Arduino-pin tot 40 mA kan sourcen / sinken, dus het is volkomen veilig om sensoren rechtstreeks van GPIO-pinnen te voorzien.

Stap 3: Materiaal & Gereedschap

Materiaal

  • 1 Arduino UNO-bord
  • 3 vrouwelijke pin-headers: 1×4, 1×6 en 1×6 (of langer – ik knip ze uit één 1×40 header)
  • een lijm
  • een stuk blank koperdraad (minimaal 10 cm)
  • een isolatietape
  • soldeer verbruiksartikelen (draad, flux…)

Gereedschap

  • soldeerapparatuur (ijzer, houders, …)
  • kleine kniptang

Stap 4: dingen samen oplossen

Samen dingen oplossen
Samen dingen oplossen

Lijm de vrouwelijke pin-headers op de Arduino-bordheaders:

  1. 1×4 header naast "analoge" pin header, side-to-side met pinnen A0-A4
  2. 1×6 header naast de eerste digitale pin header, side-to-side met pinnen 2-7
  3. 1×6 header naast tweede digitale pin header, side-to-side met pinnen 8–13

Merk op dat mijn headers een beetje langer zijn … het heeft geen nadelen en geen voordelen denk ik.

Stap 5: Verbind dingen samen

Verbind dingen samen
Verbind dingen samen
Verbind dingen samen
Verbind dingen samen

Bedrading van de 1-draads buslijn:

  1. Verbind alle draden van gelijmde headers aan de "digitale" kant (grenzend aan pinnen 2-13) door er een stuk blanke draad aan te solderen
  2. Soldeer het uiteinde van deze draad aan de SCL-pendraad (intern aangesloten op A5)
  3. Verbind alle draden van de gelijmde header aan de "analoge" kant (pinnen A0-A3) door er een stuk blanke draad aan te solderen
  4. Soldeer het uiteinde van deze draad aan A4- en A5-draden (ik gebruikte A5 en A6 omdat ik een bord heb met A6 en A7)
  5. Soldeer een weerstand van 4k7 tussen het andere uiteinde van deze draad en de +5 V-pendraad

Opmerkingen:

  • Pins A0-A5, hoewel gemarkeerd als "analoog", kunnen ook worden gebruikt als GPIO digitale pinnen.
  • SCL-pin aan de "digitale" kant is intern verbonden met A5 aan de "analoge" kant; aangesloten op de headers, vormt dit de 1-draads buslijn
  • A4 (gebruikt als analoge ingang) meet de spanning van de bus voor diagnostische doeleinden. Daarom is hij direct aangesloten op de bus.
  • Ik gebruikte A6 in plaats van A4 omdat ik een bord heb met A6 & A7; oorspronkelijk wilde ik A7 gebruiken als de 1-draads busmaster, maar deze twee pinnen kunnen niet worden geconfigureerd als digitale GPIO's.
  • Om verkeerde aansluiting van de sensorconnectoren te voorkomen, kunt u het ongebruikte contact (niet aangesloten op een draad) van elke mannelijke connector weglaten / wegknippen en in het overeenkomstige gat in de gelijmde pinheader steken.

Stap 6: De sensoren aansluiten

De sensoren aansluiten
De sensoren aansluiten

Je hebt zojuist een array van acht 2×2 sockets gemaakt. U kunt 2×2 Dupont connectoren solderen en monteren op sensorkabels en deze aansluiten op deze sockets. De software configureert de pinnen zo dat even pinnen GND-pinnen zijn en oneven pinnen Vcc-pinnen. Voor elke sensor is Vcc-pin gewoon GND-pin + 1. Een van de andere twee pinnen van de 2 × 2-aansluiting (een van die twee in de gelijmde en gesoldeerde kop) is voor de datadraad van de sensor. Het maakt niet uit welke je gebruikt.

Stap 7: Controller-software

Controller-software
Controller-software

De SerialThermometer-schets voert de controller uit. Je kunt het vinden op github. Open en upload met Arduino IDE.

Stap voor stap:

  1. Open uw Arduino IDE en installeer de DallasTemperature-bibliotheek en al zijn afhankelijkheden via Sketch | Bibliotheek opnemen | Beheer bibliotheken.
  2. Kloon git-repository. Als je niet bekend bent met git, download en pak deze zip dan overal op je computer uit.
  3. Open SerialThermometer-schets in uw Arduino IDE.
  4. Sluit uw aangepaste Arduino-bord aan op uw computer via een USB-kabel (standaardmanier)
  5. Upload de schets met je Arduino IDE
  6. Seriële monitor openen via Extra | Seriële monitor
  7. U zou een diagnostische uitvoer moeten zien die verschillende fysieke metingen bevat, gevolgd door temperatuurmetingen - elke sensoraansluiting op een enkele lijn. Als het aantal sensoren verschilt wanneer ze afzonderlijk worden ingeschakeld en wanneer ze allemaal tegelijk worden ingeschakeld), blijven de diagnostische lussen totdat deze zijn opgelost. Maar geen zorgen, ook diagnostisch zorgt voor temperatuurmetingen!

Zie geannoteerde afbeelding voor meer details over diagnostische uitvoer.

Stap 8: Conclusie

Ik heb sterk het gevoel dat de storingen in mijn sensornetwerk werden veroorzaakt door een hoge capaciteit van mijn lange bedrading - ongeveer 10 m LIYY 314 (3 × 0, 14 mm²) kabel voor elke sensor. Mijn experimenten toonden aan dat de communicatie verbreekt als er een capaciteit is rond of hoger dan 0,01 μF tussen 1-draads bus en aarde, denk ik omdat 4k7 pull-up weerstand de bus niet snel genoeg naar + 5 V kan trekken om te voldoen aan protocollimieten.

In mijn opstelling gebeurt het als er meer dan 3 sensoren op elkaar zijn aangesloten. Vervolgens gaat de controller in een diagnostische cyclus, waarbij de temperatuur sensor voor sensor wordt gemeten (wat ook cool is …)

Maar ook 5e sensor (28:ff:f2:41:51:17:04:31) ziet er behoorlijk ziek uit (misschien verkeerd gesoldeerd), dus ik kan het verder onderzoeken!

Aanbevolen: