Sommario:

Controller di rete con sensore di temperatura tollerante ai guasti: 8 passaggi
Controller di rete con sensore di temperatura tollerante ai guasti: 8 passaggi

Video: Controller di rete con sensore di temperatura tollerante ai guasti: 8 passaggi

Video: Controller di rete con sensore di temperatura tollerante ai guasti: 8 passaggi
Video: 10 TRUCCHI DA ELETTRICISTA 2024, Luglio
Anonim
Controller di rete con sensore di temperatura tollerante ai guasti
Controller di rete con sensore di temperatura tollerante ai guasti

Questo Instructable mostra come convertire una scheda Arduino Uno in un controller monouso per un set di sensori di temperatura DS18B20 in grado di isolare automaticamente i sensori difettosi.

Il controller può gestire fino a 8 sensori con Arduino Uno. (E molto altro ancora con Arduino Mega o con una leggera modifica software.)

Passaggio 1: la storia dietro…

Un paio di anni fa ho installato una rete di sensori di temperatura DS18B20 nella serra di mio padre per il mio controller di riscaldamento basato su pi. Sfortunatamente, l'affidabilità del controller era scarsa principalmente a causa delle frequenti interruzioni del sensore. Ho provato più configurazioni: alimentazione parassita, alimentazione diretta, collegamento della rete a pi e collegamento alla scheda personalizzata basata su Atmega (il cui scopo principale era guidare i motori delle valvole).

Quel che è peggio, l'affidabilità della rete di sensori è diminuita principalmente durante le notti invernali mentre non c'erano quasi problemi in estate! Che diamine sta succedendo qui?

Per indagare su quale sensore causa il problema, è emersa la necessità di accenderli/spegnerli uno per uno o abilitarne una qualsiasi combinazione.

Passaggio 2: come funziona

DS18B20 (il sensore di temperatura) utilizza un protocollo proprietario a 1 filo che consente a più sensori di condividere un collegamento dati comune (quel filo). Questo collegamento dati comune è collegato a uno dei pin GPIO di Arduino e a + 5 V tramite un resistore di pull-up: niente di insolito, molti istruttori coprono questa configurazione.

Il trucco è che i cavi di alimentazione di ciascun sensore sono collegati ai propri pin GPIO (dedicati), in modo che possano essere accesi e spenti separatamente. Ad esempio, se un sensore ha un cavo Vcc collegato al pin 3 e GND al pin 2, l'impostazione del pin 3 su HIGH fornisce alimentazione al sensore (nessuna sorpresa) mentre l'impostazione del pin 2 su LOW fornisce la massa (una piccola sorpresa per me). L'impostazione di entrambi i pin sulla modalità di ingresso isolerà (quasi) completamente il sensore e il suo cablaggio: indipendentemente dal guasto (ad esempio un collegamento) al suo interno, non interferirà con gli altri.

