Tartalomjegyzék:

Hibatűrő hőmérséklet-érzékelő hálózati vezérlő: 8 lépés
Hibatűrő hőmérséklet-érzékelő hálózati vezérlő: 8 lépés

Videó: Hibatűrő hőmérséklet-érzékelő hálózati vezérlő: 8 lépés

Videó: Hibatűrő hőmérséklet-érzékelő hálózati vezérlő: 8 lépés
Videó: Practical Byzantine Fault Tolerance Consensus Algorithm in Blockchain 2024, Július
Anonim
Hibatűrő hőmérséklet-érzékelő hálózati vezérlő
Hibatűrő hőmérséklet-érzékelő hálózati vezérlő

Ez az útmutató azt mutatja be, hogyan lehet az Arduino Uno kártyát egycélú vezérlővé alakítani egy DS18B20 hőmérséklet-érzékelő készlethez, amely képes a hibás érzékelők automatikus leválasztására.

A vezérlő akár 8 érzékelőt is kezelhet az Arduino Uno segítségével. (És még sok más az Arduino Mega -val vagy enyhe szoftvermódosítással.)

1. lépés: Történet mögött…

Pár éve létrehoztam egy DS18B20 hőmérséklet-érzékelő hálózatot apám üvegházában a pi-alapú fűtésszabályozómhoz. Sajnos a vezérlő megbízhatósága gyenge volt, főleg a gyakori érzékelő kimaradások miatt. Több beállítást is kipróbáltam - parazita tápellátás, közvetlen áramellátás, a hálózat pi -hez való csatlakoztatása, valamint az Atmega -alapú egyedi kártyához (amelynek elsődleges célja a szelepmotorok meghajtása volt).

Ami még rosszabb, az érzékelőhálózat megbízhatósága főleg a téli éjszakák során csökkent, miközben nyáron szinte semmi probléma nem volt! Mi a fene folyik itt?

Annak vizsgálatához, hogy melyik érzékelő okozza a problémát, felmerült az igény, hogy egyesével be- és kikapcsolják, vagy engedélyezzék ezek kombinációját.

2. lépés: Hogyan működik?

A DS18B20 (hőmérséklet-érzékelő) szabadalmaztatott 1 vezetékes protokollt használ, amely lehetővé teszi több érzékelő számára, hogy közös adatkapcsolatot (egy vezetéket) osszanak meg. Ez a közös adatkapcsolat az Arduino egyik GPIO-csatlakozójához és + 5 V-hoz van csatlakoztatva egy felhúzó ellenálláson keresztül-semmi szokatlan, sok utasítást tartalmaz ez a beállítás.

A trükk az, hogy az egyes érzékelők tápvezetékei saját (dedikált) GPIO tűkhöz vannak csatlakoztatva, így külön -külön be- és kikapcsolhatók. Például, ha egy érzékelő Vcc vezetékét a 3. tűhöz, a GND csatlakozót pedig a 2. tűhöz köti, a #3 tű HIGH értékre állítása biztosítja az érzékelő áramellátását (nem meglepő), míg a #2 láb LOW beállítása földet biztosít (egy kis meglepetés nekem). Ha mindkét érintkezőt bemeneti üzemmódba állítja, (majdnem) teljesen elszigeteli az érzékelőt és annak vezetékét - függetlenül attól, hogy milyen hiba (például parancsikon) történik benne, nem zavarja a többieket.

(Igazán mondom, hogy az adatkábel csatlakoztatása valami máshoz, amely valahogy az Arduino -hoz van csatlakoztatva, valóban interferenciát okoz, de ez szinte lehetetlen az én beállításomban).

Vegye figyelembe, hogy a DS18B20 legfeljebb 1, 5 mA -t fogyaszt, míg egy Arduino -tű 40 mA -ig képes forrni / süllyedni, így teljesen biztonságos az érzékelők közvetlen GPIO -érintkezőkről történő táplálása.

3. lépés: Anyag és eszközök

Anyag

  • 1 Arduino UNO tábla
  • 3 db női csapfej: 1 × 4, 1 × 6 és 1 × 6 (vagy hosszabb - egy 1 × 40 fejlécből vágtam ki őket)
  • egy ragasztó
  • egy darab csupasz káderes huzal (legalább 10 cm)
  • szigetelő szalagot
  • forrasztó fogyóeszközök (huzal, fluxus …)

Eszközök

  • forrasztóberendezés (vasaló, tartók, stb.)
  • kis vágófogó

4. lépés: Javítsa meg a dolgokat együtt

Javítsa meg a dolgokat együtt
Javítsa meg a dolgokat együtt

Ragassza a női tűfejléceket az Arduino táblafejlécekhez:

  1. 1 × 4-es fejléc az "analóg" érintkezőfej mellett, oldalról oldalra A0 – A4-es csapokkal
  2. 1 × 6-os fejléc az első digitális tűfejléc mellett, oldalról-oldalra, 2–7
  3. 1 × 6 fejléc a második digitális tüskés fejléc mellett, oldalról oldalra, 8–13

Figyelje meg, hogy a fejléceim kicsit hosszabbak … nincsenek hátrányai és előnyei.

5. lépés: A dolgok összekötése

Drótdolgok együtt
Drótdolgok együtt
Drótdolgok együtt
Drótdolgok együtt

