# Mayar , Ruby-Joe : Prototypage

#### **Contexte**  


Dans le cadre de nos expérimentations avec l'Arduino, nous avons exploré son potentiel en développant un système simple de détection d'humidité.

#### **Objectif**

Utiliser un capteur d'humidité avec une carte Arduino pour contrôler des LEDs. Lorsque l'humidité dépasse un**<span style="color: rgb(35, 111, 161);"> seuil de 50%</span>**, la <span style="color: rgb(224, 62, 45);">**LED rouge**</span> s'allume. Si l'humidité est inférieure à ce seuil, c'est la <span style="color: rgb(45, 194, 107);">**LED verte**</span> qui s'allume.

#### **Matériel**

- 1 carte Arduino
- 1 BASE SHIELD
- 2 résistances
- 1 plaque de montage rapide (breadboard)
- 1 LED verte
- 1 LED rouge
- 4 fils de connection
- 1 capteur de température et d'humidité (type SHT31 ou similaire)

#### **Montage Physique** 

Le capteur de température et d'humidité est connecté à la carte **Arduino** via un **Base Shield**, facilitant l'interface avec le capteur en utilisant le **protocole I2C**. Le rôle de ce capteur est de mesurer l'humidité ambiante.

Deux LEDs (une rouge et une verte) sont utilisées pour indiquer le niveau d'humidité:

- La<span style="color: rgb(224, 62, 45);"> **LED rouge**</span> s'allume lorsque l'humidité <span style="color: rgb(132, 63, 161);">**dépasse 50%**</span>.
- La <span style="color: rgb(45, 194, 107);">**LED verte**</span> s'allume lorsque l'humidité est <span style="color: rgb(53, 152, 219);">**inférieure à 50%**</span>.

Les deux LEDs sont connectées à la **breadboard**, chacune avec une résistance pour **limiter** le courant. La <span style="color: rgb(224, 62, 45);">**LED rouge**</span> est branchée sur la **<span style="color: rgb(224, 62, 45);">broche </span><span style="color: rgb(224, 62, 45);">8</span>** de l'Arduino, et la **<span style="color: rgb(45, 194, 107);">LED verte</span>** sur la<span style="color: rgb(45, 194, 107);"> **broche 12**</span>. Elles sont ensuite reliées à la **masse (GND**) de l'Arduino pour fermer le circuit.

Le tout est alimenté par **l'Arduino**, qui est relié à un **ordinateur** via **USB** pour à la fois alimenter le circuit et afficher les résultats sur le moniteur série.