(È corretto dire che collegare il cavo dati a qualcos'altro collegato in qualche modo ad Arduino causerà effettivamente interferenze, ma è quasi impossibile nella mia configurazione).

Si noti che DS18B20 consuma fino a 1, 5 mA mentre un pin Arduino può generare / assorbire fino a 40 mA, quindi è perfettamente sicuro alimentare i sensori direttamente dai pin GPIO.

Passaggio 3: materiali e strumenti

Materiale

  • 1 scheda Arduino UNO
  • 3 intestazioni pin femmina: 1×4, 1×6 e 1×6 (o più lunghe – le ho tagliate da un'intestazione 1×40)
  • una colla
  • un pezzo di filo di rame nudo (almeno 10 cm)
  • un nastro isolante
  • consumabili per saldatura (filo, flusso…)

Utensili

  • attrezzatura per saldatura (ferro, supporti, …)
  • piccole pinze da taglio

Passaggio 4: risolvi le cose insieme

Risolvi le cose insieme
Risolvi le cose insieme

Incolla le intestazioni dei pin femmina alle intestazioni della scheda Arduino:

  1. Intestazione 1×4 accanto all'intestazione del pin "analogico", da lato a lato con i pin A0-A4
  2. Intestazione 1×6 accanto alla prima intestazione pin digitale, da lato a lato con pin 2–7
  3. Intestazione 1×6 accanto alla seconda intestazione pin digitale, da lato a lato con pin 8-13

Nota che le mie intestazioni sono un po' più lunghe… non ha né contro né pro, suppongo.

Passaggio 5: collegare le cose insieme

Collegare le cose insieme
Collegare le cose insieme
Collegare le cose insieme
Collegare le cose insieme

Cablaggio della linea bus a 1 filo:

  1. Collegare tutti i cavi delle intestazioni incollate sul lato "digitale" (adiacente ai pin 2–13) saldando loro un pezzo di filo nudo
  2. Saldare l'estremità di questo filo al cavo del pin SCL (collegato internamente ad A5)
  3. Collegare tutti i cavi dell'intestazione incollata sul lato "analogico" (pin A0–A3) saldando loro un pezzo di filo nudo
  4. Saldare l'estremità di questo filo ai cavi A4 e A5 (ho usato A5 e A6 perché ho una scheda con A6 e A7)
  5. Saldare un resistore da 4k7 tra l'altra estremità di questo filo e il cavo del pin +5 V

Appunti:

  • I pin A0-A5, sebbene siano contrassegnati come "analogici", possono essere utilizzati anche come pin digitali GPIO.
  • Il pin SCL sul lato "digitale" è collegato internamente ad A5 sul lato "analogico"; collegato alle intestazioni, questo forma la linea bus a 1 filo
  • A4 (usato come ingresso analogico) misura la tensione del bus per scopi diagnostici. Questo è il motivo per cui è collegato direttamente al bus.
  • Ho usato A6 invece di A4 perché ho una lavagna che ha A6 e A7; originariamente volevo usare A7 come master bus a 1 filo, ma questi due pin non possono essere configurati per essere GPIO digitali.
  • Per evitare un errato collegamento dei connettori del sensore è possibile omettere/tagliare il contatto inutilizzato (non collegato ad alcun filo) da ciascun connettore maschio e inserirlo nel foro corrispondente nel connettore del pin incollato.

Passaggio 6: collegamento dei sensori

Collegamento dei sensori
Collegamento dei sensori

Hai appena creato un array di otto socket 2×2. È possibile saldare e assemblare connettori Dupont 2×2 ai cavi del sensore e collegarli a queste prese. Il software configura i pin in modo che i pin pari siano pin GND e i pin dispari siano pin Vcc. Per ogni sensore, il pin Vcc è solo il pin GND + 1. Uno degli altri due pin della presa 2×2 (uno di quei due nell'intestazione incollata e saldata) è per il cavo dati del sensore. Non importa quale usi.

Passaggio 7: software di controllo

Software di controllo
Software di controllo

Lo schizzo SerialThermometer esegue il controller. Lo trovi su github. Apri e carica usando Arduino IDE.

Passo dopo passo:

  1. Apri il tuo IDE Arduino e installa la libreria DallasTemperature e tutte le sue dipendenze tramite Sketch | Includi libreria | Gestire le biblioteche.
  2. Clona repository git. Se non hai familiarità con git, scarica e decomprimi questo zip ovunque sul tuo computer.
  3. Apri lo schizzo SerialThermometer nel tuo IDE Arduino.
  4. Collega la tua scheda Arduino modificata al computer tramite cavo USB (modo standard)
  5. Carica lo schizzo usando il tuo IDE Arduino
  6. Apri monitor seriale tramite Strumenti | Monitor seriale
  7. Dovresti vedere un output diagnostico contenente diverse misurazioni fisiche seguite da letture di temperatura: ogni presa del sensore su una singola riga. Se il conteggio dei sensori differisce quando vengono accesi separatamente e quando vengono accesi tutti insieme), la diagnostica continua fino alla risoluzione. Ma niente paura, anche la diagnostica fornisce misurazioni della temperatura!

Vedere l'immagine annotata per maggiori dettagli sull'output diagnostico.

Passaggio 8: conclusione

Ho la netta sensazione che i guasti della rete dei miei sensori siano stati causati dall'elevata capacità del mio cablaggio lungo: circa 10 m di cavo LIYY 314 (3 × 0, 14 mm²) per ciascun sensore. I miei esperimenti hanno mostrato che la comunicazione si interrompe se c'è una capacità intorno o superiore a 0,01 μF tra il bus a 1 filo e la terra, penso perché il resistore di pull-up 4k7 non è in grado di portare il bus a + 5 V abbastanza velocemente da rispettare i limiti del protocollo.

Nella mia configurazione succede quando più di 3 sensori sono collegati insieme. Quindi, il controller esegue un ciclo diagnostico, misurando la temperatura sensore per sensore (anche ciò che è bello…)

Ma anche il quinto sensore (28:ff:f2:41:51:17:04:31) sembra piuttosto malato (forse saldatura sbagliata), quindi posso indagare ulteriormente!

Consigliato: