Differenze
Queste sono le differenze tra la revisione selezionata e la versione attuale della pagina.
Entrambe le parti precedenti la revisione Revisione precedente Prossima revisione | Revisione precedente | ||
sensori_vari_ds18b20 [2018/08/23 11:21] flane [Avvio script al boot] |
sensori_vari_ds18b20 [2024/04/15 15:54] (versione attuale) flane [Caratteristiche tecniche] |
||
---|---|---|---|
Linea 11: | Linea 11: | ||
- | Il sensore DS18B20 è un sensore di temperatura 1-Wire della Maxim IC. Questo sensore ha la capacità di rilevare temperature con precisione da 9-bit a 12-bit in un range di temperature fra un minimo di -55°C ed un massimo di +125°C con un'approssimazione di +/-0.5°C. | + | Il **sensore DS18B20** è un sensore di temperatura **1-Wire** della Maxim IC. Questo sensore ha la capacità di rilevare temperature con precisione da 9-bit a 12-bit in un range di temperature fra un minimo di -55°C ed un massimo di +125°C con un'approssimazione di +/-0.5°C. |
| {{ :img_metern:ds18b20:ds18b20_package_1.jpg?nolink&200 |}} | {{ :img_metern:ds18b20:ds10b20_package_2.jpg?nolink&200 |}} | | | {{ :img_metern:ds18b20:ds18b20_package_1.jpg?nolink&200 |}} | {{ :img_metern:ds18b20:ds10b20_package_2.jpg?nolink&200 |}} | | ||
- | La particolarità di questi sensori di temperatura è rappresentata dal fatto che ciascun sensore ha numero seriale unico di 64-bit che lo identifica memorizzato all'interno di una ROM presente al loro interno. Questa caratteristica permette di poter utilizzare un vasto numero di sensori su di un unico bus di dati; caratteristica di fondamentale importanza nella maggior parte di progetti di data-logging e di progetti basati sul controllo della temperatura. | + | La particolarità di questi sensori di temperatura è rappresentata dal fatto che **ciascun sensore ha numero seriale unico di 64-bit** che lo identifica memorizzato all'interno di una ROM presente al loro interno. Questa caratteristica permette di poter utilizzare un vasto numero di sensori su di un unico bus di dati; caratteristica di fondamentale importanza nella maggior parte di progetti di data-logging e di progetti basati sul controllo della temperatura. |
Il protocollo utilizzato da questi sensori è lo **Unique 1-Wire**®; questa interfaccia richiede l'utilizzo di un unico pin per la comunicazione. Inoltre, per poter funzionare nelle applicazioni tipiche questi sensori di temperatura non necessitano di alcun altro componente esterno. Possono essere alimentati direttamente dalla linea dati ed il range di alimentazione supportato è da 3.0V a 5.5V. | Il protocollo utilizzato da questi sensori è lo **Unique 1-Wire**®; questa interfaccia richiede l'utilizzo di un unico pin per la comunicazione. Inoltre, per poter funzionare nelle applicazioni tipiche questi sensori di temperatura non necessitano di alcun altro componente esterno. Possono essere alimentati direttamente dalla linea dati ed il range di alimentazione supportato è da 3.0V a 5.5V. | ||
Linea 24: | Linea 24: | ||
• Accuratezza: ±0.5°C (nel range -10°C / 85°C)\\ | • Accuratezza: ±0.5°C (nel range -10°C / 85°C)\\ | ||
• Risoluzione del sensore: da 9-bit a 12-bit (impostabile dall'utente)\\ | • Risoluzione del sensore: da 9-bit a 12-bit (impostabile dall'utente)\\ | ||
- | • Tempo di conversione di temperature in 12-bit word: 750ms\\ | + | • Tempo di conversione di temperature a 12-bit : 750ms\\ |
• Ogni sensore ha un indirizzo univoco a 64-bit memorizzato in una ROM interna\\ | • Ogni sensore ha un indirizzo univoco a 64-bit memorizzato in una ROM interna\\ | ||
\\ | \\ | ||
Linea 47: | Linea 47: | ||
{{ :img_metern:ds18b20:ds18b20_schema1.jpg?nolink&600 |}} | {{ :img_metern:ds18b20:ds18b20_schema1.jpg?nolink&600 |}} | ||
\\ | \\ | ||
- | Se la resistenza da 4,7K non dovesse funzionare, provate con una da 10K.\\ | + | <WRAP center round tip 60%> |
+ | Se la resistenza da 4,7K non dovesse funzionare, provate con una da 10K. | ||
+ | </WRAP> | ||
+ | \\ | ||
+ | <WRAP center round important> | ||
+ | Nel caso i sensori siano connessi al Raspberry con **cavi lunghi (oltre ~10m)**,per avere delle letture corrette è meglio utilizzare una **resistenza di pull-up da 2,2kohm** | ||
+ | </WRAP> | ||
\\ | \\ | ||
Nel caso dei sensori stagni con cappuccio, una soluzione pratica per effettuare il collegamento e per collegare la resistenza di pull-up è la seguente: | Nel caso dei sensori stagni con cappuccio, una soluzione pratica per effettuare il collegamento e per collegare la resistenza di pull-up è la seguente: | ||
Linea 63: | Linea 70: | ||
echo "options w1_gpio gpiopin=24" > /etc/modprobe.d/w1</code> | echo "options w1_gpio gpiopin=24" > /etc/modprobe.d/w1</code> | ||
\\ | \\ | ||
- | 2. __Per Raspberry 2 e 3:__\\ | + | 2. __Per Raspberry 2 e successivi:__\\ |
E’ necessario editare il file /boot/config.txt e modificare la seguente riga:\\ | E’ necessario editare il file /boot/config.txt e modificare la seguente riga:\\ | ||
Linea 76: | Linea 83: | ||
\\ | \\ | ||
Da terminale è necessario modificare il file /etc/modules | Da terminale è necessario modificare il file /etc/modules | ||
- | <code>nano /etc/modules</code> | + | <code>sudo nano /etc/modules</code> |
aggiungendo le righe | aggiungendo le righe | ||
Linea 84: | Linea 91: | ||
Da terminale | Da terminale | ||
- | <code>nano /boot/config.txt</code> | + | <code>sudo nano /boot/config.txt</code> |
ed inserire il fondo la stringa | ed inserire il fondo la stringa | ||
- | <code>dtoverlay=w1-gpio,gpiopin=4</code> | + | <code txt /boot/config.txt>dtoverlay=w1-gpio,gpiopin=4</code> |
Premere ctrl+O per salvare e ctrl+X per uscire | Premere ctrl+O per salvare e ctrl+X per uscire | ||
Linea 106: | Linea 113: | ||
<code>28-000005b8a78e</code> | <code>28-000005b8a78e</code> | ||
\\ | \\ | ||
- | Annotatevi il numero che vi restituirà (parte in rosso) in quanto è il numero seriale del vostro sensore e servirà in seguito per la lettura dei dati. \\ | + | Annotatevi il numero che vi restituirà (parte dopo 28-) in quanto è il numero seriale del vostro sensore e servirà in seguito per la lettura dei dati. \\ |
\\ | \\ | ||
Creare il file **/usr/local/bin/ds18b20.py**\\ | Creare il file **/usr/local/bin/ds18b20.py**\\ | ||
Linea 126: | Linea 133: | ||
<code>sudo chmod +x /usr/local/bin/ds18b20.py</code> | <code>sudo chmod +x /usr/local/bin/ds18b20.py</code> | ||
- | Testiamo ora se il sensore risponde correttamente (sostituire la parte in rosso con il vostro seriale): | + | Testiamo ora se il sensore risponde correttamente (sostituire il numero seriale 000005b8a78e con quello del vostro sensore): |
<code>ds18b20.py 000005b8a78e | <code>ds18b20.py 000005b8a78e | ||
26.38</code> | 26.38</code> | ||
Linea 138: | Linea 145: | ||
<code bash /usr/local/bin/ds18b20>#!/bin/sh | <code bash /usr/local/bin/ds18b20>#!/bin/sh | ||
DATA="$(ds18b20.py $1)" | DATA="$(ds18b20.py $1)" | ||
- | echo "$2($DATA*C)" > /dev/shm/metern$2.txt</code> | + | |
+ | if [ x"$DATA" != x ] && [ "$DATA" != "ERROR" ]; then | ||
+ | echo "$2($DATA*C)" > /dev/shm/metern$2.txt | ||
+ | fi | ||
+ | </code> | ||
Crtl+O per salvare e CRTL+X per uscire | Crtl+O per salvare e CRTL+X per uscire | ||
Linea 144: | Linea 155: | ||
<code>sudo chmod +x /usr/local/bin/ds18b20</code> | <code>sudo chmod +x /usr/local/bin/ds18b20</code> | ||
- | Per utilizzare il file: | + | <WRAP center round info> |
+ | Per utilizzare lo script bash: | ||
<code>ds18b20 “seriale sensore” “meterID”</code> | <code>ds18b20 “seriale sensore” “meterID”</code> | ||
+ | </WRAP> | ||
+ | |||
ad esempio: | ad esempio: | ||
Linea 177: | Linea 191: | ||
==== Avvio script al boot ==== | ==== Avvio script al boot ==== | ||
\\ | \\ | ||
- | Per fare in modo che lo script venga eseguito anche all’avvio del Raspberry (e quindi creato all’avvio del Raspberry il file temporaneo con la lettura del sensore) è necessario anche creare un apposito servizio: | + | Per fare in modo che lo script venga eseguito anche all’avvio del Raspberry (e quindi creato all’avvio del Raspberry il file temporaneo con la lettura del sensore) è necessario anche creare un apposito servizio che chiameremo **ds18b20.service**: |
Utilizzando Putty, colleghiamoci al Raspberry ed eseguiamo quanto segue. | Utilizzando Putty, colleghiamoci al Raspberry ed eseguiamo quanto segue. | ||
Linea 187: | Linea 201: | ||
<code bash /etc/systemd/system/ds18b20.service>[Unit] | <code bash /etc/systemd/system/ds18b20.service>[Unit] | ||
Description=DS18B20 sensor service | Description=DS18B20 sensor service | ||
+ | Requires=local-fs.target | ||
+ | Requires=network-online.target | ||
After=multi-user.target | After=multi-user.target | ||
Linea 196: | Linea 212: | ||
WantedBy=multi-user.target</code> | WantedBy=multi-user.target</code> | ||
Premere ctrl+O per salvare e ctrl+X per uscire\\ | Premere ctrl+O per salvare e ctrl+X per uscire\\ | ||
+ | \\ | ||
+ | Il servizio eseguirà la lettura una sola volta (Type=oneshot) per creare il file temporaneo appena avviato il raspberry. Per le successive letture ci penserà cron ad eseguirle con la frequenza preimpostata.\\ | ||
\\ | \\ | ||
Nel caso aveste __più sensori di questo tipo da leggere__, sarà necessario inserire nel service una riga ExecStart per ogni sensore, con il rispettivo seriale e ID di MeterN, ed esempio: | Nel caso aveste __più sensori di questo tipo da leggere__, sarà necessario inserire nel service una riga ExecStart per ogni sensore, con il rispettivo seriale e ID di MeterN, ed esempio: | ||
- | <code /etc/systemd/system/ds18b20.service>[Unit] | + | <code bash /etc/systemd/system/ds18b20.service>[Unit] |
Description=DS18B20 sensor service | Description=DS18B20 sensor service | ||
+ | Requires=local-fs.target | ||
+ | Requires=network-online.target | ||
After=multi-user.target | After=multi-user.target | ||
Linea 247: | Linea 267: | ||
ed aggiungiamo le seguenti righe: | ed aggiungiamo le seguenti righe: | ||
- | <code> | + | <code php /var/www/comapps/reqsdm.php> |
} elseif ($argv[1] == 'tempDS1') { | } elseif ($argv[1] == 'tempDS1') { | ||
$outstr = exec('cat /dev/shm/metern12.txt | egrep "^12\(" | grep "*C)"');</code> | $outstr = exec('cat /dev/shm/metern12.txt | egrep "^12\(" | grep "*C)"');</code> | ||
Linea 254: | Linea 274: | ||
Nel caso fossero presenti più sensori si ripeteranno le righe con il relativo numero di misuratore: | Nel caso fossero presenti più sensori si ripeteranno le righe con il relativo numero di misuratore: | ||
- | <code> | + | <code php /var/www/comapps/reqsdm.php> |
} elseif ($argv[1] == 'tempDS1') { | } elseif ($argv[1] == 'tempDS1') { | ||
$outstr = exec('cat /dev/shm/metern12.txt | egrep "^12\(" | grep "*C)"'); | $outstr = exec('cat /dev/shm/metern12.txt | egrep "^12\(" | grep "*C)"'); | ||
Linea 268: | Linea 288: | ||
\\ | \\ | ||
**Dashboard live pooling**\\ | **Dashboard live pooling**\\ | ||
- | Live command: reqsdm tempDS1 | + | Live command: reqsdm tempDS1\\ |
+ | \\ | ||
+ | <WRAP center round info> | ||
+ | Per chi volesse approfondire il funzionamento del bus 1-wire ecco una interessante [[https://www.issgreppi.gov.it/corsi/claroline/backends/download.php?url=L0xvd19MZXZlbF9CdXMvMS13aXJlLnBkZg%3D%3D&cidReset=true&cidReq=VIL_TEC_3TA_002|guida in italiano]] | ||
+ | </WRAP> | ||