Sommario:
- Passaggio 1: sviluppo software
- Passaggio 2: utilizzo di due sensori di temperatura - Dettagli
- Passaggio 3: risultati preliminari
Video: Termometro di registrazione fai da te con 2 sensori: 3 passaggi (con immagini)
2024 Autore: John Day | [email protected]. Ultima modifica: 2024-01-30 10:01
Questo progetto è un miglioramento del mio precedente progetto "Termometro di registrazione fai da te". Registra le misurazioni della temperatura su una scheda micro SD.
Modifiche hardware
Ho aggiunto un sensore di temperatura DS18B20 al modulo dell'orologio in tempo reale, dove è previsto sul circuito stampato per questo dispositivo; e aggiunto il filo appropriato dal pin "DS" di RTC a D2 di Arduino.
Modifiche al software
Poi ho aggiunto e modificato il software. Le principali modifiche sono:
Il display LCD mostra due temperature "In" e "Out".
I file di registro registrati sulla scheda SD hanno due campi di temperatura, "temperatura in" e "temperatura in uscita".
A causa della registrazione più lunga sulla scheda SD, i buffer di lavoro per la EEPROM erano più grandi e di conseguenza ho iniziato ad avere problemi di conflitto di memoria. Ho apportato una serie di modifiche volte a ridurre l'utilizzo della memoria dinamica, incluso l'utilizzo di array di caratteri per tutte le stringhe invece dell'oggetto String.
La parte del software che rileva le temperature ha importanti modifiche, molte delle quali hanno a che fare con l'identificazione di quale sonda è "dentro" e quale è "fuori". Questa identificazione è per lo più automatica. Se per qualche motivo le sonde vengono invertite, può essere corretto scollegando la sonda "out" e quindi ricollegandola. Non ho sperimentato personalmente questo capovolgimento. Il programmatore o l'utente non ha bisogno di digitare gli indirizzi del sensore, il software scopre da solo gli indirizzi del sensore di temperatura.
Secondo i test che ho fatto, l'identificazione delle sonde di temperatura e la risposta alla rimozione e sostituzione della scheda SD funzionano ancora perfettamente.
Passaggio 1: sviluppo software
Questo passaggio fornisce il software completo per il progetto completato. L'ho compilato usando Arduino IDE 1.6.12. Utilizza 21.400 byte di memoria di programma (69%) e 1.278 byte di memoria dinamica (62%).
Ho inserito commenti nel codice nella speranza che chiariscano cosa sta succedendo.
Passaggio 2: utilizzo di due sensori di temperatura - Dettagli
Questo software utilizza la libreria "OneWire". Non utilizza alcuna libreria "DallasTemperature" o simili. Invece i comandi e i dati dai sensori di temperatura sono eseguiti dallo schizzo e possono essere visti e compresi abbastanza facilmente. Ho trovato un elenco utile dei comandi della libreria OneWire su
www.pjrc.com/teensy/td_libs_OneWire.html
Quando sono presenti due (o più) sensori di temperatura, diventa necessario identificare quale è quale.
Ho chiamato i miei due sensori "in" e "out", che è tipico delle unità commerciali che hanno un sensore nel modulo display che normalmente è "dentro", e l'altro sensore su un cavo in modo che possa essere messo dall'altra parte di un muro esterno e quindi essere "fuori".
L'approccio consueto per identificare le diverse sonde consiste nel rilevare gli indirizzi del dispositivo e inserirli nel software insieme a un'etichetta identificativa. Tutti gli altri progetti che ho visto utilizzano questo approccio, indipendentemente dal fatto che utilizzino o meno la libreria DallasTemperature.
La mia intenzione era che il software identificasse automaticamente i sensori e li assegnasse correttamente a "in" e "out". Questo è abbastanza facile da fare mettendoli su pin Arduino separati. In questo progetto, da A0 a A3 e A6 e A7 sono tutti inutilizzati, quindi uno di questi potrebbe essere stato utilizzato in questo caso. Tuttavia sono riuscito a far funzionare l'identificazione automatica con i sensori entrambi sullo stesso bus OneWire.
Funziona così.
La libreria OneWire ha un comando "OneWireObject.search(address)" dove "address" è un array di 8 byte e "OneWireObject" è il nome di un'istanza dell'oggetto OneWire che è stato precedentemente creato. Può avere qualsiasi nome tu voglia. Il mio si chiama "ds". Quando si invia questo comando di "ricerca", la libreria OneWire esegue alcuni segnali sul bus a un filo. Se trova un sensore che risponde, restituisce un valore booleano "TRUE" e riempie l'array "address" con l'identificatore univoco di 8 byte del sensore. Questo identificatore include un codice famiglia (all'inizio) e un checksum (alla fine). In mezzo ci sono 6 byte che identificano in modo univoco il sensore all'interno della sua famiglia.
Si ottiene un risultato (indirizzo e ritorno TRUE) ogni volta che viene dato questo comando, scorrendo tutti i dispositivi sul bus OneWire. Una volta che ogni dispositivo ha risposto, alla successiva emissione di "ricerca", il ritorno è "FALSE", indicando che ogni dispositivo sul bus ha già risposto. Se la "ricerca" viene emessa di nuovo, il primo dispositivo risponde di nuovo e così via all'infinito. I dispositivi rispondono sempre nello stesso ordine. L'ordine delle risposte si basa sugli identificatori dei dispositivi sul bus OneWire. Sembra essere una ricerca binaria a partire dai bit meno significativi degli identificatori del dispositivo. Il protocollo utilizzato per trovare questi identificatori è piuttosto complesso ed è descritto nelle pagine 51 - 54 del documento "Book of iButton Standards" che è un documento pdf all'indirizzo https://pdfserv.maximintegrated.com/en/an/AN937.pd …
Ho testato questo processo di ricerca con da 1 a 11 sensori su un singolo bus e ho scoperto che l'ordine di risposta per un determinato insieme di dispositivi era sempre lo stesso, ma quando ho aggiunto un nuovo dispositivo alla fine del bus, non c'era modo Potrei prevedere dove nell'ordine di ricerca sarebbe apparso. Ad esempio, l'undicesimo sensore che ho aggiunto è arrivato nella posizione n.5; e il primo sensore che ho messo sull'autobus è stato sempre l'ultimo nell'ordine di ricerca.
In questo progetto con due sensori, uno dei quali è saldato in posizione sul modulo RTC; l'altro è collegato utilizzando un connettore maschio sulla scheda e un connettore femmina sul cavo. Può essere facilmente staccato.
Quando il sensore sul cavo (il sensore "fuori") viene staccato, il comando "ricerca" produce i ritorni alternati "VERO" e "FALSO".
Quando il sensore sul cavo è collegato, il comando "ricerca" produce un ciclo a 3 fasi, con due ritorni "VERO" e uno "FALSO".
La mia procedura consiste nell'emettere 1, 2 o 3 comandi di "ricerca", fino a quando non viene restituito un risultato FALSE. Quindi emetto altri 2 comandi di "ricerca". Se il secondo fallisce (cioè FALSE) so che c'è un solo sensore sul bus e che è il sensore "in". L'identità del dispositivo viene registrata e assegnata al sensore "in".
In un secondo momento, se sia il primo che il secondo ritorno sono VERI, so che ci sono due sensori sul bus. Controllo quale di loro ha un'identità uguale al sensore "in" e assegno l'altro come sensore "out".
L'altro punto minore è che la raccolta dei risultati dai due sensori avviene inviando il comando "start conversion" tramite il cosiddetto comando "skip ROM". Abbiamo la possibilità di inviare comandi a un singolo dispositivo (utilizzando il suo identificatore univoco) oa tutti i dispositivi sul bus (salta ROM). Il codice è simile a questo:
ds.reset(); //
// invia il comando "skip ROM" (quindi il comando successivo funziona in entrambi i sensori) ds.write(0xCC); // Salta il comando ROM ds.write(0x44, 0); // avvia la conversione in entrambe le sonde temperature_state = wait_convert; // vai allo stato di ritardo
Trascorso il tempo di ritardo richiesto, le temperature vengono ricevute singolarmente da ciascun sensore. Ecco il codice per il secondo sensore (cioè il sensore OUT).
if (flag2) {
presente = ds.reset(); ds.select(DS18B20_addr_out); ds.write(0xBE); // Leggi Scratchpad di "out" probe data[0] = ds.read(); data[1] = ds.read(); temperatura_uscita = (data[1] << 8) + data[0]; temperatura_uscita = (6 * temperatura_uscita) + temperatura_uscita / 4; // moltiplica per 6,25 } else { // not flag2 - cioè Out sensore non connesso temperature_out = 30000; // fissato a 300,00 C se il sensore di temperatura non funziona } // fine di if (flag2)
Ho elaborato la maggior parte di questo software in uno schizzo autonomo che conteneva solo i sensori di temperatura, senza le complicazioni del supporto per LCD, RTC e schede SD. Questo schizzo di sviluppo è nel file sottostante.
Passaggio 3: risultati preliminari
Questo grafico è una combinazione delle prime due giornate di letture.
Consigliato:
Termometro per ambienti fai da te con un modulo OLED: 7 passaggi (con immagini)
Termometro ambiente fai da te utilizzando un modulo OLED: impariamo come costruire un termometro ambiente utilizzando il sensore DS18B20 e un modulo OLED. Usiamo una Piksey Pico come scheda principale, ma lo sketch è compatibile anche con le schede Arduino UNO e Nano, quindi puoi usare anche quelle
Cabina di registrazione domestica fai-da-te ($ 66,00): 11 passaggi (con immagini)
Cabina di registrazione domestica fai-da-te ($ 66,00): circa quattro anni fa, ho scritto un libro di testo e un audiolibro di astronomia che trattava dei 110 oggetti Messier visualizzabili con un telescopio. Lo spettatore è in grado di ascoltare i fatti interessanti e la storia di questi oggetti celesti senza aver
Usa lo smartphone come termometro senza contatto/termometro portatile: 8 passaggi (con immagini)
Usa lo smartphone come termometro senza contatto / termometro portatile: misurazione della temperatura corporea senza contatto / senza contatto come una pistola termica. Ho creato questo progetto perché la pistola termica ora è molto costosa, quindi devo trovare un'alternativa per fare il fai-da-te. E lo scopo è fare con la versione a basso budget.SuppliesMLX90614Ardu
ARUPI - un'unità di registrazione automatizzata a basso costo/unità di registrazione autonoma (ARU) per ecologisti del paesaggio sonoro: 8 passaggi (con immagini)
ARUPI - un'unità di registrazione automatizzata a basso costo/unità di registrazione autonoma (ARU) per ecologisti del paesaggio sonoro: questa istruzione è stata scritta da Anthony Turner. Il progetto è stato sviluppato con molto aiuto dallo Shed in the School of Computing, University of Kent (il signor Daniel Knox è stato di grande aiuto!). Ti mostrerà come costruire un sistema di registrazione audio automatizzato
Termometro analogico fai-da-te Arduino: 7 passaggi (con immagini)
Termometro analogico fai-da-te Arduino: cari amici benvenuti in un altro tutorial! Oggi impareremo come usare questo voltmetro analogico con Arduino e fargli mostrare la temperatura invece della tensione. Come puoi vedere, in questo voltmetro modificato, possiamo vedere la temperatura in de