[![montage-physique2.jpg](https://wiki.fablab.sorbonne-universite.fr/BookStack/uploads/images/gallery/2024-09/scaled-1680-/HUrmontage-physique2.jpg)](https://wiki.fablab.sorbonne-universite.fr/BookStack/uploads/images/gallery/2024-09/HUrmontage-physique2.jpg)

#### **Explication du Code**

Le code se compose de plusieurs parties importantes:

1. **Inclusion des bibliothèques et initialisation des variables** Ici, on inclut les bibliothèques nécessaires pour utiliser le protocole I2C et le capteur d'humidité SHT31. Les pins des LEDs sont définies respectivement sur les <span style="color: rgb(186, 55, 42);">**<span style="color: rgb(224, 62, 45);">broches 8 (LED rouge)</span>** </span>et **<span style="color: rgb(45, 194, 107);">12 (LED verte)</span>**. Les variables **start** et **stop** sont initialisés et utilisées pour mesurer le temps d’exécution de la lecture du capteur en microsecondes. L’objet **sht** permet d’interagir avec le capteur SHT31.  
       
    ```c
    #include "Wire.h"
    #include "SHT31.h"
    #define LEDROUGE 8 
    #define LEDVERTE 12
    #define SHT31_ADDRESS   0x44
    
    uint32_t start;
    uint32_t stop;
    
    SHT31 sht;
    ```
2. **Configuration initiale dans la fonction `setup()`**   
    Cette partie du code initialise la communication série à 9600 baud ***(Serial.begin(9600))*** pour afficher les résultats sur le moniteur série. Les pins des LEDs sont configurées en tant que sorties, et la communication I2C ***(Wire.begin())*** avec le capteur est démarrée.    
      
    ```c
    void setup()
    {
      Serial.begin(9600);
      pinMode(LEDROUGE, OUTPUT);
      pinMode(LEDVERTE, OUTPUT);
      Serial.println(__FILE__);
      Serial.print("SHT31_LIB_VERSION: \t");
      Serial.println(SHT31_LIB_VERSION);
    
      Wire.begin();
      Wire.setClock(100000);
      sht.begin();
    
      uint16_t stat = sht.readStatus();
      Serial.print(stat, HEX);
      Serial.println();
    }
    ```
3. **Lecture des données d'humidité et Condition de contrôle des LEDs** Dans la boucle principale, le capteur d'humidité est interrogé, et la valeur mesurée est récupérée et affichée sur le moniteur série. Le capteur renvoie un pourcentage d'humidité.   
    Ensuite, avec une condition <span style="color: rgb(35, 111, 161);">***"if"***</span>, selon le niveau d'humidité mesuré, le programme allume la <span style="color: rgb(224, 62, 45);">**LED rouge**</span> ou la **<span style="color: rgb(45, 194, 107);">LED verte.</span>** Si l'humidité **<span style="color: rgb(132, 63, 161);">dépasse</span>** ou <span style="color: rgb(132, 63, 161);"><span style="color: rgb(0, 0, 0);">est</span> **égale à 50%**</span>, la**<span style="color: rgb(224, 62, 45);"> LED rouge</span>** s'allume (**digitalWrite(LED, HIGH)**) et la **<span style="color: rgb(45, 194, 107);">LED verte</span>** s'éteint. Si l'humidité est <span style="color: rgb(53, 152, 219);">**inférieure à 50%**</span>, c’est la **<span style="color: rgb(45, 194, 107);">LED verte</span>** qui s'allume et la <span style="color: rgb(224, 62, 45);">**LED rouge**</span> qui s'éteint. Ce contrôle est répété à chaque itération de la boucle.   
    La fonction **delay(100)** introduit une pause de 100 millisecondes entre chaque lecture pour éviter une boucle trop rapide.   
      
    ```c
    void loop()
    {
      start = micros();
      sht.read();         //  default = true/fast       slow = false
      stop = micros();
      float humidity=sht.getHumidity();
    
      Serial.print("Humidity:");
      Serial.println(humidity);
      if (humidity>=50){
        digitalWrite(LEDROUGE, HIGH);  // turn the RED LED on (HIGH is the voltage level)
        digitalWrite(LEDVERTE, LOW);  // turn the GREEN LED off (LOW is the voltage level)
    
      }
      else{ 
        digitalWrite(LEDVERTE, HIGH);  // turn the GREEN LED on (HIGH is the voltage level)
        digitalWrite(LEDROUGE, LOW);   // turn the RED LED off by making the voltage LOW
      }                   
      
      delay(100);     // wait for a 0.1 second
    }
    ```

#### **Tests**

<article class="w-full text-token-text-primary focus-visible:outline-2 focus-visible:outline-offset-[-4px]" data-scroll-anchor="false" data-testid="conversation-turn-21" dir="auto" id="bkmrk-apr%C3%A8s-avoir-termin%C3%A9-">Après avoir terminé le montage et la programmation de l'Arduino, nous avons effectué des tests pour vérifier le bon fonctionnement du système.

<div bis_size="{"x":349,"y":3063,"w":810,"h":1014,"abs_x":349,"abs_y":3264}" bis_skin_checked="1" class="text-base py-[18px] px-3 md:px-4 m-auto w-full md:px-5 lg:px-4 xl:px-5"><div bis_size="{"x":349,"y":3063,"w":810,"h":1014,"abs_x":349,"abs_y":3264}" bis_skin_checked="1" class="mx-auto flex flex-1 gap-4 text-base md:gap-5 lg:gap-6 md:max-w-3xl lg:max-w-[40rem] xl:max-w-[48rem]"><div bis_size="{"x":349,"y":3063,"w":810,"h":1014,"abs_x":349,"abs_y":3264}" bis_skin_checked="1" class="group/conversation-turn relative flex w-full min-w-0 flex-col agent-turn"><div bis_size="{"x":349,"y":3063,"w":810,"h":1014,"abs_x":349,"abs_y":3264}" bis_skin_checked="1" class="flex-col gap-1 md:gap-3"><div bis_size="{"x":349,"y":3063,"w":810,"h":1014,"abs_x":349,"abs_y":3264}" bis_skin_checked="1" class="flex max-w-full flex-col flex-grow"><div bis_size="{"x":349,"y":3063,"w":810,"h":1014,"abs_x":349,"abs_y":3264}" bis_skin_checked="1" class="min-h-[20px] text-message flex w-full flex-col items-end gap-2 whitespace-normal break-words [.text-message+&]:mt-5" data-message-author-role="assistant" data-message-id="c2a574cb-1d26-493c-a3a6-fd211c492abb" dir="auto"><div bis_size="{"x":349,"y":3063,"w":810,"h":1014,"abs_x":349,"abs_y":3264}" bis_skin_checked="1" class="flex w-full flex-col gap-1 empty:hidden first:pt-[3px]"><div bis_size="{"x":349,"y":3063,"w":810,"h":1014,"abs_x":349,"abs_y":3264}" bis_skin_checked="1" class="markdown prose w-full break-words dark:prose-invert dark">1. **Test 1 : Humidité inférieure à 50%**  
    Lorsque le capteur détecte une humidité <span style="color: rgb(53, 152, 219);">**inférieure à 50%**</span>, la **<span style="color: rgb(45, 194, 107);">LED verte </span>**s'allume, indiquant que le niveau d'humidité est dans la plage normale qu'on a indiqué.  
      
    [![image_123650291.JPG](https://wiki.fablab.sorbonne-universite.fr/BookStack/uploads/images/gallery/2024-09/scaled-1680-/image-123650291.JPG)](https://wiki.fablab.sorbonne-universite.fr/BookStack/uploads/images/gallery/2024-09/image-123650291.JPG)
2. **Test 2 : Humidité supérieure à 50%**  
    Pour simuler une augmentation d'humidité, nous avons appuyé sur le capteur avec notre doigt, augmentant ainsi la valeur mesurée par le capteur. Une fois que l'humidité **<span style="color: rgb(132, 63, 161);">dépasse le seuil de 50%</span>**, la**<span style="color: rgb(224, 62, 45);"> LED rouge</span>** s'allume, indiquant que l'humidité est élevée.   
      
    [![image_123650291 (1).JPG](https://wiki.fablab.sorbonne-universite.fr/BookStack/uploads/images/gallery/2024-09/scaled-1680-/Xsiimage-123650291-1.JPG)](https://wiki.fablab.sorbonne-universite.fr/BookStack/uploads/images/gallery/2024-09/Xsiimage-123650291-1.JPG)

</div></div></div></div></div></div></div></div></article>