Partant de la captation de données issues du vivant, ce projet interroge la manière dont des phénomènes naturels peuvent être transformés en effets sonores ou lumineux à l’aide d’arduino
arduino, capteur d’humidité, speaker, carte SD, MP3, LEDs
LIENS:
https://wiki.dfrobot.com/dfplayer_mini_sku_dfr0299
https://arduino-france.site/ldr-arduino/


13/11/25
–> Relevé de données grâce à un capteur d’humidité
–> Définir les valeurs maximum et minimum 1023=sec 300=humide

// --- CONFIGURATION PINS ---
const int sensorPin = A0; // Capteur branché sur A0
void setup() {
Serial.begin(9600); // Ouvre la connexion pour afficher les données
}
void loop() {
// Lecture brute du capteur (0–1023)
int sensorValue = analogRead(sensorPin);
// Conversion approximative en pourcentage d’humidité
// sec = 1023, humide = 300
int humidityPercent = map(sensorValue, 1023, 300, 0, 100);
// Limiter la valeur entre 0 et 100
humidityPercent = constrain(humidityPercent, 0, 100);
// Affichage dans le moniteur série
Serial.print("Humidité brute : ");
Serial.print(sensorValue);
Serial.print(" | Humidité : ");
Serial.print(humidityPercent);
Serial.println(" %");
delay(1000); // Lecture toutes les secondes
}
20/11
–> Produire un son avec le Dfplayer mini selon les taux d’humidité relevés grâce au capteur



04/12
—> Créer des effets lumineux avec les données d’humidité relevées
–> Deux capteurs différents sont reliés à deux leds

