tess – lumière végétaux

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);
}