Plateforme Agir Low-Tech

README.md 8.98 KB
Newer Older
Guillaume Augais's avatar
Guillaume Augais committed
1
2
# Banc Mesure Temp Surface DS18B20

davidmercereau's avatar
davidmercereau committed
3
Utilisation des capteurs de température DS18B20 pour réaliser un banc d'acquisition facile à mettre en œuvre et pas trop cher.  Les DS18B20 sont limités à 125°C (ce qui est ok pour la majorité des points ici) mais il faudra passer par des thermocouples pour les zones plus chaudes (vitres, plancha...)
davidmercereau's avatar
davidmercereau committed
4

Guillaume Augais's avatar
Guillaume Augais committed
5
6
7
8
## Ressources

- [Tableau Kanban](https://gitlab.lowtech.fr/pdm/projets/labo/bancs-acqusition/banc-mesure-temp-surface-DS18B20/-/boards)
- [Dossier partagé NextCloud](https://cloud.lowtech.fr/index.php/f/41709)
davidmercereau's avatar
davidmercereau committed
9

davidmercereau's avatar
davidmercereau committed
10
## Limite des ds18b20
11
12
13
14
15

Attention ce type de sonde fonctionne par BUS, je n'ai pas trouvé de limite théorique mais il est clair que plus il y a de longueur de câble plus il est diffcil d'obtenir un signal fiable (voir d'obtenir un signal)

* Testé avec 6 sondes de 1m,14 de 2m, 4 de 3m, 2 de 5m soit 56m là j'avais aucun signal sur le master
* Testé avec 6 sondes de 1m,14 de 2m, 4 de 3m soit 46m là j'avais un signal mais parfois aléatoire, et dès que la température montait prêt du poêle je n'avais plus de signal
davidmercereau's avatar
davidmercereau committed
16
17
18
19
20
21
22
23
* Testé avec 5 sondes de 1m, 11 de 2m, 4 de 3m soit 39m là ça semble ok, **plus stable** ! Ce qui fait 19 sondes (on peut monter à plus si on a des câbles plus petits)

C'est donc la somme de toutes les longueurs qui influe la réception du signal ou non...

Note : l'alimentation du raspbery pi doit aussi être bonne, s'il y a une rallonge USB c'est moins stable.

### Multiple BUS 1 WIRE

davidmercereau's avatar
davidmercereau committed
24
Non testé mais apparemment on peut déclarer maintenant plusieurs BUS 1 WIRE ce qui fait qu'on peut estimer pouvoir faire *3 sur le nombre de sondes décris plus haut au besoin...
25

davidmercereau's avatar
davidmercereau committed
26
27
28
29
30
31
32
33
34
> https://pinout.xyz/pinout/1_wire#
>
> Newer kernels (4.9.28 and later) allow you to use dynamic overlay  loading instead, including creating multiple 1-Wire busses to be used at the same time:
>
> ```bash
> sudo dtoverlay w1-gpio gpiopin=4 pullup=0  # header pin 7
> sudo dtoverlay w1-gpio gpiopin=17 pullup=0 # header pin 11
> sudo dtoverlay w1-gpio gpiopin=27 pullup=0 # header pin 13
> ```
35

davidmercereau's avatar
davidmercereau committed
36
37
38
39
40
41
## En situation

Voir dossier doc/ExempleMiseEnOeuvre

<img src="doc/ExempleMiseEnOeuvre/P1060979.JPG" alt="doc/ExempleMiseEnOeuvre/P1060979.JPG" title="Banc sur le poêle d'agir lowtech" style="zoom: 25%;" />

davidmercereau's avatar
davidmercereau committed
42
43
## Pré-requis

davidmercereau's avatar
davidmercereau committed
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
* Un raspberry pi (0 ici mais un 2, 3, 4 fonctionnera) avec : 
  * [Raspbian](https://raspberry-pi.fr/telechargements/) installé
  * Interface 1 Wire active (raspi-config) pour les sondes ds18b20
  * Interface SPI active (raspi-config) pour les amplificateurs thermocouples
* Sondes [ds18b20](https://datasheets.maximintegrated.com/en/ds/DS18B20.pdf) (limite 125°)
* [Thermocouple type K](https://www.adafruit.com/product/270) avec amplificateur [max31855](https://datasheets.maximintegrated.com/en/ds/MAX31855.pdf) ([adafruit](https://www.adafruit.com/product/269)) (limite -200°C  +1350°C)

## Câblage

Le schéma de câblage ainsi que les sources se trouve dans le répertoire "doc" :

![doc/SchemaBancMessure_v0.1.png](doc/SchemaBancMessure_v0.1.png "Câblage banc test")

Pour faire simple :

* Les DS18B20
  * Alimentation (+/-) en 5V 
  * Data (DQ) sur la [PIN 7 (GPIO 4)](https://pinout.xyz/pinout/pin7_gpio4#) qui correspond au BUS 1 Wire par défaut 
* Amplificateur Thermocouple
  * Alimentation (+/-) en 5V
  * CLK (clock) sur la [PIN 23 SPI 0  SCLK](https://pinout.xyz/pinout/pin23_gpio11#)
  * DO sur la [PIN 21 SPI 0 MISO](https://pinout.xyz/pinout/pin21_gpio9#)
  * CS sur une GPIO libre (il faudra indiquer sur quel GPIO dans le fichier de configuration)
    * GPIO 26 (pin 37), GPIO 16 (pin 36), GPIO 6 (pin 31).... 
davidmercereau's avatar
davidmercereau committed
68

davidmercereau's avatar
davidmercereau committed
69
70
71
72
## Carte SD prêt à l'emploi

Une carte SD prêt à l'emploi : https://cloud.lowtech.fr/index.php/s/62eKRc929fJZpYH

davidmercereau's avatar
davidmercereau committed
73
La notice pour l'usage de cette carte SD est dans le fichier **[Deployer_image_carte_SD.md](Deployer_image_carte_SD.md)**
davidmercereau's avatar
davidmercereau committed
74
75

## Sinon : installation
davidmercereau's avatar
davidmercereau committed
76
77
78
79
80
81
82
83
84
85
86
87
88

### Dépendance

```bash
apt install python3 python3-pip
```

Lib Python ds18b20 : https://github.com/rgbkrk/ds18b20

```bash
pip3 install ds18b20 ConfigParser
```

davidmercereau's avatar
davidmercereau committed
89
90
91
92
93
94
Lib Python pour thermocouple MAX31855 : https://github.com/adafruit/Adafruit_CircuitPython_MAX31855

```bash
pip3 install adafruit-circuitpython-max31855
```

davidmercereau's avatar
davidmercereau committed
95
96
### Récupération des sources

davidmercereau's avatar
davidmercereau committed
97
98
99
100
101
102
103
104
Récupération du code source :

```bash
cd /opt/
git clone https://gitlab.lowtech.fr/pdm/projets/labo/bancs-acqusition/banc-mesure-temp-surface-DS18B20.git
cd banc-mesure-temp-surface-DS18B20
```

davidmercereau's avatar
davidmercereau committed
105
106
107
108
### Installation de l'interface web (option)

Option pratique pour les "non geek"

davidmercereau's avatar
davidmercereau committed
109
![doc/screenshot-interface.png](doc/screenshot-interface.png "Screenshot")
davidmercereau's avatar
davidmercereau committed
110

davidmercereau's avatar
davidmercereau committed
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
Rendre le fichier de configuration accessible en écriture pour l'interface web : 

```bash
chmod 777 /opt/banc/config.ini
chmod 777 /opt/banc/releves -R
# ou 
chown www-data:www-data /opt/banc/config.ini
chown www-data:www-data /opt/banc/releves -R
```

Installation des dépendances :

```
aptitude install lighttpd php-cgi  php-xml php7.3-json
lighttpd-enable-mod fastcgi
lighttpd-enable-mod fastcgi-php
```

On change la configuration de lighttpd :

```
service lighttpd stop
```

Configuration du serveur http, avec le fichier  /etc/lighttpd/lighttpd.conf :

```diff
- server.document-root        = "/var/www/html/"
+ server.document-root        = "/opt/banc/"
```

On applique la configuration :

```
service lighttpd start
```

Télécharger la dernière version de [ttyd](https://github.com/tsl0922/ttyd/releases) (pour un raspberry pi c'est la version ARM) pour la placer dans le /opt :

```bash
wget -O /opt/ttyd https://github.com/tsl0922/ttyd/releases/download/1.6.3/ttyd.arm
chmod +x /opt/ttyd
```

Dans le fichier rc.local il faut ensuite ajouter le ttyd au démarrage du raspberry pi. Ajouter ceci avant "exit 0" :

```
/opt/ttyd -p 8022 /opt/banc/start-menu.sh > /tmp/ttyd.log 2>/tmp/ttyd-error.log &
```

C'est prêt, rdv sur http://IPdeVotrePi ou http://pi.local

davidmercereau's avatar
davidmercereau committed
163
164
165
166
167
168
169
## Configuration

Toute la configuration se trouve dans le fichier config.ini

### Lier les sondes

#### DS18B20
davidmercereau's avatar
davidmercereau committed
170

davidmercereau's avatar
davidmercereau committed
171
Commencer par déterminer les ID des sondes et notez les avec un scotch ou autre sur le câble de la sonde. Pour ça au choix : 
172

davidmercereau's avatar
davidmercereau committed
173
174
* Brancher vos sondes une par une et lancer le script ds18b20-list.sh puis récupérer l'ID de la sonde et notez celui-ci sur un la sonde
* Brancher toutes vos sondes, lancer le script ds18b20-list.sh et immergé les dans un verre d'eau chaude une par une pour déterminé qui est qui...
175

davidmercereau's avatar
davidmercereau committed
176
Ouvrir le fichier config.ini et indiquer l'ID comme ceci : 
177

davidmercereau's avatar
davidmercereau committed
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
```ini
[t0]
type=ds18b20
id=3c01d607b846
```

#### Thermocouples

Ouvrir le fichier config.ini et indiquer la [GPIO/BCM pin](GPIO/BCM pin) sur laquelle est brancher la broche CS de l'amplificateur

```ini
[t23]
type=max31855
gpio=16
```

### Configuration

Configuration général dans le fichier config.ini : 

```ini
[general]
# Répertoire de stockage des relevés (en csv)
csv_dir="releves"
# Temps entre 2 mesures (en minute)
delai=5
# Nombre de messure
nb_mesure=500
# Note : la durée du test est donc = delai * nb_mesure
```
208

davidmercereau's avatar
davidmercereau committed
209
210
## Test des sondes

davidmercereau's avatar
davidmercereau committed
211
212
213
214
Des scripts de tests se trouve dans le répertoire "tools" vous pouvez lancer : 

* ds18b20-list.sh : pour lister les sondes avec leur ID + affichage de la température
* test-max31855.py : pour tester la présence de thermocouple (attention il faut éditer le script et le code n'est plus identique à celui de l’acquisition, a prendre donc avec de la distance...)
davidmercereau's avatar
davidmercereau committed
215
216
217
218
219
220
221
222
223
224

## Lancement de l’acquisition

### Depuis l'interface web

Choix 1

Pour stopper : CTRL + C

### En ligne de commande
225

davidmercereau's avatar
davidmercereau committed
226
Pour lancer l’acquisition : 
227

davidmercereau's avatar
davidmercereau committed
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
```
python3 aquisition.py 
```

On peut stopper l’acquisition par un CTRL + C au besoin

Les résultats (sauf modification) sont à récupérer dans le dossier "releves"

Exemple : 

```
#############################################################################
######## Banc de test / Aquisition des mesures
#############################################################################

La configuration (config.ini) détermine : 
 * que le fichier csv de relevé est :  releves/2021-02-15_11-26.csv
 * qu'il y aura  500  messures
 * que l'interval entre 2 mesures sera de  5 minutes
Le script d'aquisition est donc partie pour tourner  41.666666666666664 heures

Messure N° 0
"tparoi 1" = 20.1
t1 = 31.937
t2 = 29.312
"Vitre" = 33.0
t4 = 30.187
t5 = 27.375
t6 = 30.125
t7 = 32.0
t8 = 29.562
t9 = 30.187
t10 = 31.312
t11 = 29.375
t12 = 28.875
t13 = 30.187
t14 = 27.062
t15 = 30.0
t16 = 31.375
t17 = 30.375
t18 = 31.125
t19 = 28.562
t20 = 29.687
"Plancha" = 33.75
"Foyer" = 45.75
"Evac" = 32.75
"tparoi 2" = 19.9
"tair" = 20.4
Fin de la mesure, on patiente 300 s
-
```
davidmercereau's avatar
davidmercereau committed
279

davidmercereau's avatar
davidmercereau committed
280
281
282
Vous devriez obtenir un fichier CSV de ce type : 

> "temps_min",0,5
davidmercereau's avatar
davidmercereau committed
283
>
davidmercereau's avatar
davidmercereau committed
284
> "temps_sec",0,319
davidmercereau's avatar
davidmercereau committed
285
>
davidmercereau's avatar
davidmercereau committed
286
> "tparoi 1",20.1,20.1
davidmercereau's avatar
davidmercereau committed
287
>
davidmercereau's avatar
davidmercereau committed
288
> "t1",31.937,31.812
davidmercereau's avatar
davidmercereau committed
289
>
davidmercereau's avatar
davidmercereau committed
290
> "t2",29.312,29.187
davidmercereau's avatar
davidmercereau committed
291
>
davidmercereau's avatar
davidmercereau committed
292
> "t3",33.0,33.0
davidmercereau's avatar
davidmercereau committed
293
>
davidmercereau's avatar
davidmercereau committed
294
> "t4",30.187,30.062
davidmercereau's avatar
davidmercereau committed
295
>
davidmercereau's avatar
davidmercereau committed
296
> "t5",27.375,27.25
davidmercereau's avatar
davidmercereau committed
297
>
davidmercereau's avatar
davidmercereau committed
298
> "t6",30.125,30.062
davidmercereau's avatar
davidmercereau committed
299
>
davidmercereau's avatar
davidmercereau committed
300
> "t7",32.0,31.937
davidmercereau's avatar
davidmercereau committed
301
>
davidmercereau's avatar
davidmercereau committed
302
> "t8",29.562,29.437
davidmercereau's avatar
davidmercereau committed
303
>
davidmercereau's avatar
davidmercereau committed
304
> "t9",30.187,30.125
davidmercereau's avatar
davidmercereau committed
305
>
davidmercereau's avatar
davidmercereau committed
306
> "t10",31.312,31.187
davidmercereau's avatar
davidmercereau committed
307
>
davidmercereau's avatar
davidmercereau committed
308
> "t11",29.375,29.312
davidmercereau's avatar
davidmercereau committed
309
>
davidmercereau's avatar
davidmercereau committed
310
> "t12",28.875,28.812
davidmercereau's avatar
davidmercereau committed
311
>
davidmercereau's avatar
davidmercereau committed
312
> "t13",30.187,30.062
davidmercereau's avatar
davidmercereau committed
313
>
davidmercereau's avatar
davidmercereau committed
314
315
> ...

davidmercereau's avatar
davidmercereau committed
316
317
318
319
320
## Auteur

David Mercereau : https://david.mercereau.info/contact/

## Licence AGPL v3
davidmercereau's avatar
davidmercereau committed
321

davidmercereau's avatar
davidmercereau committed
322
https://www.gnu.org/licenses/agpl-3.0.fr.html