Innehållsförteckning:

Fel-tolerant temperatursensor nätverksstyrenhet: 8 steg
Fel-tolerant temperatursensor nätverksstyrenhet: 8 steg

Video: Fel-tolerant temperatursensor nätverksstyrenhet: 8 steg

Video: Fel-tolerant temperatursensor nätverksstyrenhet: 8 steg
Video: VW fuel temperature sensor replacement /VW,SEAT,AUDI,SKODA/ 2024, Juli
Anonim
Fel-tolerant temperatursensor nätverksstyrenhet
Fel-tolerant temperatursensor nätverksstyrenhet

Denna instruktionsbok visar dig hur du konverterar ett Arduino Uno-kort till en enda ändamålsenhet för en uppsättning DS18B20 temperaturgivare som kan automatiskt isolera felaktiga sensorer.

Styrenheten kan hantera upp till 8 sensorer med Arduino Uno. (Och mycket mer med Arduino Mega eller med en liten programvaruändring.)

Steg 1: Historien bakom …

För ett par år sedan skapade jag ett DS18B20 temperatursensornätverk i min fars växthus för min pi-baserade värmeregulator. Tyvärr var tillförlitligheten för regulatorn dålig främst på grund av frekventa sensoravbrott. Jag försökte flera inställningar - parasitkraft, direkt ström, ansluta nätverket till pi samt ansluta det till Atmega -baserat anpassat kort (som främst syftade till att driva ventilmotorer).

Vad värre, tillförlitligheten för sensornätverk sjönk främst under vinternätter medan det nästan inte fanns några problem på sommaren! Vad fan är det som händer här?

För att undersöka vilken sensor som orsakar problemet uppstod ett behov av att slå på/av dem en efter en eller aktivera en kombination av dem.

Steg 2: Hur det fungerar

DS18B20 (temperatursensorn) använder ett proprietärt 1-trådsprotokoll som gör att flera sensorer kan dela gemensam datalänk (den ena ledningen). Den här vanliga datalänken är ansluten till en av Arduinos GPIO-stift och till + 5 V via ett uppdragningsmotstånd-inget ovanligt, många instruktioner täcker denna inställning.

Tricket är att varje sensors strömkablar är anslutna till egna (dedikerade) GPIO -stift, så att de kan slås på och av separat. Till exempel, om en sensor har Vcc -kabel ansluten till pin #3 och GND till pin #2, ger inställningsstift #3 till HIGH ström till sensorn (ingen överraskning) medan inställning av pin #2 till LOW ger mark (en liten överraskning för mig). Om båda stiften ställs in på ingångsläget isoleras (nästan) helt sensorn och dess ledningar - oavsett vilket fel (t.ex. en genväg) som händer inuti kommer den inte att störa de andra.

(Rätt att säga att anslutning av datakabeln till något annat som på något sätt är anslutet till Arduino verkligen kommer att orsaka störningar, men det är nästan omöjligt i min inställning).

Lägg märke till att DS18B20 förbrukar upp till 1, 5 mA medan en Arduino -stift kan källa / sjunka upp till 40 mA, så det är helt säkert att driva sensorer med GPIO -stift direkt.

Steg 3: Material och verktyg

Material

  • 1 Arduino UNO -bräda
  • 3 kvinnliga stifthuvuden: 1 × 4, 1 × 6 och 1 × 6 (eller längre - jag klippte dem från en 1 × 40 rubrik)
  • ett lim
  • en bit av ren kooper tråd (minst 10 cm)
  • ett isoleringstejp
  • lödningsartiklar (tråd, flöde …)

Verktyg

  • lödutrustning (järn, hållare, …)
  • små klipptänger

Steg 4: Fixa saker tillsammans

Fixa saker tillsammans
Fixa saker tillsammans

Limma de kvinnliga stifthuvudena till Arduino -korthuvuden:

  1. 1 × 4 sidhuvud bredvid "analog" stifthuvud, sida vid sida med stift A0 – A4
  2. 1 × 6 sidhuvud bredvid första digitala stifthuvud, sida vid sida med stift 2–7
  3. 1 × 6 sidhuvud bredvid den andra digitala stifthuvudet, sida vid sida med stift 8–13

Lägg märke till att mina rubriker är lite längre … det har inga nackdelar och inga fördelar antar jag.

Steg 5: Koppla ihop saker

Koppla ihop saker
Koppla ihop saker
Koppla ihop saker
Koppla ihop saker

