Système de Capteur de Température Multi-Position pour Intégration Domotique
Composants et Fournitures
| Composant | Quantité |
|---|---|
| DS18B20 | 8 |
| Vis | 1 |
| Arduino Nano R3 | 1 |
| PCB d'expérimentation | 1 |
| Résistance 4,7 kΩ | 1 |
| Borniers à vis 2 ports | 1 |
| SparkFun RS232 Shifter - SMD | 1 |
| Boîtier imprimé en 3D | 1 |
| Fil électrique | 1 |
Outils et Machines Nécessaires
- Imprimante 3D (générique)
- Tournevis
Applications et Services en Ligne
- Arduino IDE
À Propos de ce Projet
J'avais besoin de relever des températures à plusieurs emplacements. Les mesures devaient être transmises à un système domotique (Crestron/AMX) à moindre coût. C'est pourquoi j'ai choisi les capteurs DS18B20, largement disponibles, abordables et fonctionnant en bus.
Les capteurs sont connectés à un Arduino Nano. La sortie série (TTL) de l'Arduino est convertie en RS232 pour la compatibilité avec le système domotique.
Pour une finition soignée, j'ai conçu un boîtier imprimé sur mon imprimante 3D Zortrax M200.
Des questions ? N'hésitez pas à demander !
Code
MultiTempSensor v1.0.0 (Arduino)
/* MultiTempSensor code by WT040
Basé sur les exemples de Rik Kretzinger et autres extraits
Historique: v0.1.1 27/11/2016, v0.1.5 04/12/2016, v1.0.0 04/12/2017 */
// Bibliothèques
#include <OneWire.h>
#include <DallasTemperature.h>
// Constantes
#define SENSOR_PIN 12
#define READ_TIMER 10000 // 10 secondes
OneWire oneWire(SENSOR_PIN);
DallasTemperature sensors(&oneWire);
// Adresses des capteurs (à remplacer par les vôtres)
DeviceAddress Sensor1 = { 0x28, 0xFF, 0x89, 0x0F, 0x61, 0x16, 0x03, 0x40 };
DeviceAddress Sensor2 = { 0x28, 0xFF, 0xE2, 0x0F, 0x61, 0x16, 0x03, 0x21 };
DeviceAddress Sensor3 = { 0x28, 0xFF, 0x38, 0xB3, 0x60, 0x16, 0x03, 0xEA };
DeviceAddress Sensor4 = { 0x28, 0xFF, 0xA4, 0xBE, 0x60, 0x16, 0x03, 0xE1 };
DeviceAddress Sensor5 = { 0x28, 0xFF, 0xFE, 0x13, 0x61, 0x16, 0x03, 0x56 };
DeviceAddress Sensor6 = { 0x28, 0xFF, 0x89, 0xBA, 0x60, 0x16, 0x03, 0xFB };
DeviceAddress Sensor7 = { 0x28, 0xFF, 0xFA, 0xBC, 0x60, 0x16, 0x03, 0xD1 };
DeviceAddress Sensor8 = { 0x28, 0xFF, 0x57, 0xB1, 0x60, 0x16, 0x03, 0x93 };
int amountOfSensors = 8;
int counterCheckBus = 0;
void setup() {
Serial.begin(9600);
printProgramName();
Serial.print("Initialisation Bibliothèque Température v");
Serial.println(DALLASTEMPLIBVERSION);
Serial.print("Recherche de ");
Serial.print(amountOfSensors);
Serial.println(" capteurs...");
sensors.begin();
// Résolution 10 bits (9-12 bits possibles)
for (int i = 1; i <= 8; i++) {
DeviceAddress* sensor = getSensorAddress(i);
sensors.setResolution(*sensor, 10);
}
getSensorsOnBus();
Serial.println("Système initialisé");
}
void loop() {
counterCheckBus++;
delay(READ_TIMER);
Serial.println();
if (counterCheckBus == 360) { // Vérification bus toutes les 6 minutes
getSensorsOnBus();
counterCheckBus = 0;
}
sensors.requestTemperatures();
for (int i = 1; i <= 8; i++) {
DeviceAddress* sensor = getSensorAddress(i);
Serial.print("Capteur ");
Serial.print(i);
Serial.print(": ");
printTemperature(*sensor);
Serial.println();
}
}
void printTemperature(DeviceAddress deviceAddress) {
float tempC = sensors.getTempC(deviceAddress);
if (tempC == -127.00) {
Serial.print("Erreur capteur !");
} else {
Serial.print("C: ");
Serial.print(tempC);
}
}
void printProgramName() {
String path = __FILE__;
int slash = path.lastIndexOf('\\');
String programName = path.substring(slash + 1);
int dot = programName.lastIndexOf('.');
programName = programName.substring(0, dot);
Serial.print("\nVersion programme: ");
Serial.println(programName);
}
void getSensorsOnBus() {
Serial.print("Nombre de capteurs sur le bus: ");
Serial.println(sensors.getDeviceCount());
}
// Fonction utilitaire pour récupérer l'adresse selon l'index
DeviceAddress* getSensorAddress(int index) {
switch(index) {
case 1: return &Sensor1;
case 2: return &Sensor2;
case 3: return &Sensor3;
case 4: return &Sensor4;
case 5: return &Sensor5;
case 6: return &Sensor6;
case 7: return &Sensor7;
case 8: return &Sensor8;
default: return &Sensor1;
}
}
Pièces Personnalisées et Boîtiers
Boîtier imprimable en 3D - Base, Couvercle, Support Sub-D 9 broches
Schémas
Schéma de base (sans module RS232)
Processus de fabrication
- Capteur de température DS18B20 – Thermomètre numérique 1-Wire précis pour usage industriel et grand public
- Construire un enregistreur de température Raspberry Pi avec capteur I2C à 5 $
- Construire un capteur de température distant avec Raspberry Pi et Python – Guide étape par étape
- Construire un système de surveillance température et lumière multi-capteurs avec Raspberry Pi et DS18B20
- Construire un moniteur de température domestique avec Raspberry Pi, MCP9808, InfluxDB et Grafana
- DasFilisera Serre Intelligente : Système Avancé de Surveillance de la Croissance des Plantes
- MotionSense : Détection d'intrusion intelligente avec Arduino et ESP8266
- CoroFence : Détecteur Thermique Avancé PIR + Capteur Grid-EYE & IoT
- Capteur température palier de précision : détection et surveillance précises