1 novembre 2021
Durée: 2 périodes
Pondération: 20%
Varier la couleur des pixels du module NEO-PIXEL en fonction de la température
Écrire un programme qui fait varier le nombre de pixels bleus (80,106,148) et rouges (245, 22, 26) en fonction de la température du capteur SHT31.
Si la température est <= à la valeur indiquée par le potentiomètre [0…1023 –> 20..28c] (nommée valeur de référence) alors tous les pixels sont bleus.
Donc, la température minimum est fixée par le potentiomètre.
Par exemple, si le potentiomètre est égal à 26 (valeur de référence) et qu’il fait 25c, alors tous les pixels seront bleus.
À chaque tranche de 0,75c de plus, un pixel du haut passe au rouge.
Par exemple, pour 24C (valeur de référence) + 4*0,75, les 6 premiers pixels sont bleus et les 4 derniers sont rouges.
Note: Utiliser un doigt sur le capteur pour faire augmenter la température.
- Il faut afficher la valeur de référence sur les deux nombres de gauche du 4-Digit.
- Il faut afficher la température du capteur sur le deux nombres de droite du 4-Digit.
- Il faut afficher le symbole « : » entre les deux valeurs.
Note: Il est possible qu’un ou plusieurs des éléments suivants soient demandés lors de l’examen:
- Utilisation du bouton poussoir pour activer la lecture du potentiomètre.
- Affichage sur le module Grove rgb_lcd.
- Instructions conditionnelles à la présence d’une MACRO (#ifdef).
- Utilisation du module RTC.
- Afficher les pixels, avec un délai de 100ms entre chaque pixel, suite à l’utilisation du bouton poussoir. Laisser allumer tous les pixels 5 secondes puis les éteindre. Attention, les pixels bleus et rouges toujours en fonction de la température actuelle et de la température de référence.
- Utilisation du potentiomètre pour fixer la valeur des tranches (par exemple, 0,2c à 1c) au lieu de la température de référence.
/*
Solution du laboratoire 2.5
Auteur: Alain Boudreault
Date: 2021.10.22
Description: Varier la couleur des pixels en fonction de la température
*/
// Inclure la librairie pour I2C (le capteur SHT31 est de type I2C)
#include <Wire.h>
// Inclure la librairie pour le capteur de température et d'humidité SHT31
#include "SHT31.h"
// Inclure la librairie pour la barre de pixels
#include <Adafruit_NeoPixel.h>
#include "Streaming.h"
//#define DEBUG
#define PIN 2 // GPIO de connexion de la barre de pixels
#define NUMPIXELS 10 // NB de pixels sur la barre
#define PIXEL_ROUGE 245,22,26 // r,g,b
#define PIXEL_BLEU 80,106,148
#define TEMPERATURE_DE_BASE 24
#define TEMPERATURE_PALIER 0.75
// Création d'un objet SHT31 pour le contrôle du capteur de température/humidité
SHT31 capteurTemperature;
// Création d'un objet de type Adafruit_NeoPixel pour le contrôle de la barre de pixels.
Adafruit_NeoPixel pixels(NUMPIXELS, PIN, NEO_GRB + NEO_KHZ800);
void setup() {
Serial.begin(9600);
capteurTemperature.begin();
#ifdef DEBUG
Serial << "Temperature de depart: " << capteurTemperature.getTemperature() << endl;
#endif
pixels.begin();
pixels.clear(); // Effacer tous les DEL.
pixels.setBrightness(50);
for(int i=0; i<NUMPIXELS; i++) {
pixels.setPixelColor(i, pixels.Color(PIXEL_BLEU));
} // for
pixels.show(); // Actualiser l'affichage
} // setup
void loop() {
uint32_t couleur;
float temperature = capteurTemperature.getTemperature();
// Calculer le nombres de paliers de température supérieur à la température de base.
int nbPixelsRouges = (temperature - TEMPERATURE_DE_BASE) / TEMPERATURE_PALIER;
#ifdef DEBUG
Serial << "Temp. = " << temperature << " ,NB pixels rouges = " << (nbPixelsRouges) << endl;
delay(500);
#endif
// Renseigner la couleur des pixels en fonction des paliers de température
for (int pixelCourant = NUMPIXELS; pixelCourant >= 0; pixelCourant--) {
couleur = pixelCourant < (NUMPIXELS - nbPixelsRouges) ? pixels.Color(PIXEL_BLEU) : pixels.Color(PIXEL_ROUGE);
pixels.setPixelColor(pixelCourant, couleur);
} // for pixelCourant
pixels.show(); // Actualiser l'affichage
} // loop
Masquer la solution