Anslutning av 1-tråds busslinje:

  1. Anslut alla ledningar av limmade sidhuvuden på "digital" sida (intill stift 2–13) genom att lödda en bit av tråd till dem
  2. Löd änden av denna tråd till SCL -stiftkabel (internt ansluten till A5)
  3. Anslut alla ledningar för den limmade rubriken på "analog" sida (stift A0 – A3) genom att lödda en bit naken tråd till dem
  4. Löd änden av denna tråd till A4- och A5 -ledningar (jag använde A5 och A6 eftersom jag har ett kort som har A6 och A7)
  5. Löd ett 4k7 -motstånd mellan den andra änden av denna tråd och +5 V stiftkabel

Anmärkningar:

  • Stift A0 – A5, även om de är märkta med "analog", kan också användas som digitala GPIO -stift.
  • SCL -stift på "digital" sida är internt anslutet till A5 på "analog" sida; ansluten till rubrikerna, bildar denna 1-tråds busslinje
  • A4 (används som analog ingång) mäter bussens spänning för diagnostiska ändamål. Det är anledningen till att den är direkt ansluten till bussen.
  • Jag använde A6 istället för A4 eftersom jag har en tavla som har A6 & A7; ursprungligen ville jag använda A7 som 1-tråds bussmästare men dessa två stift kan inte konfigureras till digitala GPIO.
  • För att förhindra fel anslutning av sensorkontakterna kan du utelämna / klippa bort den oanvända kontakten (inte ansluten till någon ledning) från varje hankontakt och sätta in den i motsvarande hål i den limmade stifthuvudet.

Steg 6: Anslut sensorerna

Ansluta sensorerna
Ansluta sensorerna

Du har just skapat en uppsättning med åtta 2 × 2 -uttag. Du kan löda och montera 2 × 2 Dupont -kontakter till sensorkablar och ansluta dem till dessa uttag. Programvaran konfigurerar stiften så att jämna stift är GND -stift och udda stift är Vcc -stift. För varje sensor är Vcc -stift bara GND -stift + 1. En av de andra två stiften i 2 × 2 -uttaget (en av de två i den limmade och lödda rubriken) är för sensorkabeln. Det spelar ingen roll vilken du använder.

Steg 7: Controller -programvara

Kontrollprogramvara
Kontrollprogramvara

SerialThermometer -skissen kör regulatorn. Du hittar den på github. Öppna och ladda upp med Arduino IDE.

Steg för steg:

  1. Öppna ditt Arduino IDE och installera DallasTemperature -biblioteket och alla dess beroenden via Sketch | Inkludera bibliotek | Hantera bibliotek.
  2. Klon git -arkiv. Om du inte är bekant med git, ladda ner och packa upp denna zip var som helst på din dator.
  3. Öppna SerialThermometer -skiss i din Arduino IDE.
  4. Anslut ditt modifierade Arduino -kort till din dator med USB -kabel (standard sätt)
  5. Ladda upp skissen med din Arduino IDE
  6. Öppna Serial Monitor via Verktyg | Seriell bildskärm
  7. Du bör se diagnosutdata som innehåller flera fysiska mätningar följt av temperaturavläsningar - varje sensoruttag på en rad. Om givarantalet skiljer sig åt när de slås på separat och när alla slås på tillsammans), går diagnosslingorna tills de har lösts. Men oroa dig inte, även diagnostik ger temperaturmätningar!

Se den kommenterade bilden för mer detaljerad information om diagnostisk utmatning.

Steg 8: Slutsats

Jag har en stark känsla av att mina sensor nätverksfel orsakades av hög kapacitans för mina långa ledningar - cirka 10 m LIYY 314 (3 × 0, 14 mm²) kabel för varje sensor. Mina experiment visade att kommunikation bryts om det finns kapacitans runt eller högre än 0,01 μF mellan 1-tråds buss och jord, jag tror att eftersom 4k7 uppdragningsmotstånd inte kan dra bussen till + 5 V tillräckligt snabbt för att följa protokollgränserna.

I min inställning händer det när mer än 3 sensorer är anslutna tillsammans. Därefter slingas regulatorn i diagnoscykeln och mäter temperaturgivare för sensor (vad är coolt också …)

Men även 5: e sensorn (28: ff: f2: 41: 51: 17: 04: 31) ser ganska sjuk ut (kanske fel lödning), så jag kan undersöka vidare!

Rekommenderad: