[[materiels:accueilmateriels|{{ :iconemaison.jpg?nolink&30|Sommaire Matériels}}]]
===== Capteurs - Environnement =====
[Mise à jour le 1/5/2024]
==== 1. Généralités sur les grandeurs physiques====
===1.1 Température ===
* **Ressource** : Wikipédia
===1.2 Humidité ===
* **Ressource** : Wikipédia
===1.3 Pression ===
* **Ressource** : Wikipédia
----
==== 2. Capteurs de température et de pression ====
{{ :materiels:capteurs:environnement:bmp280.jpg?nolink&250|BMP280 Adafruit}}
=== 2.1 BMP280 ===
== 2.1.1 Présentation ==
* //**Source**// : wiki Adafruit
Ce capteur est basé sur le circuit BMP280 et mesure la pression atmosphérique, la température et l'altitude. Il communique avec un microcontrôleur via le bus I2C ou SPI.
* //**Distributeur**// : Gotronic
* //**Caractéristiques**//
* Alimentation: 3,3 à 5 Vcc
* Interface I2C (**SLA** = **0x76** ou **0x77** idem BME280):
* sur connecteur Qwiic ou Stemma QT
* sur pastilles femelles au pas de 2,54 mm
* Interface SPI:
* sur pastilles femelles au pas de 2,54 mm
* Plages de mesure:
* température: -40°C à 85°C
* pression: 30 à 110 kPa
* altitude: en fonction de la pression
* Précision:
* température: ±1°C
* pression: ±1 hPa
* altitude: ±1 m
* Sortie 3,3 Vcc/100 mA maxi
* Dimensions: 19,2 x 17,9 x 2,9 mm
{{ :materiels:capteurs:acrobate.gif?nolink&40|}}
* //**Documentation**//
* PDF à télécharger ici
\\
== 2.1.2 Bibliothèques ==
* [[#tab-bmp280duino_1|Arduino UNO]]
* //Bibliothèque à installer dans l'IDE Arduino// \\ {{ :materiels:capteurs:environnement:libbmp280adafruit.png?nolink |}}
\\
{{ :materiels:capteurs:environnement:code.png?nolink|}}
== 2.1.3 Exemples de code ==
* [[#tab-bmp280duino_2|Arduino UNO]]
* //**Resource**// : wiki Adafruit
{{ :materiels:capteurs:distance:arduinoico.png?nolink&40|}}
* **//Exemple de code pour un Arduino Uno, MKR1010//** \\ Dans l'IDE Arduino, sélectionner : Fichier → Exemples → Adafruit BMP280 Library → bmp280test
...
==== 3. Capteurs de température et d'humidité ====
=== 3.1 HYT-221 ===
{{ :materiels:capteurs:hyt221.jpg?nolink&120|}}
== 3.1.1 Présentation ==
* //**Source**// : GitHub
Capteur capacitif **numérique d'humidité et de température** relative présentant une précision de base de ±1,8% HR, calibré et compensé en température. Communication via le **bus I²C** (**adresse 0x28** par défaut).
* //**Distributeur**// : Gotronic
* //**Caractéristiques**//
* Alimentation: 2,7 à 5,5 Vcc
* Consommation: <22 µA à 1 Hz (850 µA maxi)
* Consommation en veille: <1 µA
* Plage de mesure:
- 0 à 100% HR
- -40°C à 125°C
* Précision:
- ±1,8% HR
- ±0,2°C
* Hystérésis: < ±1% HR
* Interface: I²C (**SLA** = **0x28** - modifiable entre 0x00 et 0x7F)
* Dimensions: 16 x 10 x 6 mm
{{ :materiels:capteurs:acrobate.gif?nolink&40|}}
* //**Documentation**//
* PDF à télécharger ici
{{ :materiels:capteurs:htr:github.png?nolink&40|}}
* Télécharger un exemple pour tester le capteur.
\\
== 3.1.2 Bibliothèques ==
* [[#tab-hyt221duino_1|Arduino UNO]]
* [[#tab-hyt221esp8266_1|ESP8266 (Arduino)]]
* A venir
* // Intégrée au code de l'exemple ci-dessous//
\\
{{ :materiels:capteurs:environnement:code.png?nolink|}}
== 3.1.3 Exemples de code ==
* [[#tab-hyt221duino_2|Arduino UNO]]
* [[#tab-hyt221esp8266_2|ESP8266 (Arduino)]]
* A venir
* **Mise en oeuvre du capteur avec un afficheur OLED**
* //Description// : mesure de la température et de l'humidité à l'aide d'un capteur **HYT221**, test des boutons-poussoirs et affichage sur un écran Oled Adafruit SH1107. \\ {{ :materiels:capteurs:environnement:affhyt221.jpg?nolink&650 |}}
* //Matériels//
* Carte à microcontrôleur : [[microc:uc:esp8266|Adafruit Feather Huzzah ESP8266 + Support Particle]]
* Afficheur : [[materiels:afficheurs:ada1107|Adafruit OLED SH1107]] \\
* //Code Arduino//
{{ :materiels:capteurs:distance:arduinoico.png?nolink&50|}}
// Matériels : Adafruit Feather Huzzah ESP8266 + Support Particle, Adafruit OLED SH1107, HYT221, câble Qwiic
// Logiciel : Arduino
// A ajouter
#include
#include
#include
#include
// Adresse I2C par défaut de HYT 221, 271, 371
#define HYT_ADDR 0x28
#define BUTTON_A 0
#define BUTTON_B 16
#define BUTTON_C 2
// Constructeurs
Adafruit_SH1107 display = Adafruit_SH1107(64, 128, &Wire);
void setup()
{
// Bus I2C
Wire.begin();
Wire.setClock(400000);
display.begin(0x3C, true); // L'addresse de l'afficheur est 0x3C par défaut
// Configuration de l'affichage
display.setRotation(1); // Affichage horizontal
display.setTextSize(1);
display.setTextColor(SH110X_WHITE);
display.clearDisplay(); // Pour ne pas afficher le logo Adafruit chargé
// automatiquement à la mise sous tension
// Connexion des boutons-poussoirs
pinMode(BUTTON_A, INPUT_PULLUP);
pinMode(BUTTON_B, INPUT_PULLUP);
pinMode(BUTTON_C, INPUT_PULLUP);
}
void loop()
{
double humidity;
double temperature;
// Efface le buffer
display.clearDisplay();
// Test des boutons
display.setCursor(0, 0);
if (!digitalRead(BUTTON_A))
display.print("[A]");
if (!digitalRead(BUTTON_B))
display.print("[B]");
if (!digitalRead(BUTTON_C))
display.print("[C]");
// Titre
display.setCursor(30, 0);
display.println("HYT221");
Wire.beginTransmission(HYT_ADDR); // Début de la transmission avec le capteur HYT221
Wire.requestFrom(HYT_ADDR, 4); // Nécessite 4 octets
// Read the bytes if they are available
// Les deux premiers octets sont l'humidité, les deux suivants la température
if (Wire.available() == 4)
{
int b1 = Wire.read();
int b2 = Wire.read();
int b3 = Wire.read();
int b4 = Wire.read();
Wire.endTransmission(); // Fin de la transmission avec le capteur HYT221
// Calcul de l'humidité
int rawHumidity = b1 << 8 | b2;
rawHumidity = (rawHumidity &= 0x3FFF);
humidity = 100.0 / pow(2, 14) * rawHumidity;
// Calcul de la température
b4 = (b4 >> 2);
int rawTemperature = b3 << 6 | b4;
temperature = 165.0 / pow(2, 14) * rawTemperature - 40;
// Affichage
display.setCursor(0, 12);
display.print("Temperature: ");
display.print(temperature);
display.println("C ");
display.print("Humidite: ");
display.print(humidity);
display.println("% ");
// Infos
display.setCursor(5, 52);
display.print("Appuyer sur A, B, C");
display.display();
}
else
{
display.println("Pas de mesure");
}
}
{{ :arduino:uc:platformioico.png?nolink&50|}}
Télécharger le projet PlatformIO pour VSCode.
\\ \\
=== 3.2 DHT22 ===
* //Source// : Wiki Seeed studio
== 3.2.1 Présentation ==
{{ :materiels:capteurs:environnement:dht22.jpg?nolink&150|DHT22 - ADAFRUIT}}
Ce capteur de température et d'humidité (version pro DHT22) compatible Grove utilise une thermistance CTN et un capteur capacitif et délivre une sortie digitale régit par un protocole 1 fil spécifique (différent du 1 wire de Dallas).
* //**Distributeur**// : Gotronic
* //**Caractéristiques**//
* Interface: compatible Grove
* Alimentation: 3,3 à 6 Vcc
* Consommation: 1,5 mA
* Plage de mesure:
* température: -40°C à 80°C (±0,5°C)
* humidité: 5 à 99% HR (±2%)
* Temps de réponse: 6 à 20 secondes
* Interface : signal TOR (protocol spécifique 1 fil)
* Dimensions: 40 x 20 x 11 mm
{{ :materiels:capteurs:acrobate.gif?nolink&40|}}
* //**Documentation**//
* PDF à télécharger ici
\\
== 3.2.2 Bibliothèques ==
* [[#tab-dht22duino_1|Arduino UNO]]
* [[#tab-dht22pico_1|RPi Pico (µPython)]]
* A partir du gestionnaire de bibliothèques de l'**IDE Arduino**, installer : \\
{{ :materiels:capteurs:environnement:bibliodht22.png?nolink |}}
A venir
\\
== 3.2.3 Exemple de code ==
* [[#tab-dht22duino_2|Arduino UNO]]
* [[#tab-dht22pico_2|RPi Pico (µPython)]]
* **//Ressource//** : Wiki seeedstudio
{{ :materiels:capteurs:distance:arduinoico.png?nolink&40|}}
* //**Exemple de code pour une Arduino Uno, MKR1010**// \\ Dans l'IDE Arduino, sélectionner : Fichier -> Exemples -> DHT sensor library -> DHTtester
\\ \\
A venir
==== 4. Capteurs atmosphériques ====
=== 4.1 BME280, BME680 ===
== 4.1.1 Présentation ==
* //**Sources**// : site sparkfun
{{ :materiels:capteurs:environnement:bme280qwiic.jpg?nolink|}}
Capteur environnemental mesurant la **température, la pression barométrique et l'humidité** ! Ce capteur est idéal pour toutes sortes de capteurs météorologiques / environnementaux et peut être utilisé à la fois en **I²C** et en SPI.
* //**Distributeurs**// : Gotronic
* //**Caractéristiques**//
* Alimentation: 3,3 à 5 Vcc
* Plages de mesure:
* température: -40°C à 85°C
* humidité: 0 à 100% HR
* pression: 300 à 1100 hPa
* Précision:
* température: ±1°C (±0,5°C pour le BME680)
* humidité: ±3%
* pression: ±1 hPa (0,12hPa pour le BME680)
* Interfaces:
* I2C: sur connecteur Qwiic de Sparkfun ou Stemma QT d'Adafruit.
* **Adresse I2C** (BME280, BMP280): **SLA** = **0x76** ou **0x77** idem BMP280
* SPI: sur pastilles femelles au pas de 2,54 mm (connecteurs mâles à souder inclus)
{{ :materiels:capteurs:acrobate.gif?nolink&40|}}
* //**Documentation**//
* PDF à télécharger BME280, BME680
\\
== 4.1.2 Bibliothèques ==
* [[#tab-bme280duino_1|Arduino UNO]]
* [[#tab-bme280pico_1|RPi Pico(µPython)]]
* [[#tab-bme280esp32_1|ESP32 (Arduino)]]
A venir
* // A installer dans le Raspberry Pi Pico//
* Télécharger le code de la **bibliothèque BME280** sur Github, le copier dans un fichier //BME280.py// et l'installer dans le dossier **/lib** sur le raspberry Pi Pico. Modifier éventuellement l'adresse du composant dans le code de la bibliothèque (**0x76** par défaut), ou **0x77** (par ex: sparkfun).
* // A installer dans l'IDE// \\
{{ :materiels:capteurs:biblio_sparkfun_bme280.png?nolin |}} \\
* // Un premier exemple pour tester le capteur// \\ -> Fichier -> Exemples -> SparkFun BME280 -> **Example1_BasicReadings.ino**
\\
{{ :materiels:capteurs:environnement:code.png?nolink|}}
== 4.1.3 Exemples de code ==
* [[#tab-bme280duino_2|Arduino UNO]]
* [[#tab-bme280pico_2|RPi Pico(µPython)]]
* [[#tab-bme280esp32_2|ESP32 (Arduino)]]
A venir
* **Ressource**
* MicroPython: BME280 with ESP32 and ESP8266 (Pressure, Temperature, Humidity) sur Random Nerd Tutorials
//Exemple de code pour un **Raspberry Pi Pico**//
from machine import Pin, I2C
from time import sleep
import bme280 # bibliothèque du capteur (installée dans /lib
# RP2 - Pin assignment
i2c = I2C(1,scl=Pin(7), sda=Pin(6), freq=400_000)
while True:
bme = bme280.BME280(i2c=i2c)
temp = bme.temperature
hum = bme.humidity
pres = bme.pressure
print('Temperature: ', temp)
print('Humidity: ', hum)
print('Pressure: ', pres)
sleep(5)
* ** Mise en oeuvre du capteur avec un afficheur OLED**
* **Description** : mesure de de la température, de l'humidité et de la pression à l'aide d'un capteur **Sparkfun BME280**, test des boutons-poussoirs et affichage sur un écran Oled **Adafruit SH1107**. L'écran et le capteur sont reliés via le système Qwiic de Sparkfun. \\ {{ :materiels:afficheurs:bme280sh1107.jpg?nolink&600 |}}
* //**Matériels**//
* Carte à microcontrôleur : [[arduino:uc:esp8266|Adafruit Feather Huzzah ESP8266 + Support Particle]]
* Afficheur : [[materiels:afficheurs:ada1107|Adafruit OLED SH1107]]
* //**Code Arduino**//
{{ :arduino:arduino.png?nolink&50|}}
//Exemple de code pour un **ESP32 Feather Huzzah**//
// Matériels : Adafruit Feather Huzzah ESP8266 + Support Particle, Adafruit OLED SH1107, Sparkfun BME280, câble Qwiic
// Logiciel : Arduino
#include
#include
#include
#include
#include "SparkFunBME280.h"
#define BUTTON_A 0
#define BUTTON_B 16
#define BUTTON_C 2
// Constructeurs
Adafruit_SH1107 display = Adafruit_SH1107(64, 128, &Wire);
BME280 bme_280; // L'adresse du circuit BME280 est 0x77 par défaut
void setup()
{
// Bus I2C
Wire.begin(); // Initialisation
Wire.setClock(400000); // Fast I2C
display.begin(0x3C, true); // L'addresse de l'afficheur est 0x3C par défaut
// Configuration de l'affichage
display.setRotation(1); // Affichage horizontal
display.setTextSize(1); // Horizontal
display.setTextColor(SH110X_WHITE);
display.clearDisplay(); // Pour ne pas afficher le logo Adafruit chargé
// automatiquement à la mise sous tension
// Test de la communication avec le capteur
if (bme_280.beginI2C() == false)
{
display.println("DEFAUT(s)");
display.println("1. Le capteur BME280 ne repond pas ! ");
display.println();
display.print("BLOCAGE du PROGRAMME");
display.display(); // Transfert du buffer sur l'écran
while (1)
delay(10); // Blocage du programme
}
// Connexion des boutons-poussoir
pinMode(BUTTON_A, INPUT_PULLUP);
pinMode(BUTTON_B, INPUT_PULLUP);
pinMode(BUTTON_C, INPUT_PULLUP);
}
void loop()
{
// Efface le buffer
display.clearDisplay();
// Test des boutons
display.setCursor(0, 0);
if (!digitalRead(BUTTON_A))
display.print("[A]");
if (!digitalRead(BUTTON_B))
display.print("[B]");
if (!digitalRead(BUTTON_C))
display.print("[C]");
// Titre
display.setCursor(20, 0);
display.println("Sparkfun BME280");
// Humidité
display.setCursor(0, 12);
display.print("Humidite : ");
display.print(bme_280.readFloatHumidity(), 0);
display.println("%");
// Pression en hPa
display.setCursor(0, 22);
display.print("Pression : ");
display.print(bme_280.readFloatPressure() / 100, 0);
display.println("hPa");
// Température
display.setCursor(0, 32);
display.print("Temp : ");
display.print(bme_280.readTempC(), 1);
display.print("C");
// Infos
display.setCursor(5, 52);
display.print("Appuyer sur A, B, C");
// yield();
display.display(); // Transfert du buffer sur l'écran
delay(10);
}
{{ :arduino:uc:platformioico.png?nolink&50|}}
Télécharger le projet PlatformIO pour VSCode.
=== 4.2 SCD41 ===
* **Capteur de CO², température et humidité**. Voir [[materiels:capteurs:gaz:gaz|Capteurs - Gaz]]
=== 4.3 SGP30 ===
* **Capteur de qualité de l'air intérieur (CO², COV, éthanol, H2)**. Voir [[materiels:capteurs:gaz:gaz|Capteurs - Gaz]]