const int ledPin = 3;
int seuilSec = 700;
void setup() {
Serial.begin(9600);
pinMode(ledPin, OUTPUT);
}
void loop() {
int value = analogRead(sensorPin);
Serial.println(value);
if (value > seuilSec) {
// Terre sèche → LED ON
digitalWrite(ledPin, HIGH);
} else {
// Terre humide → LED OFF
digitalWrite(ledPin, LOW);
}
delay(500);
}
FAIRE VARIER LA LUMINOSITE PROGRESSIVEMENT ENTRE 400 ET 1023
const int sensorPin = A0;
const int ledPin = 3; // PWM pin pour LED
void setup() {
Serial.begin(9600);
pinMode(ledPin, OUTPUT);
}
void loop() {
int raw = analogRead(sensorPin); // lecture capteur 0–1023
Serial.println(raw);
// Plage à adapter selon ton capteur
int minVal = 400; // sol humide
int maxVal = 1023; // sol très sec
// Inverser map : sec → LED forte, humide → LED faible
int ledValue = map(raw, minVal, maxVal, 0, 255);
// Sécurité : LED = 0–255
ledValue = constrain(ledValue, 0, 255);
analogWrite(ledPin, ledValue);
delay(30);
}
DEUX LEDS EN MEME TEMPS
// Pins capteurs
const int sensor1 = A0;
const int sensor2 = A1;
// Pins LEDs
const int led1 = 3;
const int led2 = 5;
// Plages de lecture )
int minVal = 400; // humide
int maxVal = 1023; // sec
void setup() {
Serial.begin(9600);
pinMode(led1, OUTPUT);
pinMode(led2, OUTPUT);
}
void loop() {
int val1 = analogRead(sensor1);
int val2 = analogRead(sensor2);
Serial.print(« Capteur1: « ); Serial.print(val1);
Serial.print( » | Capteur2: « ); Serial.println(val2);
// Map sec → LED forte
int ledVal1 = map(val1, minVal, maxVal, 0, 255);
int ledVal2 = map(val2, minVal, maxVal, 0, 255);
ledVal1 = constrain(ledVal1, 0, 255);
ledVal2 = constrain(ledVal2, 0, 255);
analogWrite(led1, ledVal1);
analogWrite(led2, ledVal2);
delay(30);
}
18/12
–> Créer effets lumineux, colorés et progressifs avec les capteurs d’humidité
#include <Adafruit_NeoPixel.h>
#ifdef __AVR__
#include <avr/power.h> // Required for 16 MHz Adafruit Trinket
#endif
#define PIN 6
#define NUMPIXELS 4
const int sensorPin = A0;
Adafruit_NeoPixel pixels(NUMPIXELS, PIN, NEO_GRB + NEO_KHZ800);
#define FADE_DELAY 20 // Delay between fade steps in ms
#define FADE_STEPS 50 // Number of steps in fade
// Couleurs cibles
uint8_t colorLow[3] = {150, 0, 0}; // rouge
uint8_t colorMedium[3] = {255, 128, 0}; // orange
uint8_t colorHigh[3] = {255, 255, 0}; // bleu
// Couleur actuelle des LEDs (pour le fade)
uint8_t currentColor[3] = {0, 0, 0};
void setup() {
pixels.begin();
Serial.begin(9600);
}
void loop() {
int sensorValue = analogRead(sensorPin);
int humidityPercent = map(sensorValue, 50, 300, 100, 0);
humidityPercent = constrain(humidityPercent, 0, 100);
Serial.print("Valeur brute : ");
Serial.print(sensorValue);
Serial.print(" | Humidité : ");
Serial.print(humidityPercent);
Serial.println(" %");
// Déterminer la couleur cible selon l'humidité
uint8_t targetColor[3];
if (humidityPercent < 30) {
memcpy(targetColor, colorLow, 3);
} else if (humidityPercent < 70) {
memcpy(targetColor, colorMedium, 3);
} else {
memcpy(targetColor, colorHigh, 3);
}
// Fade vers la couleur cible
for (int step = 1; step <= FADE_STEPS; step++) {
for (int i = 0; i < 3; i++) {
currentColor[i] = currentColor[i] + ((int)targetColor[i] - currentColor[i]) / (FADE_STEPS - step + 1);
}
for (int i = 0; i < NUMPIXELS; i++) {
pixels.setPixelColor(i, pixels.Color(currentColor[0], currentColor[1], currentColor[2]));
}
pixels.show();
delay(FADE_DELAY);
}
delay(500); // Petit délai avant prochaine lecture
}
#include <Adafruit_NeoPixel.h>
#ifdef __AVR__
#include <avr/power.h> // Required for 16 MHz Adafruit Trinket
#endif
#define PIN 6 // On Trinket or Gemma, suggest changing this to 1
#define NUMPIXELS 4 // Popular NeoPixel ring size
const int sensorPin = A0;
Adafruit_NeoPixel pixels(NUMPIXELS, PIN, NEO_GRB + NEO_KHZ800);
#define DELAYVAL 500 // Time (in milliseconds) to pause between pixels
void setup() {
pixels.begin(); // INITIALIZE NeoPixel strip object (REQUIRED)
Serial.begin(9600);
}
void loop() {
// Lecture brute du capteur (0–1023)
int sensorValue = analogRead(sensorPin);
// Conversion en pourcentage
int humidityPercent = map(sensorValue, 50, 300, 100, 0);
humidityPercent = constrain(humidityPercent, 0, 100);
Serial.print(« Valeur brute : « );
Serial.print(sensorValue);
Serial.print( » | Humidité : « );
Serial.print(humidityPercent);
Serial.println( » % »);
pixels.clear();
if (humidityPercent < 30) {
for (int i = 0; i < NUMPIXELS; i++) {
pixels.setPixelColor(i, pixels.Color(150, 0, 0));
}
}
else if (humidityPercent < 70) {
for (int i = 0; i < NUMPIXELS; i++) {
pixels.setPixelColor(i, pixels.Color(150, 80, 0));
}
}
else {
for (int i = 0; i < NUMPIXELS; i++) {
pixels.setPixelColor(i, pixels.Color(0, 0, 150));
}
}
pixels.show();
delay(1000);
}
FADE
#include <Adafruit_NeoPixel.h>
#ifdef __AVR__
#include <avr/power.h> // Required for 16 MHz Adafruit Trinket
#endif
#define PIN 6
#define NUMPIXELS 4
const int sensorPin = A0;
Adafruit_NeoPixel pixels(NUMPIXELS, PIN, NEO_GRB + NEO_KHZ800);
#define FADE_DELAY 20 // Delay between fade steps in ms
#define FADE_STEPS 50 // Number of steps in fade
// Couleurs cibles
uint8_t colorLow[3] = {150, 0, 0}; // rouge
uint8_t colorMedium[3] = {150, 80, 0}; // orange
uint8_t colorHigh[3] = {0, 0, 150}; // bleu
// Couleur actuelle des LEDs (pour le fade)
uint8_t currentColor[3] = {0, 0, 0};
void setup() {
pixels.begin();
Serial.begin(9600);
}
void loop() {
int sensorValue = analogRead(sensorPin);
int humidityPercent = map(sensorValue, 50, 300, 100, 0);
humidityPercent = constrain(humidityPercent, 0, 100);
Serial.print(« Valeur brute : « );
Serial.print(sensorValue);
Serial.print( » | Humidité : « );
Serial.print(humidityPercent);
Serial.println( » % »);
// Déterminer la couleur cible selon l’humidité
uint8_t targetColor[3];
if (humidityPercent < 30) {
memcpy(targetColor, colorLow, 3);
} else if (humidityPercent < 70) {
memcpy(targetColor, colorMedium, 3);
} else {
memcpy(targetColor, colorHigh, 3);
}
// Fade vers la couleur cible
for (int step = 1; step <= FADE_STEPS; step++) {
for (int i = 0; i < 3; i++) {
currentColor[i] = currentColor[i] + ((int)targetColor[i] – currentColor[i]) / (FADE_STEPS – step + 1);
}
for (int i = 0; i < NUMPIXELS; i++) {
pixels.setPixelColor(i, pixels.Color(currentColor[0], currentColor[1], currentColor[2]));
}
pixels.show();
delay(FADE_DELAY);
}
delay(500); // Petit délai avant prochaine lecture
}
08/01
–>fade avec capteur 400 1023
#include <Adafruit_NeoPixel.h>
#define PIN 6
#define NUMPIXELS 4
#define SENSOR_PIN A0
#define FADE_DELAY 20
#define FADE_STEPS 50
Adafruit_NeoPixel pixels(NUMPIXELS, PIN, NEO_GRB + NEO_KHZ800);
// Couleur actuelle
uint8_t currentColor[3] = {0, 0, 0};
void setup() {
pixels.begin();
Serial.begin(9600);
}
void loop() {
int sensorValue = analogRead(SENSOR_PIN);
// Mapping correct : sec (1023) → 0%, humide (400) → 100%
int humidity = map(sensorValue, 1023, 400, 0, 100);
humidity = constrain(humidity, 0, 100);
Serial.print("Capteur : ");
Serial.print(sensorValue);
Serial.print(" | Humidité : ");
Serial.print(humidity);
Serial.println(" %");
uint8_t targetColor[3];
// Dégradé ROUGE → ORANGE → BLEU
if (humidity <= 50) {
// Rouge → Orange
float t = humidity / 50.0;
targetColor[0] = 255;
targetColor[1] = 128 * t;
targetColor[2] = 0;
} else {
// Orange → Bleu
float t = (humidity - 50) / 50.0;
targetColor[0] = 255 * (1 - t);
targetColor[1] = 128 * (1 - t);
targetColor[2] = 255 * t;
}
// Fade progressif
for (int step = 0; step < FADE_STEPS; step++) {
for (int i = 0; i < 3; i++) {
currentColor[i] += (targetColor[i] - currentColor[i]) / (FADE_STEPS - step);
}
for (int i = 0; i < NUMPIXELS; i++) {
pixels.setPixelColor(i, pixels.Color(
currentColor[0],
currentColor[1],
currentColor[2]
));
}
pixels.show();
delay(FADE_DELAY);
}
delay(500);
}
