Une boîte à lumière est un objet composé d’une structure qui diffuse la lumière à travers une gravure pour en révéler des motifs ou des formes.
La programmation permettra de contrôler l’éclairage afin de produire différents effets lumineux et de personnaliser l’ambiance créée.
Programmation pour contrôler une lumière
-
Ce sont les trois étapes de base d'un système :
Il reçoit une information (entrée), l'analyse ou prend une décision (traitement), puis produit une action ou une réponse (sortie).
Par exemple, la peau détecte la chaleur (entrée), le cerveau évalue si elle est confortable ou dangereuse (traitement), puis les muscles déplacent la main (sortie).
-
Un microcontrôleur est un petit ordinateur intégré, capable de lire des capteurs (lumière, humidité, température, son, etc.), de traiter des données et de contrôler des dispositifs comme des lumières, des moteurs, des écrans ou des haut-parleurs.
-
Un compilateur de code est un logiciel de programmation qui permet d’écrire du code, de le tester et de le transférer vers un microcontrôleur.
Défis de programmation
Série de défis de programmation permettant d’explorer différentes façons de contrôler des effets lumineux.
Défi 1
Copie le programme dans le compilateur de code.
Vérifie qu’il fonctionne en cliquant sur « Vérifier ».
Clique sur « Téléverser » pour le téléverser dans ton microcontrôleur.
Modifie la donnée « delay() » et observe les changements qui se produisent.
#include <Adafruit_NeoPixel.h>
#define PIN 8
Adafruit_NeoPixel pixel(1, PIN, NEO_GRB + NEO_KHZ800);
void setup() {
pixel.begin();
}
void loop() {
// Allume en blanc
pixel.setPixelColor(0, pixel.Color(255, 255, 255));
pixel.show();
delay(500);
// Éteint
pixel.setPixelColor(0, pixel.Color(0, 0, 0));
pixel.show();
delay(500);
}
Défi 2
Copie le programme dans le compilateur de code.
Vérifie qu’il fonctionne en cliquant sur « Vérifier ».
Clique sur « Téléverser » pour le téléverser dans ton microcontrôleur.
Modifie la donnée « pixel.setBrightness() » et observe les changements qui se produisent.
#include <Adafruit_NeoPixel.h>
#define PIN 8
Adafruit_NeoPixel pixel(1, PIN, NEO_GRB + NEO_KHZ800);
void setup() {
pixel.begin();
pixel.setBrightness(50); // Change cette valeur
pixel.setPixelColor(0, pixel.Color(0, 0, 255));
pixel.show();
}
void loop() {
}
Défi 3
Copie le programme dans le compilateur de code.
Vérifie qu’il fonctionne en cliquant sur « Vérifier ».
Clique sur « Téléverser » pour le téléverser dans ton microcontrôleur.
Modifie la donnée « pixel.color() » et observe les changements qui se produisent.
#include <Adafruit_NeoPixel.h>
#define PIN 8
Adafruit_NeoPixel pixel(1, PIN, NEO_GRB + NEO_KHZ800);
void setup() {
pixel.begin();
}
void loop() {
// Rouge
pixel.setPixelColor(0, pixel.Color(255, 0, 0));
pixel.show();
delay(1000);
// Vert
pixel.setPixelColor(0, pixel.Color(0, 255, 0));
pixel.show();
delay(1000);
// Bleu
pixel.setPixelColor(0, pixel.Color(0, 0, 255));
pixel.show();
delay(1000);
}
// Rouge
pixel.setPixelColor(0, pixel.Color(255, 0, 0));
// Vert
pixel.setPixelColor(0, pixel.Color(0, 255, 0));
// Bleu
pixel.setPixelColor(0, pixel.Color(0, 0, 255));
// Blanc
pixel.setPixelColor(0, pixel.Color(255, 255, 255));
// Noir (éteint)
pixel.setPixelColor(0, pixel.Color(0, 0, 0));
// Jaune
pixel.setPixelColor(0, pixel.Color(255, 255, 0));
// Cyan
pixel.setPixelColor(0, pixel.Color(0, 255, 255));
// Magenta
pixel.setPixelColor(0, pixel.Color(255, 0, 255));
// Orange
pixel.setPixelColor(0, pixel.Color(255, 100, 0));
// Rose
pixel.setPixelColor(0, pixel.Color(255, 50, 100));
// Violet
pixel.setPixelColor(0, pixel.Color(128, 0, 255));
// Turquoise
pixel.setPixelColor(0, pixel.Color(0, 180, 180));
// Vert lime
pixel.setPixelColor(0, pixel.Color(150, 255, 0));
// Bleu ciel
pixel.setPixelColor(0, pixel.Color(100, 180, 255));
// Rouge foncé
pixel.setPixelColor(0, pixel.Color(100, 0, 0));
// Vert foncé
pixel.setPixelColor(0, pixel.Color(0, 100, 0));
// Bleu foncé
pixel.setPixelColor(0, pixel.Color(0, 0, 100));
// Ambre
pixel.setPixelColor(0, pixel.Color(255, 191, 0));
// Or
pixel.setPixelColor(0, pixel.Color(255, 215, 0));
// Lavande
pixel.setPixelColor(0, pixel.Color(200, 120, 255));
Assemblage de la boîte
Création lumineuse
En modifiant le code suivant, crée l'effet lumineux de ton choix.
Par exemple, tu peux essayer de reproduire :
les gyrophares d’un véhicule de police, de pompiers ou d’une ambulance;
un phénomène naturel (orage, aurore boréale, coucher de soleil, etc.);
une bougie;
un feu de circulation;
ou tout autre effet lumineux de ton invention.
#include <Adafruit_NeoPixel.h>
// Le NeoPixel intégré du Flora est branché sur la broche 8
#define PIN 8
// Création de l'objet NeoPixel
Adafruit_NeoPixel pixel(1, PIN, NEO_GRB + NEO_KHZ800);
void setup() {
// Initialise le NeoPixel
pixel.begin();
// S'assure qu'il est éteint au départ
pixel.clear();
pixel.show();
}
void loop() {
// ====================
// 1. BLINK
// ====================
for(int i = 0; i < 5; i++) {
pixel.setPixelColor(0, pixel.Color(255, 255, 255));
pixel.show();
delay(500);
pixel.setPixelColor(0, pixel.Color(0, 0, 0));
pixel.show();
delay(500);
}
delay(1000);
// ====================
// 2. INTENSITÉ
// ====================
pixel.setPixelColor(0, pixel.Color(0, 0, 255));
for(int luminosite = 0; luminosite <= 255; luminosite++) {
pixel.setBrightness(luminosite);
pixel.show();
delay(10);
}
for(int luminosite = 255; luminosite >= 0; luminosite--) {
pixel.setBrightness(luminosite);
pixel.show();
delay(10);
}
delay(1000);
// Remet la luminosité maximale
pixel.setBrightness(255);
// ====================
// 3. COULEURS
// ====================
pixel.setPixelColor(0, pixel.Color(255, 0, 0));
pixel.show();
delay(1000);
pixel.setPixelColor(0, pixel.Color(0, 255, 0));
pixel.show();
delay(1000);
pixel.setPixelColor(0, pixel.Color(0, 0, 255));
pixel.show();
delay(1000);
pixel.setPixelColor(0, pixel.Color(255, 255, 0));
pixel.show();
delay(1000);
pixel.setPixelColor(0, pixel.Color(0, 255, 255));
pixel.show();
delay(1000);
pixel.setPixelColor(0, pixel.Color(255, 0, 255));
pixel.show();
delay(1000);
// ====================
// 4. TRANSITION
// ====================
for(int r = 0; r <= 255; r++) {
pixel.setPixelColor(0, pixel.Color(r, 255 - r, 0));
pixel.show();
delay(10);
}
delay(1000);
}