Az 1 vezetékes buszvezeték bekötése:

  1. Csatlakoztassa a ragasztott fejrészek összes vezetékét a "digitális" oldalhoz (a 2–13. Tűk mellé) úgy, hogy egy csupasz huzaldarabot forraszt rájuk.
  2. Forrasztja ennek a vezetéknek a végét az SCL csapvezetékhez (belsőleg csatlakoztatva az A5 -höz)
  3. Csatlakoztassa a ragasztott fejrész összes vezetékét az "analóg" oldalon (A0 - A3 érintkezők), forrasztva rájuk egy csupasz huzaldarabot
  4. Forrasztja a vezeték végét A4 és A5 vezetékekhez (A5 -öt és A6 -ot használtam, mert van egy lapom, amelyen A6 és A7 van)
  5. Forrasztjon egy 4k7 -es ellenállást a vezeték másik vége és a +5 V -os érintkezők között

Megjegyzések:

  • Az A0 – A5 érintkezők, bár „analóg” jelöléssel vannak ellátva, használhatók GPIO digitális csapként is.
  • A "digitális" oldalon lévő SCL csap belsőleg az A5 -hez van csatlakoztatva az "analóg" oldalon; csatlakozik a fejekhez, ez képezi az 1 vezetékes buszvonalat
  • Az A4 (analóg bemenetként használják) a busz feszültségét méri diagnosztikai célokra. Ez az oka annak, hogy közvetlenül csatlakozik a buszhoz.
  • A4 helyett A6 -ot használtam, mert van egy lapom, amin A6 & A7; eredetileg az A7-et akartam használni 1-vezetékes busz masterként, de ezt a két érintkezőt nem lehet úgy konfigurálni, hogy digitális GPIO-k legyenek.
  • Az érzékelőcsatlakozók helytelen csatlakoztatásának elkerülése érdekében hagyja ki / vágja ki a nem használt érintkezőt (nincs csatlakoztatva semmilyen vezetékhez) minden dugaszoló csatlakozóból, és illessze be a ragasztott csapfej megfelelő lyukába.

6. lépés: Az érzékelők csatlakoztatása

Az érzékelők csatlakoztatása
Az érzékelők csatlakoztatása

Most létrehozott egy nyolc 2 × 2 foglalatból álló tömböt. Forraszthat és összeszerelhet 2 × 2 Dupont csatlakozókat az érzékelő kábelekhez, és csatlakoztathatja ezeket az aljzatokhoz. A szoftver úgy konfigurálja a csapokat, hogy a páros tüskék GND és a páratlanok Vcc csapok legyenek. Minden érzékelő esetében a Vcc csap csak GND pin + 1. A 2 × 2 foglalat másik két csapjának egyike (a kettő közül az egyik a ragasztott és forrasztott fejrészben) az érzékelő adatvezetékéhez való. Nem mindegy, hogy melyiket használja.

7. lépés: Vezérlő szoftver

Vezérlő szoftver
Vezérlő szoftver

A SerialThermometer vázlat futtatja a vezérlőt. A githubon megtalálod. Nyissa meg és töltse fel az Arduino IDE segítségével.

Lépésről lépésre:

  1. Nyissa meg Arduino IDE -jét, és telepítse a DallasTemperature könyvtárat és minden függőséget a Sketch | Könyvtár | Könyvtárak kezelése.
  2. Clone git adattár. Ha nem ismeri a git -et, töltse le és csomagolja ki ezt a ZIP -fájlt bárhol a számítógépén.
  3. Nyissa meg a SerialThermometer vázlatát az Arduino IDE -ben.
  4. Csatlakoztassa a módosított Arduino kártyát a számítógéphez USB -kábellel (szabványos módon)
  5. Töltse fel a vázlatot az Arduino IDE használatával
  6. Nyissa meg a Soros monitort az Eszközök | Soros monitor
  7. Látnia kell a diagnosztikai kimenetet, amely több fizikai mérést, majd hőmérséklet -leolvasást tartalmaz - minden érzékelő aljzat egyetlen vonalon. Ha az érzékelők száma külön -külön és minden együttes bekapcsoláskor eltér), akkor a diagnosztikai ciklusok megoldódnak. De ne aggódjon, a diagnosztika is biztosítja a hőmérséklet mérését!

A diagnosztikai kimenetről részletesebben lásd a megjegyzésekkel ellátott képet.

8. lépés: Következtetés

Erős érzésem van, hogy az érzékelői hálózat hibáit a hosszú huzalozás nagy kapacitása okozta - körülbelül 10 m LIYY 314 (3 × 0, 14 mm²) kábel minden érzékelőnél. Kísérleteim azt mutatták, hogy a kommunikáció megszakad, ha az 1 vezetékes busz és a föld között 0,01 μF körüli vagy annál nagyobb kapacitás van, azt hiszem, mert a 4k7 felhúzó ellenállás nem képes elég gyorsan + 5 V-ra húzni a buszt, hogy megfeleljen a protokoll korlátainak.

Az én beállításomnál ez akkor fordul elő, ha több mint 3 érzékelő van csatlakoztatva. Ezután a vezérlő ciklusokat végez a diagnosztikai ciklusban, mérve a hőmérsékletet érzékelőnként (ami szintén hűvös …)

De az ötödik érzékelő is (28: ff: f2: 41: 51: 17: 04: 31) elég rosszul néz ki (lehet, hogy rossz a forrasztás), így tovább tudok vizsgálni!

Ajánlott: