# Robotique Educative

# Qu'est ce que CréaBot ? Le club robotique de l'IUT de Haguenau

Voir aussi le [Club Robotique CréaBot sur le site de l'IUT de Haguenau](https://iuthaguenau.unistra.fr/recherches-et-innovation/club-robotique-educative)

![](https://iuthaguenau.unistra.fr/websites/_processed_/0/f/csm_bandeau_site_87ed225801.jpg)

## Objectifs et compétences

<span class="ILfuVd" lang="fr">Tous les mercredis après midi, en période scolaire, le club robotique **CréaBot** accueille des collégiens passionnés par les technologies du numérique pour explorer et développer leur intérêt pour les robots au sein du **Fablab d'Alsace-Nord** (**FAN**) de l'IUT de Haguenau .</span>

<span class="ILfuVd" lang="fr">Ce club a pour objectif d’**initier un jeune public** à la robotique et la programmation afin de les **sensibiliser aux métiers et aux enjeux technologiques d'aujourd'hui et de demain**. <span class="hgKElc">Il contribue au développement des apprentissages fondamentaux que sont les mathématiques, la physique, la technologie, l'informatique sous forme ludique.</span>  
</span>

<span class="ILfuVd" lang="fr"><span class="hgKElc">Plusieurs activités sont proposées durant toute l'année autour de la conception, la fabrication, l'assemblage et la programmation de robots où d</span></span><span class="ILfuVd" lang="fr"><span class="hgKElc">ifférents aspects techniques seront abordés sur chaque robot tels que la **mécanique, l'électronique et la programmation**.</span></span>

<span class="ILfuVd" lang="fr"><span class="hgKElc">Au-delà des compétences techniques, le club de robotique favorise également le développement de compétences transversales telles que la créativité, la résolution de problèmes et le travail d’équipe. Les collégiens seront amenés à collaborer et à partager leurs idées pour atteindre un objectif commun. Notre club de robotique est un véritable **espace de partage**, **d’apprentissage** et **d’expérimentation** autour des STIM (science, technologie, ingénierie et mathématiques).  
</span></span>

<span class="ILfuVd" lang="fr"><span class="hgKElc">Encadrés par le **Fab-Manager** du FAN, compétent et passionné, ils apprennent à concevoir et construire </span></span><span class="ILfuVd" lang="fr"><span class="hgKElc">des **éléments mécaniques et électroniques du robot** </span></span><span class="ILfuVd" lang="fr"><span class="hgKElc">à partir de modèles ou de leur propre création.</span></span>

<span class="ILfuVd" lang="fr"><span class="hgKElc">À travers ce club, les collégiens exploitent l'informatique (programmation, comparaison de stratégies) et travaillent la démarche d'investigation : mise en situation d'autonomie, mettre en place une stratégie, réaliser des essais, valider ou invalider la méthode, comprendre d'où vient le problème et corriger en conséquence le programme.</span></span>

<span class="ILfuVd" lang="fr">Les collégiens découvrent les différentes fonctionnalités des **capteurs**, pour prendre connaissance de l'environnement, ainsi que des **moteurs** permettant les déplacements du robot (avancer, reculer, tourner à droite ou à gauche, suivre une trajectoire).</span>

<span class="ILfuVd" lang="fr">**Différents types de robots** seront fabriqués durant l'année pour assurer des opérations selon les applications et les missions à mener : robot mobile à 2 ou 4 roues, bras robotique, robot à 4 ou 6 pattes....</span>

## <span class="ILfuVd" lang="fr"><span class="hgKElc">A qui s'adresse-t-il ?</span></span>

<span class="ILfuVd" lang="fr"><span class="hgKElc">Ce club s'adresse principalement aux collégiens de la 6ème à la 3ème.</span></span>

## <span class="ILfuVd" lang="fr">Horaires</span>

<span class="ILfuVd" lang="fr">Les activités du club sont organisées en période scolaire sur les horaires suivants :</span>

- <span class="ILfuVd" lang="fr">6ème-5ème : 14h-15h30</span>
- <span class="ILfuVd" lang="fr">4ème-3ème : 16h-17h30</span>

<span class="ILfuVd" lang="fr">Pas d'activité au club pendant les vacances scolaires.</span>

## <span class="ILfuVd" lang="fr">Lieu et encadrement</span>

<span class="ILfuVd" lang="fr">Fablab de l'IUT de Haguenau  
</span><span class="ILfuVd" lang="fr">30 rue du Maire André Traband  
67500 Hagueanu  
</span>

<span class="ILfuVd" lang="fr">Encadré par le Fab-Manager du Fablab</span>

---

# Club robotique - Explication et fonctionnement des logiciels



# Découvre Arduino IDE et la logique d'un programme

## 🖥️ **À quoi sert l’Arduino IDE ?**

### 🔍 1. C’est quoi un microcontrôleur ?

Un **microcontrôleur** est un **petit cerveau électronique**.  
Il est capable de recevoir des informations, de **les traiter**, et de **faire des actions**.

Par exemple :

- Allumer une LED quand on appuie sur un bouton
- Ouvrir une barrière quand on passe une carte
- Mesurer la température et afficher la valeur


### 🧠 Exemples de cartes avec microcontrôleur :

Ces cartes sont comme des mini-ordinateurs que l'on peut programmer :

<div class="_tableContainer_80l1q_1" id="bkmrk-carte-caract%C3%A9ristiqu"><div class="_tableWrapper_80l1q_14 group flex w-fit flex-col-reverse" tabindex="-1"><table class="w-fit min-w-(--thread-content-width)" data-end="1123" data-start="871"><thead data-end="907" data-start="871"><tr data-end="907" data-start="871"><th data-col-size="sm" data-end="887" data-start="871">Carte</th><th data-col-size="md" data-end="907" data-start="887">Caractéristiques</th></tr></thead><tbody data-end="1123" data-start="945"><tr data-end="994" data-start="945"><td data-col-size="sm" data-end="963" data-start="945">**Arduino Uno**</td><td data-col-size="md" data-end="994" data-start="963">Simple, idéale pour débuter</td></tr><tr data-end="1053" data-start="995"><td data-col-size="sm" data-end="1014" data-start="995">**Arduino Nano**</td><td data-col-size="md" data-end="1053" data-start="1014">Plus petite, mais similaire à l’Uno</td></tr><tr data-end="1123" data-start="1054"><td data-col-size="sm" data-end="1072" data-start="1054">**ESP32**</td><td data-col-size="md" data-end="1123" data-start="1072">possède le Wi-Fi et Bluetooth intégrés

</td></tr><tr><td>**...**</td><td>...

</td></tr></tbody></table>

<div class="sticky end-(--thread-content-margin) h-0 self-end select-none"><div class="absolute end-0 flex items-end"><button aria-label="Copier le tableau" class="hover:bg-token-bg-tertiary text-token-text-secondary my-1 rounded-sm p-1 transition-opacity group-[:not(:hover):not(:focus-within)]:pointer-events-none group-[:not(:hover):not(:focus-within)]:opacity-0"><svg class="icon" fill="currentColor" height="20" viewbox="0 0 20 20" width="20" xmlns="http://www.w3.org/2000/svg"></svg></button>  
</div></div></div></div>Chacune de ces cartes contient un **microcontrôleur**, c’est-à-dire un cerveau qui exécute les programmes.


### 💻 2. L’Arduino IDE : l’outil pour programmer ces cartes

L’**IDE Arduino** (IDE = Environnement de Développement Intégré) est le **logiciel** qui permet d’écrire des programmes pour ces cartes.

Avec l’Arduino IDE, on peut :

- Écrire le **code** en langage **C/C++ simplifié**
- **Vérifier** si le code contient des erreurs
- **Envoyer** le programme à la carte par un câble USB

**Si le logiciel n'est pas encore installé sur votre ordinateur.**

Vous pouvez le télécharger ici : [https://www.arduino.cc/téléchargement](https://www.arduino.cc/en/software/?_gl=1*roz0tz*_up*MQ..*_ga*MjEwNzUyNTA0MC4xNzUxODIzMjg2*_ga_NEXN8H46L5*czE3NTE4MjMyODUkbzEkZzAkdDE3NTE4MjMyODUkajYwJGwwJGgxNjM2NzMzMTk1#ide)

Il vous suffit ensuite de sélectionner le système d'exploitation que vous utilisez.

[![image.png](https://innovation.iha.unistra.fr/uploads/images/gallery/2025-07/scaled-1680-/cqaimage.png)](https://innovation.iha.unistra.fr/uploads/images/gallery/2025-07/cqaimage.png)

### 🧱 3. Structure d’un programme Arduino : les bases à connaître

Un programme Arduino est toujours organisé de la **même manière**, avec **différentes parties bien définies** :

// 1. Importation des librairies  
// 2. Déclaration des variables et constantes  
// 3. setup() : s’exécute une fois au démarrage  
// 4. loop() : s’exécute en boucle

#### 📚 1. Importation des **librairies** *(facultatif)*

Une **librairie** est un morceau de code déjà écrit par d’autres, que l’on peut utiliser pour **communiquer avec des capteurs, des écrans, des moteurs, etc.**

👉 On les déclare **tout en haut** du programme. Et elle se note de cette façon

Exemple :

<div class="overflow-y-auto p-4" dir="ltr" id="bkmrk-%23include-%3Cnom_de_la_">\#include &lt;Nom_de_la_librairie.h&gt; </div><div class="overflow-y-auto p-4" dir="ltr" id="bkmrk--1"></div><div class="overflow-y-auto p-4" dir="ltr" id="bkmrk-%F0%9F%94%A2-2.-d%C3%A9claration-des">🔢 2. Déclaration des **constantes** et **variables globales**</div>Juste **sous les librairies**, on déclare :

- Les **constantes** (valeurs fixes, comme les numéros de broches sur lesquels l'on s'est connecté)
- Les **variables globales** (utilisées partout dans le programme)

<div class="overflow-y-auto p-4" dir="ltr" id="bkmrk-%E2%9A%99%EF%B8%8F3.%C2%A0void-setup%28%29-%3A-"></div>#### ⚙️ 3. `void setup()` : au démarrage

- Cette fonction est **exécutée une seule fois** au début.
- On y met tout ce qu’il faut **initialiser** : la communication série, les broches d’entrée/sortie, les capteurs, etc.
- Par exemple, si je souhaite programmer un capteur qui me donnera une information à un moment donné. J'obtiendrai un code similaire à :

<div class="overflow-y-auto p-4" dir="ltr" id="bkmrk-void-setup%28%29-%7B-pinmo">`<span class="hljs-function"><span class="hljs-type">void</span></span> <span class="hljs-title">setup</span><span class="hljs-params">()</span> {`</div><div class="overflow-y-auto p-4" dir="ltr" id="bkmrk-%C2%A0%C2%A0%C2%A0%C2%A0%C2%A0capteur%28input%29%3B"> `<span class="hljs-built_in">capteur</span>(INPUT);   <span class="hljs-comment">// Prépare le capteur en entrée. INPUT = entrée</span> `</div><p class="callout info">Attention : Dans votre code vous pouvez écrire des commentaires. Ces commentaires sont donc du texte qui ne sera pas lu par le programme mais qui vous permettra d'expliquer votre programme au fur et a mesure.  
Cela vous permettra donc de mieux vous repérez dans votre code, de mieux débugger votre code mais aussi de le rendre plus lisible pour un tier.  
Comment faire ? :   
Il vous suffit d'écrire // devant chaque ligne de code. Si vous écrivez un commentaire sur plusieurs ligne vous pouvez commencer par /\* et finir par \*/</p>

#### 🔁 4. `void loop()` : la répétition

- Cette fonction est **exécutée en boucle sans arrêt**
- C’est là qu’on écrit le comportement du programme (réagir aux boutons, clignoter, mesurer, etc.)

Exemple :

<div class="contain-inline-size rounded-2xl relative bg-token-sidebar-surface-primary" id="bkmrk-cpp-copiermodifier-v"><div class="overflow-y-auto p-4" dir="ltr">`<span class="hljs-function"><span class="hljs-type">void</span></span> <span class="hljs-title">loop</span><span class="hljs-params">()</span> {`</div><div class="overflow-y-auto p-4" dir="ltr"> Allumer capteur;</div><div class="overflow-y-auto p-4" dir="ltr"> Attendre (10 secondes);</div><div class="overflow-y-auto p-4" dir="ltr"> Éteindre capteur;</div><div class="overflow-y-auto p-4" dir="ltr"><span style="background-color: rgb(180, 215, 255); color: rgb(0, 0, 0); font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace; font-size: 1em; word-spacing: normal;">}</span></div></div><p class="callout info">Attention les codes que je vous indique ne sont pas fonctionnel pour le moment, ils permettent de comprendre petit à petit le fonctionnement et la structure d'un code sur arduino IDE.  
Si vous avez bien fait attention. Vous pouvez voir que lorsque je déclare une fonction. Il y a des parenthèse à coté et pour ouvrir la fonction une { et pour la fermer une autre } mais dans l'autre sens.</p>


#### 4. Exercice 

Essayer sur papier (tableau, ardoise, etc...) de récapituler le fonctionnement et la structure d'un code arduino.

### 🔄 4. Comment téléverser un code dans notre microcontrôleur sur Arduino IDE

Une fois ton programme prêt dans l’Arduino IDE, il faut **l’envoyer dans le microcontrôleur** pour qu’il s’exécute "en vrai". C’est ce qu’on appelle **le téléversement**.

### 🧰 Matériel nécessaire

- Un **ordinateur** avec Arduino IDE installé
- Une **carte** (Arduino Uno, Nano, ESP32...)
- Un **câble USB** adapté à ta carte
- Ton **programme ouvert** dans l’IDE

### 🪜 Étapes pour téléverser ton programme

1. ✅ **Connecte la carte au PC**
    
    
    - Branche ta carte avec un câble USB
    - Une LED devrait s’allumer pour indiquer qu’elle reçoit de l’alimentation
2. 🧭 **Choisis le bon type de carte**
    
    
    - Dans Arduino IDE, clique sur `Outils > Type de carte`
    - Sélectionne le modèle de ta carte (par ex. : **Arduino Uno ou ESP32 ou Arduino Nano**)
    - Si votre carte n'apparait pas vous pouvez télécharger les fichiers nécessaires en allant dans `Outils > Type de carte > Gestionnaire de carte`
3. 🔌 **Sélectionne le bon port**
    
    
    - Va dans `Outils > Port`
    - Choisis le port série sur lequel est branchée ta carte ( `COM3`, `COM4`, etc.)
    - Si vous débrancher votre carte, un des ports disparaitra. Ce sera donc le port à utiliser.
4. 🟢 **Clique sur "Téléverser"**
    
    
    - Appuie sur le bouton "-&gt;" avec une flèche vers la droite (en haut à gauche de l’IDE)
    - Attends quelques secondes : un message `Téléversement terminé` s’affiche

---

### ⚠️ Si ça ne fonctionne pas :

- Vérifie que le **bon port est sélectionné**
- Vérifie que **la bonne carte est choisie**
- Essaie **un autre câble USB** (certains ne transmettent pas les données)
- Vérifie que **le code ne contient pas d’erreur** (bouton "Vérifier" avant de téléverser)

Vous pouvez retourner sur la page sur laquelle vous étiez afin de découvrir les codes à tester.

# Mblock

# Club robotique - Explication et fonctionnement des composants électroniques



# Qu'est ce que l'Arduino ?

<div class="translate-tooltip-mtz translator-hidden" id="bkmrk-translator-%C2%A0"><div class="translated-text">  
</div></div>#### <span style="text-decoration: underline;">**Carte Arduino Nano**</span>

Une carte Arduino est un cerveau qui permet de rendre intelligents des systèmes électroniques et d'animer des dispositifs mécaniques. Ce sont des cartes électroniques programmables (donc dotées d'un processeur et de mémoire) sur lesquelles nous pouvons brancher des capteurs de température, d'humidité, de vibration ou de lumière, une caméra, des boutons, des potentiomètres de réglage, des contacts électriques… Il y a aussi des connecteurs pour [brancher des LED](https://www.positron-libre.com/cours/electronique/diode/led/alimentation-led.php "Comment brancher une LED en 5 volts"), des moteurs, des relais, des afficheurs, un écran…

L'image ci-dessous montre une carte Arduino Nano accompagnée de son Shield qui est très utilisée pour débuter car on peut y brancher directement des composants :

[![image.png](https://innovation.iha.unistra.fr/uploads/images/gallery/2026-02/scaled-1680-/kqlimage.png)](https://innovation.iha.unistra.fr/uploads/images/gallery/2026-02/kqlimage.png)

Dans les écrits en rapport avec Arduino, vous allez souvent voir les mots « microprocesseur », « micro-contrôleur », « <abbr lang="en" title="MicroController Unit">MCU</abbr> », « AVR », « ATMega168 », « ARM Cortex-M3 »…

D'une manière très simplifiée : tous ces termes désignent un micro-contrôleur . C'est l'unité de calcul contenu à l'intérieur du composant (circuit intégré) désigné par l'un des termes précédemment cité (exemple : MCU, ATmega168…). A la différence d'un processeur qu'on trouve dans les ordinateurs et les smartphones, un micro-contrôleur n'est capable d'exécuter qu'un programme à la fois.

Un micro-contrôleur (tout comme un processeur) a pour mission d'effectuer les calculs qui sont définis dans un programme informatique composé de lignes de code.


#### <span style="text-decoration: underline;">**Comment programmer une Arduino Nano ?**</span>

Pour programmer une **Arduino Nano** de la façon la plus simple nous utilisons **mBlock**.

**"mBlock"** est un environnement de programmation graphique basé sur des blocs, spécialement conçu pour apprendre la robotique et la programmation de manière simple et intuitive. Utilisé avec une **Arduino Nano**, il permet de programmer la carte sans écrire de code complexe, en assemblant des blocs logiques. **mBlock** est particulièrement adapté aux clubs de robotique et à l’enseignement, car il facilite la compréhension des capteurs, des actionneurs et de la logique de programmation tout en restant compatible avec des projets Arduino réels.

<p class="callout info">Si vous ne possédez pas mBlock, vous pouvez le télécharger depuis ce lien : https://mblock.cc/pages/downloads</p>

#### <span style="text-decoration: underline;">**Utiliser une Arduino Nano avec mBlock :**</span>

<details id="bkmrk-%C2%A0-%C2%A0-%C2%A0-%C2%A0-une-fois-ouv"><summary></summary>

<aside class="remarque" id="bkmrk-une-fois-ouvert-mblo">Une fois ouvert mBlock ressemble a ca :

[![image.png](https://innovation.iha.unistra.fr/uploads/images/gallery/2026-02/scaled-1680-/Seeimage.png)](https://innovation.iha.unistra.fr/uploads/images/gallery/2026-02/Seeimage.png)

##### <span style="text-decoration: underline;">**Pour selectionner une carte électronique :**</span>

<details><summary></summary>

<aside class="remarque" id="bkmrk-pour-s%C3%A9lectionner-un">Pour sélectionner une carte spécifique vous devez aller dans la zone contenant les appareils, les objets, et l'arrière plan

[![image.png](https://innovation.iha.unistra.fr/uploads/images/gallery/2026-02/scaled-1680-/JU9image.png)](https://innovation.iha.unistra.fr/uploads/images/gallery/2026-02/JU9image.png)

dans cette zone diriger vous vers la catégorie "Appareils" ce qui signifie des appareils physiques comme des cartes électroniques ou des robots.

[![image.png](https://innovation.iha.unistra.fr/uploads/images/gallery/2026-02/scaled-1680-/vOEimage.png)](https://innovation.iha.unistra.fr/uploads/images/gallery/2026-02/vOEimage.png)

Ici on peux donc voir que nous avons un robot sélectionné par défaut, or vous utilisez une Arduino Nano.

cliquer sur le bouton "Ajouter" et cette fenêtre ci s'ouvre :

[![image.png](https://innovation.iha.unistra.fr/uploads/images/gallery/2026-02/scaled-1680-/Po6image.png)](https://innovation.iha.unistra.fr/uploads/images/gallery/2026-02/Po6image.png)

 Une fois dans cette fenêtre vous pouvez ajouter parmi tout ces choix votre Arduino Nano en cherchant dans la barre de recherche "nano". Une fois trouvée cliquez sur le petit + en haut a droite de celle si et votre carte sera ajouter a votre catégorie "Appareils".

Une fois ajoutée branchez votre Arduino Nano a votre pc et connectez vous a celle si en cliquant sur le bouton "connecter" et en sélectionnant le bon port com.

</aside>[![image.png](https://innovation.iha.unistra.fr/uploads/images/gallery/2026-02/scaled-1680-/NBKimage.png)](https://innovation.iha.unistra.fr/uploads/images/gallery/2026-02/NBKimage.png)[![image.png](https://innovation.iha.unistra.fr/uploads/images/gallery/2026-02/scaled-1680-/gcmimage.png)](https://innovation.iha.unistra.fr/uploads/images/gallery/2026-02/gcmimage.png)

<p class="callout info">Si vous avez plusieurs choix au niveau de la sélection du port COM je vous conseil de débrancher votre Arduino Nano de votre PC et analyser quel port COM a disparu dans votre liste car celui ci est donc le port de votre Arduino Nano.</p>

</details></aside>#### <span style="text-decoration: underline;">**Les catégories dans mBlock :**</span>

<details><summary></summary>

##### <span style="text-decoration: underline;">**1. Événements**</span>

Ces blocs servent à **démarrer un programme** ou à déclencher une action.

- Exemple : *lorsque Arduino démarre*  
    👉 Ils définissent quand le programme commence à s’exécuter.

##### <span style="text-decoration: underline;">**2. Contrôle**</span>

Cette catégorie permet de gérer la **logique du programme**.

- boucles (*pour toujours*, *répéter*),
- conditions (*si / sinon*),
- temporisations (*attendre*).  
    👉 Indispensable pour automatiser le comportement d’un robot.

#### <span style="text-decoration: underline;">**3. Capteurs**</span>

Les blocs capteurs permettent de **lire des informations du monde réel**.

- capteur à ultrasons,
- boutons,
- capteurs de lumière ou de température.  
    👉 Ils permettent au robot de « percevoir » son environnement.

##### <span style="text-decoration: underline;">**4. Actionneurs / Appareils**</span>

Ces blocs contrôlent les **éléments de sortie**.

- servomoteurs,
- LEDs,
- moteurs.  
    👉 Ils transforment les décisions du programme en actions physiques.

##### <span style="text-decoration: underline;">**5. Opérateurs**</span>

Les opérateurs servent à effectuer des **calculs et comparaisons**.

- inférieur à / supérieur à,
- additions, soustractions,
- logique ET / OU.  
    👉 Très utilisés dans les conditions (*si distance &lt; 5 cm*).

##### <span style="text-decoration: underline;">**6. Variables**</span>

Les variables permettent de **stocker des valeurs**.

- distance,
- compteur,
- état du couvercle.  
    👉 Utile pour mémoriser des informations pendant l’exécution.

##### <span style="text-decoration: underline;">**7. Communication / Port série**</span>

Ces blocs servent à **afficher des informations**.

- écrire sur le port série.  
    👉 Idéal pour comprendre et déboguer un programme.

##### <span style="text-decoration: underline;">**Conclusion**</span>

Les catégories de blocs de mBlock structurent la programmation et aident les élèves à comprendre le lien entre **logique**, **capteurs** et **actions**. Elles constituent une base solide pour passer progressivement de la programmation par blocs au code Arduino en langage C/C++.

</details> Une fois tout ca compris, vous pouvez donc crée votre propre programme tout en utilisant des blocs logique se qui permet une compréhension du code.

</details>#### <span style="text-decoration: underline;">**Utiliser une Arduino Nano avec Arduino IDE :**</span>

<details id="bkmrk-les-cr%C3%A9ateurs-de-ard"><summary></summary>

Les créateurs de Arduino ont développé un logiciel pour que la programmation des cartes arduino soit visuelle, simple et complète à la fois. C'est ce que l'on appelle une <abbr lang="en" title="Integrated Development Environment">IDE</abbr>, qui signifie *<span lang="en">Integrated Development Environment</span>* ou Environnement de Développement « Intégré » en français (donc <abbr title="Environnement de Développement Intégré">EDI</abbr>). L'IDE Arduino est le logiciel qui permet de programmer les cartes Arduino.

L'IDE affiche une fenêtre graphique qui contient un éditeur de texte et tous les outils nécessaires à l'activité de programmation.   
Vous pouvez donc saisir votre programme, l'enregistrer, le compiler, le vérifier, le transférer sur une carte arduino…   
A la date de rédaction de cette page, la version la plus récente de l'IDE Arduino est la *1.8.10*. L'aspect est à peu près identique sur chaque plate-forme (Windows, Mac et Linux). L'image suivante montre l'écran initial qui apparaît au lancement de l'IDE.

[![ide-arduino.png](https://innovation.iha.unistra.fr/uploads/images/gallery/2023-10/scaled-1680-/ide-arduino.png)](https://innovation.iha.unistra.fr/uploads/images/gallery/2023-10/ide-arduino.png)

[Crédit : https://www.positron-libre.com/electronique/arduino/arduino.php](https://www.positron-libre.com/electronique/arduino/arduino.php)

</details>#### <span style="text-decoration: underline;">**Spécificités des cartes**</span>

#### **Seeeduino Nano**  


- Installer Driver windows (nécessite droits administrateur)
- [https://www.silabs.com/developers/usb-to-uart-bridge-vcp-drivers?tab=downloads](https://www.silabs.com/developers/usb-to-uart-bridge-vcp-drivers?tab=downloads)
- [CP210x Universal Windows Driver](https://www.silabs.com/documents/public/software/CP210x_Universal_Windows_Driver.zip)
- Vérifier la bonne installation dans la Gestionnaire de périphériques : `Silicon Labs CP210x USB to UART Bridge`

[![image.png](https://innovation.iha.unistra.fr/uploads/images/gallery/2024-03/scaled-1680-/b6yimage.png)](https://innovation.iha.unistra.fr/uploads/images/gallery/2024-03/b6yimage.png)

- Le port à sélectionner dans Arduino IDE &gt; Tools est indiqué, par exemple `(COM6)`
- Carte : Arduino Nano
- Processeur : `ATmega328P`

# Qu'est ce qu'un servo-moteur ?

#### <span style="text-decoration: underline;">**I Introduction**</span>

Ce que je vous propose dans ce tutoriel c'est de découvrir les Servomoteurs. il en existe deux type :

- A contrôle d'angle
- A contrôle de vitesse de rotation

Les premiers ne tournent pas en continu, mais en général entre 0° et 180° et vous pouvez contrôler leur angle de rotation. Très pratique quand vous voulez faire un bras robotisé, piloter l’orientation des roues avant d'une voiture, ou bien contrôler un petit mécanisme. Les Servomoteurs suivants sont très pratiques lorsque vous souhaitez faire tourner un objet en contrôlant sa vitesse, par exemple des roues! :

[![tiptopboards.com_169-thickbox_mini-servo-moteur-sg90-9g-mod_c3_a9lisme-arduino.jpg](https://wiki.fablab.sorbonne-universite.fr/wiki/lib/exe/fetch.php?w=200&tok=6a81c9&media=http%3A%2F%2Ftiptopboards.com%2F169-thickbox%2Fmini-servo-moteur-sg90-9g-mod%25C3%25A9lisme-arduino.jpg "tiptopboards.com_169-thickbox_mini-servo-moteur-sg90-9g-mod_c3_a9lisme-arduino.jpg")](https://wiki.fablab.sorbonne-universite.fr/wiki/lib/exe/fetch.php?tok=1cd9ca&media=http%3A%2F%2Ftiptopboards.com%2F169-thickbox%2Fmini-servo-moteur-sg90-9g-mod%25C3%25A9lisme-arduino.jpg "http://tiptopboards.com/169-thickbox/mini-servo-moteur-sg90-9g-mod%C3%A9lisme-arduino.jpg")

Ce sont des Servomoteurs à contrôle d'angle sur 180° et le tutoriel va donc porter sur ce type de moteur.

#### <span style="text-decoration: underline;">**II Fonctionnement**</span>

[https://fr.wikipedia.org/wiki/Servomoteur](https://fr.wikipedia.org/wiki/Servomoteur) --&gt; fonctionnement

Les Servomoteurs intègrent au sein d'un même boitier un moteur à courant continu, un potentiomètre, un réducteur et un circuit de contrôle. L'idée est que la valeur d'angle est mesurée grâce au potentiomètre et le circuit de contrôle fait tourner le moteur et corrige l'orientation. Voila une image qui donne une idée du fonctionnement interne:

[![upload.wikimedia.org_wikipedia_commons_d_d3_micro_servo.jpg](https://wiki.fablab.sorbonne-universite.fr/wiki/lib/exe/fetch.php?w=200&tok=7a4e92&media=http%3A%2F%2Fupload.wikimedia.org%2Fwikipedia%2Fcommons%2Fd%2Fd3%2FMicro_servo.jpg "upload.wikimedia.org_wikipedia_commons_d_d3_micro_servo.jpg")](https://wiki.fablab.sorbonne-universite.fr/wiki/lib/exe/fetch.php?tok=aa1619&media=http%3A%2F%2Fupload.wikimedia.org%2Fwikipedia%2Fcommons%2Fd%2Fd3%2FMicro_servo.jpg "http://upload.wikimedia.org/wikipedia/commons/d/d3/Micro_servo.jpg")

[![vue-interne-dun-servomoteur-sans-lelectronique-de-commande.jpg](https://innovation.iha.unistra.fr/uploads/images/gallery/2023-09/scaled-1680-/vue-interne-dun-servomoteur-sans-lelectronique-de-commande.jpg)](https://innovation.iha.unistra.fr/uploads/images/gallery/2023-09/vue-interne-dun-servomoteur-sans-lelectronique-de-commande.jpg)

Vous l'avez surement remarqué, le Servomoteur a trois fils. Le fil marron correspond à la masse, le fil rouge au 5 Volts et le fil orange à l'envoi de données. C'est par le fil orange que nous allons envoyer le signal pour la commande de l'angle voulu au Servomoteur.

L’instruction par le fil orange s'envoie sous la forme d'un signal PWM (Pulse Width modulation=Modulation en largeur d'impulsion). Le principe est que l'envoi d'instruction se fait par un signal électrique qui passe de façon régulière et rapide (30-50Hz ou 300Hz) de 0 à 5 Volts. La valeur de l'angle voulu est définie par le rapport entre le temps où le signal est à 5 Volts et le temps où celui-ci est à 0 Volt. Par exemple pour un angle de 0°, on envoie 5V pendant 1ms puis 0V pendant 19ms : Le signal est à 5V pendant 5% du temps (1ms/20ms). Une image vous donnera une meilleure idée:

[![TiemposServo.png](https://innovation.iha.unistra.fr/uploads/images/gallery/2023-08/scaled-1680-/tiemposservo.png)](https://innovation.iha.unistra.fr/uploads/images/gallery/2023-08/tiemposservo.png)

Source : [https://upload.wikimedia.org/wikipedia/commons/thumb/f/f6/TiemposServo.svg/220px-TiemposServo.svg.png](https://upload.wikimedia.org/wikipedia/commons/thumb/f/f6/TiemposServo.svg/220px-TiemposServo.svg.png)

### Servomoteur contrôlé en position "180°" ou en vitesse "360°"

[https://www.makerguides.com/how-to-control-a-360-degree-servo-motor-with-arduino/#What\_makes\_a\_continuous\_servo\_motor\_special](https://www.makerguides.com/how-to-control-a-360-degree-servo-motor-with-arduino/#What_makes_a_continuous_servo_motor_special)

[https://www.atelierdelarobotique.fr/servomoteur-standard-vs-servomoteur-a-rotation-continue-avec-arduino-programmation-et-applications#elementor-toc\_\_heading-anchor-2](https://www.atelierdelarobotique.fr/servomoteur-standard-vs-servomoteur-a-rotation-continue-avec-arduino-programmation-et-applications#elementor-toc__heading-anchor-2)

#### <span style="text-decoration: underline;">**Programmation de Servomoteur avec mBlock :**</span>

<details id="bkmrk-pour-programmer-un-s"><summary></summary>

Pour programmer un servomoteur a l'aide de mBlock il vous faut donc une Arduino Nano et la connecter a votre PC

<p class="callout info">Pour plus d'informations sur l'Arduino Nano : https://innovation.iha.unistra.fr/books/robotique-educative/page/quest-ce-que-larduino</p>

Pour contrôler un servomoteur il faut principalement utiliser la catégorie de blocs "Broche" dans la quel vous trouverez le bloc le plus important pour utiliser un servomoteur "set servo pin 0 angle as 90" se qui signifie "mettre le servo du pin 0 a l'angle 90".

[![image.png](https://innovation.iha.unistra.fr/uploads/images/gallery/2026-02/scaled-1680-/Bpnimage.png)](https://innovation.iha.unistra.fr/uploads/images/gallery/2026-02/Bpnimage.png)

avec ce bloc vous pouvez donc faire que votre servomoteur tourne a l'angle de votre choix.

<p class="callout info">En fonction de votre servomoteur vous avez une limite d'angle, pour les servomoteurs 180° vous possédez une limite de 180° se qui signifie que votre servomoteur peux uniquement tourner de 0° a 180°. Pareil pour les moteurs 360° ect...</p>

#### <span style="text-decoration: underline;">**Exercice - Comprendre et maitriser le fonctionnement d'un servomoteur**</span>

##### <span style="text-decoration: underline;">**Objectif pédagogique**</span>

À la fin de cet exercice, les élèves seront capables de :

- comprendre le principe de fonctionnement d’un servomoteur,
- contrôler précisément son angle de rotation,
- utiliser des boucles pour automatiser un mouvement.

#### <span style="text-decoration: underline;">**Étape 1 – Faire bouger le servomoteur de 0° à 180°**</span>

##### <span style="text-decoration: underline;">**Objectif**</span>

Découvrir comment positionner un servomoteur à un angle précis.

##### <span style="text-decoration: underline;">**Consigne**</span>

1. Brancher le servomoteur :
    
    
    - fil signal → broche 9
    - alimentation → 5V
    - masse → GND
2. Créer un programme qui :
    
    
    - place le servomoteur à **0°**,
    - attend **2 secondes**,
    - place le servomoteur à **180°**.

##### <span style="text-decoration: underline;">**Questions à poser aux élèves**</span>

- Que représente l’angle du servomoteur ?
- Pourquoi le servomoteur ne tourne-t-il pas en continu ?
- Que se passe-t-il si on remplace 180° par 90° ?

##### <span style="text-decoration: underline;">**Validation :**</span>

<details><summary></summary>

[![image.png](https://innovation.iha.unistra.fr/uploads/images/gallery/2026-02/scaled-1680-/IFIimage.png)](https://innovation.iha.unistra.fr/uploads/images/gallery/2026-02/IFIimage.png)

</details>#### <span style="text-decoration: underline;">**Étape 2 – Faire bouger le servomoteur en boucle (0° ↔ 180°)**</span>

##### <span style="text-decoration: underline;">**Objectif**</span>

Comprendre l’utilisation des **boucles** pour répéter une action automatiquement.

##### <span style="text-decoration: underline;">**Consigne**</span>

1. Reprendre le programme de l’étape 1.
2. Ajouter une **boucle “pour toujours”**.
3. Dans la boucle :
    
    
    - positionner le servomoteur à **0°**,
    - attendre **1 seconde**,
    - positionner le servomoteur à **180°**,
    - attendre **1 seconde**.

##### <span style="text-decoration: underline;">**Questions à poser aux élèves**</span>

- À quoi sert la boucle ?
- Que se passe-t-il si on enlève les temps d’attente ?
- Comment modifier la vitesse du mouvement ?

##### <span style="text-decoration: underline;">**Validation :**</span>

<details><summary></summary>

[![image.png](https://innovation.iha.unistra.fr/uploads/images/gallery/2026-02/scaled-1680-/BFMimage.png)](https://innovation.iha.unistra.fr/uploads/images/gallery/2026-02/BFMimage.png)

</details>##### <span style="text-decoration: underline;">**Défi (optionnel)**</span>

- Ajouter une position intermédiaire (90°).
- Modifier les temps d’attente pour simuler l’ouverture d’un couvercle.
- Imaginer une application réelle (barrière, bras, couvercle de poubelle).

##### <span style="text-decoration: underline;">**Conclusion pour l’animateur**</span>

Cet exercice permet aux élèves de comprendre concrètement :

- la différence entre **position** et **rotation continue**,
- le lien entre programmation et mouvement réel,

</details>#### <span style="text-decoration: underline;">**Programmation d'un servomoteur avec Arduino IDE :**</span>

<details id="bkmrk-wiki-pas-fini-%28en-pr"><summary></summary>

##### <span style="text-decoration: underline;">**Principe**</span>

Le servomoteur va :

- aller à **0°**,
- attendre,
- aller à **180°**,
- recommencer en boucle.

##### <span style="text-decoration: underline;">**Branchement**</span>

- Fil signal (jaune/orange) → **broche 9**
- Fil rouge → **5V**
- Fil marron/noir → **GND**

```
#include <Servo.h>   // Bibliothèque pour contrôler le servomoteur

Servo monServo;      // Création de l’objet servomoteur

void setup() {
  monServo.attach(9);   // Le servomoteur est connecté à la broche 9
}

void loop() {
  monServo.write(0);    // Position à 0°
  delay(1000);          // Attendre 1 seconde

  monServo.write(180);  // Position à 180°
  delay(1000);          // Attendre 1 seconde
}

```

#### <span style="text-decoration: underline;">**Exercice – Comprendre et maîtriser un servomoteur avec Arduino**</span>

##### <span style="text-decoration: underline;">**Objectif pédagogique**</span>

À la fin de l’exercice, les élèves seront capables de :

- comprendre le rôle d’un servomoteur,
- utiliser la bibliothèque `Servo.h`,
- contrôler un angle,
- modifier un programme existant.

#### <span style="text-decoration: underline;">**Étape 1 – Tester le mouvement du servomoteur**</span>

##### <span style="text-decoration: underline;">**Consigne**</span>

1. Copier le code fourni dans l’Arduino IDE.
2. Téléverser le programme sur l’Arduino Nano.
3. Observer le comportement du servomoteur.

##### <span style="text-decoration: underline;">**Questions pour les élèves**</span>

- Que fait le servomoteur ?
- À quoi sert la fonction `delay()` ?
- Que représente la valeur 180 ?

##### <span style="text-decoration: underline;">**Validation :**</span>

<details><summary></summary>

```
#include <Servo.h>

Servo monServo;

void setup() {
  monServo.attach(9);   // Connexion du servomoteur à la broche 9
}

void loop() {
  monServo.write(0);    // Position à 0°
  delay(1000);          // Pause de 1 seconde

  monServo.write(180);  // Position à 180°
  delay(1000);          // Pause de 1 seconde
}

```

</details>#### <span style="text-decoration: underline;">**Étape 2 – Modifier les angles**</span>

##### <span style="text-decoration: underline;">**Consigne**</span>

Modifier le programme pour que :

- le servomoteur aille à **90°** au lieu de 180°,
- puis revienne à **0°**.

##### <span style="text-decoration: underline;">**Validation :**</span>

<details><summary></summary>

```
#include <Servo.h>

Servo monServo;

void setup() {
  monServo.attach(9);
}

void loop() {
  monServo.write(0);    // Position initiale
  delay(1000);

  monServo.write(90);   // Position intermédiaire
  delay(1000);
}

```

</details>#### <span style="text-decoration: underline;">**Étape 3 – Défi (optionnel)**</span>

##### <span style="text-decoration: underline;">**Défi 1**</span>

Ajouter une **troisième position** :

- 0° → 90° → 180° → 0°

##### <span style="text-decoration: underline;">**Validation :**</span>

<details><summary></summary>

```
#include <Servo.h>

Servo monServo;

void setup() {
  monServo.attach(9);
}

void loop() {
  monServo.write(0);      // Couvercle fermé
  delay(2000);

  monServo.write(90);     // Couvercle ouvert
  delay(2000);
}

```

</details>#### <span style="text-decoration: underline;">**Défi 2**</span>

Changer les temps d’attente :

##### <span style="text-decoration: underline;">**Validation :**</span>

<details><summary></summary>

```
#include <Servo.h>

Servo monServo;

void setup() {
  monServo.attach(9);
}

void loop() {
  for (int angle = 0; angle <= 180; angle++) {
    monServo.write(angle);
    delay(15);
  }

  for (int angle = 180; angle >= 0; angle--) {
    monServo.write(angle);
    delay(15);
  }
}

```

</details>#### <span style="text-decoration: underline;">**Conclusion pédagogique**</span>

Cet exercice permet aux élèves de comprendre :

- comment un **actionneur** fonctionne,
- comment un programme contrôle un mouvement réel,
- les bases indispensables pour des projets plus avancés (robot, bras articulé, couvercle automatique).

👉 Prochaine étape logique : **relier le servomoteur à un capteur (ultrasons ou bouton)** pour déclencher le mouvement automatiquement.

</details>

# Programmation d'un servomoteur 180°

#### <span style="text-decoration: underline;">**Programmation des Servomoteurs avec mBlock et Arduino IDE**</span>

#### <span style="text-decoration: underline;">**Objectif :**</span>

Comprendre le fonctionnement des servomoteurs et apprendre à les programmer avec **mBlock** et **Arduino IDE**.

#### <span style="text-decoration: underline;">**1. Introduction aux Servomoteurs**</span>

##### <span style="text-decoration: underline;">**Qu’est-ce qu’un servomoteur ?**</span>

Un **servomoteur** est un moteur à rotation limitée, généralement 180°, qui est contrôlé par un signal **PWM (Pulse Width Modulation)**. Il est utilisé dans de nombreux projets tels que les **bras robotisés, les portes automatiques et les robots éducatifs**.

##### <span style="text-decoration: underline;">**Branchement d'un servomoteur à un Arduino Nano**</span>

Un servomoteur possède **trois câbles** :

- **Noir ou Marron** → GND (Masse)
- **Rouge** → 5V (Alimentation)
- **Jaune ou Orange** → Signal (Entre les broches **2 et 13** du Nano)
- [![Capture d’écran 2025-03-21 142828.png](https://innovation.iha.unistra.fr/uploads/images/gallery/2025-03/scaled-1680-/capture-decran-2025-03-21-142828.png)](https://innovation.iha.unistra.fr/uploads/images/gallery/2025-03/capture-decran-2025-03-21-142828.png)

➡️ *Pour en savoir plus sur les servomoteurs, cliquez [ici](https://innovation.iha.unistra.fr/books/robotique-educative/page/quest-ce-quun-servo-moteur).*

#### <span style="text-decoration: underline;">**2. Configuration et Programmation avec mBlock :**</span>

<details id="bkmrk-pr%C3%A9sentation-des-blo"><summary></summary>

#### **<span style="text-decoration: underline;">Présentation des blocs spécifiques à la gestion des servomoteurs</span>[![image.png](https://innovation.iha.unistra.fr/uploads/images/gallery/2025-03/scaled-1680-/yODimage.png)](https://innovation.iha.unistra.fr/uploads/images/gallery/2025-03/yODimage.png)**


Dans mBlock, la gestion des servomoteurs se fait à l’aide d’un **bloc dédié** permettant de définir un angle précis entre 0° et 180°.

#### <span style="text-decoration: underline;">**Exercice 1 : Programmer un servomoteur en boucle**</span>

<span style="text-decoration: underline;">**Consigne** :</span> Programmer un **servomoteur 180°** pour qu'il effectue en boucle un mouvement de **0° à 180°** puis de **180° à 0°**, avec une pause de **2 secondes** entre chaque mouvement.

##### <span style="text-decoration: underline;">**Correction :**</span>

<details><summary></summary>

[![image.png](https://innovation.iha.unistra.fr/uploads/images/gallery/2026-02/scaled-1680-/xmtimage.png)](https://innovation.iha.unistra.fr/uploads/images/gallery/2026-02/xmtimage.png)

</details><span style="text-decoration: underline;">  
</span>

#### <span style="text-decoration: underline;">**Exercice 2 :**</span>

##### <span style="text-decoration: underline;">**Programmation d’un Mouvement Automatisé avec mBlock**</span>

Créer un programme permettant :  
✅ De **faire bouger le servomoteur progressivement** de 0° à 180° et inversement.  
✅ De **répéter** le mouvement avec une **boucle continue**.

##### <span style="text-decoration: underline;">**Correction :**</span>


<details><summary></summary>

[![image.png](https://innovation.iha.unistra.fr/uploads/images/gallery/2026-02/scaled-1680-/F4simage.png)](https://innovation.iha.unistra.fr/uploads/images/gallery/2026-02/F4simage.png)

</details></details>#### <span style="text-decoration: underline;">**3. Configuration et Programmation avec Arduino IDE :**</span>

<details id="bkmrk-exercice-1-%3A-program-1"><summary></summary>

#### <span style="text-decoration: underline;">**Exercice 1 : Programmer un servomoteur pour un mouvement en boucle**</span>

**Consigne** : Faire osciller un servomoteur de **0° à 180°** et inversement, avec une pause de **2 secondes** entre chaque mouvement.

#### <span style="text-decoration: underline;">**Etape 1 mouvement du servomoteur**</span>

Ecrire un programme qui fait en sorte de modifier l'angle de rotation de 0° a 180°

##### <span style="text-decoration: underline;">**Etape 2 mouvement en boucle** </span>

Modifier le programme afin de crée une boucle tout en laissant une attente de 2 seconde pendant chaque rotation.

##### <span style="text-decoration: underline;">**Correction : Code Arduino IDE :**</span>

<details><summary></summary>

```
#include <Servo.h>

Servo monServo; // Création de l'objet Servo

void setup() {
  monServo.attach(9); // Connexion du servomoteur sur la broche D9
}

void loop() {
  monServo.write(0);   // Position à 0°
  delay(2000);         // Pause de 2 secondes
  monServo.write(180); // Position à 180°
  delay(2000);         // Pause de 2 secondes
}

```

</details>
#### <span style="text-decoration: underline;">**Exercice 2 :** </span>

#### <span style="text-decoration: underline;"> **Programmation d’un Mouvement Automatisé avec Arduino IDE**</span>

Créer un programme permettant :  
✅ De **faire bouger progressivement** le servomoteur de **0° à 180°** et inversement.  
✅ D’utiliser une **boucle pour répéter** ce mouvement en continu.\*

##### <span style="text-decoration: underline;">**Etape 1 mouvement du servomoteur**</span>

Faire un programme permettant au servomoteur de faire une rotation de 0° a 180° et inversement.

##### <span style="text-decoration: underline;">**Etape 2 mouvement en boucle** </span>

Modifier le programme pour crée une boucle regroupant la rotation du servomoteur de 0° à 180° et inversement pour que le servomoteur effectue les rotations de manière répétitive.

##### <span style="text-decoration: underline;">**Correction :**</span>

<details><summary></summary>

```
#include <Servo.h>

Servo monServo;

void setup() {
  monServo.attach(9);
}

void loop() {
  for (int pos = 0; pos <= 180; pos++) { // De 0° à 180°
    monServo.write(pos);
    delay(15); // Ajuste la vitesse du mouvement
  }
  
  for (int pos = 180; pos >= 0; pos--) { // De 180° à 0°
    monServo.write(pos);
    delay(15);
  }
}

```

</details><div class="contain-inline-size rounded-md border-[0.5px] border-token-border-medium relative bg-token-sidebar-surface-primary" id="bkmrk--8"><div class="sticky top-9"><div class="absolute bottom-0 right-0 flex h-9 items-center pr-2"><div class="flex items-center rounded bg-token-sidebar-surface-primary px-2 font-sans text-xs text-token-text-secondary dark:bg-token-main-surface-secondary">  
</div></div></div><div class="overflow-y-auto p-4" dir="ltr">  
</div></div></details>#### <span style="text-decoration: underline;">**4. Discussion et Applications**</span>

##### <span style="text-decoration: underline;">**Applications pratiques**</span>

- 🤖 **Bras robotisé**
- 🗑️ **Poubelle connectée**
- 🤖 **Little Bot**

##### <span style="text-decoration: underline;">**Questions et suggestions d’amélioration**</span>

✅ Ajouter un **potentiomètre** pour contrôler l’angle du servomoteur.  
✅ Utiliser un **bouton poussoir** pour déclencher le mouvement.  
✅ Remplacer le **servomoteur 180°** par un **servomoteur à rotation continue**.

# Programmation d'un servomoteur RC 360°

### <span style="text-decoration: underline;">**Objectif :**</span>

Comprendre le fonctionnement des servomoteurs et apprendre à les programmer avec **mBlock** et **Arduino IDE**.

---

#### **1. Introduction aux Servomoteurs RC 360°**

##### Qu’est-ce qu’un servomoteur RC 360° ?

Un **servomoteur RC 360°** (ou « continu ») est un petit moteur qui **peut tourner en continu dans les deux sens** (comme une roue), contrairement aux servos classiques qui ne tournent que sur un angle limité (en général 180° maximum).

##### ⚙️ À quoi ça sert dans un robot comme le LittleBot ?

Dans le LittleBot, ces servos sont utilisés pour faire **tourner les roues** du robot. En envoyant des signaux différents, on peut :

- **Faire avancer** le robot (les deux roues tournent en avant),
- **Faire reculer** le robot (les deux roues tournent en arrière),
- **Faire tourner** (une roue avance, l’autre recule ou reste fixe).

#### **2. Configuration et Programmation avec mBlock**

##### Présentation des blocs spécifiques à la gestion des servomoteurs


Pour un servomoteur RC 360° on va utiliser le bloc ci-dessous que l'on peut trouver dans l'extensions "Servo360" ou ici "[servo.mext](https://innovation.iha.unistra.fr/attachments/54)" à télécharger et faire un glisser-déposer sur Mblock.

[![image.png](https://innovation.iha.unistra.fr/uploads/images/gallery/2025-04/scaled-1680-/Couimage.png)](https://innovation.iha.unistra.fr/uploads/images/gallery/2025-04/Couimage.png)

 Numéro de broche vitesse du servomoteur (dans un sens entre \[-100 et 0\[ et dans l'autre entre \]0 et 100\]). A 0 on est donc à l'arrêt


##### **Branchement d'un servomoteur à un Arduino Nano**

Un servomoteur possède **trois câbles** :

- **Noir ou Marron** → GND (Masse)
- **Rouge** → 5V (Alimentation)
- **Jaune ou Orange** → Signal (Entre les broches **2 et 13** du Nano)
- [![Capture d’écran 2025-03-21 142828.png](https://innovation.iha.unistra.fr/uploads/images/gallery/2025-03/scaled-1680-/capture-decran-2025-03-21-142828.png)](https://innovation.iha.unistra.fr/uploads/images/gallery/2025-03/capture-decran-2025-03-21-142828.png)


#### **Exercice sur Mblock**

<span style="text-decoration: underline;">**Consigne :**</span> Programmer un **servomoteur RC 360°** pour qu'il effectue en boucle un changement de **sens de rotation** à **vitesse maximale** et cela toute les **2 secondes**.

### **3. Configuration et Programmation avec Arduino IDE**

#### **Exercice sur Arduino IDE**

**<span style="text-decoration: underline;">Consigne :</span>** Programmer un **servomoteur 360** pour qu'il effectue en boucle un changement de **sens de rotation** à **vitesse maximale** et cela toute les **2 secondes**.

#### <span style="text-decoration: underline;">**Correction :**</span>

```
#include <Servo.h>

Servo monServo; // Création de l'objet Servo

void setup() {
  monServo.attach(9); // Connexion du servomoteur sur la broche D9
}

void loop() {
  monServo.writeMicroseconds(2000);   // Vitesse maximale dans un sens 
  delay(2000);         // Tourne pendant 2 secondes 
  monServo.writeMicroseconds(1000);   // Vitesse maximale dans l'autre sens 
  delay(2000);         // Tourne pendant 2 secondes
}

```


### **4. Discussion et Applications**

#### **Applications pratiques**

- 🤖 **Bras robotisé**
- 🗑️ **Poubelle connectée**
- 🤖 **Little Bot**

#### **Questions et suggestions d’amélioration**

✅ Ajouter un **potentiomètre** pour contrôler l’angle du servomoteur.  
✅ Utiliser un **bouton poussoir** pour déclencher le mouvement.  
✅ Remplacer le **servomoteur 180°** par un **servomoteur à rotation continue**.

# Qu'est ce qu'un capteur à ultrasons ?

<div class="translate-tooltip-mtz translator-hidden" id="bkmrk-translator"><div class="header">  
</div></div><span style="color: rgb(0, 0, 0);">![ori-module-de-detection-us-hc-sr04-20912.jpg](https://innovation.iha.unistra.fr/uploads/images/gallery/2023-09/scaled-1680-/ori-module-de-detection-us-hc-sr04-20912.jpg)HC-SR04 est un capteur à ultrasons qui est principalement utilisé pour la mesure de distance. En émettant des ondes ultrasonores et en mesurant le temps pris par ces ondes pour rebondir après avoir frappé un objet, le HC-SR04 peut déterminer avec précision la distance à laquelle cet objet se trouve. </span><span style="color: rgb(0, 0, 0);">De par son coût abordable et sa facilité d’intégration avec des plateformes telles qu’Arduino, le HC-SR04 est devenu un choix prisé parmi les amateurs de bricolage et les professionnels. </span>

### **<span style="text-decoration: underline;"><span style="color: rgb(0, 0, 0); text-decoration: underline;">Principe de fonctionnement</span></span>**

<span style="color: rgb(0, 0, 0);">Le fonctionnement d'un capteur à ultrason comme le HC-SR04 est assez simple. Il comporte deux éléments principaux : un émetteur ultrasonore et un récepteur ultrasonore. Voici les étapes clés du fonctionnement du capteur :</span>

1. <span style="color: rgb(0, 0, 0);">Lorsque le capteur est alimenté, l’émetteur envoie une série de 8 impulsions ultrasoniques de 10µs à une fréquence spécifique (généralement de 40 kHz).</span>
2. <span style="color: rgb(0, 0, 0);"><span style="color: rgb(0, 0, 0);">Lorsque une impulsion sonore atteint un objet, elle rebondit et est renvoyée vers le récepteur ultrasonore comme un écho.</span></span>
3. <span style="color: rgb(0, 0, 0);">Le capteur mesure le temps entre le moment où l’impulsion a été émise et celui où l’écho a été reçu.</span>
4. <span style="color: rgb(0, 0, 0);">En utilisant la vitesse connue du son dans l’air (environ 343 m/s ou 34,3 cm/µs) et la durée de l’écho mesurée, le capteur calcule la distance jusqu’à l’objet en utilisant la formule : distance = (durée de l’écho / 2) \* vitesse du son.</span>
5. <span style="color: rgb(0, 0, 0);">Le résultat est ensuite converti en une distance numérique et envoyé au Arduino via une sortie numérique</span>

![Principe_Ultrasons_1.jpg](https://innovation.iha.unistra.fr/uploads/images/gallery/2023-09/scaled-1680-/principe-ultrasons-1.jpg)

![sonar_signal.jpg](https://innovation.iha.unistra.fr/uploads/images/gallery/2023-09/scaled-1680-/sonar-signal.jpg)

### **<span style="text-decoration: underline;">Description du capteur HC-SR04</span>**

![Ultrason.JPG](https://innovation.iha.unistra.fr/uploads/images/gallery/2023-09/scaled-1680-/ultrason.JPG)

<table id="bkmrk-broche-description-v"><thead><tr><th>**Broche**</th><th>**Description**</th></tr></thead><tbody><tr><td>**VCC**</td><td>Il s’agit de la broche d’alimentation. Elle nécessite généralement une entrée de 5V Courant Continu, la rendant directement compatible avec des cartes comme Arduino.</td></tr><tr><td>**Trig (Déclenchement)**</td><td>Cette broche est utilisée pour initier le capteur à émettre une onde ultrasonore. En envoyant une impulsion haute d’au moins 10µs à cette broche, le HC-SR04 émettra une série de 8 impulsions d'ultrasons à 40 kHz.</td></tr><tr><td>**Echo**</td><td>Une fois l’onde ultrasonore émise et qu’elle rebondit après avoir frappé un objet, la broche Echo fournit une impulsion de sortie. La largeur de cette impulsion est proportionnelle à la distance de l’objet par rapport au capteur.  
En mesurant la durée de cette impulsion, Arduino peut déterminer la distance jusqu’à l’objet.</td></tr><tr><td>**GND (Masse)**</td><td>Cette broche est connectée à la masse du circuit.</td></tr></tbody></table>

### **<span style="text-decoration: underline;">Le câblage :</span>**

<span style="color: rgb(0, 0, 0);">Pour connecter le capteur HC-SR04 à une carte Arduino, suivez ces étapes :</span>

1. <span style="color: rgb(0, 0, 0);">Connectez la broche VCC du HC-SR04 à la broche 5V sur la carte arduino uno. Cela assure que le capteur reçoive la puissance nécessaire pour son fonctionnement.</span>
2. <span style="color: rgb(0, 0, 0);">Reliez la broche GND (Masse) du HC-SR04 à l’une des broches de masse (GND) d’Arduino. Cela établit une masse électrique commune entre le capteur et arduino.</span>
3. <span style="color: rgb(0, 0, 0);">Connectez la broche Trig du HC-SR04 à une broche numérique d’Arduino, par exemple, la broche D12. Cette broche est responsable de l’envoi d’un signal pour déclencher le capteur afin qu’il émette les ondes ultrasonores.</span>
4. <span style="color: rgb(0, 0, 0);">Reliez la broche Echo du HC-SR04 à une autre numérique sur l’Arduino, comme la broche D11. Cette broche détecte l’onde ultrasonore écho après réflexion sur un objet.</span>

[![utlra.JPG](https://innovation.iha.unistra.fr/uploads/images/gallery/2023-09/scaled-1680-/utlra.JPG)](https://innovation.iha.unistra.fr/uploads/images/gallery/2023-09/utlra.JPG)

### **<span style="text-decoration: underline;">Programmer un HC-SR04 sur mBlock</span>**

<details id="bkmrk-%21%21attention-pour-mbl"><summary></summary>

**<span style="color: rgb(224, 62, 45);">!!Attention pour Mblock ne pas oublier d'installer l'extension en tapant "ultrasons" dans la barre de recherche.</span>**

### <span style="color: rgb(0, 0, 0);">**<span style="text-decoration: underline;">Pour ajouter l'extension à mBlock </span>:**</span>

<details id="bkmrk-comment-rajouter-l%27e"><summary></summary>

### <span style="text-decoration: underline;">**Comment rajouter l'extension "Ultrasons HC-SR04"**</span>

pour rajouter l'extension nécessaire au bon fonctionnement d'un ultrason avec mBlock, il faut

cliquer sur le + en bas de toutes les catégories de blocs comme ci-dessous :

[![image.png](https://innovation.iha.unistra.fr/uploads/images/gallery/2026-02/scaled-1680-/TNMimage.png)](https://innovation.iha.unistra.fr/uploads/images/gallery/2026-02/TNMimage.png)

Puis dans la barre de recherche des extensions écrire "Ultrasons" vous tomberez donc sur l'extension "Ultrason HC-SR04".

[![image.png](https://innovation.iha.unistra.fr/uploads/images/gallery/2025-06/scaled-1680-/qYIimage.png)](https://innovation.iha.unistra.fr/uploads/images/gallery/2025-06/qYIimage.png)

</details>Description des nouveaux blocs à utiliser :

\- Ce bloc permet de d'indiquer à l'Arduino quelles broches l'on va utiliser pour le 'Trig' et pour l' 'Echo'

[![image.png](https://innovation.iha.unistra.fr/uploads/images/gallery/2025-07/scaled-1680-/cNwimage.png)](https://innovation.iha.unistra.fr/uploads/images/gallery/2025-07/cNwimage.png)

\- Ce bloc permet de calculer à quel distance en cm l'on est d'un potentiel obstacle.

[![image.png](https://innovation.iha.unistra.fr/uploads/images/gallery/2025-07/scaled-1680-/Jazimage.png)](https://innovation.iha.unistra.fr/uploads/images/gallery/2025-07/Jazimage.png)

\- Ce bloc contient la valeur calculer dans le bloc précédent

[![image.png](https://innovation.iha.unistra.fr/uploads/images/gallery/2025-07/scaled-1680-/3Swimage.png)](https://innovation.iha.unistra.fr/uploads/images/gallery/2025-07/3Swimage.png)

Attention à bien indiquer à coté de 'Trig' et de 'Echo' les broches sur lesquels vous êtes branchés. Si votre code ne marche pas vérifier bien cela d'abord.

\- Ce bloc permet d'écrire dans le port série

[![image.png](https://innovation.iha.unistra.fr/uploads/images/gallery/2025-07/scaled-1680-/KfQimage.png)](https://innovation.iha.unistra.fr/uploads/images/gallery/2025-07/KfQimage.png)

> C’est quoi un port série ?
> 
> Le port série, c’est un peu comme une voie de communication entre ton ordinateur et le robot.
> 
> Imagine que l’ordinateur et le robot discutent.  
> Le port série, c’est le fil (ou le tunnel) par lequel les messages passent, un caractère à la fois, dans un seul sens à la fois.
> 
> En langage simple :
> 
> - Quand tu programmes le robot avec mBlock, tu envoies le programme par le port série.
> - Tu peux aussi recevoir des messages venant du robot, comme :
>     
>     
>     - la distance détectée par un capteur,
>     - des valeurs de température,
>     - ou tout ce que tu lui demandes de t’envoyer.

Où ce trouve le port série ?

Allez dans 'Arduinoc', et il se trouve dans l'encadrée rouge

[![image.png](https://innovation.iha.unistra.fr/uploads/images/gallery/2025-07/scaled-1680-/rYMimage.png)](https://innovation.iha.unistra.fr/uploads/images/gallery/2025-07/rYMimage.png)

Avant de téléverser votre code dans l'Arduino nano, accéder au port série et décocher ses cases en allant dans 'Arduinoc' puis cliquer sur envoyer :

[![image.png](https://innovation.iha.unistra.fr/uploads/images/gallery/2025-07/scaled-1680-/bZwimage.png)](https://innovation.iha.unistra.fr/uploads/images/gallery/2025-07/bZwimage.png)

<p class="callout success">Chaque exercice est à faire valider par un animateur</p>


### <span style="text-decoration: underline;">**Exercice - Comprendre la détection de distance (capteur HC-SR04)**</span>

### **<span style="text-decoration: underline;">Objectif pédagogique</span>**

Apprendre à :

- utiliser un capteur à ultrasons,
- lire une distance,
- exploiter cette valeur dans une condition.

### <span style="text-decoration: underline;">**Consigne**</span>

1. Brancher le capteur HC-SR04 sur l’Arduino :
    
    
    - Trig → broche D9
    - Echo → broche D10
2. Écrire un programme qui :
    
    
    - mesure en continu la distance en centimètres,
    - affiche la distance sur le **port série**,

### <span style="text-decoration: underline;">**Questions pour guider les élèves**</span>

- Que représente la distance mesurée par le capteur ?
- Pourquoi utilise-t-on une boucle **pour toujours** ?
- À quoi sert le port série dans ce projet ?

### <span style="text-decoration: underline;">**Validation attendue**</span>

L’élève est capable d’expliquer :

- comment le capteur mesure une distance,
- comment une condition `si / sinon` fonctionne

**Voici un corrigé du code attendu :**

<details><summary></summary>

[![image.png](https://innovation.iha.unistra.fr/uploads/images/gallery/2026-02/scaled-1680-/8nmimage.png)](https://innovation.iha.unistra.fr/uploads/images/gallery/2026-02/8nmimage.png)

</details></details>### <span style="text-decoration: underline;">**Programmer un HC-SR04 sur Arduino IDE :**</span>

<details id="bkmrk-ce-code-permet-de-me"><summary></summary>

Ce code permet de mesurer une distance et de l'afficher sur le moniteur série du logiciel Arduino IDE.

```c++


// définition des numéros de broches 

const int trigPin = 12;

const int echoPin = 11; // définition des variables

long duration;

int distance;

void setup()

{

pinMode(trigPin, OUTPUT); // Définit le trigPin comme sortie 

pinMode(echoPin, INPUT); // Définit le echoPin comme entrée

Serial.begin(9600); // Commence la communication série

}

void loop()

{

// Efface le trigPin 

digitalWrite(trigPin, LOW);

delayMicroseconds(2); // Met le trigPin à l'état HIGH pendant 10 microsecondes 

digitalWrite(trigPin, HIGH);

delayMicroseconds(10);

digitalWrite(trigPin, LOW); // Lit le echoPin, renvoie le temps de trajet de l'onde sonore en microsecondes 

duration = pulseIn(echoPin, HIGH); // Calcul de la distance

distance = duration * 0.034 / 2; // La vitesse du son est d'environ 0.034 cm par microseconde 

Serial.print(“Distance: “); // Affiche la distance sur le moniteur série 

Serial.println(distance);
  
delay(2000);

}

```

</details>### **<span style="text-decoration: underline;">Sources :</span>**

[https://www.moussasoft.com/hc-sr04-capteur-ultrason-avec-arduino](https://www.moussasoft.com/hc-sr04-capteur-ultrason-avec-arduino)

[https://www.carnetdumaker.net/articles/mesurer-une-distance-avec-un-capteur-ultrason-hc-sr04-et-une-carte-arduino-genuino/](https://www.carnetdumaker.net/articles/mesurer-une-distance-avec-un-capteur-ultrason-hc-sr04-et-une-carte-arduino-genuino/)

# Batterie et Shield 18650 & Co

### Carte de charge et décharge

Les shields de charge et décharge des batteries 18650, Lithion-Ion, 3.7V permettent :

- INput : charge de la batterie via ports 
    - USB-C ou micro-USB
    - <span class="a-list-item">1.8A 5V (max 6.5V)</span>
- OUTput : décharge de la batterie (alimentation d'une carte électronique) via ports 
    - USB-C, USB-A
    - pins 5V (3A) / 3.3V (1A) dispos sur les bords de la carte
- <span class="a-list-item">Bouton noir SW1 :   
    </span>
    - <span class="a-list-item">"Vers l'intérieur de la carte " : Alimentation permanente `ALWAYS ON`</span>
    - <span class="a-list-item">"Vers l'extérieur de la carte" : Mise en veille automatique au bout de 40s `AUTO-OFF`. </span><span class="a-list-item">Consommation 3uA après la mise en veille.</span>
- <span class="a-list-item">Bouton blanc Power ON/OFF :</span>
    - <span class="a-list-item">Appuyer pour allumer `ON`</span>
    - <span class="a-list-item">Appuyer **2 fois** pour éteindre `OFF`</span>

<span class="a-list-item">On a une version simple accu "V3" et une double accu "V8" :</span>

1\. <span class="a-list-item">simple accu "V3"</span> :

- [https://fr.aliexpress.com/item/32853943437.html](https://fr.aliexpress.com/item/32853943437.html)

[![image.png](https://innovation.iha.unistra.fr/uploads/images/gallery/2025-04/scaled-1680-/PpTimage.png)](https://innovation.iha.unistra.fr/uploads/images/gallery/2025-04/PpTimage.png)

2\. <span class="a-list-item">double accu "V8"</span> :

- [https://fr.aliexpress.com/item/1005001285390889.html](https://fr.aliexpress.com/item/1005001285390889.html)
- [https://www.amazon.fr/dp/B0822Q4VS4](https://www.amazon.fr/dp/B0822Q4VS4)

[![e91eb2b3-4fb5-42af-90af-9592c66fd8de.__CR0,0,970,600_PT0_SX970_V1___.jpg](https://innovation.iha.unistra.fr/uploads/images/gallery/2025-04/scaled-1680-/e91eb2b3-4fb5-42af-90af-9592c66fd8de-cr00970600-pt0-sx970-v1.jpg)](https://innovation.iha.unistra.fr/uploads/images/gallery/2025-04/e91eb2b3-4fb5-42af-90af-9592c66fd8de-cr00970600-pt0-sx970-v1.jpg)

# Capteur de température et d'humidité (DHT22)

#### **Objectif :**

Comprendre le fonctionnement du capteur de température et d'humidité et apprendre à le programmer avec **mBlock** et **Arduino IDE**.

#### **1. Introduction du capteur DHT22**

##### Qu’est-ce qu’un capteur de température et humidité et comment il fonctionne?

Le capteur DHT22 est un dispositif utilisé pour mesurer la température et l'humidité de l'air. Il fonctionne grâce à deux composants principaux : un thermistor pour la mesure de la température et un capteur capacitif pour l'humidité.

1. **Température** : Le thermistor, qui change de résistance en fonction de la température, permet de mesurer celle-ci avec une précision d'environ ±0.5°C dans une plage de -40°C à 80°C.
2. **Humidité** : Le capteur capacitif d'humidité détecte les variations dans la capacité électrique causées par l'humidité dans l'air, offrant une précision d'environ ±2 à 5% pour une humidité relative comprise entre 0% et 100%.

Le DHT22 communique les données via une seule broche numérique (data). Après une courte initialisation, il envoie les informations sous forme de bits, codées dans un protocole spécifique. L'appareil peut être interrogé à des intervalles d'environ 2 secondes, car il a une période de rafraîchissement des données assez lente.

Ce capteur est populaire pour sa simplicité d'utilisation, notamment avec des microcontrôleurs comme Arduino ou Raspberry Pi, et est très utilisé dans des projets de domotique ou de surveillance de l'environnement.



#### **2. Câblage du DHT22 avec l'Arduino nano**

- VCC(+) - &gt; pin 5V.
- DAT(out) -&gt; pin 2 S.
- GND(-) -&gt; pin GND

[![9fTimage.png](https://innovation.iha.unistra.fr/uploads/images/gallery/2025-05/scaled-1680-/9ftimage.png)](https://innovation.iha.unistra.fr/uploads/images/gallery/2025-05/9ftimage.png)

#### **3. Configuration et Programmation avec mBlock**

Commencer par installer l'extension pour le capteur en cliquant sur ce bouton [![image.png](https://innovation.iha.unistra.fr/uploads/images/gallery/2024-09/scaled-1680-/cuLimage.png) ,](https://innovation.iha.unistra.fr/uploads/images/gallery/2024-09/cuLimage.png)puis taper dans la barre de recherche "DHT22" et l'ajouter.

[![image.png](https://innovation.iha.unistra.fr/uploads/images/gallery/2024-09/scaled-1680-/CoXimage.png)](https://innovation.iha.unistra.fr/uploads/images/gallery/2024-09/CoXimage.png)

Faire un temps de brainstorming sur la logique que devra avoir le code final. Puis laisser le groupe faire le code en les aidants si besoin.

[![image.png](https://innovation.iha.unistra.fr/uploads/images/gallery/2024-11/scaled-1680-/aw7image.png)](https://innovation.iha.unistra.fr/uploads/images/gallery/2024-11/aw7image.png)

Avant de téléverser le code n'oubliez pas de décocher ces 2 cases ci-dessous qui se situe dans le moniteur série.

[![image.png](https://innovation.iha.unistra.fr/uploads/images/gallery/2024-11/scaled-1680-/gLsimage.png)](https://innovation.iha.unistra.fr/uploads/images/gallery/2024-11/gLsimage.png)

#### **4. Configuration et Programmation avec Arduino IDE**

**------------- à remplir -------------**

# Qu'est ce qu'un ESP32



# Qu'est ce qu'un microcontrôleur ?



# Fonctionnement et programmation d'une LED RVB (ESP32)

## 🎯 Objectif

Faire changer la couleur d’une LED RGB (HW-479) contrôlée par une carte ESP32-WROOM-32E.  
Les élèves apprendront :

- Ce qu’est une LED RGB
- Comment connecter des composants électroniques
- Comment programmer avec Arduino IDE pour faire varier les couleurs de la LED RGB

## 🧰 Matériel

- 1 carte ESP32 DevKit (ESP32-WROOM-32E)
- 1 module LED RGB HW-479 (à cathode commune)
- 4 fils Dupont
- 1 câble USB

## 1. Définition simple

Une **diode électroluminescente**, appelée **LED** (Light Emitting Diode en anglais), est un **petit composant électronique** qui émet de la lumière quand on fait passer un courant électrique.

## 2. Comment fonctionne une LED ?

- Une LED est une **petite lampe** qui s’allume quand on fait passer de l’électricité dans un seul sens.
- À l’intérieur, il y a un **matériau spécial** qui transforme l’électricité en lumière.
- Quand les électrons (petites particules d’électricité) se déplacent dans ce matériau, ils **libèrent de l’énergie** sous forme de lumière.
- La couleur de la lumière dépend du type de matériau utilisé.

## 3. Avantages des LED

- Consommation d’énergie **très faible** comparée aux ampoules classiques.
- **Durée de vie très longue** (des milliers d’heures).
- Allumage instantané sans délai.
- Possibilité d’avoir différentes couleurs sans filtres (LED rouges, vertes, bleues, blanches, etc.).

## 4. Utilisations courantes

- Indicateurs lumineux sur les appareils électroniques (ex : témoin d’allumage).
- Éclairage décoratif et domestique.
- Écrans et panneaux lumineux.
- Dans la robotique et l’électronique pour signaler des états ou réaliser des animations.

## 4. Programmation

# Club Robotique - Codey Rocky



# Phase 1 - Découverte des Codey Rocky et de Mblock

####   


### **Objectif général :**

L'objectif de cette activité est d'initier les élèves à la robotique et à la programmation à travers l’utilisation du robot **Codey Rocky** et du logiciel **mBlock**. Ils apprendront à concevoir des algorithmes pour programmer le robot et effectuer différentes missions. À travers trois parcours progressifs, ils développeront des compétences en logique, en résolution de problèmes et en collaboration.

### **Compétences techniques :**

- **Programmation visuelle avec mBlock** : Les élèves apprendront à utiliser l'interface de blocs pour créer des programmes simples.
- **Manipulation du robot Codey Rocky** : Savoir piloter le robot en utilisant ses moteurs pour réaliser des tâches spécifiques comme se déplacer.
- **Débogage** : Les élèves seront amenés à tester leurs programmes et corriger les erreurs rencontrées. Cette compétence est cruciale pour améliorer leur compréhension de la logique algorithmique et de la robotique.
- **Algorithmes et logique** : Les élèves devront structurer leurs programmes de façon à exécuter les tâches demandées de manière optimale, en tenant compte des défis présentés dans chaque parcours.

### **Savoir-être :**

- **Persévérance** : Les élèves devront faire preuve de persévérance pour tester, corriger et améliorer leurs programmes. Ils apprendront que les échecs font partie du processus d'apprentissage.
- **Collaboration** : Les élèves seront amenés à travailler en groupes ou en binômes pour résoudre les problèmes ensemble, échanger des idées et trouver des solutions innovantes.
- **Patience** : La création d’un programme, sa mise en œuvre, et son ajustement nécessitent du temps et de la concentration. Les élèves devront apprendre à être patients pour surmonter les défis.
- **Créativité** : Ils auront l’opportunité de faire preuve de créativité, en particulier dans les tâches plus ouvertes, pour trouver des solutions innovantes et personnelles à des problèmes techniques.

### **Compétences transversales :**

- **Résolution de problèmes** : Chaque parcours présente des défis spécifiques. Les élèves devront analyser les problèmes rencontrés et ajuster leur programme pour les résoudre de manière autonome ou en groupe.
- **Pensée logique et algorithmique** : Organiser des instructions dans un ordre cohérent pour atteindre les objectifs fixés, en tenant compte des conditions et des événements du parcours.
- **Gestion du temps et organisation** : Les élèves devront apprendre à gérer leur temps pour tester et ajuster leurs programmes tout en respectant le cadre temporel de l'activité.
- **Autonomie et prise d’initiative** : Bien que le travail collaboratif soit encouragé, les élèves devront également montrer de l’autonomie dans la recherche de solutions et dans la mise en œuvre de leurs programmes.

### **Déroulement des parcours**

Les élèves devront accomplir trois parcours progressifs avec le robot **Codey Rocky**. Pour chaque parcours, ils devront suivre des étapes précises de programmation à l’aide du logiciel **mBlock** et adapter leur code en fonction des résultats observés sur le terrain. Voici comment organiser les trois parcours :

#### **Parcours 1 :** 

[![image.png](https://innovation.iha.unistra.fr/uploads/images/gallery/2024-09/scaled-1680-/o95image.png)](https://innovation.iha.unistra.fr/uploads/images/gallery/2024-09/o95image.png)

1. **Présentation du défi :** Expliquer aux élèves le but du premier parcours, aller du point vert jusqu'au point rouge.
2. **Objectif du parcours :** Les élèves ont pour but d'aller du point vert jusqu'au point rouge en utilisant que les blocs se trouvant dans les onglets "Action" et "Evénements".
3. **Étapes de la programmation :**
    - Créer une séquence de base pour faire avancer le robot.
    - Ajouter des commandes pour faire tourner le robot.
4. **Test et ajustements :** Laisser les élèves tester leur programme et apporter des corrections si nécessaire.
5. **Discussion de groupe :** Échanger sur les difficultés rencontrées et les solutions trouvées.
6. ****Correction :**** [![image.png](https://innovation.iha.unistra.fr/uploads/images/gallery/2024-09/scaled-1680-/yTqimage.png)](https://innovation.iha.unistra.fr/uploads/images/gallery/2024-09/yTqimage.png)

#### **Parcours 2 :**

[![image.png](https://innovation.iha.unistra.fr/uploads/images/gallery/2024-09/scaled-1680-/WKMimage.png)](https://innovation.iha.unistra.fr/uploads/images/gallery/2024-09/WKMimage.png)

1. **Présentation du défi :** Expliquer aux élèves le but du premier parcours, aller du point vert jusqu'au point rouge.
2. **Objectif du parcours :** Les élèves ont pour but d'aller du point vert jusqu'au point rouge en utilisant que les blocs se trouvant dans les onglets "Action" et "Evénements".
3. **Étapes de la programmation :**
    - Créer une séquence de base pour faire avancer le robot.
    - Ajouter des commandes pour faire tourner le robot.
4. **Test et ajustements :** Laisser les élèves tester leur programme et apporter des corrections si nécessaire.
5. **Bilan collectif :** Échanger sur les difficultés rencontrées et les solutions trouvées.
6. ****Correction :****[![image.png](https://innovation.iha.unistra.fr/uploads/images/gallery/2024-09/scaled-1680-/wSyimage.png)](https://innovation.iha.unistra.fr/uploads/images/gallery/2024-09/wSyimage.png)

#### **Parcours 3 :**

[![image.png](https://innovation.iha.unistra.fr/uploads/images/gallery/2024-09/scaled-1680-/vQVimage.png)](https://innovation.iha.unistra.fr/uploads/images/gallery/2024-09/vQVimage.png)

1. **Présentation du défi :** Expliquer aux élèves le but du premier parcours, aller du point vert jusqu'au point rouge..
2. **Objectif du parcours :** Les élèves ont pour but d'aller du point vert jusqu'au point rouge en utilisant que les blocs se trouvant dans les onglets "Action" et "Evénements".
3. **Étapes de la programmation :**
    - Créer une séquence de base pour faire avancer le robot.
    - Ajouter des commandes pour faire tourner le robot.
4. **Test et ajustements :** Laisser les élèves tester leur programme et apporter des corrections si nécessaire.
5. **Présentation finale :** Échanger sur les difficultés rencontrées et les solutions trouvées.
6. ****Correction :**** [![image.png](https://innovation.iha.unistra.fr/uploads/images/gallery/2024-09/scaled-1680-/J16image.png)](https://innovation.iha.unistra.fr/uploads/images/gallery/2024-09/J16image.png)

### **Conclusion et retour d'expérience**

À la fin de l'activité, chaque groupe fera un retour sur son expérience :

- Quelles étaient les difficultés rencontrées ?
- Quelles solutions ont été trouvées ?
- Quelles compétences ont été développées ?  
    L’enseignant pourra également faire une synthèse des compétences acquises et des progrès réalisés.

# Phase 2 - Approfondissement des fonctionnalités du Codey Rocky

###   


#### **Objectif général :**

L'objectif de cette activité est d'initier les élèves à la robotique et à la programmation à travers l’utilisation du robot **Codey Rocky** et du logiciel **mBlock**. Ils apprendront à concevoir des algorithmes pour programmer le robot et effectuer différentes missions. À travers deux parcours progressifs, ils développeront des compétences en logique, en résolution de problèmes et en collaboration.

### **Compétences techniques :**

- **Programmation visuelle avec mBlock** : Les élèves apprendront à utiliser l'interface de blocs pour créer des programmes simples, incluant des boucles de répétition et l’utilisation des capteurs du robot.
- **Manipulation du robot Codey Rocky** : Savoir piloter le robot en utilisant ses moteurs pour réaliser des tâches spécifiques comme se déplacer, détecter des obstacles ou effectuer des boucles de mouvement.
- **Débogage** : Les élèves seront amenés à tester leurs programmes et corriger les erreurs rencontrées. Cette compétence est essentielle pour améliorer leur compréhension de la logique algorithmique et de la robotique.
- **Algorithmes et logique** : Les élèves devront structurer leurs programmes de manière optimale en intégrant des boucles de répétition ou en répondant à des conditions basées sur les capteurs.

### **Savoir-être :**

- **Persévérance** : Les élèves devront faire preuve de persévérance pour tester, corriger et améliorer leurs programmes. Ils apprendront que les échecs font partie du processus d'apprentissage.
- **Collaboration** : Travailler en binômes ou en groupe pour résoudre les problèmes ensemble, partager des idées et collaborer pour trouver des solutions.
- **Patience** : Apprendre à prendre le temps d’analyser les résultats, ajuster les paramètres et modifier les programmes en conséquence.
- **Créativité** : Les élèves auront l’opportunité d’utiliser leurs idées pour résoudre les défis proposés de manière personnelle et originale.

### **Compétences transversales :**

- **Résolution de problèmes** : Chaque parcours présente des défis spécifiques. Les élèves devront analyser les problèmes rencontrés et ajuster leur programme pour les résoudre de manière autonome ou en groupe.
- **Pensée logique et algorithmique** : Organiser des instructions dans un ordre cohérent et adapté aux objectifs fixés, notamment en utilisant des boucles de répétition et des conditions liées aux capteurs.
- **Gestion du temps et organisation** : Les élèves devront gérer leur temps pour tester, ajuster et valider leurs programmes tout en respectant les délais de l’activité.
- **Autonomie et prise d'initiative** : Bien que le travail collaboratif soit encouragé, les élèves devront également faire preuve d’autonomie pour trouver des solutions et tester leurs propres idées de programmation.

### **Déroulement des parcours**

Les élèves réaliseront deux parcours en utilisant le robot **Codey Rocky**. Pour chaque parcours, ils devront suivre des étapes précises de programmation à l’aide du logiciel **mBlock**, puis ajuster leur code en fonction des résultats observés.

#### **Parcours 1 : Utilisation d’une boucle de répétition**

[![image.png](https://innovation.iha.unistra.fr/uploads/images/gallery/2024-09/scaled-1680-/cdEimage.png)](https://innovation.iha.unistra.fr/uploads/images/gallery/2024-09/cdEimage.png)

1. **Présentation du défi :** Expliquer aux élèves le but du premier parcours, qui consiste à programmer Codey Rocky pour effectuer un trajet spécifique en boucle, ici une boucle répétitives de 3.
2. **Objectif du parcours :** Utiliser une **boucle de répétition** pour faire en sorte que le robot répète une séquence de mouvements de manière continue. Le nombre de blocs maximum dans ce programme est de 5.
3. **Étapes de la programmation :**
    
    
    - Créer une séquence de base pour faire avancer le robot et tourner à différents points.
    - Intégrer une boucle de répétition pour que le robot répète cette séquence plusieurs fois.
4. **Test et ajustements :** Laisser les élèves tester leur programme et ajuster les paramètres si nécessaire pour garantir que le robot complète le parcours sans erreur.
5. **Discussion de groupe :** Échanger sur les difficultés rencontrées et les solutions trouvées. Comparer les différentes manières dont les élèves ont utilisé les boucles pour optimiser leurs programmes.\*
6. ****Correction :**** [![image.png](https://innovation.iha.unistra.fr/uploads/images/gallery/2024-09/scaled-1680-/4oKimage.png)](https://innovation.iha.unistra.fr/uploads/images/gallery/2024-09/4oKimage.png)

#### **Parcours 2 : Utilisation du capteur de détection d’obstacles**

[![image.png](https://innovation.iha.unistra.fr/uploads/images/gallery/2024-09/scaled-1680-/OFLimage.png)](https://innovation.iha.unistra.fr/uploads/images/gallery/2024-09/OFLimage.png)

1. **Présentation du défi :** Expliquer aux élèves que le second parcours consiste à programmer le robot pour se déplacer en détectant et en évitant des obstacles grâce à son capteur de distance.
2. **Objectif du parcours :** Utiliser le **capteur de détection d’obstacles** pour permettre à Codey Rocky de réagir à son environnement en modifiant son comportement lorsqu’il rencontre un obstacle.
3. **Étapes de la programmation :**
    
    
    - Créer une séquence de base pour faire avancer le robot.
    - Intégrer le capteur de distance pour détecter les obstacles et faire en sorte que le robot s’arrête lorsqu’il en rencontre un.
    - Utiliser des blocs de conditions (« si... alors... ») pour que le robot prenne des décisions en fonction de ce qu’il détecte.
4. **Test et ajustements :** Permettre aux élèves de tester leur programme sur un parcours avec des obstacles. Ils devront observer comment le robot réagit et ajuster les conditions et distances de détection si nécessaire.
5. **Bilan collectif :** Faire un retour en groupe sur les difficultés rencontrées, notamment sur l’utilisation des capteurs, et discuter des solutions trouvées pour que le robot puisse naviguer correctement dans un environnement rempli d’obstacles.
6. ****Correction :**** [![image.png](https://innovation.iha.unistra.fr/uploads/images/gallery/2024-09/scaled-1680-/fifimage.png)](https://innovation.iha.unistra.fr/uploads/images/gallery/2024-09/fifimage.png)

### **Conclusion et retour d’expérience**

À la fin de l'activité, chaque groupe partagera son expérience avec la classe :

- Quelles difficultés ont-ils rencontrées ?
- Quelles solutions ont été mises en place ?
- Quelles compétences ont-ils développées (persévérance, logique, collaboration) ?

# Phase 3 - Suivi de ligne avec Codey

###   


#### **Objectif général :**

Dans cette phase, les élèves vont approfondir leurs compétences en programmation et robotique en apprenant à créer un **suiveur de ligne** avec le robot **Codey Rocky**. Ils vont programmer deux types de suivi de ligne : un suivi basique basé sur des conditions simples, et un suivi fluide, qui optimise les mouvements du robot pour un déplacement plus souple.

### **Compétences techniques :**

- **Utilisation des capteurs de lumière** : Les élèves apprendront à utiliser les capteurs de détection de couleur du robot pour différencier les surfaces noires et blanches.
- **Programmation conditionnelle** : Ils utiliseront des blocs de conditions (« si... alors... ») pour réagir à la détection de couleurs et ajuster les mouvements du robot en conséquence.
- **Optimisation du mouvement** : Pour le second parcours, les élèves découvriront comment améliorer la fluidité des déplacements du robot en ajustant la sensibilité des capteurs et la vitesse des roues.
- **Débogage et ajustement de paramètres** : Les élèves devront tester, corriger et ajuster leurs programmes pour que le robot suive la ligne de manière efficace, qu’il s’agisse d’un suivi de ligne basique ou fluide.

### **Compétences transversales :**

- **Résolution de problèmes** : Les élèves devront ajuster leurs algorithmes et leur logique en fonction des résultats obtenus lors des tests.
- **Précision et ajustement des paramètres** : Pour le parcours fluide, ils apprendront à affiner les réglages de vitesse et la sensibilité des capteurs pour obtenir un comportement plus naturel et efficace.
- **Gestion du temps** : Organiser leur temps pour concevoir, tester, ajuster et valider leur programme dans les délais impartis.
- **Esprit d’équipe** : Travailler en binôme ou en groupe pour résoudre les défis de suivi de ligne, partager des idées et améliorer les solutions ensemble.

### **Déroulement des parcours**

Les élèves réaliseront deux parcours distincts avec des niveaux de difficulté croissants pour programmer Codey Rocky à suivre une ligne tracée au sol.

#### **Parcours 1 : Suiveur de ligne basique**

1. **Présentation du défi :** Le robot doit suivre une ligne en alternant les actions des roues en fonction de la couleur détectée (noir ou blanc).
2. **Objectif du parcours :**
    
    
    - Si le capteur de gauche détecte la couleur noire, seule la roue gauche s'active pour tourner vers la droite.
    - Si le capteur de droite détecte la couleur blanche, seule la roue droite s'active pour tourner vers la gauche.
3. **Étapes de la programmation :**
    
    
    - Utiliser les **blocs conditionnels** pour définir les actions des roues selon la couleur détectée par les capteurs de Codey Rocky.
    - Assigner les actions des roues en fonction de la couleur noire pour tourner à droite et de la couleur blanche pour tourner à gauche.
4. **Test et ajustements :**
    
    
    - Laisser les élèves tester leur programme sur une piste simple avec une ligne noire sur fond blanc.
    - Ils ajusteront les vitesses des roues et les conditions si le robot dévie ou ne suit pas correctement la ligne.
5. **Discussion de groupe :** Échanger sur les stratégies utilisées pour améliorer le suivi de la ligne et résoudre les problèmes de déviation ou de perte de la ligne.
6. ****Correction :**** [![image.png](https://innovation.iha.unistra.fr/uploads/images/gallery/2024-09/scaled-1680-/IEximage.png)](https://innovation.iha.unistra.fr/uploads/images/gallery/2024-09/IEximage.png)

---

#### **Parcours 2 : Suivi de ligne fluide**

1. **Présentation du défi :** Cette fois-ci, les élèves doivent programmer le robot pour qu'il suive la ligne de manière plus fluide, avec des virages progressifs et sans arrêts brusques.
2. **Objectif du parcours :**
    
    
    - Utiliser les capteurs pour ajuster progressivement la vitesse des roues, afin de maintenir le robot centré sur la ligne et éviter des mouvements saccadés.
3. **Étapes de la programmation :**
    
    
    - Utiliser les capteurs de lumière pour détecter la position du robot par rapport à la ligne.
    - Ajuster la **vitesse des roues** de façon continue (par exemple, faire ralentir une roue au lieu de l'arrêter complètement).
    - Éviter les changements de direction trop brusques en ajustant les conditions de manière plus douce et progressive.
4. **Test et ajustements :**
    
    
    - Les élèves testeront le robot sur une piste avec des courbes plus complexes.
    - Ils ajusteront la vitesse des roues en fonction des courbes et de la réactivité des capteurs pour rendre les mouvements plus fluides.
    - Les élèves devront tester plusieurs configurations pour atteindre un suivi fluide.
5. **Bilan collectif :**
    
    
    - Comparer les différences entre les deux méthodes de suivi (basique vs fluide).
    - Discuter des réglages qui ont permis d'améliorer la fluidité du robot et de l'impact des ajustements sur la vitesse et la précision des mouvements.
6. ******Correction :******[![image.png](https://innovation.iha.unistra.fr/uploads/images/gallery/2024-09/scaled-1680-/29iimage.png)](https://innovation.iha.unistra.fr/uploads/images/gallery/2024-09/29iimage.png)

---

### **Conclusion et retour d’expérience**

À la fin de l’activité, chaque groupe pourra partager ses observations :

- Quelles étaient les principales différences entre le suivi de ligne basique et fluide ?
- Quels ajustements étaient nécessaires pour améliorer la précision et la fluidité ?
- Quelles compétences techniques et transversales ont été développées ?

# Club Robotique - LittleBot



# Description du projet

#### <span style="text-decoration: underline;">**Introduction**</span>

<span style="color: rgb(0, 0, 0);">Pour ce cycle, nous allons créer un robot mobile très simple appelé LittleBot.</span>

<span style="color: rgb(0, 0, 0);">[![maxresdefault.jpg](https://innovation.iha.unistra.fr/uploads/images/gallery/2023-08/scaled-1680-/maxresdefault.jpg)](https://innovation.iha.unistra.fr/uploads/images/gallery/2023-08/maxresdefault.jpg)</span>

#### <span style="text-decoration: underline;">**Description des compétences visées :** </span>

##### **Compétences techniques et mécaniques**

- Conception : adapter et améliorer le modèle 3D du robot
- Assemblage de composants : apprendre à manipuler et assembler les différentes parties (châssis, moteur, composants électroniques, etc.)
- Choix des matériaux : identifier les matériaux adaptés au projet

##### **Compétences en électronique**

- Découverte et câblage de capteurs : utiliser un capteur ultrasons pour détecter une présence.
- Contrôle de moteurs : apprendre à utiliser des moteurs pour le déplacement du robot.
- Schémas électriques : savoir réaliser un schéma de câblage et connecter les composants sur une carte Arduino.

##### **Compétences en programmation**

- Programmation d'un microcontrôleur Arduino : écrire un code qui gère les capteurs, les délais, et l'action du moteur.
- Logique conditionnelle : comprendre comment programmer des conditions simples.
- Optimisation du fonctionnement : ajuster les temps de réponse, durée de déplacement, détection d'obstacle etc.

##### **Compétences transversales**

- - Gestion de projet : planifier les étapes de réalisation, répartir les tâches, respecter les délais.
    - Résolution de problèmes : savoir réagir face aux imprévus techniques ou fonctionnels.
    - Travail en équipe : collaborer efficacement si le projet est collectif.

#### <span style="text-decoration: underline;">**Description du déroulé des séances:**</span>

~9 séances :

- Introduction du projet (brainstorming)
- ~3 séances sur TinkerCAD et sur l'impression 3D (modification de certaines pièces du Little Bot)
- ~1 séance sur l'actionneur : servomoteur RC 360°(déplacement)
- ~1 séance sur le capteur : ultrason (distance)
- ~1 séance sur le couplage capteur moteur
- ~1 séance sur l'assemblage du LittleBot
- ~2 séances sur la programmation du LittleBot

<div class="translate-tooltip-mtz translator-hidden" id="bkmrk-translator"></div>#### **Matériel**

Projet inspiré de : [https://www.thingiverse.com/thing:2417739](https://www.thingiverse.com/thing:2417739)

- 1 x Arduino Nano ou compatible ([seeeduino](https://www.lextronic.fr/carte-seeeduino-nano-102010268-59340.html), funduino,...) : ~10€
- 1 x câble USB C : ~1€
- 1 x [Sensor Shield](https://www.amazon.fr/Expansion-sensor-Shield-compatible-Arduino/dp/B072FCNF54/ref=sr_1_5?__mk_fr_FR=%C3%85M%C3%85%C5%BD%C3%95%C3%91&crid=EYZL0IOYS08U&keywords=expansion+arduino+nano&qid=1687874510&sprefix=epansion+arduino+nano%2Caps%2C157&sr=8-5) pour Arduino Nano : ~3€
- 2 x servomoteur à rotation 360° ([DM-S0090D-R 9g/0.08s/1.6kg.cm](https://fr.aliexpress.com/item/32657260546.html)) : ~2€
- 1 x Module ultrason ([HC-SR04](https://www.amazon.fr/gp/product/B078S45WTG/)) : ~2€
- 2 x élastique pour les roues
- 1 x porte pile 4xaa : ~2€
- Une imprimante 3D pour imprimer les pièces du robot (fichier disponible à la prochaine page)(~5€ de filament) :

# Brainstorming : Imaginer notre robot de A à Z

Avant toute construction ou programmation, une séance est consacrée à un **brainstorming collectif**. L’objectif est de **faire émerger les idées** des enfants/jeunes sur les besoins, les fonctions, les matériaux et les étapes nécessaires à la réalisation du robot.

**Déroulé de la séance :**

- **Introduction** : Je pose une question simple mais ouverte, par exemple :  
    *"Si on devait construire un robot de A à Z, qu’est-ce qu’il faudrait prévoir ?"*
- **Réflexion individuelle** : Chacun note ses idées sur un post-it ou dans son cahier.
- **Mise en commun au tableau** : Les idées sont regroupées en grandes catégories (alimentation, capteurs, structure, mouvement, design, programmation, etc.)
- **Discussion et priorisation** : On débat de la faisabilité, on regroupe les idées similaires.

**Tableau regroupant les idées après débat :**

[![image.png](https://innovation.iha.unistra.fr/uploads/images/gallery/2025-06/scaled-1680-/image.png)](https://innovation.iha.unistra.fr/uploads/images/gallery/2025-06/image.png)

**Objectifs pédagogiques :**

- Encourager l’expression et l’écoute active
- Travailler en équipe
- Introduire les notions de conception et de prototypage

# Modification du châssis du LittleBot et Impression 3D

Le LittleBot dispose déjà de ses fichiers STL, comprenant la tête, la base, deux types de roues, ainsi qu’une demi-sphère permettant de le stabiliser. Toutefois, un problème a été identifié sur le fichier correspondant à la base, que nous allons corriger aujourd’hui.

#### <span style="text-decoration: underline;">**Problème rencontré**</span>

La base du LittleBot a pour fonction de fixer les servomoteurs, de maintenir la batterie en place et de permettre l'installation de la carte Arduino Nano. Cependant, dans le fichier actuel, les trous de fixation du shield pour Arduino Nano ne sont pas positionnés correctement. C’est pourquoi nous allons modifier ce fichier.

#### <span style="text-decoration: underline;">**Objectif**</span>

L’objectif de cette séance est de corriger le positionnement des trous de fixation dans le fichier STL de la base du LittleBot.

#### <span style="text-decoration: underline;">**Ressources disponibles**</span>

Vous pouvez retrouver l’ensemble des fichiers STL du LittleBot [ici](https://www.thingiverse.com/thing:2417739) ou dans les fichiers en pièce jointe.

#### <span style="text-decoration: underline;">**Modification du Fichier :**</span>

Avant de commencer la modification, je vous invite à consulter :

- Cette [page](https://innovation.iha.unistra.fr/books/2-fablab-formation-machines-logiciels/page/initiation-3d-tinkercad) expliquant comment utiliser Tinkercad pour modifier un fichier 3D
- Cette [page](https://innovation.iha.unistra.fr/books/2-fablab-formation-machines-logiciels/page/creation-dune-classe-tinkercad) expliquant comment créer une classe sur Tinkercad (utile pour le travail en groupe ou en classe).

#### <span style="text-decoration: underline;">**Étape 1 : Préparation de l’environnement**</span>

Une fois la classe créée sur Tinkercad , avec le fichier de référence correctement chargé, et que tous les élèves sont connectés, nous pouvons passer à la phase de modification.

> Comment créer une classe sur tinkercad :
> 
> https://innovation.iha.unistra.fr/books/2-fablab-formation-machines-logiciels/page/creation-dune-classe-tinkercad

Sur l’interface principale de Tinkercad :

1. Tout d'abord importer le fichier nommée "Base" en cliquant sur importer puis en le cherchant dans l'explorateur de fichier. [![image.png](https://innovation.iha.unistra.fr/uploads/images/gallery/2025-04/scaled-1680-/uJNimage.png)](https://innovation.iha.unistra.fr/uploads/images/gallery/2025-04/uJNimage.png)
    
    [![image.png](https://innovation.iha.unistra.fr/uploads/images/gallery/2025-04/scaled-1680-/Ckkimage.png)](https://innovation.iha.unistra.fr/uploads/images/gallery/2025-04/Ckkimage.png)
2. Dès que votre fichier est importer regardez dans la barre de recherche située à droite de l’écran en cliquant sur la loupe.[![image.png](https://innovation.iha.unistra.fr/uploads/images/gallery/2025-04/scaled-1680-/8VWimage.png)](https://innovation.iha.unistra.fr/uploads/images/gallery/2025-04/8VWimage.png)
3. Tapez le mot **"shield"** dans le champ de recherche.
4. Sélectionnez **le troisième élément** proposé dans la liste (il s’agit du modèle de shield compatible avec l’Arduino Nano).

[ ](https://innovation.iha.unistra.fr/uploads/images/gallery/2025-04/8VWimage.png)[![image.png](https://innovation.iha.unistra.fr/uploads/images/gallery/2025-04/scaled-1680-/apkimage.png)](https://innovation.iha.unistra.fr/uploads/images/gallery/2025-04/apkimage.png)

Glisser le sur votre forme comme sur l'image ci-dessous.

[![image.png](https://innovation.iha.unistra.fr/uploads/images/gallery/2025-04/scaled-1680-/VE6image.png)](https://innovation.iha.unistra.fr/uploads/images/gallery/2025-04/VE6image.png)

#### <span style="text-decoration: underline;">**Etape 2 : Ajustement du Modèle 3D**</span>

Positionnez le de manière à ce que le trou en haut à gauche du shield soit parfaitement centré sur celui de la base.

[![image.png](https://innovation.iha.unistra.fr/uploads/images/gallery/2025-04/scaled-1680-/9Fpimage.png)](https://innovation.iha.unistra.fr/uploads/images/gallery/2025-04/9Fpimage.png)

Faire un cylindre de 3mm x 1.5mm x 1.5mm.

[![image.png](https://innovation.iha.unistra.fr/uploads/images/gallery/2025-04/scaled-1680-/73vimage.png)](https://innovation.iha.unistra.fr/uploads/images/gallery/2025-04/73vimage.png)

Le mettre en mode perçage [![image.png](https://innovation.iha.unistra.fr/uploads/images/gallery/2025-04/scaled-1680-/we6image.png)](https://innovation.iha.unistra.fr/uploads/images/gallery/2025-04/we6image.png)

Puis le placer dans le trou en haut à droite du shield et l'enfoncer de 3mm comme ci-dessous.

[![image.png](https://innovation.iha.unistra.fr/uploads/images/gallery/2025-04/scaled-1680-/aKSimage.png)](https://innovation.iha.unistra.fr/uploads/images/gallery/2025-04/aKSimage.png)

Sélectionner le cylindre et la base puis les regrouper avec ce bouton [![image.png](https://innovation.iha.unistra.fr/uploads/images/gallery/2025-04/scaled-1680-/lUmimage.png)](https://innovation.iha.unistra.fr/uploads/images/gallery/2025-04/lUmimage.png) .

Pour la dernière étape d'ajustement, il faut percer le bas du châssis afin que le shield puisse bien se positionner.

Créer un cube de 7mm x 3mm x 6 mm.

[![image.png](https://innovation.iha.unistra.fr/uploads/images/gallery/2025-04/scaled-1680-/nDyimage.png)](https://innovation.iha.unistra.fr/uploads/images/gallery/2025-04/nDyimage.png)

Le placer le à 14 mm de hauteur par rapport au sol.

[![image.png](https://innovation.iha.unistra.fr/uploads/images/gallery/2025-04/scaled-1680-/c9mimage.png)](https://innovation.iha.unistra.fr/uploads/images/gallery/2025-04/c9mimage.png)

Coller votre cube à votre base comme sur l'image ci-dessous.

[![image.png](https://innovation.iha.unistra.fr/uploads/images/gallery/2025-04/scaled-1680-/4nZimage.png)](https://innovation.iha.unistra.fr/uploads/images/gallery/2025-04/4nZimage.png)

Et le rentrer de manière à ce que vous ne voyez plus la face de la base.

[![k9oimage.png](https://innovation.iha.unistra.fr/uploads/images/gallery/2025-04/scaled-1680-/0Pdk9oimage.png)](https://innovation.iha.unistra.fr/uploads/images/gallery/2025-04/0Pdk9oimage.png)

Mettre le cube en mode **Perçage** [![image.png](https://innovation.iha.unistra.fr/uploads/images/gallery/2025-04/scaled-1680-/3Kqimage.png)](https://innovation.iha.unistra.fr/uploads/images/gallery/2025-04/3Kqimage.png)et le **Regrouper** [![image.png](https://innovation.iha.unistra.fr/uploads/images/gallery/2025-04/scaled-1680-/kRyimage.png)](https://innovation.iha.unistra.fr/uploads/images/gallery/2025-04/kRyimage.png)avec la base.

[![image.png](https://innovation.iha.unistra.fr/uploads/images/gallery/2025-04/scaled-1680-/Ykoimage.png)](https://innovation.iha.unistra.fr/uploads/images/gallery/2025-04/Ykoimage.png)

Quand vous avez fini la modélisation vous pouvez supprimer le shield.

[![image.png](https://innovation.iha.unistra.fr/uploads/images/gallery/2025-04/scaled-1680-/2S6image.png)](https://innovation.iha.unistra.fr/uploads/images/gallery/2025-04/2S6image.png)

#### <span style="text-decoration: underline;">**Etape 3 : Préparation à l'exportation**</span>

Exporter la pièce en STL.

[![image.png](https://innovation.iha.unistra.fr/uploads/images/gallery/2025-04/scaled-1680-/RcGimage.png)](https://innovation.iha.unistra.fr/uploads/images/gallery/2025-04/RcGimage.png)

[![image.png](https://innovation.iha.unistra.fr/uploads/images/gallery/2025-04/scaled-1680-/YBCimage.png)](https://innovation.iha.unistra.fr/uploads/images/gallery/2025-04/YBCimage.png)

#### <span style="text-decoration: underline;">**Impression 3D :**</span>

Comme nous avons maintenant exporté notre pièce en STL qu'il faut l'imprimer, je vous invite donc à consulter cette [page](https://innovation.iha.unistra.fr/books/2-fablab-formation-machines-logiciels/page/creality-slicer-cura-slicer) qui explique comment utiliser Cura (Slicer) ou cette [page](https://innovation.iha.unistra.fr/books/2-fablab-formation-machines-logiciels/page/tutoriel-complet-imprimantes-3d-bambu-lab-a1-mini-a1-x1-carbon) qui explique comment utiliser BambuStudio (Slicer).

# Fonctionnement et programmation des composants

#### **1. Introduction à l'Arduino Nano** 

#### Qu'est-ce que l'Arduino ?

[https://innovation.iha.unistra.fr/books/robotique-educative/page/quest-ce-que-larduino](https://innovation.iha.unistra.fr/books/robotique-educative/page/quest-ce-que-larduino)

#### **2. Fonctionnement et programmation d'un servomoteur RC 360°**

Comment fonctionne le servomoteur RC 360° ? Consulter cette [page.](https://innovation.iha.unistra.fr/books/robotique-educative/page/quest-ce-quun-servo-moteur)

Ensuite, consultez cette [page](https://innovation.iha.unistra.fr/books/robotique-educative/page/programmation-dun-servomoteur) pour apprendre à programmer le servomoteur RC 360°.

---

#### **3. Capteur à ultrasons HC-SR04** 

Comment fonctionne le capteur à ultrasons ? Consulter cette [page](https://innovation.iha.unistra.fr/books/robotique-educative/page/quest-ce-quun-capteur-a-ultrasons)

#### **4. Programmation d'un capteur à ultrasons HC-SR04 avec un servomoteur RC 360°**

Vous avez vu comment programmer un servomoteur RC 360° et un capteur ultrasons individuellement. Maintenant, vous apprendrez à les utiliser en même temps. (voir partie "Programmation sur Mblock"

#### **Programmation sur Mblock**

#### **Exercice 1 : Changer le sens d'un servomoteur 360 grâce au capteur ultrasons**

<span style="text-decoration: underline;">**Consigne :**</span>

Programmez votre carte Arduino pour que le servomoteur réagisse en fonction de la distance mesurée par le capteur à ultrasons :

- Si la distance mesurée est **supérieure à 10 cm**, le servomoteur doit tourner dans un sens à la vitesse maximale.
- Si la distance mesurée est **inférieure ou égale à 10 cm**, le servomoteur tourner dans l'autre sens à la vitesse maximale.

#### <span style="text-decoration: underline;">**Correction :**</span>

[![image.png](https://innovation.iha.unistra.fr/uploads/images/gallery/2025-04/scaled-1680-/Ktqimage.png)](https://innovation.iha.unistra.fr/uploads/images/gallery/2025-04/Ktqimage.png)

#### **Programmation sur Arduino IDE**

#### **Exercice 2 : Changer le sens d'un servomoteur 360 grâce au capteur ultrasons**

<span style="text-decoration: underline;">**Consigne :**</span>

Programmez votre carte Arduino pour que le servomoteur réagisse en fonction de la distance mesurée par le capteur à ultrasons :

- Si la distance mesurée est **supérieure à 10 cm**, le servomoteur doit tourner dans un sens à la vitesse maximale.
- Si la distance mesurée est **inférieure ou égale à 10 cm**, le servomoteur tourner dans l'autre sens à la vitesse maximale.

#### <span style="text-decoration: underline;">**Correction :**</span>

```
#include <Servo.h>

// Définir les broches du capteur HC-SR04
const int trigPin = 9;
const int echoPin = 10;

// Définir la broche du servomoteur
const int servoPin = 6;

Servo monServo;

void setup() {
  Serial.begin(9600);            // Initialisation du moniteur série
  pinMode(trigPin, OUTPUT);
  pinMode(echoPin, INPUT);
  monServo.attach(servoPin);     // Attache le servomoteur à la broche 6
}

void loop() {
  // Mesure de la distance
  digitalWrite(trigPin, LOW);
  delayMicroseconds(2);
  digitalWrite(trigPin, HIGH);
  delayMicroseconds(10);
  digitalWrite(trigPin, LOW);

  long duree = pulseIn(echoPin, HIGH);
  float distance = duree * 0.034 / 2;  // Conversion en centimètres

  Serial.print("Distance : ");
  Serial.print(distance);
  Serial.println(" cm");

  // Contrôle du servomoteur
  if (distance > 10) {
    monServo.writeMicroseconds(2000);
  } else {
    monServo.writeMicroseconds(1000);
  }

  delay(200); // Petite pause pour éviter les mesures trop rapides
}

```

# Montage et Câblage du LittleBot

#### **<span style="text-decoration: underline;">Etape 1 : Montage des Servomoteurs</span>**

**Placez les servomoteurs dans la base du LittleBot en vous référant aux images ci-dessous.**

<span style="color: rgb(224, 62, 45);">⚠️ **Attention : veillez à ce que l’axe des servomoteurs soit bien centré dans le trou prévu pour la roue.**</span>

[![image.png](https://innovation.iha.unistra.fr/uploads/images/gallery/2025-04/scaled-1680-/2f4image.png) ](https://innovation.iha.unistra.fr/uploads/images/gallery/2025-04/2f4image.png)[![image.png](https://innovation.iha.unistra.fr/uploads/images/gallery/2025-04/scaled-1680-/wFZimage.png)](https://innovation.iha.unistra.fr/uploads/images/gallery/2025-04/wFZimage.png)

Visser les servomoteurs.

[![image.png](https://innovation.iha.unistra.fr/uploads/images/gallery/2025-04/scaled-1680-/Fnaimage.png)](https://innovation.iha.unistra.fr/uploads/images/gallery/2025-04/Fnaimage.png)

Nous allons maintenant passer au câblage du robot, car continuer le montage sans cette étape pourrait compliquer le branchement de certains composants.

#### <span style="text-decoration: underline;">**Etape 2 : Câblage des Composants**</span>

<span style="text-decoration: underline;">Pour le câblage du LittleBot, il nous faut :</span>

- Un Arduino Nano
- Un Sensor Shield
- Un capteur à ultrason (HC-SR04)
- 2 Servomoteurs RC 360°/ Moteur (DM-S0090D)

<span style="text-decoration: underline;">Le branchement ce présente comme ceci :</span>

[![Branchement littlebot.png](https://innovation.iha.unistra.fr/uploads/images/gallery/2023-09/scaled-1680-/branchement-littlebot.png)](https://innovation.iha.unistra.fr/uploads/images/gallery/2023-09/branchement-littlebot.png)

<span style="color: rgb(224, 62, 45);">⚠️ **Attention à bien vous référer aux inscription des pins pour brancher l'Arduino nano dans le bon sens (port usb vers l'extérieur du shield).**</span>

1. Branchement du capteur à ultrasons (se référer au schéma du dessus) :

- VCC sur une broche 5V.
- Trig sur la broche 6.
- Echo sur la broche 7.
- GND sur une broche GND

 2. Branchement des Servomoteurs RC 360° (se référer au schéma du dessus) :

- Le fil marron sur la broche G
- Le fil rouge sur la broche V
- Le fil orange sur la broche S

Ainsi le servo qui est sur la broche 10 sera notre roue droite et le Servo sur la pin 11 sera notre roue gauche.

[![image.png](https://innovation.iha.unistra.fr/uploads/images/gallery/2025-04/scaled-1680-/fK8image.png)](https://innovation.iha.unistra.fr/uploads/images/gallery/2025-04/fK8image.png)

#### <span style="text-decoration: underline;">**<span style="color: rgb(0, 0, 0); text-decoration: underline;">Etape 3 : Montage du shield</span>**</span>

Fixer le shield à la base du LittleBot avec 2 vis.

[![image.png](https://innovation.iha.unistra.fr/uploads/images/gallery/2025-04/scaled-1680-/G2Iimage.png)](https://innovation.iha.unistra.fr/uploads/images/gallery/2025-04/G2Iimage.png)

#### <span style="text-decoration: underline;">**Etape 4 : Fixation des roues**</span>

Mettre les palonniers dans les roues.

[![image.png](https://innovation.iha.unistra.fr/uploads/images/gallery/2025-04/scaled-1680-/pqUimage.png)](https://innovation.iha.unistra.fr/uploads/images/gallery/2025-04/pqUimage.png)

Puis fixer les roues sur les servomoteurs.

[![image.png](https://innovation.iha.unistra.fr/uploads/images/gallery/2025-04/scaled-1680-/eRzimage.png) ](https://innovation.iha.unistra.fr/uploads/images/gallery/2025-04/eRzimage.png)[![rKQimage.png](https://innovation.iha.unistra.fr/uploads/images/gallery/2025-04/scaled-1680-/rkqimage.png)](https://innovation.iha.unistra.fr/uploads/images/gallery/2025-04/rkqimage.png)

#### <span style="text-decoration: underline;">**Etape 5 : Finalisation du LittleBot**</span>

Mettre la batterie comme sur l'image ci-dessous et ne pas oublier de passer le câble dans le trou de la tête.

[![image.png](https://innovation.iha.unistra.fr/uploads/images/gallery/2025-04/scaled-1680-/1mkimage.png)](https://innovation.iha.unistra.fr/uploads/images/gallery/2025-04/1mkimage.png)

Placer le capteur ultrasons dans le tête du LittleBot

[![image.png](https://innovation.iha.unistra.fr/uploads/images/gallery/2025-04/scaled-1680-/HFIimage.png)](https://innovation.iha.unistra.fr/uploads/images/gallery/2025-04/HFIimage.png)

Placer la tête du LittleBot sur la base.

[![image.png](https://innovation.iha.unistra.fr/uploads/images/gallery/2025-04/scaled-1680-/iBTimage.png)](https://innovation.iha.unistra.fr/uploads/images/gallery/2025-04/iBTimage.png)

Passons maintenant à la programmation sur la prochaine page.

# Programmation Littlebot

### **<span style="text-decoration: underline;">Le Programme en Mblock :</span>**

**<span style="text-decoration: underline;">Objectifs :</span>**

Le robot doit tout le temps avancer sauf si il rencontre un obstacle à moins de 10 cm il doit reculer puis tourner vers la gauche.

Tout d'abord, ajouter les extensions que nous auront besoin, dans la barre des extensions taper "ultrasons" et ajouter l'extension (il y en aura que une) et pour la 2ème extension la voici [servo.mext](https://innovation.iha.unistra.fr/attachments/55) (cliquez dessus pour télécharger le fichier et faire un glisser-déposer du fichier sur Mblock pour importer l'extension).

Dès que les 2 extensions sont installées on peut commencer à programmer.

Mettre le bloc d'évènement pour pouvoir jouer le code.

[![image.png](https://innovation.iha.unistra.fr/uploads/images/gallery/2025-04/scaled-1680-/lN9image.png)](https://innovation.iha.unistra.fr/uploads/images/gallery/2025-04/lN9image.png)

Ensuite mettre le bloc "pour toujours" pour faire une boucle infinie.

[![image.png](https://innovation.iha.unistra.fr/uploads/images/gallery/2025-04/scaled-1680-/ud9image.png)](https://innovation.iha.unistra.fr/uploads/images/gallery/2025-04/ud9image.png)

Mettre le bloc de conditions "si ... alors ...".

[![image.png](https://innovation.iha.unistra.fr/uploads/images/gallery/2025-04/scaled-1680-/Objimage.png)](https://innovation.iha.unistra.fr/uploads/images/gallery/2025-04/Objimage.png)

Maintenant on va réaliser la condition.

[![image.png](https://innovation.iha.unistra.fr/uploads/images/gallery/2025-04/scaled-1680-/A2Zimage.png)](https://innovation.iha.unistra.fr/uploads/images/gallery/2025-04/A2Zimage.png)

Ne pas oublier d'initialiser notre capteur de distance et de calculer la distance en continue.

[![image.png](https://innovation.iha.unistra.fr/uploads/images/gallery/2025-04/scaled-1680-/q6fimage.png)](https://innovation.iha.unistra.fr/uploads/images/gallery/2025-04/q6fimage.png)

Maintenant si la condition est correct alors il doit d'abord reculer puis tourner à gauche.

Les valeurs 100 et -100 sont les vitesse maximale dans un sens différent.

[![image.png](https://innovation.iha.unistra.fr/uploads/images/gallery/2025-05/scaled-1680-/wQwimage.png)](https://innovation.iha.unistra.fr/uploads/images/gallery/2025-05/wQwimage.png)

Rajouter les 2 dernier blocs pour que si la condition n'est pas réalisée le robot avance.

[![image.png](https://innovation.iha.unistra.fr/uploads/images/gallery/2025-05/scaled-1680-/ONximage.png)](https://innovation.iha.unistra.fr/uploads/images/gallery/2025-05/ONximage.png)

### <span style="text-decoration: underline;">**Programmation sur Arduino IDE :**</span>

Ici nous décomposerons notre programme pour bien l'écrire.

Tout d'abord, nous déclarons la librairie et les servomoteurs que nous utiliserons :

```c++
#include <Servo.h> // Inclusion de la bibliothèque Servo pour contrôler les servomoteurs
#define trigPin 6 // Attribution des pins du capteur à ultrasons
#define echoPin 7 // Attribution des pins du capteur à ultrasons
Servo servo1;  // Déclaration du premier servomoteur
Servo servo2;  // Déclaration du second servomoteur
```

Puis nous déclarons sur quelles pins sont branchés notre capteur et nos servomoteurs :

```
void setup() {
pinMode(trigPin, OUTPUT); // Configure la broche trigPin (6) en sortie 
pinMode(echoPin, INPUT); // Configure la broche echoPin (7) en entrée 
servo1.attach(11); // Attribution de la broche 11 au premier servomoteur 
servo2.attach(10); // Attribution de la broche 10 au deuxieme servomoteur 
}
```

Rentrons dans le vif du sujet :

```c++
void loop() {
long duration, distance;     // Nous déclarons notre variable que nous retrouverons plus tard
digitalWrite(trigPin, LOW);   //Ici notre capteur à ultrason est en "position 0"
delayMicroseconds(2);         // Pendant 2 Microsecondes
digitalWrite(trigPin, HIGH);  //Ici notre capteur à ultrason est "activé"
delayMicroseconds(10);        //Pendant 10 Microsecondes
digitalWrite(trigPin, LOW);   //Puis nous le retournons en position "0"
duration = pulseIn(echoPin, HIGH);  // Nous déclarons notre variable "duration" qui est la durée du trajet du son.
distance = (duration*0.034) / 2;     // Nous déclarons notre variables "distance" par la duréé multiplié par la vitesse du son le tout divisé par 2.
if (distance < 20) {                // Nos déplacement commence ici, "Si la distance est inférieur à 20cm alors..."
  servo1.writeMicroseconds(1000);//Servo Gauche tourne à l'envers
  servo2.writeMicroseconds(2000);//Servo Droit tourne à l'envers
  delay (2000);// pendant 2 sec
  servo1.writeMicroseconds(1000);//Servo Gauche tourne à l'envers
  servo2.writeMicroseconds(1500);//Arrêt du Servo Droit
  delay (2000);// pendant 2 sec
}

else {                             //Sinon...
 servo1.writeMicroseconds(2000);//Servo Gauche tourne
 servo2.writeMicroseconds(1000);//Servo Droit tourne
  delay (2000);// pendant 2 sec
}
}
```

Puis nous assemblons le tout, voici à quoi cela devrait ressembler :

```c++
#include <Servo.h>
#define trigPin 6
#define echoPin 7
Servo servo1;
Servo servo2;

void setup() {
pinMode(trigPin, OUTPUT);
pinMode(echoPin, INPUT);
servo1.attach(11); 
servo2.attach(10);
}


void loop() {
long duration, distance; // Nous déclarons notre variable que nous retrouverons plus tard
// Envoie une impulsion courte pour déclencher le capteur ultrasonique
digitalWrite(trigPin, LOW); 
delayMicroseconds(2);         
digitalWrite(trigPin, HIGH);  // Début de l’impulsion
delayMicroseconds(10);        // Durée de l’impulsion (10µs)
digitalWrite(trigPin, LOW);   // Fin de l’impulsion
// Mesure du temps entre l’émission et la réception de l’onde sonore
duration = pulseIn(echoPin, HIGH);
// Conversion de la durée en distance (en cm)
distance = (duration*0.034) / 2;
// Si un obstacle est détecté à moins de 20 cm
if (distance < 20) {
  // Mouvement 1 : envoie d'un signal d'une durée 1000 µs à servo1, envoie d'un signal d'une durée 2000 µs à servo2
  servo1.writeMicroseconds(1000);
  servo2.writeMicroseconds(2000);
  delay (2000); // Attend 2 secondes
  // Mouvement 2 : servo1 reste dans sa position, envoie d'un signal d'une durée de 1500 us à servo2
  servo1.writeMicroseconds(1000);
  servo2.writeMicroseconds(1500);
  delay (2000);// Attend 2 secondes
}

else {
 // Si aucun obstacle détecté on avance normalement
 servo1.writeMicroseconds(2000);
 servo2.writeMicroseconds(1000);
 delay (2000);
}
}
}
```

# Animation LittleBot (2h30)

#### <span style="text-decoration: underline;">**🤖 Introduction au projet – Le LittleBot**</span>

##### 🎯 Qu’est-ce que le LittleBot ?

Le **LittleBot** est un **petit robot éducatif** que tu peux **programmer toi-même** !  
Il est équipé de :

- **deux roues** avec des **servomoteurs RC 360°** pour avancer, reculer ou tourner,
- un **capteur à ultrasons** pour "voir" ce qu’il y a devant lui,
- et un **cerveau** : une carte **Arduino Nano**.


##### 🧠 À quoi sert ce projet ?

Ce projet te permet de **découvrir la robotique et la programmation** en t’amusant.  
Tu vas apprendre à :

1. Programmer le robot avec des **blocs** dans **mBlock** (comme des LEGO numériques),
2. Contrôler les **roues** du robot,
3. Utiliser un **capteur pour éviter les obstacles**,
4. Faire un robot **autonome**, comme un vrai petit véhicule intelligent !

#### <span style="text-decoration: underline;">🟨 **Étape 1 – Découverte de mBlock**</span>

##### <span style="text-decoration: underline;">🧩 1. Présentation de mBlock</span>

**mBlock** est un logiciel de programmation qui utilise des **blocs colorés** qu’on assemble comme des briques de LEGO.  
Il est basé sur **Scratch**, mais adapté pour programmer des robots comme le **LittleBot**.

[![image.png](https://innovation.iha.unistra.fr/uploads/images/gallery/2025-07/scaled-1680-/JXzimage.png)](https://innovation.iha.unistra.fr/uploads/images/gallery/2025-07/JXzimage.png)

1\) Appareil que nous programmons, ici nous sommes avec un Arduino nano

2\) Catégorie de bloc de programmation

3\) Bloc de programmation (à glisser dans l'interface de dépôt de bloc pour la programmation)

4\) Interface de dépôt de bloc pour la programmation


#### <span style="text-decoration: underline;">🟩 **Étape 2 – Qu’est-ce qu’un Arduino Nano ?**</span>

#### 🧠 C’est quoi un Arduino Nano ?

Un **Arduino Nano** est une **petite carte électronique** :

[![image.png](https://innovation.iha.unistra.fr/uploads/images/gallery/2025-07/scaled-1680-/PRRimage.png)](https://innovation.iha.unistra.fr/uploads/images/gallery/2025-07/PRRimage.png)

> C’est le « cerveau » du robot.

Il reçoit des **instructions** depuis l’ordinateur (grâce à mBlock), et il contrôle les **moteurs et les capteurs du robot**…  
Dans le LittleBot, l’Arduino Nano permet de :

- Lire les informations du capteur à ultrasons (ex : distance),
- Contrôler les servomoteurs,
- Exécuter des actions (avancer, reculer, s’arrêter…).

🧠 On peut dire que **tu écris un programme** avec mBlock et que **l’Arduino le suit à la lettre**.

#### <span style="text-decoration: underline;">🟦 **Étape 3 – Qu’est-ce qu’un servomoteur RC 360° ?**</span>

##### 🔄 Qu’est-ce qu’un servomoteur RC 360° ?

Un **servomoteur RC 360°** (ou « continu ») est un petit moteur qui **peut tourner en continu dans les deux sens** (comme une roue), contrairement aux servos classiques qui ne tournent que sur un angle limité (en général 180° maximum).


##### ⚙️ À quoi ça sert dans un robot comme le LittleBot ?

Dans le LittleBot, ces servos sont utilisés pour faire **tourner les roues** du robot. En envoyant des signaux différents, on peut :

- **Faire avancer** le robot (les deux roues tournent en avant),
- **Faire reculer** le robot (les deux roues tournent en arrière),
- **Faire tourner** (une roue avance, l’autre recule ou reste fixe).

##### 🎛️ Comment on contrôle la vitesse et le sens ?

Pour commencer un programme, on commence toujours par le bloc 'lorsque Arduino démarre'

[![image.png](https://innovation.iha.unistra.fr/uploads/images/gallery/2025-07/scaled-1680-/FdEimage.png)](https://innovation.iha.unistra.fr/uploads/images/gallery/2025-07/FdEimage.png)

Ensuite, on va indiquer à l'Arduino nano que l'on veut que notre programme fonctionne tout le temps grâce au bloc 'pour toujours' dans la catégorie 'Contrôle'.

[![image.png](https://innovation.iha.unistra.fr/uploads/images/gallery/2025-07/scaled-1680-/D3qimage.png)](https://innovation.iha.unistra.fr/uploads/images/gallery/2025-07/D3qimage.png)

Et maintenant, nous allons faire fonctionner notre servomoteur. Allez dans la catégorie 'Servo360' et prendre le bloc 'servo 9 tourne à 0'.

[![image.png](https://innovation.iha.unistra.fr/uploads/images/gallery/2025-07/scaled-1680-/93timage.png)](https://innovation.iha.unistra.fr/uploads/images/gallery/2025-07/93timage.png)

Comment fonctionne ce bloc ?

[![image.png](https://innovation.iha.unistra.fr/uploads/images/gallery/2025-04/scaled-1680-/Couimage.png)](https://innovation.iha.unistra.fr/uploads/images/gallery/2025-04/Couimage.png)

 Numéro de broche vitesse du servomoteur, dans un sens entre \[-100 et 0\[ et dans l'autre entre \]0 et 100\]). A 0 on est donc à l'arrêt

Attention ce bloc ne contrôle qu'un seul moteur, nos servomoteurs sont branchés sur les broches numéros 10 et 9.

Comment téléverser le code dans l'arduino nano?

[![image.png](https://innovation.iha.unistra.fr/uploads/images/gallery/2025-07/scaled-1680-/Ukoimage.png)](https://innovation.iha.unistra.fr/uploads/images/gallery/2025-07/Ukoimage.png)

Sélectionner un appareil disponibles, si le programme ne se téléverse pas vous n'aurez cas vous déconnecter de l'appareil que vous avez choisis et essayer avec un autre. Cliquer sur 'Connecter' puis 'Télécharger le code'.

[![image.png](https://innovation.iha.unistra.fr/uploads/images/gallery/2025-07/scaled-1680-/Mxfimage.png)](https://innovation.iha.unistra.fr/uploads/images/gallery/2025-07/Mxfimage.png)[![image.png](https://innovation.iha.unistra.fr/uploads/images/gallery/2025-07/scaled-1680-/DYUimage.png)](https://innovation.iha.unistra.fr/uploads/images/gallery/2025-07/DYUimage.png)

<p class="callout success">Chaque exercice est à faire valider par un animateur</p>

##### <span style="text-decoration: underline;">Exercice n°1 </span>:

Faire bouger les deux servomoteurs


##### <span style="text-decoration: underline;">Exercice n°2 </span>:

Faire bouger les deux servomoteurs dans le même sens afin que le robot aille vers l'avant

##### <span style="text-decoration: underline;">Exercice n°3 </span>:

Faire avancer le robot pendant quelques secondes, et le faire faire revenir.


#### **<span style="text-decoration: underline;">🛑 Étape 4 : Détecter un obstacle avec le capteur à ultrasons</span>**

##### 📡 Qu’est-ce qu’un capteur à ultrasons ?

Le **capteur à ultrasons** permet au robot de "voir" ce qu’il y a devant lui… sans yeux 👀 !

🟠 Il envoie un **son très aigu** (inaudible pour nous) et mesure le temps que met l’écho à revenir.

👉 Plus l’écho revient vite, plus l’objet est **proche**.  
👉 Plus il met du temps, plus l’objet est **loin**.

Dans un premier temps nous allons apprendre à utiliser le capteur à ultrasons.

Allez faire un tour sur cette page ! : (ne pas réaliser la partie câblage ni le code en C avec arduino IDE)

[https://innovation.iha.unistra.fr/books/robotique-educative/page/quest-ce-quun-capteur-a-ultrasons](https://innovation.iha.unistra.fr/books/robotique-educative/page/quest-ce-quun-capteur-a-ultrasons)

Maintenant que vous savez utilisez le capteur à ultrasons, passons à la suite.

Nouveaux blocs utilisables :

\- Les conditions :

🧠 Les blocs de condition permettent au robot de **prendre des décisions**.

Comme dans la vie de tous les jours :

*👉 "S’il pleut, je prends mon parapluie."*

En programmation, c’est pareil :

👉 *"Si un obstacle est devant moi, je m’arrête."*

[![image.png](https://innovation.iha.unistra.fr/uploads/images/gallery/2025-07/scaled-1680-/HS0image.png)](https://innovation.iha.unistra.fr/uploads/images/gallery/2025-07/HS0image.png)

#####  

\- Les opérations :

🧠 Les blocs d’opérations servent à **faire des calculs** ou des **comparaisons**.

[![image.png](https://innovation.iha.unistra.fr/uploads/images/gallery/2025-07/scaled-1680-/aOkimage.png)](https://innovation.iha.unistra.fr/uploads/images/gallery/2025-07/aOkimage.png)[![image.png](https://innovation.iha.unistra.fr/uploads/images/gallery/2025-07/scaled-1680-/A9uimage.png)](https://innovation.iha.unistra.fr/uploads/images/gallery/2025-07/A9uimage.png)

A vous de choisir les blocs les plus pertinents et les essayer ! N'oubliez pas tout les blocs que vous avez vue depuis le début de l'animation !

##### <span style="text-decoration: underline;">Exercice n°4 :</span>

Programmer le Littlebot pour faire en sorte qu'il s'arrête lorsqu'il croise un obstacle à moins de 10 cm de lui

#### **<span style="text-decoration: underline;">🚗 Étape 5 : Esquiver un obstacle</span>**

##### <span style="text-decoration: underline;">Exercice n°5 :</span>

Maintenant que le Littlebot arrive à s'arrêter lorsqu'il croise un obstacle, faites en sorte qu'il l'esquive comme le ferait un robot aspirateur!

# Club Robotique - Poubelle à couvercle automatique



# Description du projet

#### <span style="text-decoration: underline;">**Introduction :**</span>

Pour ce cycle, nous allons réalisée une poubelle avec une ouverture de couvercle automatique.

[![Snapchat-249294718.jpg](https://innovation.iha.unistra.fr/uploads/images/gallery/2026-02/scaled-1680-/snapchat-249294718.jpg)](https://innovation.iha.unistra.fr/uploads/images/gallery/2026-02/snapchat-249294718.jpg)

#### <span style="text-decoration: underline;">**Description des compétences visées :**</span>

**Compétences techniques et mécaniques :**

- Conception mécanique : savoir imaginer et concevoir le mécanisme d'ouverture automatique du couvercle
- Assemblage de composants : apprendre à manipuler et assembler les différentes parties (couvercle, axe, moteur, composants électroniques, etc.)
- Choix des matériaux : identifier les matériaux adaptés au projet

**Compétences en électronique :**

- Découverte et câblage de capteurs pour détecter une présence.
- Découverte et câblage de servomoteur pour l'ouverture/fermeture du couvercle.
- Savoir réaliser un schéma de câblage et connecter les composants sur une carte Arduino.

**Compétences en programmation :**

- Programmation d'un microcontrôleur Arduino : écrire un code qui gère les capteurs, les délais, et l'action du moteur.
- Logique conditionnelle : comprendre comment programmer des conditions simples (si détection → ouvrir couvercle).
- Optimisation du fonctionnement : ajuster les temps de réponse, la durée d’ouverture, etc.

**Compétences transversales :**

- Gestion de projet : planifier les étapes de réalisation, répartir les tâches, respecter les délais.
- Résolution de problèmes : savoir réagir face aux imprévus techniques ou fonctionnels.
- Travail en équipe.

#### <span style="text-decoration: underline;">**Description du programme des séances :**</span>

**~6 séances :**

- ~Introduction du projet (brainstorming)
- ~1 séances sur TinkerCAD et sur l'impression 3D
- ~1 séance sur inkscape et sur la découpe laser
- ~1 séance Actionneur : servomoteur RC 180°(déplacement)
- ~1 séance Capteur : ultrason (distance)
- ~1 séance Assemblage et programmation

#### <span style="text-decoration: underline;">**Matériel :**</span>

- 1 x Arduino Nano ou compatible ([seeeduino](https://www.lextronic.fr/carte-seeeduino-nano-102010268-59340.html), funduino,...) : ~10€
- 1 x câble USB C : ~1€
- 1 x [Sensor Shield](https://www.amazon.fr/Expansion-sensor-Shield-compatible-Arduino/dp/B072FCNF54/ref=sr_1_5?__mk_fr_FR=%C3%85M%C3%85%C5%BD%C3%95%C3%91&crid=EYZL0IOYS08U&keywords=expansion+arduino+nano&qid=1687874510&sprefix=epansion+arduino+nano%2Caps%2C157&sr=8-5) pour Arduino Nano : ~3€
- 1 x servomoteur à rotation 180° ([Servomoteur 180° SG90 9g](https://fr.aliexpress.com/item/1005006379480535.html "Servomoteur 180° SG90 9g")) : ~2€
- 1 x Module ultrason ([HC-SR04](https://www.amazon.fr/gp/product/B078S45WTG/)) : ~2€
- Une imprimante 3D pour imprimer les pièces du projet (fichier disponible à la prochaine page)(~5€ de filament) :  
    Total de 23€ par poubelle
- Une découpe laser pour découper une pièce du projet

# Modélisation en 3D du couvercle

#### <span style="text-decoration: underline;">**Préparation de la séance (Pour l'animateur) :**</span>

Avant de commencer à modéliser en 3D notre pièce, veuillez consulter les pages suivantes :

- Cette [page](https://innovation.iha.unistra.fr/books/2-fablab-formation-machines-logiciels/page/creation-dune-classe-tinkercad) expliquant comment créer une classe sur Tinkercad (utile pour le travail en groupe ou en classe).
- Cette [page](https://innovation.iha.unistra.fr/books/2-fablab-formation-machines-logiciels/page/initiation-3d-tinkercad) expliquant comment utiliser Tinkercad pour créer un modèle 3D (une séance pour apprendre à utiliser tinkercad avant de modéliser la pièce finale peut-être envisagé)

#### <span style="text-decoration: underline;">**Début de la séance :**</span>

**Commençons à modéliser en 3D le couvercle de la poubelle à couvercle automatique.**

[![image.png](https://innovation.iha.unistra.fr/uploads/images/gallery/2026-02/scaled-1680-/ODYimage.png)](https://innovation.iha.unistra.fr/uploads/images/gallery/2026-02/ODYimage.png)

Réaliser un pavé droit de dimension :

- 80 mm de Longueur
- 80 mm de largeur
- 3 mm de hauteur

[![1.PNG](https://innovation.iha.unistra.fr/uploads/images/gallery/2025-05/scaled-1680-/1.PNG)](https://innovation.iha.unistra.fr/uploads/images/gallery/2025-05/1.PNG)

Ajouter deux pavés droits de dimensions :

- 21 mm de longueur
- 4 mm de largeur
- 3 mm de hauteur

Utiliser le mode "perçage" sur ces blocs, puis les placer dans les coins supérieurs gauche et droite du pavé droit comme indiqué ci-dessous.

[![image.png](https://innovation.iha.unistra.fr/uploads/images/gallery/2026-02/scaled-1680-/Ag0image.png)](https://innovation.iha.unistra.fr/uploads/images/gallery/2026-02/Ag0image.png)[![image.png](https://innovation.iha.unistra.fr/uploads/images/gallery/2026-02/scaled-1680-/IGEimage.png)](https://innovation.iha.unistra.fr/uploads/images/gallery/2026-02/IGEimage.png)

Sélectionner tout le modèle en appuyant sur les touches "CTRL + A" de votre clavier et utiliser l'outil "Regrouper en union" (Ou les touches "CTRL + G" de votre clavier.

[![image.png](https://innovation.iha.unistra.fr/uploads/images/gallery/2026-02/scaled-1680-/SxNimage.png)](https://innovation.iha.unistra.fr/uploads/images/gallery/2026-02/SxNimage.png)

Ajouter 2 cylindres de dimensions :

- 3 mm de longueur
- 3 mm de largeur
- 3 mm de hauteur

Et positionnez-les comme indiqué sur l'image ci-dessous.

[![image.png](https://innovation.iha.unistra.fr/uploads/images/gallery/2026-02/scaled-1680-/ZM7image.png)](https://innovation.iha.unistra.fr/uploads/images/gallery/2026-02/ZM7image.png)

Puis regrouper le tout.

Ajouter un cube et le modifier pour obtenir les dimensions suivantes :

- 65 mm de longueur
- 15 mm de largeur
- 3 mm de hauteur

[![image.png](https://innovation.iha.unistra.fr/uploads/images/gallery/2026-02/scaled-1680-/32simage.png)](https://innovation.iha.unistra.fr/uploads/images/gallery/2026-02/32simage.png)

Ensuite, ajouter un "toit arrondi" et le modifier pour obtenir les dimensions suivantes :

- 15 mm de longueur
- 10 mm de largueur
- 3 mm de hauteur

Le positionner en haut du pavé précédemment créé.

[![image.png](https://innovation.iha.unistra.fr/uploads/images/gallery/2026-02/scaled-1680-/j63image.png)](https://innovation.iha.unistra.fr/uploads/images/gallery/2026-02/j63image.png)

Après cela, ajouter un cylindre de dimensions :

- 3 mm de longueur
- 3 mm de largueur
- 3 mm de hauteur

Puis le mettre en mode "perçage".

Maintenant, il faut le positionner au centre de notre toit arrondi. Pour cela utiliser l'outil "Aligner" :

[![image.png](https://innovation.iha.unistra.fr/uploads/images/gallery/2026-02/scaled-1680-/lpximage.png)](https://innovation.iha.unistra.fr/uploads/images/gallery/2026-02/lpximage.png)

et positionner notre cylindre au centre comme l'image ci-dessous :

[![image.png](https://innovation.iha.unistra.fr/uploads/images/gallery/2026-02/scaled-1680-/YeVimage.png)](https://innovation.iha.unistra.fr/uploads/images/gallery/2026-02/YeVimage.png)

Puis, regrouper le tout ensemble (CTRL + G) :

[![image.png](https://innovation.iha.unistra.fr/uploads/images/gallery/2026-02/scaled-1680-/5Utimage.png)](https://innovation.iha.unistra.fr/uploads/images/gallery/2026-02/5Utimage.png)

Après cela, faites une rotation de 90° à notre modèle 3D.

[![image.png](https://innovation.iha.unistra.fr/uploads/images/gallery/2026-02/scaled-1680-/G1mimage.png)](https://innovation.iha.unistra.fr/uploads/images/gallery/2026-02/G1mimage.png)[![O7Timage.png](https://innovation.iha.unistra.fr/uploads/images/gallery/2026-02/scaled-1680-/o7timage.png)](https://innovation.iha.unistra.fr/uploads/images/gallery/2026-02/o7timage.png)

Ensuite, positionner la forme au centre de notre base en utilisant l'outil "Aligner" :

[![image.png](https://innovation.iha.unistra.fr/uploads/images/gallery/2026-02/scaled-1680-/ng1image.png)](https://innovation.iha.unistra.fr/uploads/images/gallery/2026-02/ng1image.png)[![qweimage.png](https://innovation.iha.unistra.fr/uploads/images/gallery/2026-02/scaled-1680-/sTFqweimage.png)](https://innovation.iha.unistra.fr/uploads/images/gallery/2026-02/sTFqweimage.png)

Il faut à présent faire avancer de 22 mm notre forme par rapport à notre base.

Pour cela, utiliser l'outil "Règle" comme indiqué ci-dessous :

[![image.png](https://innovation.iha.unistra.fr/uploads/images/gallery/2026-02/scaled-1680-/iHMimage.png)](https://innovation.iha.unistra.fr/uploads/images/gallery/2026-02/iHMimage.png)

et la positionner au niveau de notre base :

[![image.png](https://innovation.iha.unistra.fr/uploads/images/gallery/2026-02/scaled-1680-/L1gimage.png)](https://innovation.iha.unistra.fr/uploads/images/gallery/2026-02/L1gimage.png)

Déplacer notre forme de -22 mm :

[![image.png](https://innovation.iha.unistra.fr/uploads/images/gallery/2026-02/scaled-1680-/KM3image.png)](https://innovation.iha.unistra.fr/uploads/images/gallery/2026-02/KM3image.png)

Faites une rotation (de -22.5° ou 22.5° en fonction du sens dans lequel vous travaillez) comme ci-dessous :

[![image.png](https://innovation.iha.unistra.fr/uploads/images/gallery/2026-02/scaled-1680-/za7image.png)](https://innovation.iha.unistra.fr/uploads/images/gallery/2026-02/za7image.png)[![image.png](https://innovation.iha.unistra.fr/uploads/images/gallery/2026-02/scaled-1680-/Tq3image.png)](https://innovation.iha.unistra.fr/uploads/images/gallery/2026-02/Tq3image.png)

Utiliser la flèche verticale (voir image ci-dessous) pour mettre la pièce à -11 mm de haut :

[![image.png](https://innovation.iha.unistra.fr/uploads/images/gallery/2026-02/scaled-1680-/0d5image.png)](https://innovation.iha.unistra.fr/uploads/images/gallery/2026-02/0d5image.png)

Supprimer le reste de notre forme en créant un nouveau bloc en mode "perçage" et le positionner sous la pièce.

[![image.png](https://innovation.iha.unistra.fr/uploads/images/gallery/2026-02/scaled-1680-/vA6image.png)](https://innovation.iha.unistra.fr/uploads/images/gallery/2026-02/vA6image.png)

Sélectionner tout le modèle (CTRL + A) et appuyer sur l'outil "Regrouper" pour obtenir notre couvercle.

[![image.png](https://innovation.iha.unistra.fr/uploads/images/gallery/2026-02/scaled-1680-/QpNimage.png)](https://innovation.iha.unistra.fr/uploads/images/gallery/2026-02/QpNimage.png)

# Utilisation de la découpe laser pour le mécanisme de la poubelle à couvercle automatique

#### <span style="text-decoration: underline;">**Objectif :**</span>

Initiation à la découpe laser et à l’utilisation du logiciel Inkscape.

#### <span style="text-decoration: underline;">**Modélisation :**</span>

- > Si vous possédez déjà Inkscape sur votre ordinateur, ouvrez simplement le logiciel.  
    > Sinon, vous pouvez le télécharger à l’aide du lien suivant :  
    > [https://inkscape.fr/](https://inkscape.fr/)  
    >   
    > Pour en apprendre plus sur inkscape : https://innovation.iha.unistra.fr/books/2-fablab-formation-machines-logiciels/page/inkscape-petite-intro-pour-newbies

Une fois Inkscape ouvert, vous pouvez commencer la modélisation du mécanisme en bois.

#### <span style="text-decoration: underline;">**Étape 1 : Création de la forme principale**</span>

Vous devez créer un rectangle avec les dimensions suivantes :

- 15 mm de largeur
- 112 mm de hauteur

[![image.png](https://innovation.iha.unistra.fr/uploads/images/gallery/2026-02/scaled-1680-/dXAimage.png)](https://innovation.iha.unistra.fr/uploads/images/gallery/2026-02/dXAimage.png)

#### <span style="text-decoration: underline;">**Étape 2 : Création d'un trou d'accueil d'une vis pour la fixation au couvercle**</span>

Ajouter un cercle avec les dimensions suivantes :

- 3 mm de largeur
- 3 mm de hauteur

Positionner ce cercle au centre du rectangle en sélectionnant les 2 formes et à l’aide de l’outil "Aligner", comme montré ci-dessous :

<p class="callout info">Si vous ne trouver pas l'outil, rendez vous dans l'onglet "Objet &gt; Aligner et distribuer..."</p>

[![image.png](https://innovation.iha.unistra.fr/uploads/images/gallery/2026-02/scaled-1680-/mZqimage.png)](https://innovation.iha.unistra.fr/uploads/images/gallery/2026-02/mZqimage.png)

#### **<span style="text-decoration: underline;">Étape 3 : Positionnement du trou à 6 mm du bord supérieur</span>**

Créer un autre rectangle servant de repère avec les dimensions suivantes :

- 6 mm de hauteur
- 2 mm de largeur

Positionner ce rectangle au niveau du bord supérieur, comme indiqué ci-dessous :

[![image.png](https://innovation.iha.unistra.fr/uploads/images/gallery/2026-02/scaled-1680-/TPYimage.png)](https://innovation.iha.unistra.fr/uploads/images/gallery/2026-02/TPYimage.png)

Placer le cercle de manière à ce qu’il soit correctement positionné à 6 mm du bord en vous aidant du rectangle de repère précédemment créé.

[![image.png](https://innovation.iha.unistra.fr/uploads/images/gallery/2026-02/scaled-1680-/Dyoimage.png)](https://innovation.iha.unistra.fr/uploads/images/gallery/2026-02/Dyoimage.png)

Supprimer le rectangle utilisé comme repère, ce qui donne le résultat suivant :

[![image.png](https://innovation.iha.unistra.fr/uploads/images/gallery/2026-02/scaled-1680-/BBXimage.png)](https://innovation.iha.unistra.fr/uploads/images/gallery/2026-02/BBXimage.png)

#### **<span style="text-decoration: underline;">Étape 4 : Création du second trou d'accueil de vis pour la fixation au servomoteur</span>**

Il manque maintenant le trou destiné à la vis reliée au servomoteur.

Créer un cercle avec les dimensions suivantes :

- 2 mm de largeur
- 2 mm de hauteur

Positionnez le au centre horizontal du rectangle (entre les bords droit et gauche) à l’aide du même outil d’alignement vu précédemment.

[![image.png](https://innovation.iha.unistra.fr/uploads/images/gallery/2026-02/scaled-1680-/n8bimage.png)](https://innovation.iha.unistra.fr/uploads/images/gallery/2026-02/n8bimage.png)

#### **<span style="text-decoration: underline;">Étape 5 : Positionnement vertical du second trou</span>**

Pour positionner correctement ce cercle sur l’axe vertical (axe Y), vous devez créer un rectangle servant de repère avec les dimensions suivantes :

- 3 mm de hauteur
- 1 mm de largeur

Positionner ensuite les formes comme montré ci-dessous :

[![image.png](https://innovation.iha.unistra.fr/uploads/images/gallery/2026-02/scaled-1680-/sHVimage.png)](https://innovation.iha.unistra.fr/uploads/images/gallery/2026-02/sHVimage.png)

Une fois le cercle correctement placé, vous pouvez supprimer le rectangle utilisé comme repère.

#### **<span style="text-decoration: underline;">Étape 6 : Découpe au laser</span>**

La modélisation du mécanisme en bois est maintenant terminée.  
Il ne vous reste plus qu’à procéder à la découpe au laser si vous en disposez d'une.

# Fonctionnement et programmation des composants

#### <span style="text-decoration: underline;">**Objectif :**</span>

Comprendre le fonctionnement des composants du projet et apprendre à les programmer

#### <span style="text-decoration: underline;">**1. Introduction à l'Arduino Nano** </span>

##### Qu'est-ce qu'une Arduino Nano ?

L’Arduino Nano est une petite carte électronique programmable basée sur un microcontrôleur. Elle permet de créer facilement des projets interactifs, elle est donc le cerveau du projet. C'est l'Arduino Nano qui décidera de faire tourner le servomoteur en fonction de la longueur mesurée par le capteur à ultrason en exécutant le programme que vous lui avez donné.

<p class="callout info">Si vous n'avez jamais utilisé un Arduino Nano, rendez-vous sur cette page : [https://innovation.iha.unistra.fr/books/robotique-educative/page/quest-ce-que-larduino](https://innovation.iha.unistra.fr/books/robotique-educative/page/quest-ce-que-larduino)</p>

#### <span style="text-decoration: underline;">**2. Capteur à ultrasons HC-SR04** </span>

##### Qu'est ce qu'un capteur à ultrason et comment il fonctionne ?

Le capteur à ultrasons HC-SR04 est un dispositif utilisé pour mesurer des distances sans contact. Il fonctionne en émettant un ultrasons et en mesurant le temps mis par l’écho pour revenir après avoir heurté un obstacle. Simple à utiliser et peu coûteux, il permettra à l'Arduino Nano de détecter votre main afin de donner un signal au servomoteur et d'ouvrir le couvercle de la poubelle.

<p class="callout info">Si vous n'avez jamais utilisé un capteur à ultrasons, rendez-vous sur cette page : [https://innovation.iha.unistra.fr/books/robotique-educative/page/quest-ce-quun-capteur-a-ultrasons](https://innovation.iha.unistra.fr/books/robotique-educative/page/quest-ce-quun-capteur-a-ultrasons)</p>


#### <span style="text-decoration: underline;">**3. Servomoteur SG90 180°** </span>

##### Qu'est ce qu'un servomoteur et comment il fonctionne ?

Le servomoteur SG90 180° est un petit moteur électrique capable de se positionner avec précision sur un angle allant de 0 à 180 degrés. Il permettra à notre poubelle d'ouvrir son couvercle grâce à la rotation et la force exercée par celui-ci sur le couvercle.

<p class="callout info">Si vous n'avez jamais utilisé un servomoteur, rendez-vous sur cette page : [https://innovation.iha.unistra.fr/books/robotique-educative/page/quest-ce-quun-servo-moteur](https://innovation.iha.unistra.fr/books/robotique-educative/page/quest-ce-quun-servo-moteur)</p>

# Assemblage et câblage de la poubelle à couvercle automatique

#### <span style="text-decoration: underline;">**Objectif de la séance :**</span>

Réaliser l’assemblage complet de la poubelle à couvercle automatique.

#### <span style="text-decoration: underline;">**1. Assemblage du capteur à ultrasons**</span>

<p class="callout info">**Le modèle 3D de la poubelle à imprimer en 3D ce trouve en pièce jointe du wiki**</p>

Vous devez positionner le capteur à ultrasons de la manière suivante :

[![Snapchat-1872395610.jpg](https://innovation.iha.unistra.fr/uploads/images/gallery/2026-02/scaled-1680-/snapchat-1872395610.jpg)](https://innovation.iha.unistra.fr/uploads/images/gallery/2026-02/snapchat-1872395610.jpg)[![Snapchat-42481692.jpg](https://innovation.iha.unistra.fr/uploads/images/gallery/2026-02/scaled-1680-/snapchat-42481692.jpg)](https://innovation.iha.unistra.fr/uploads/images/gallery/2026-02/snapchat-42481692.jpg)

Ensuite, vous devez faire passer les fils par le petit trou situé en bas à droite du capteur à ultrasons, comme indiqué ci-dessous :

[![Snapchat-1282883205.jpg](https://innovation.iha.unistra.fr/uploads/images/gallery/2026-02/scaled-1680-/snapchat-1282883205.jpg)](https://innovation.iha.unistra.fr/uploads/images/gallery/2026-02/snapchat-1282883205.jpg)

Une fois le capteur à ultrasons correctement installé, vous pouvez passer à l’installation de la carte Arduino.

Vous devez glisser votre **Arduino Nano**, accompagné de son **shield**, dans l’encoche prévue à cet effet, comme montré ci-dessous :

[![Snapchat-1512569101.jpg](https://innovation.iha.unistra.fr/uploads/images/gallery/2026-02/scaled-1680-/snapchat-1512569101.jpg)](https://innovation.iha.unistra.fr/uploads/images/gallery/2026-02/snapchat-1512569101.jpg)[![Snapchat-226701473.jpg](https://innovation.iha.unistra.fr/uploads/images/gallery/2026-02/scaled-1680-/snapchat-226701473.jpg)](https://innovation.iha.unistra.fr/uploads/images/gallery/2026-02/snapchat-226701473.jpg)

Une fois la carte installée dans son support, vous pouvez clipser le couvercle sur la boîte, comme illustré ci-dessous :

[![Snapchat-469856752.jpg](https://innovation.iha.unistra.fr/uploads/images/gallery/2026-02/scaled-1680-/snapchat-469856752.jpg)](https://innovation.iha.unistra.fr/uploads/images/gallery/2026-02/snapchat-469856752.jpg)[![Snapchat-78847917.jpg](https://innovation.iha.unistra.fr/uploads/images/gallery/2026-02/scaled-1680-/snapchat-78847917.jpg)](https://innovation.iha.unistra.fr/uploads/images/gallery/2026-02/snapchat-78847917.jpg)

Lorsque cette partie technique est terminée, vous pouvez passer à l’assemblage du mécanisme en bois.

Pour cette étape, vous aurez besoin de :

- 1 vis M3 12
- 1 écrou M3
- 1 vis de servomoteur
- 1 tournevis

Dans le plus grand trou de la languette en bois, vous devez insérer la vis M3 12, puis l’insérer également dans la languette du couvercle, comme indiqué ci-dessous :

[![Snapchat-1350187167.jpg](https://innovation.iha.unistra.fr/uploads/images/gallery/2026-02/scaled-1680-/snapchat-1350187167.jpg)](https://innovation.iha.unistra.fr/uploads/images/gallery/2026-02/snapchat-1350187167.jpg)

Vous devez ensuite ajouter l’écrou M3, comme montré ci-dessous :

[![Snapchat-981636419.jpg](https://innovation.iha.unistra.fr/uploads/images/gallery/2026-02/scaled-1680-/snapchat-981636419.jpg)](https://innovation.iha.unistra.fr/uploads/images/gallery/2026-02/snapchat-981636419.jpg)

Une fois le côté couvercle terminé, il ne reste plus qu’à réaliser le montage côté servomoteur.

Pour cela, vous devez utiliser une vis de servomoteur et y fixer un palonnier avec un axe uniquement, comme sur l’image suivante :

[![Snapchat-1692850722.jpg](https://innovation.iha.unistra.fr/uploads/images/gallery/2026-02/scaled-1680-/snapchat-1692850722.jpg)](https://innovation.iha.unistra.fr/uploads/images/gallery/2026-02/snapchat-1692850722.jpg)

Vous devez maintenant ajouter le servomoteur, Mais avant de le positionner il faut l'initialiser. Pour cela mettez un palonnier sur le servomoteur et tournez le dans le sens inverse des aiguilles d'une montre sans forcer. Une fois arivé au bout votre servomoteur sera donc a 0°. Une fois fait positionnez simplement le servomoteur sur son siège.

Puis, ajoutez la pièce en forme de **U** afin de le maintenir en place, comme montré ci-dessous :

[![Snapchat-2138532086.jpg](https://innovation.iha.unistra.fr/uploads/images/gallery/2026-02/scaled-1680-/snapchat-2138532086.jpg)](https://innovation.iha.unistra.fr/uploads/images/gallery/2026-02/snapchat-2138532086.jpg)

Une fois tous les composants en place, il ne reste plus qu’à clipser le palonnier sur le servomoteur, comme indiqué ci-dessous :

[![Snapchat-2143529303.jpg](https://innovation.iha.unistra.fr/uploads/images/gallery/2026-02/scaled-1680-/snapchat-2143529303.jpg)](https://innovation.iha.unistra.fr/uploads/images/gallery/2026-02/snapchat-2143529303.jpg)

L’assemblage est maintenant terminé.

#### <span style="text-decoration: underline;">**Câblage**</span>

Afin que les composants puissent communiquer entre eux, vous devez maintenant réaliser le câblage.

Voici les broches utilisées :

##### <span style="text-decoration: underline;">**Capteur à ultrasons (HC-SR04)**</span>

- VCC → 5V de l’Arduino
- GND → GND de l’Arduino
- TRIG → D9 de l’Arduino
- ECHO → D10 de l’Arduino

##### <span style="text-decoration: underline;">**Servomoteur**</span>

- VCC (fil rouge) → 5V de l’Arduino
- GND (fil noir) → GND de l’Arduino
- Signal (fil jaune) → D12 de l’Arduino

Le montage final doit ressembler à l’exemple ci-dessous

[![image.png](https://innovation.iha.unistra.fr/uploads/images/gallery/2026-02/scaled-1680-/7ajimage.png)](https://innovation.iha.unistra.fr/uploads/images/gallery/2026-02/7ajimage.png)

# Programmation de la poubelle à couvercle automatique

#### <span style="text-decoration: underline;">**Objectif**</span>

Gestion et programmation de l’ensemble des capteurs et actionneurs d’une poubelle à couvercle automatique.

#### **<span style="text-decoration: underline;">Rappel</span>**

Pour programmer la poubelle a couvercle automatique il faut avoir préalablement fait les étapes précédentes disponible [ici](https://innovation.iha.unistra.fr/books/robotique-educative/chapter/club-robotique-poubelle-a-couvercle-automatique)

<div class="flex flex-col text-sm pb-25" id="bkmrk-exercice-2-%E2%80%93-command"><article class="text-token-text-primary w-full focus:outline-none [--shadow-height:45px] has-data-writing-block:pointer-events-none has-data-writing-block:-mt-(--shadow-height) has-data-writing-block:pt-(--shadow-height) [&:has([data-writing-block])>*]:pointer-events-auto scroll-mt-[calc(var(--header-height)+min(200px,max(70px,20svh)))]" data-scroll-anchor="true" data-testid="conversation-turn-10" data-turn="assistant" data-turn-id="request-WEB:1ee0370d-c3db-43e8-a372-374e9551da60-4" dir="auto" tabindex="-1">#### <span style="text-decoration: underline;">**Exercice – Programmer la poubelle a couvercle automatique**</span>

##### <span style="text-decoration: underline;">**Objectif pédagogique**</span>

Associer un **capteur** à un **actionneur** pour automatiser un mécanisme.

##### <span style="text-decoration: underline;">**Etape 1**</span>

Réfléchir à un algorithme.

##### <span style="text-decoration: underline;">**Correction :**</span>

<details><summary></summary>

Lorsque l'Arduino Nano démarre

Initialiser l'ultrason

Pour toujours

 Calculer la distance avec l'ultrason

 Si la distance est inférieur à 5cm Alors

 Positionner le servomoteur à 180° (position du couvercle ouvert)

 Attendre 2 secondes.

 Sinon

 Positionner le servomoteur à 0° (position du couvercle fermé)

</details>#####  <span style="text-decoration: underline;">**Etape 2**</span>

Réaliser le code pour la poubelle grâce a votre algorythme.

##### <span style="text-decoration: underline;">**Correction :**</span>

<details><summary></summary>

[![image.png](https://innovation.iha.unistra.fr/uploads/images/gallery/2026-02/scaled-1680-/50Zimage.png)](https://innovation.iha.unistra.fr/uploads/images/gallery/2026-02/50Zimage.png)

</details>#### <span style="text-decoration: underline;">**Défis supplémentaires (pour aller plus loin)**</span>

<div class="text-base my-auto mx-auto pb-10 [--thread-content-margin:--spacing(4)] @w-sm/main:[--thread-content-margin:--spacing(6)] @w-lg/main:[--thread-content-margin:--spacing(16)] px-(--thread-content-margin)"><div class="text-base my-auto mx-auto pb-10 [--thread-content-margin:--spacing(4)] @w-sm/main:[--thread-content-margin:--spacing(6)] @w-lg/main:[--thread-content-margin:--spacing(16)] px-(--thread-content-margin)"><div class="[--thread-content-max-width:40rem] @w-lg/main:[--thread-content-max-width:48rem] mx-auto max-w-(--thread-content-max-width) flex-1 group/turn-messages focus-visible:outline-hidden relative flex w-full min-w-0 flex-col agent-turn" tabindex="-1"><div class="flex max-w-full flex-col grow"><div class="min-h-8 text-message relative flex w-full flex-col items-end gap-2 text-start break-words whitespace-normal [.text-message+&]:mt-1" data-message-author-role="assistant" data-message-id="5ea04758-5734-413b-bc9e-dc7448c62266" data-message-model-slug="gpt-5-2" dir="auto"><div class="flex w-full flex-col gap-1 empty:hidden first:pt-[1px]"><div class="markdown prose dark:prose-invert w-full wrap-break-word light markdown-new-styling">- Empêcher le servomoteur de bouger inutilement si le couvercle est déjà ouvert.
- Modifier l’angle d’ouverture (ex : 90° au lieu de 0°).
- Ajouter un délai avant la fermeture automatique.

</div></div></div></div></div></div></div>##### <span style="text-decoration: underline;">**Validation attendue**</span>

L’élève sait :

<div class="text-base my-auto mx-auto pb-10 [--thread-content-margin:--spacing(4)] @w-sm/main:[--thread-content-margin:--spacing(6)] @w-lg/main:[--thread-content-margin:--spacing(16)] px-(--thread-content-margin)"><div class="text-base my-auto mx-auto pb-10 [--thread-content-margin:--spacing(4)] @w-sm/main:[--thread-content-margin:--spacing(6)] @w-lg/main:[--thread-content-margin:--spacing(16)] px-(--thread-content-margin)"><div class="[--thread-content-max-width:40rem] @w-lg/main:[--thread-content-max-width:48rem] mx-auto max-w-(--thread-content-max-width) flex-1 group/turn-messages focus-visible:outline-hidden relative flex w-full min-w-0 flex-col agent-turn" tabindex="-1"><div class="flex max-w-full flex-col grow"><div class="min-h-8 text-message relative flex w-full flex-col items-end gap-2 text-start break-words whitespace-normal [.text-message+&]:mt-1" data-message-author-role="assistant" data-message-id="5ea04758-5734-413b-bc9e-dc7448c62266" data-message-model-slug="gpt-5-2" dir="auto"><div class="flex w-full flex-col gap-1 empty:hidden first:pt-[1px]"><div class="markdown prose dark:prose-invert w-full wrap-break-word light markdown-new-styling">- expliquer le rôle du servomoteur,
- décrire la logique complète de la poubelle automatique,
- modifier seul les paramètres (distance, angle, temps).

---

</div></div></div></div></div></div></div>#### <span style="text-decoration: underline;">**Bilan pédagogique**</span>

À la fin de ces deux exercices, les élèves comprennent :

<div class="text-base my-auto mx-auto pb-10 [--thread-content-margin:--spacing(4)] @w-sm/main:[--thread-content-margin:--spacing(6)] @w-lg/main:[--thread-content-margin:--spacing(16)] px-(--thread-content-margin)"><div class="text-base my-auto mx-auto pb-10 [--thread-content-margin:--spacing(4)] @w-sm/main:[--thread-content-margin:--spacing(6)] @w-lg/main:[--thread-content-margin:--spacing(16)] px-(--thread-content-margin)"><div class="[--thread-content-max-width:40rem] @w-lg/main:[--thread-content-max-width:48rem] mx-auto max-w-(--thread-content-max-width) flex-1 group/turn-messages focus-visible:outline-hidden relative flex w-full min-w-0 flex-col agent-turn" tabindex="-1"><div class="flex max-w-full flex-col grow"><div class="min-h-8 text-message relative flex w-full flex-col items-end gap-2 text-start break-words whitespace-normal [.text-message+&]:mt-1" data-message-author-role="assistant" data-message-id="5ea04758-5734-413b-bc9e-dc7448c62266" data-message-model-slug="gpt-5-2" dir="auto"><div class="flex w-full flex-col gap-1 empty:hidden first:pt-[1px]"><div class="markdown prose dark:prose-invert w-full wrap-break-word light markdown-new-styling">- comment **un capteur déclenche une action**,
- comment structurer un programme Arduino,
- comment automatiser un objet du quotidien.

</div></div></div></div></div></div></div>🎯 Résultat : ils sont capables de **recréer et adapter le code d’une poubelle à couvercle automatique**, ce qui est un excellent projet concret et motivant en robotique.

</article></div>##### <span style="text-decoration: underline;">**Correction du code :**</span>

Voici la correction du code :

<details id="bkmrk--3"><summary></summary>

[![HXXimage.png](https://innovation.iha.unistra.fr/uploads/images/gallery/2026-02/scaled-1680-/hxximage.png)](https://innovation.iha.unistra.fr/uploads/images/gallery/2026-02/hxximage.png)

Ce programme met en œuvre un **système d’ouverture automatique de couvercle** basé sur la détection de proximité, typiquement utilisé pour une **poubelle robotisée sans contact** dans un club de robotique.

##### **<span style="text-decoration: underline;">Principe général</span>**

Le code associe :

- un **capteur à ultrasons HC-SR04** pour mesurer la distance entre la poubelle et un obstacle (main, déchet, objet),
- un **servomoteur SG90 (180°)** pour actionner mécaniquement le couvercle.

L’objectif est d’ouvrir le couvercle lorsqu’un utilisateur s’approche, puis de le refermer automatiquement.

##### <span style="text-decoration: underline;">**Déroulement du programme**</span>

1. **Initialisation au démarrage**
    
    
    - L’Arduino configure le capteur HC-SR04 avec :
        
        
        - broche **Trig = 4**
        - broche **Echo = 5**
    - Le servomoteur est connecté à la **broche 9**.
2. **Boucle de fonctionnement continu**
    
    
    - Le capteur ultrason mesure en permanence la **distance en centimètres** devant la poubelle.
    - Cette distance est envoyée sur le **port série**, ce qui permet :
        
        
        - le débogage,
        - la visualisation du comportement du système,
        - l’analyse pédagogique avec les membres du club.
3. **Logique de décision**
    
    
    - **Si la distance mesurée est inférieure à 5 cm** :
        
        
        - le servomoteur est positionné à **0°** → **ouverture du couvercle**,
        - une temporisation de **2 secondes** permet à l’utilisateur de jeter le déchet.
    - **Sinon** :
        
        
        - le servomoteur est positionné à **180°** → **fermeture du couvercle**.

</details>---

#### <span style="text-decoration: underline;">**Conclusion et discussion**</span>

#### <span style="text-decoration: underline;">**Synthèse des compétences acquises**</span>

##### <span style="text-decoration: underline;">**Compétences techniques et mécaniques**</span>

- **Conception mécanique :** savoir imaginer et concevoir le mécanisme d’ouverture automatique du couvercle.
- **Assemblage de composants :** apprendre à manipuler et assembler les différentes parties (couvercle, axe, moteur, composants électroniques, etc.).
- **Choix des matériaux :** identifier les matériaux adaptés au projet.

##### <span style="text-decoration: underline;">**Compétences en électronique**</span>

- Découverte et câblage de capteurs permettant de détecter une présence.
- Découverte et câblage d’un servomoteur pour l’ouverture et la fermeture du couvercle.
- Savoir réaliser un schéma de câblage et connecter les composants sur une carte Arduino.

##### <span style="text-decoration: underline;">**Compétences en programmation**</span>

- Programmation d’un microcontrôleur Arduino : écrire un programme qui gère les capteurs, les délais et l’action du moteur.
- Logique conditionnelle : comprendre comment programmer des conditions simples (si détection → ouverture du couvercle).
- Optimisation du fonctionnement : ajuster les temps de réponse, la durée d’ouverture, etc.

##### <span style="text-decoration: underline;">**Compétences transversales**</span>

- Gestion de projet : planifier les étapes de réalisation, répartir les tâches et respecter les délais.
- Résolution de problèmes : savoir réagir face aux imprévus techniques ou fonctionnels.
- Travail en équipe.

---

#### <span style="text-decoration: underline;">**Perspectives**</span>

- Améliorer le projet (par exemple : ajouter une LED qui s’allume lorsqu’un objet est détecté, améliorer les pièces mécaniques, etc.).
- Imaginer d’autres applications utilisant un capteur à ultrasons et un servomoteur ensemble.

---

##### <span style="text-decoration: underline;">**Projet similaire**</span>

[https://www.hackster.io/FANUEL\_CONRAD/automatic-soap-dispenser-75abd6<svg aria-hidden="true" class="block h-[0.75em] w-[0.75em] stroke-current stroke-[0.75]" data-rtl-flip="" height="20" width="20" xmlns="http://www.w3.org/2000/svg"></svg>](https://www.hackster.io/FANUEL_CONRAD/automatic-soap-dispenser-75abd6)

# Club Robotique - Poubelle à couvercle automatique



# Description du projet

#### <span style="text-decoration: underline;">**Introduction :**</span>

Pour ce cycle, nous allons réalisée une poubelle avec une ouverture de couvercle automatique.

[![Snapchat-249294718.jpg](https://innovation.iha.unistra.fr/uploads/images/gallery/2026-02/scaled-1680-/snapchat-249294718.jpg)](https://innovation.iha.unistra.fr/uploads/images/gallery/2026-02/snapchat-249294718.jpg)

#### <span style="text-decoration: underline;">**Description des compétences visées :**</span>

**Compétences techniques et mécaniques :**

- Conception mécanique : savoir imaginer et concevoir le mécanisme d'ouverture automatique du couvercle
- Assemblage de composants : apprendre à manipuler et assembler les différentes parties (couvercle, axe, moteur, composants électroniques, etc.)
- Choix des matériaux : identifier les matériaux adaptés au projet

**Compétences en électronique :**

- Découverte et câblage de capteurs pour détecter une présence.
- Découverte et câblage de servomoteur pour l'ouverture/fermeture du couvercle.
- Savoir réaliser un schéma de câblage et connecter les composants sur une carte Arduino.

**Compétences en programmation :**

- Programmation d'un microcontrôleur Arduino : écrire un code qui gère les capteurs, les délais, et l'action du moteur.
- Logique conditionnelle : comprendre comment programmer des conditions simples (si détection → ouvrir couvercle).
- Optimisation du fonctionnement : ajuster les temps de réponse, la durée d’ouverture, etc.

**Compétences transversales :**

- Gestion de projet : planifier les étapes de réalisation, répartir les tâches, respecter les délais.
- Résolution de problèmes : savoir réagir face aux imprévus techniques ou fonctionnels.
- Travail en équipe.

#### <span style="text-decoration: underline;">**Description du programme des séances :**</span>

**~6 séances :**

- ~Introduction du projet (brainstorming)
- ~1 séances sur TinkerCAD et sur l'impression 3D
- ~1 séance sur inkscape et sur la découpe laser
- ~1 séance Actionneur : servomoteur RC 180°(déplacement)
- ~1 séance Capteur : ultrason (distance)
- ~1 séance Assemblage et programmation

#### <span style="text-decoration: underline;">**Matériel :**</span>

- 1 x Arduino Nano ou compatible ([seeeduino](https://www.lextronic.fr/carte-seeeduino-nano-102010268-59340.html), funduino,...) : ~10€
- 1 x câble USB C : ~1€
- 1 x [Sensor Shield](https://www.amazon.fr/Expansion-sensor-Shield-compatible-Arduino/dp/B072FCNF54/ref=sr_1_5?__mk_fr_FR=%C3%85M%C3%85%C5%BD%C3%95%C3%91&crid=EYZL0IOYS08U&keywords=expansion+arduino+nano&qid=1687874510&sprefix=epansion+arduino+nano%2Caps%2C157&sr=8-5) pour Arduino Nano : ~3€
- 1 x servomoteur à rotation 180° ([Servomoteur 180° SG90 9g](https://fr.aliexpress.com/item/1005006379480535.html "Servomoteur 180° SG90 9g")) : ~2€
- 1 x Module ultrason ([HC-SR04](https://www.amazon.fr/gp/product/B078S45WTG/)) : ~2€
- Une imprimante 3D pour imprimer les pièces du projet (fichier disponible à la prochaine page)(~5€ de filament) :  
    Total de 23€ par poubelle
- Une découpe laser pour découper une pièce du projet

# Modélisation en 3D du couvercle

#### <span style="text-decoration: underline;">**Préparation de la séance (Pour l'animateur) :**</span>

Avant de commencer à modéliser en 3D notre pièce, veuillez consulter les pages suivantes :

- Cette [page](https://innovation.iha.unistra.fr/books/2-fablab-formation-machines-logiciels/page/creation-dune-classe-tinkercad) expliquant comment créer une classe sur Tinkercad (utile pour le travail en groupe ou en classe).
- Cette [page](https://innovation.iha.unistra.fr/books/2-fablab-formation-machines-logiciels/page/initiation-3d-tinkercad) expliquant comment utiliser Tinkercad pour créer un modèle 3D (une séance pour apprendre à utiliser tinkercad avant de modéliser la pièce finale peut-être envisagé)

#### <span style="text-decoration: underline;">**Début de la séance :**</span>

**Commençons à modéliser en 3D le couvercle de la poubelle à couvercle automatique.**

[![image.png](https://innovation.iha.unistra.fr/uploads/images/gallery/2026-02/scaled-1680-/ODYimage.png)](https://innovation.iha.unistra.fr/uploads/images/gallery/2026-02/ODYimage.png)

Réaliser un pavé droit de dimension :

- 80 mm de Longueur
- 80 mm de largeur
- 3 mm de hauteur

[![1.PNG](https://innovation.iha.unistra.fr/uploads/images/gallery/2025-05/scaled-1680-/1.PNG)](https://innovation.iha.unistra.fr/uploads/images/gallery/2025-05/1.PNG)

Ajouter deux pavés droits de dimensions :

- 21 mm de longueur
- 4 mm de largeur
- 3 mm de hauteur

Utiliser le mode "perçage" sur ces blocs, puis les placer dans les coins supérieurs gauche et droite du pavé droit comme indiqué ci-dessous.

[![image.png](https://innovation.iha.unistra.fr/uploads/images/gallery/2026-02/scaled-1680-/Ag0image.png)](https://innovation.iha.unistra.fr/uploads/images/gallery/2026-02/Ag0image.png)[![image.png](https://innovation.iha.unistra.fr/uploads/images/gallery/2026-02/scaled-1680-/IGEimage.png)](https://innovation.iha.unistra.fr/uploads/images/gallery/2026-02/IGEimage.png)

Sélectionner tout le modèle en appuyant sur les touches "CTRL + A" de votre clavier et utiliser l'outil "Regrouper en union" (Ou les touches "CTRL + G" de votre clavier.

[![image.png](https://innovation.iha.unistra.fr/uploads/images/gallery/2026-02/scaled-1680-/SxNimage.png)](https://innovation.iha.unistra.fr/uploads/images/gallery/2026-02/SxNimage.png)

Ajouter 2 cylindres de dimensions :

- 3 mm de longueur
- 3 mm de largeur
- 3 mm de hauteur

Et positionnez-les comme indiqué sur l'image ci-dessous.

[![image.png](https://innovation.iha.unistra.fr/uploads/images/gallery/2026-02/scaled-1680-/ZM7image.png)](https://innovation.iha.unistra.fr/uploads/images/gallery/2026-02/ZM7image.png)

Puis regrouper le tout.

Ajouter un cube et le modifier pour obtenir les dimensions suivantes :

- 65 mm de longueur
- 15 mm de largeur
- 3 mm de hauteur

[![image.png](https://innovation.iha.unistra.fr/uploads/images/gallery/2026-02/scaled-1680-/32simage.png)](https://innovation.iha.unistra.fr/uploads/images/gallery/2026-02/32simage.png)

Ensuite, ajouter un "toit arrondi" et le modifier pour obtenir les dimensions suivantes :

- 15 mm de longueur
- 10 mm de largueur
- 3 mm de hauteur

Le positionner en haut du pavé précédemment créé.

[![image.png](https://innovation.iha.unistra.fr/uploads/images/gallery/2026-02/scaled-1680-/j63image.png)](https://innovation.iha.unistra.fr/uploads/images/gallery/2026-02/j63image.png)

Après cela, ajouter un cylindre de dimensions :

- 3 mm de longueur
- 3 mm de largueur
- 3 mm de hauteur

Puis le mettre en mode "perçage".

Maintenant, il faut le positionner au centre de notre toit arrondi. Pour cela utiliser l'outil "Aligner" :

[![image.png](https://innovation.iha.unistra.fr/uploads/images/gallery/2026-02/scaled-1680-/lpximage.png)](https://innovation.iha.unistra.fr/uploads/images/gallery/2026-02/lpximage.png)

et positionner notre cylindre au centre comme l'image ci-dessous :

[![image.png](https://innovation.iha.unistra.fr/uploads/images/gallery/2026-02/scaled-1680-/YeVimage.png)](https://innovation.iha.unistra.fr/uploads/images/gallery/2026-02/YeVimage.png)

Puis, regrouper le tout ensemble (CTRL + G) :

[![image.png](https://innovation.iha.unistra.fr/uploads/images/gallery/2026-02/scaled-1680-/5Utimage.png)](https://innovation.iha.unistra.fr/uploads/images/gallery/2026-02/5Utimage.png)

Après cela, faites une rotation de 90° à notre modèle 3D.

[![image.png](https://innovation.iha.unistra.fr/uploads/images/gallery/2026-02/scaled-1680-/G1mimage.png)](https://innovation.iha.unistra.fr/uploads/images/gallery/2026-02/G1mimage.png)[![O7Timage.png](https://innovation.iha.unistra.fr/uploads/images/gallery/2026-02/scaled-1680-/o7timage.png)](https://innovation.iha.unistra.fr/uploads/images/gallery/2026-02/o7timage.png)

Ensuite, positionner la forme au centre de notre base en utilisant l'outil "Aligner" :

[![image.png](https://innovation.iha.unistra.fr/uploads/images/gallery/2026-02/scaled-1680-/ng1image.png)](https://innovation.iha.unistra.fr/uploads/images/gallery/2026-02/ng1image.png)[![qweimage.png](https://innovation.iha.unistra.fr/uploads/images/gallery/2026-02/scaled-1680-/sTFqweimage.png)](https://innovation.iha.unistra.fr/uploads/images/gallery/2026-02/sTFqweimage.png)

Il faut à présent faire avancer de 22 mm notre forme par rapport à notre base.

Pour cela, utiliser l'outil "Règle" comme indiqué ci-dessous :

[![image.png](https://innovation.iha.unistra.fr/uploads/images/gallery/2026-02/scaled-1680-/iHMimage.png)](https://innovation.iha.unistra.fr/uploads/images/gallery/2026-02/iHMimage.png)

et la positionner au niveau de notre base :

[![image.png](https://innovation.iha.unistra.fr/uploads/images/gallery/2026-02/scaled-1680-/L1gimage.png)](https://innovation.iha.unistra.fr/uploads/images/gallery/2026-02/L1gimage.png)

Déplacer notre forme de -22 mm :

[![image.png](https://innovation.iha.unistra.fr/uploads/images/gallery/2026-02/scaled-1680-/KM3image.png)](https://innovation.iha.unistra.fr/uploads/images/gallery/2026-02/KM3image.png)

Faites une rotation (de -22.5° ou 22.5° en fonction du sens dans lequel vous travaillez) comme ci-dessous :

[![image.png](https://innovation.iha.unistra.fr/uploads/images/gallery/2026-02/scaled-1680-/za7image.png)](https://innovation.iha.unistra.fr/uploads/images/gallery/2026-02/za7image.png)[![image.png](https://innovation.iha.unistra.fr/uploads/images/gallery/2026-02/scaled-1680-/Tq3image.png)](https://innovation.iha.unistra.fr/uploads/images/gallery/2026-02/Tq3image.png)

Utiliser la flèche verticale (voir image ci-dessous) pour mettre la pièce à -11 mm de haut :

[![image.png](https://innovation.iha.unistra.fr/uploads/images/gallery/2026-02/scaled-1680-/0d5image.png)](https://innovation.iha.unistra.fr/uploads/images/gallery/2026-02/0d5image.png)

Supprimer le reste de notre forme en créant un nouveau bloc en mode "perçage" et le positionner sous la pièce.

[![image.png](https://innovation.iha.unistra.fr/uploads/images/gallery/2026-02/scaled-1680-/vA6image.png)](https://innovation.iha.unistra.fr/uploads/images/gallery/2026-02/vA6image.png)

Sélectionner tout le modèle (CTRL + A) et appuyer sur l'outil "Regrouper" pour obtenir notre couvercle.

[![image.png](https://innovation.iha.unistra.fr/uploads/images/gallery/2026-02/scaled-1680-/QpNimage.png)](https://innovation.iha.unistra.fr/uploads/images/gallery/2026-02/QpNimage.png)

# Utilisation de la découpe laser pour le mécanisme de la poubelle à couvercle automatique

#### <span style="text-decoration: underline;">**Objectif :**</span>

Initiation à la découpe laser et à l’utilisation du logiciel Inkscape.

#### <span style="text-decoration: underline;">**Modélisation :**</span>

- > Si vous possédez déjà Inkscape sur votre ordinateur, ouvrez simplement le logiciel.  
    > Sinon, vous pouvez le télécharger à l’aide du lien suivant :  
    > [https://inkscape.fr/](https://inkscape.fr/)  
    >   
    > Pour en apprendre plus sur inkscape : https://innovation.iha.unistra.fr/books/2-fablab-formation-machines-logiciels/page/inkscape-petite-intro-pour-newbies

Une fois Inkscape ouvert, vous pouvez commencer la modélisation du mécanisme en bois.

#### <span style="text-decoration: underline;">**Étape 1 : Création de la forme principale**</span>

Vous devez créer un rectangle avec les dimensions suivantes :

- 15 mm de largeur
- 112 mm de hauteur

[![image.png](https://innovation.iha.unistra.fr/uploads/images/gallery/2026-02/scaled-1680-/dXAimage.png)](https://innovation.iha.unistra.fr/uploads/images/gallery/2026-02/dXAimage.png)

#### <span style="text-decoration: underline;">**Étape 2 : Création d'un trou d'accueil d'une vis pour la fixation au couvercle**</span>

Ajouter un cercle avec les dimensions suivantes :

- 3 mm de largeur
- 3 mm de hauteur

Positionner ce cercle au centre du rectangle en sélectionnant les 2 formes et à l’aide de l’outil "Aligner", comme montré ci-dessous :

<p class="callout info">Si vous ne trouver pas l'outil, rendez vous dans l'onglet "Objet &gt; Aligner et distribuer..."</p>

[![image.png](https://innovation.iha.unistra.fr/uploads/images/gallery/2026-02/scaled-1680-/mZqimage.png)](https://innovation.iha.unistra.fr/uploads/images/gallery/2026-02/mZqimage.png)

#### **<span style="text-decoration: underline;">Étape 3 : Positionnement du trou à 6 mm du bord supérieur</span>**

Créer un autre rectangle servant de repère avec les dimensions suivantes :

- 6 mm de hauteur
- 2 mm de largeur

Positionner ce rectangle au niveau du bord supérieur, comme indiqué ci-dessous :

[![image.png](https://innovation.iha.unistra.fr/uploads/images/gallery/2026-02/scaled-1680-/TPYimage.png)](https://innovation.iha.unistra.fr/uploads/images/gallery/2026-02/TPYimage.png)

Placer le cercle de manière à ce qu’il soit correctement positionné à 6 mm du bord en vous aidant du rectangle de repère précédemment créé.

[![image.png](https://innovation.iha.unistra.fr/uploads/images/gallery/2026-02/scaled-1680-/Dyoimage.png)](https://innovation.iha.unistra.fr/uploads/images/gallery/2026-02/Dyoimage.png)

Supprimer le rectangle utilisé comme repère, ce qui donne le résultat suivant :

[![image.png](https://innovation.iha.unistra.fr/uploads/images/gallery/2026-02/scaled-1680-/BBXimage.png)](https://innovation.iha.unistra.fr/uploads/images/gallery/2026-02/BBXimage.png)

#### **<span style="text-decoration: underline;">Étape 4 : Création du second trou d'accueil de vis pour la fixation au servomoteur</span>**

Il manque maintenant le trou destiné à la vis reliée au servomoteur.

Créer un cercle avec les dimensions suivantes :

- 2 mm de largeur
- 2 mm de hauteur

Positionnez le au centre horizontal du rectangle (entre les bords droit et gauche) à l’aide du même outil d’alignement vu précédemment.

[![image.png](https://innovation.iha.unistra.fr/uploads/images/gallery/2026-02/scaled-1680-/n8bimage.png)](https://innovation.iha.unistra.fr/uploads/images/gallery/2026-02/n8bimage.png)

#### **<span style="text-decoration: underline;">Étape 5 : Positionnement vertical du second trou</span>**

Pour positionner correctement ce cercle sur l’axe vertical (axe Y), vous devez créer un rectangle servant de repère avec les dimensions suivantes :

- 3 mm de hauteur
- 1 mm de largeur

Positionner ensuite les formes comme montré ci-dessous :

[![image.png](https://innovation.iha.unistra.fr/uploads/images/gallery/2026-02/scaled-1680-/sHVimage.png)](https://innovation.iha.unistra.fr/uploads/images/gallery/2026-02/sHVimage.png)

Une fois le cercle correctement placé, vous pouvez supprimer le rectangle utilisé comme repère.

#### **<span style="text-decoration: underline;">Étape 6 : Découpe au laser</span>**

La modélisation du mécanisme en bois est maintenant terminée.  
Il ne vous reste plus qu’à procéder à la découpe au laser si vous en disposez d'une.

# Fonctionnement et programmation des composants

#### <span style="text-decoration: underline;">**Objectif :**</span>

Comprendre le fonctionnement des composants du projet et apprendre à les programmer

#### <span style="text-decoration: underline;">**1. Introduction à l'Arduino Nano** </span>

##### Qu'est-ce qu'une Arduino Nano ?

L’Arduino Nano est une petite carte électronique programmable basée sur un microcontrôleur. Elle permet de créer facilement des projets interactifs, elle est donc le cerveau du projet. C'est l'Arduino Nano qui décidera de faire tourner le servomoteur en fonction de la longueur mesurée par le capteur à ultrason en exécutant le programme que vous lui avez donné.

<p class="callout info">Si vous n'avez jamais utilisé un Arduino Nano, rendez-vous sur cette page : [https://innovation.iha.unistra.fr/books/robotique-educative/page/quest-ce-que-larduino](https://innovation.iha.unistra.fr/books/robotique-educative/page/quest-ce-que-larduino)</p>

#### <span style="text-decoration: underline;">**2. Capteur à ultrasons HC-SR04** </span>

##### Qu'est ce qu'un capteur à ultrason et comment il fonctionne ?

Le capteur à ultrasons HC-SR04 est un dispositif utilisé pour mesurer des distances sans contact. Il fonctionne en émettant un ultrasons et en mesurant le temps mis par l’écho pour revenir après avoir heurté un obstacle. Simple à utiliser et peu coûteux, il permettra à l'Arduino Nano de détecter votre main afin de donner un signal au servomoteur et d'ouvrir le couvercle de la poubelle.

<p class="callout info">Si vous n'avez jamais utilisé un capteur à ultrasons, rendez-vous sur cette page : [https://innovation.iha.unistra.fr/books/robotique-educative/page/quest-ce-quun-capteur-a-ultrasons](https://innovation.iha.unistra.fr/books/robotique-educative/page/quest-ce-quun-capteur-a-ultrasons)</p>


#### <span style="text-decoration: underline;">**3. Servomoteur SG90 180°** </span>

##### Qu'est ce qu'un servomoteur et comment il fonctionne ?

Le servomoteur SG90 180° est un petit moteur électrique capable de se positionner avec précision sur un angle allant de 0 à 180 degrés. Il permettra à notre poubelle d'ouvrir son couvercle grâce à la rotation et la force exercée par celui-ci sur le couvercle.

<p class="callout info">Si vous n'avez jamais utilisé un servomoteur, rendez-vous sur cette page : [https://innovation.iha.unistra.fr/books/robotique-educative/page/quest-ce-quun-servo-moteur](https://innovation.iha.unistra.fr/books/robotique-educative/page/quest-ce-quun-servo-moteur)</p>

# Assemblage et câblage de la poubelle à couvercle automatique

#### <span style="text-decoration: underline;">**Objectif de la séance :**</span>

Réaliser l’assemblage complet de la poubelle à couvercle automatique.

#### <span style="text-decoration: underline;">**1. Assemblage du capteur à ultrasons**</span>

<p class="callout info">**Le modèle 3D de la poubelle à imprimer en 3D ce trouve en pièce jointe du wiki**</p>

Vous devez positionner le capteur à ultrasons de la manière suivante :

[![Snapchat-1872395610.jpg](https://innovation.iha.unistra.fr/uploads/images/gallery/2026-02/scaled-1680-/snapchat-1872395610.jpg)](https://innovation.iha.unistra.fr/uploads/images/gallery/2026-02/snapchat-1872395610.jpg)[![Snapchat-42481692.jpg](https://innovation.iha.unistra.fr/uploads/images/gallery/2026-02/scaled-1680-/snapchat-42481692.jpg)](https://innovation.iha.unistra.fr/uploads/images/gallery/2026-02/snapchat-42481692.jpg)

Ensuite, vous devez faire passer les fils par le petit trou situé en bas à droite du capteur à ultrasons, comme indiqué ci-dessous :

[![Snapchat-1282883205.jpg](https://innovation.iha.unistra.fr/uploads/images/gallery/2026-02/scaled-1680-/snapchat-1282883205.jpg)](https://innovation.iha.unistra.fr/uploads/images/gallery/2026-02/snapchat-1282883205.jpg)

Une fois le capteur à ultrasons correctement installé, vous pouvez passer à l’installation de la carte Arduino.

Vous devez glisser votre **Arduino Nano**, accompagné de son **shield**, dans l’encoche prévue à cet effet, comme montré ci-dessous :

[![Snapchat-1512569101.jpg](https://innovation.iha.unistra.fr/uploads/images/gallery/2026-02/scaled-1680-/snapchat-1512569101.jpg)](https://innovation.iha.unistra.fr/uploads/images/gallery/2026-02/snapchat-1512569101.jpg)[![Snapchat-226701473.jpg](https://innovation.iha.unistra.fr/uploads/images/gallery/2026-02/scaled-1680-/snapchat-226701473.jpg)](https://innovation.iha.unistra.fr/uploads/images/gallery/2026-02/snapchat-226701473.jpg)

Une fois la carte installée dans son support, vous pouvez clipser le couvercle sur la boîte, comme illustré ci-dessous :

[![Snapchat-469856752.jpg](https://innovation.iha.unistra.fr/uploads/images/gallery/2026-02/scaled-1680-/snapchat-469856752.jpg)](https://innovation.iha.unistra.fr/uploads/images/gallery/2026-02/snapchat-469856752.jpg)[![Snapchat-78847917.jpg](https://innovation.iha.unistra.fr/uploads/images/gallery/2026-02/scaled-1680-/snapchat-78847917.jpg)](https://innovation.iha.unistra.fr/uploads/images/gallery/2026-02/snapchat-78847917.jpg)

Lorsque cette partie technique est terminée, vous pouvez passer à l’assemblage du mécanisme en bois.

Pour cette étape, vous aurez besoin de :

- 1 vis M3 12
- 1 écrou M3
- 1 vis de servomoteur
- 1 tournevis

Dans le plus grand trou de la languette en bois, vous devez insérer la vis M3 12, puis l’insérer également dans la languette du couvercle, comme indiqué ci-dessous :

[![Snapchat-1350187167.jpg](https://innovation.iha.unistra.fr/uploads/images/gallery/2026-02/scaled-1680-/snapchat-1350187167.jpg)](https://innovation.iha.unistra.fr/uploads/images/gallery/2026-02/snapchat-1350187167.jpg)

Vous devez ensuite ajouter l’écrou M3, comme montré ci-dessous :

[![Snapchat-981636419.jpg](https://innovation.iha.unistra.fr/uploads/images/gallery/2026-02/scaled-1680-/snapchat-981636419.jpg)](https://innovation.iha.unistra.fr/uploads/images/gallery/2026-02/snapchat-981636419.jpg)

Une fois le côté couvercle terminé, il ne reste plus qu’à réaliser le montage côté servomoteur.

Pour cela, vous devez utiliser une vis de servomoteur et y fixer un palonnier avec un axe uniquement, comme sur l’image suivante :

[![Snapchat-1692850722.jpg](https://innovation.iha.unistra.fr/uploads/images/gallery/2026-02/scaled-1680-/snapchat-1692850722.jpg)](https://innovation.iha.unistra.fr/uploads/images/gallery/2026-02/snapchat-1692850722.jpg)

Vous devez maintenant ajouter le servomoteur, Mais avant de le positionner il faut l'initialiser. Pour cela mettez un palonnier sur le servomoteur et tournez le dans le sens inverse des aiguilles d'une montre sans forcer. Une fois arivé au bout votre servomoteur sera donc a 0°. Une fois fait positionnez simplement le servomoteur sur son siège.

Puis, ajoutez la pièce en forme de **U** afin de le maintenir en place, comme montré ci-dessous :

[![Snapchat-2138532086.jpg](https://innovation.iha.unistra.fr/uploads/images/gallery/2026-02/scaled-1680-/snapchat-2138532086.jpg)](https://innovation.iha.unistra.fr/uploads/images/gallery/2026-02/snapchat-2138532086.jpg)

Une fois tous les composants en place, il ne reste plus qu’à clipser le palonnier sur le servomoteur, comme indiqué ci-dessous :

[![Snapchat-2143529303.jpg](https://innovation.iha.unistra.fr/uploads/images/gallery/2026-02/scaled-1680-/snapchat-2143529303.jpg)](https://innovation.iha.unistra.fr/uploads/images/gallery/2026-02/snapchat-2143529303.jpg)

L’assemblage est maintenant terminé.

#### <span style="text-decoration: underline;">**Câblage**</span>

Afin que les composants puissent communiquer entre eux, vous devez maintenant réaliser le câblage.

Voici les broches utilisées :

##### <span style="text-decoration: underline;">**Capteur à ultrasons (HC-SR04)**</span>

- VCC → 5V de l’Arduino
- GND → GND de l’Arduino
- TRIG → D9 de l’Arduino
- ECHO → D10 de l’Arduino

##### <span style="text-decoration: underline;">**Servomoteur**</span>

- VCC (fil rouge) → 5V de l’Arduino
- GND (fil noir) → GND de l’Arduino
- Signal (fil jaune) → D12 de l’Arduino

Le montage final doit ressembler à l’exemple ci-dessous

[![image.png](https://innovation.iha.unistra.fr/uploads/images/gallery/2026-02/scaled-1680-/7ajimage.png)](https://innovation.iha.unistra.fr/uploads/images/gallery/2026-02/7ajimage.png)

# Programmation de la poubelle à couvercle automatique

#### <span style="text-decoration: underline;">**Objectif**</span>

Gestion et programmation de l’ensemble des capteurs et actionneurs d’une poubelle à couvercle automatique.

#### **<span style="text-decoration: underline;">Rappel</span>**

Pour programmer la poubelle a couvercle automatique il faut avoir préalablement fait les étapes précédentes disponible [ici](https://innovation.iha.unistra.fr/books/robotique-educative/chapter/club-robotique-poubelle-a-couvercle-automatique)

<div class="flex flex-col text-sm pb-25" id="bkmrk-exercice-2-%E2%80%93-command"><article class="text-token-text-primary w-full focus:outline-none [--shadow-height:45px] has-data-writing-block:pointer-events-none has-data-writing-block:-mt-(--shadow-height) has-data-writing-block:pt-(--shadow-height) [&:has([data-writing-block])>*]:pointer-events-auto scroll-mt-[calc(var(--header-height)+min(200px,max(70px,20svh)))]" data-scroll-anchor="true" data-testid="conversation-turn-10" data-turn="assistant" data-turn-id="request-WEB:1ee0370d-c3db-43e8-a372-374e9551da60-4" dir="auto" tabindex="-1">#### <span style="text-decoration: underline;">**Exercice – Programmer la poubelle a couvercle automatique**</span>

##### <span style="text-decoration: underline;">**Objectif pédagogique**</span>

Associer un **capteur** à un **actionneur** pour automatiser un mécanisme.

##### <span style="text-decoration: underline;">**Etape 1**</span>

Réfléchir à un algorithme.

##### <span style="text-decoration: underline;">**Correction :**</span>

<details><summary></summary>

Lorsque l'Arduino Nano démarre

Initialiser l'ultrason

Pour toujours

 Calculer la distance avec l'ultrason

 Si la distance est inférieur à 5cm Alors

 Positionner le servomoteur à 180° (position du couvercle ouvert)

 Attendre 2 secondes.

 Sinon

 Positionner le servomoteur à 0° (position du couvercle fermé)

</details>#####  <span style="text-decoration: underline;">**Etape 2**</span>

Réaliser le code pour la poubelle grâce a votre algorythme.

##### <span style="text-decoration: underline;">**Correction :**</span>

<details><summary></summary>

[![image.png](https://innovation.iha.unistra.fr/uploads/images/gallery/2026-02/scaled-1680-/50Zimage.png)](https://innovation.iha.unistra.fr/uploads/images/gallery/2026-02/50Zimage.png)

</details>#### <span style="text-decoration: underline;">**Défis supplémentaires (pour aller plus loin)**</span>

<div class="text-base my-auto mx-auto pb-10 [--thread-content-margin:--spacing(4)] @w-sm/main:[--thread-content-margin:--spacing(6)] @w-lg/main:[--thread-content-margin:--spacing(16)] px-(--thread-content-margin)"><div class="text-base my-auto mx-auto pb-10 [--thread-content-margin:--spacing(4)] @w-sm/main:[--thread-content-margin:--spacing(6)] @w-lg/main:[--thread-content-margin:--spacing(16)] px-(--thread-content-margin)"><div class="[--thread-content-max-width:40rem] @w-lg/main:[--thread-content-max-width:48rem] mx-auto max-w-(--thread-content-max-width) flex-1 group/turn-messages focus-visible:outline-hidden relative flex w-full min-w-0 flex-col agent-turn" tabindex="-1"><div class="flex max-w-full flex-col grow"><div class="min-h-8 text-message relative flex w-full flex-col items-end gap-2 text-start break-words whitespace-normal [.text-message+&]:mt-1" data-message-author-role="assistant" data-message-id="5ea04758-5734-413b-bc9e-dc7448c62266" data-message-model-slug="gpt-5-2" dir="auto"><div class="flex w-full flex-col gap-1 empty:hidden first:pt-[1px]"><div class="markdown prose dark:prose-invert w-full wrap-break-word light markdown-new-styling">- Empêcher le servomoteur de bouger inutilement si le couvercle est déjà ouvert.
- Modifier l’angle d’ouverture (ex : 90° au lieu de 0°).
- Ajouter un délai avant la fermeture automatique.

</div></div></div></div></div></div></div>##### <span style="text-decoration: underline;">**Validation attendue**</span>

L’élève sait :

<div class="text-base my-auto mx-auto pb-10 [--thread-content-margin:--spacing(4)] @w-sm/main:[--thread-content-margin:--spacing(6)] @w-lg/main:[--thread-content-margin:--spacing(16)] px-(--thread-content-margin)"><div class="text-base my-auto mx-auto pb-10 [--thread-content-margin:--spacing(4)] @w-sm/main:[--thread-content-margin:--spacing(6)] @w-lg/main:[--thread-content-margin:--spacing(16)] px-(--thread-content-margin)"><div class="[--thread-content-max-width:40rem] @w-lg/main:[--thread-content-max-width:48rem] mx-auto max-w-(--thread-content-max-width) flex-1 group/turn-messages focus-visible:outline-hidden relative flex w-full min-w-0 flex-col agent-turn" tabindex="-1"><div class="flex max-w-full flex-col grow"><div class="min-h-8 text-message relative flex w-full flex-col items-end gap-2 text-start break-words whitespace-normal [.text-message+&]:mt-1" data-message-author-role="assistant" data-message-id="5ea04758-5734-413b-bc9e-dc7448c62266" data-message-model-slug="gpt-5-2" dir="auto"><div class="flex w-full flex-col gap-1 empty:hidden first:pt-[1px]"><div class="markdown prose dark:prose-invert w-full wrap-break-word light markdown-new-styling">- expliquer le rôle du servomoteur,
- décrire la logique complète de la poubelle automatique,
- modifier seul les paramètres (distance, angle, temps).

---

</div></div></div></div></div></div></div>#### <span style="text-decoration: underline;">**Bilan pédagogique**</span>

À la fin de ces deux exercices, les élèves comprennent :

<div class="text-base my-auto mx-auto pb-10 [--thread-content-margin:--spacing(4)] @w-sm/main:[--thread-content-margin:--spacing(6)] @w-lg/main:[--thread-content-margin:--spacing(16)] px-(--thread-content-margin)"><div class="text-base my-auto mx-auto pb-10 [--thread-content-margin:--spacing(4)] @w-sm/main:[--thread-content-margin:--spacing(6)] @w-lg/main:[--thread-content-margin:--spacing(16)] px-(--thread-content-margin)"><div class="[--thread-content-max-width:40rem] @w-lg/main:[--thread-content-max-width:48rem] mx-auto max-w-(--thread-content-max-width) flex-1 group/turn-messages focus-visible:outline-hidden relative flex w-full min-w-0 flex-col agent-turn" tabindex="-1"><div class="flex max-w-full flex-col grow"><div class="min-h-8 text-message relative flex w-full flex-col items-end gap-2 text-start break-words whitespace-normal [.text-message+&]:mt-1" data-message-author-role="assistant" data-message-id="5ea04758-5734-413b-bc9e-dc7448c62266" data-message-model-slug="gpt-5-2" dir="auto"><div class="flex w-full flex-col gap-1 empty:hidden first:pt-[1px]"><div class="markdown prose dark:prose-invert w-full wrap-break-word light markdown-new-styling">- comment **un capteur déclenche une action**,
- comment structurer un programme Arduino,
- comment automatiser un objet du quotidien.

</div></div></div></div></div></div></div>🎯 Résultat : ils sont capables de **recréer et adapter le code d’une poubelle à couvercle automatique**, ce qui est un excellent projet concret et motivant en robotique.

</article></div>##### <span style="text-decoration: underline;">**Correction du code :**</span>

Voici la correction du code :

<details id="bkmrk--3"><summary></summary>

[![HXXimage.png](https://innovation.iha.unistra.fr/uploads/images/gallery/2026-02/scaled-1680-/hxximage.png)](https://innovation.iha.unistra.fr/uploads/images/gallery/2026-02/hxximage.png)

Ce programme met en œuvre un **système d’ouverture automatique de couvercle** basé sur la détection de proximité, typiquement utilisé pour une **poubelle robotisée sans contact** dans un club de robotique.

##### **<span style="text-decoration: underline;">Principe général</span>**

Le code associe :

- un **capteur à ultrasons HC-SR04** pour mesurer la distance entre la poubelle et un obstacle (main, déchet, objet),
- un **servomoteur SG90 (180°)** pour actionner mécaniquement le couvercle.

L’objectif est d’ouvrir le couvercle lorsqu’un utilisateur s’approche, puis de le refermer automatiquement.

##### <span style="text-decoration: underline;">**Déroulement du programme**</span>

1. **Initialisation au démarrage**
    
    
    - L’Arduino configure le capteur HC-SR04 avec :
        
        
        - broche **Trig = 4**
        - broche **Echo = 5**
    - Le servomoteur est connecté à la **broche 9**.
2. **Boucle de fonctionnement continu**
    
    
    - Le capteur ultrason mesure en permanence la **distance en centimètres** devant la poubelle.
    - Cette distance est envoyée sur le **port série**, ce qui permet :
        
        
        - le débogage,
        - la visualisation du comportement du système,
        - l’analyse pédagogique avec les membres du club.
3. **Logique de décision**
    
    
    - **Si la distance mesurée est inférieure à 5 cm** :
        
        
        - le servomoteur est positionné à **0°** → **ouverture du couvercle**,
        - une temporisation de **2 secondes** permet à l’utilisateur de jeter le déchet.
    - **Sinon** :
        
        
        - le servomoteur est positionné à **180°** → **fermeture du couvercle**.

</details>---

#### <span style="text-decoration: underline;">**Conclusion et discussion**</span>

#### <span style="text-decoration: underline;">**Synthèse des compétences acquises**</span>

##### <span style="text-decoration: underline;">**Compétences techniques et mécaniques**</span>

- **Conception mécanique :** savoir imaginer et concevoir le mécanisme d’ouverture automatique du couvercle.
- **Assemblage de composants :** apprendre à manipuler et assembler les différentes parties (couvercle, axe, moteur, composants électroniques, etc.).
- **Choix des matériaux :** identifier les matériaux adaptés au projet.

##### <span style="text-decoration: underline;">**Compétences en électronique**</span>

- Découverte et câblage de capteurs permettant de détecter une présence.
- Découverte et câblage d’un servomoteur pour l’ouverture et la fermeture du couvercle.
- Savoir réaliser un schéma de câblage et connecter les composants sur une carte Arduino.

##### <span style="text-decoration: underline;">**Compétences en programmation**</span>

- Programmation d’un microcontrôleur Arduino : écrire un programme qui gère les capteurs, les délais et l’action du moteur.
- Logique conditionnelle : comprendre comment programmer des conditions simples (si détection → ouverture du couvercle).
- Optimisation du fonctionnement : ajuster les temps de réponse, la durée d’ouverture, etc.

##### <span style="text-decoration: underline;">**Compétences transversales**</span>

- Gestion de projet : planifier les étapes de réalisation, répartir les tâches et respecter les délais.
- Résolution de problèmes : savoir réagir face aux imprévus techniques ou fonctionnels.
- Travail en équipe.

---

#### <span style="text-decoration: underline;">**Perspectives**</span>

- Améliorer le projet (par exemple : ajouter une LED qui s’allume lorsqu’un objet est détecté, améliorer les pièces mécaniques, etc.).
- Imaginer d’autres applications utilisant un capteur à ultrasons et un servomoteur ensemble.

---

##### <span style="text-decoration: underline;">**Projet similaire**</span>

[https://www.hackster.io/FANUEL\_CONRAD/automatic-soap-dispenser-75abd6<svg aria-hidden="true" class="block h-[0.75em] w-[0.75em] stroke-current stroke-[0.75]" data-rtl-flip="" height="20" width="20" xmlns="http://www.w3.org/2000/svg"></svg>](https://www.hackster.io/FANUEL_CONRAD/automatic-soap-dispenser-75abd6)

# Club Robotique - Station de mesure (T°, H)



# Nouvelle page



# Description du projet

#### <span style="text-decoration: underline;">**Introduction**</span>

Pour ce cycle, nous allons réalisée une station de mesure de température de l'air.

#### <span style="text-decoration: underline;">**Description des compétences visées :**</span>

**Compétences techniques et mécaniques :**

- Conception mécanique : savoir imaginer et concevoir la boite qui va contenir les composants
- Assemblage de composants : apprendre à manipuler et assembler les différentes parties (boite, vis, composants électroniques, etc.)
- Choix des matériaux : identifier les matériaux adaptés au projet

**Compétences en électronique :**

- Découverte et câblage de capteurs pour mesurer une température.
- Savoir réaliser un schéma de câblage et connecter les composants sur une carte (ex. Arduino).

**Compétences en programmation :**

- Programmation d'un microcontrôleur Arduino nano : écrire un code qui gère les capteurs, les délais.
- Optimisation du fonctionnement : ajuster les temps de prise de données, etc.

**Compétences transversales :**

- Gestion de projet : planifier les étapes de réalisation, répartir les tâches, respecter les délais.
- Résolution de problèmes : savoir réagir face aux imprévus techniques ou fonctionnels.
- Travail en équipe : collaborer efficacement si le projet est collectif.

#### <span style="text-decoration: underline;">**Description du déroulé des séances :**</span>

**~6 séances :**

- ~Introduction du projet (brainstorming)
- ~2 séances sur TinkerCAD et sur l'impression 3D (création d'une boite pour fixer les composants)
- ~1 séance Capteur : température
- ~2 séance Assemblage et programmation
- ~1 séance Mise en Forme des données
- ~1 séance Analyse et Interprétation des données

#### <span style="text-decoration: underline;">**Matériel :**</span>

- 1 x Arduino Nano ou compatible ([seeeduino](https://www.lextronic.fr/carte-seeeduino-nano-102010268-59340.html), funduino,...) : ~10€
- 1 x câble USB C : ~1€
- 1 x [Sensor Shield](https://www.amazon.fr/Expansion-sensor-Shield-compatible-Arduino/dp/B072FCNF54/ref=sr_1_5?__mk_fr_FR=%C3%85M%C3%85%C5%BD%C3%95%C3%91&crid=EYZL0IOYS08U&keywords=expansion+arduino+nano&qid=1687874510&sprefix=epansion+arduino+nano%2Caps%2C157&sr=8-5) pour Arduino Nano : ~3€
- 1 x Capteur Température (DHT 22): ~2€
- 1 x porte pile 4xaa : ~2€
- Une imprimante 3D pour imprimer les pièces du projet (fichier disponible à la prochaine page)(~4€ de filament) :

# Nouvelle page



# Modélisation et impression en 3D d'un support de fixation pour la station

La station d'analyse de l'air ne possède pas de boite pour contenir ni fixer les composants électroniques, c'est pour ca que je vais vous décrire comment la réalisée.

#### **Objectif (en deux séances)**

L’objectif est de réussir à modéliser un support de fixation pour la station qui va permettre de fixer 2 composants électronique et à apprendre à utiliser une imprimante 3D pour imprimer ce dernier.

#### **Ressources disponibles**

Vous pouvez retrouver le fichiers STL de la boite dans les fichiers en pièce jointe.

Avant de commencer la modification, je vous invite à consulter si vous n'êtes pas à l'aise avec tinkercad :

- Cette [page](https://innovation.iha.unistra.fr/books/2-fablab-formation-machines-logiciels/page/initiation-3d-tinkercad) expliquant comment utiliser Tinkercad pour modifier un fichier 3D
- Cette [page](https://innovation.iha.unistra.fr/books/2-fablab-formation-machines-logiciels/page/creation-dune-classe-tinkercad) expliquant comment créer une classe sur Tinkercad (utile pour le travail en groupe ou en classe).

#### **1. Modélisation 3D** 

Une fois la classe créée sur Tinkercad , avec le fichier de référence correctement chargé, et que tous les élèves sont connectés, nous pouvons passer à la phase de modification.

> Comment créer une classe sur tinkercad :
> 
> https://innovation.iha.unistra.fr/books/2-fablab-formation-machines-logiciels/page/creation-dune-classe-tinkercad

Sur l’interface principale de Tinkercad :


1. 1. **Création du support :**

- Ouvrir TinkerCad et démarrer un nouveau projet.
- Placer un cube de base de 105 x 105 x 2 mm depuis la bibliothèque d'objets.
    
    [![image.png](https://innovation.iha.unistra.fr/uploads/images/gallery/2025-09/scaled-1680-/hbrimage.png)](https://innovation.iha.unistra.fr/uploads/images/gallery/2025-09/hbrimage.png)

**Création des trou pour les vis :**

- Créer un cylindre de 4 x 4 x 5 mm. [![image.png](https://innovation.iha.unistra.fr/uploads/images/gallery/2025-05/scaled-1680-/03uimage.png)](https://innovation.iha.unistra.fr/uploads/images/gallery/2025-05/03uimage.png)
- Créer un cylindre de perçage de 2 x 2 x 5 mm. [![image.png](https://innovation.iha.unistra.fr/uploads/images/gallery/2025-05/scaled-1680-/Ge7image.png)](https://innovation.iha.unistra.fr/uploads/images/gallery/2025-05/Ge7image.png)
- Le centrer et le percer. [![image.png](https://innovation.iha.unistra.fr/uploads/images/gallery/2025-05/scaled-1680-/Rf2image.png) ](https://innovation.iha.unistra.fr/uploads/images/gallery/2025-05/Rf2image.png)[![image.png](https://innovation.iha.unistra.fr/uploads/images/gallery/2025-05/scaled-1680-/jazimage.png)](https://innovation.iha.unistra.fr/uploads/images/gallery/2025-05/jazimage.png)
- Placer 4 cylindre en rectangle avec une longueur entre 2 cylindre de 99 mm et une largeur de 29 mm.
- Ces cylindres vont permettre de placer le shield pour la pile.  
    [![image.png](https://innovation.iha.unistra.fr/uploads/images/gallery/2025-09/scaled-1680-/VGBimage.png)](https://innovation.iha.unistra.fr/uploads/images/gallery/2025-09/VGBimage.png)
- Pour fixer l'esp32, placer 4 cylindre en rectangle avec une longueur entre 2 cylindre de 60 mm et une largeur de 25 mm.  
    [![image.png](https://innovation.iha.unistra.fr/uploads/images/gallery/2025-09/scaled-1680-/sXcimage.png)](https://innovation.iha.unistra.fr/uploads/images/gallery/2025-09/sXcimage.png)

Pour la dernière étape sélectionner toutes vos formes et fusionner les avec l'outil "Regrouper un Union"[![image.png](https://innovation.iha.unistra.fr/uploads/images/gallery/2025-09/scaled-1680-/vqximage.png).](https://innovation.iha.unistra.fr/uploads/images/gallery/2025-09/vqximage.png)

**Validation et Export :**

- Vérifier la modélisation en 3D pour s'assurer de la conformité avec les spécifications.
- Exporter le modèle au format souhaité pour une utilisation ultérieure (STL, etc.).

#### **3. Impression 3D**

Afin de comprendre de qu'est l'impression 3D vous pouvez visiter les pages présente dans la catégorie suivante :

https://innovation.iha.unistra.fr/books/2-fablab-formation-machines-logiciels/chapter/impression-3d-fdm

Et pour savoir comment lancer une impression sur l'une de nos machines, veuillez vous référer à la page suivante :

https://innovation.iha.unistra.fr/books/2-fablab-formation-machines-logiciels/page/lancer-une-impression-avec-bambu-studio

# Impression 3D

<span style="text-decoration: underline;">**Objectifs :**</span>

- Acquérir une introduction à la préparation de modèles pour l'impression 3D.
- Maîtriser l'utilisation du logiciel Cura.
- Préparer un modèle 3D pour l'impression avec les paramètres appropriés.

<span style="text-decoration: underline;">**Compétences techniques :**</span>

- Utilisation générale de la préparation pour l'impression 3D.
- Utilisation spécifique du logiciel Cura.

<span style="text-decoration: underline; color: rgb(0, 0, 0);">**Savoir-être et compétences transversales :**</span>

- Capacité à suivre des instructions détaillées.

<span style="text-decoration: underline;">**Déroulement de la séance :**</span>

- Consignes de sécurité et précautions matérielles.
- Travail individuel.
- Présentation de l'activité du jour, rappel des objectifs.

Pour réaliser le travail d'impression 3D je vous conseille de se rendre sur cette [page](https://innovation.iha.unistra.fr/books/2-fablab-formation-machines-logiciels/page/tutoriel-complet-imprimantes-3d-bambu-lab-a1-mini-a1-x1-carbon) qui explique tout le déroulement pour lancer une impression avec le logiciel Bambu studio.

**Conclusion / Rangement :**

- Récapitulation des points clés de la séance.
- Rangement du matériel en fin de séance.

# Câblage et programmation des composants

#### <span style="text-decoration: underline;">**Objectif :**</span>

Comprendre le fonctionnement des composants du projet, apprendre à les câbler et à les programmer.

<span style="text-decoration: underline;">**Compétences techniques:**</span>

- Programmation pour stocker les valeurs de température dans la mémoire de l'ESP 32.

#### <span style="text-decoration: underline;">Déroulement de la séance</span>

1. <span style="text-decoration: underline;">**Introduction:**</span>
    
    
    - Présentation des éléments nécessaires pour le câblage et la programmation.
    - Importance de la programmation dans le projet de station météo.
2. <span style="text-decoration: underline;">**Câblage:**</span>
    - Commençons à brancher notre DHT 22 sur l'Arduino nano comme sur le schéma ci-dessous. [![image.png](https://innovation.iha.unistra.fr/uploads/images/gallery/2025-09/scaled-1680-/eyMimage.png)](https://innovation.iha.unistra.fr/uploads/images/gallery/2025-09/eyMimage.png)
    - Pour la Station plus avancer voici le schéma de branchement. [![image.png](https://innovation.iha.unistra.fr/uploads/images/gallery/2025-09/scaled-1680-/S4Gimage.png)](https://innovation.iha.unistra.fr/uploads/images/gallery/2025-09/S4Gimage.png)
3. <span style="text-decoration: underline;">**Programmation:**</span>
    
    
    - Commençons par la programmation sur Mblock pour la station avec l'Arduino nano.
    - N'oubliez pas d'installer l'extension pour le capteur en cliquant sur ce bouton [![image.png](https://innovation.iha.unistra.fr/uploads/images/gallery/2024-09/scaled-1680-/cuLimage.png),](https://innovation.iha.unistra.fr/uploads/images/gallery/2024-09/cuLimage.png)puis taper dans la barre de recherche "DHT22" et ensuite juste besoin de l'ajouter. [![image.png](https://innovation.iha.unistra.fr/uploads/images/gallery/2024-09/scaled-1680-/CoXimage.png)](https://innovation.iha.unistra.fr/uploads/images/gallery/2024-09/CoXimage.png)
    - Maintenant vous avez juste besoin de faire le code qui permet de mesuré la température grâce au DHT 22 et qui la renvoie sur le moniteur série.
    - [![image.png](https://innovation.iha.unistra.fr/uploads/images/gallery/2024-11/scaled-1680-/aw7image.png)](https://innovation.iha.unistra.fr/uploads/images/gallery/2024-11/aw7image.png)
    - Avant de téléverser le code n'oubliez pas de décocher ces 2 cases ci-dessous qui se situe dans le moniteur série.
    - [![image.png](https://innovation.iha.unistra.fr/uploads/images/gallery/2024-11/scaled-1680-/gLsimage.png)](https://innovation.iha.unistra.fr/uploads/images/gallery/2024-11/gLsimage.png)
    - Pour la suite nous allons passer sur le logiciel "Arduino IDE" car il nous offre plus de possibilités avec un ESP 32.
    - Le code pour l'acquisition des données se trouve en pièce jointe comme pour le code qui permet de récupérer les données à vous de les modifier pour qu'il soit correctes.

# Phase 4 - Mesure et Analyse des Données de Température avec le Capteur DHT22

### **Phase 4 - Mesure et Analyse des Données de Température avec le Capteur DHT22**

#### <span style="text-decoration: underline;">**Objectifs de la séance :**</span>

- Apprendre à utiliser des stations de mesure de température équipées de capteurs DHT22 et d’une carte Arduino Nano.
- Collecter des données de température à différents endroits sur une période donnée.
- Analyser les données recueillies grâce à Excel et réaliser des courbes de tendance.
- Comprendre l’impact des conditions environnementales sur la température.

#### <span style="text-decoration: underline;"><span style="color: rgb(0, 0, 0); text-decoration: underline;">**Compétences techniques :**</span></span>

- **Utilisation de capteurs et d’Arduino Nano** : Installation, branchement et paramétrage des stations de mesure.
- **Manipulation de données avec Excel** : Importer des fichiers de données, organiser les informations en tableaux, tracer des graphiques (courbes de tendance, histogrammes, etc.).
- **Traitement des données** : Analyser les écarts de température selon les endroits et périodes de mesure.

#### <span style="text-decoration: underline;">**Savoir-être :**</span>

- **Rigueur** : Suivre les étapes de mesure et d'analyse de façon précise et méthodique.
- **Travail en équipe** : Collaborer pour installer les stations, récolter les données et partager les résultats.
- **Autonomie** : Être capable d’installer la station de mesure et d’effectuer des relevés de manière indépendante.

#### <span style="text-decoration: underline;">**Compétences transversales :**</span>

- **Résolution de problèmes** : Interpréter les anomalies ou incohérences dans les données et adapter les mesures.
- **Communication scientifique** : Présenter de manière claire et synthétique les résultats sous forme de graphiques et de conclusions.
- **Esprit critique** : Analyser les données avec discernement pour en tirer des conclusions pertinentes.

---

### <span style="text-decoration: underline;">**Déroulement de la séance :**</span>

1. **Introduction**
    
    
    - Présentation des objectifs de la séance.
    - Rappel du fonctionnement du capteur DHT22 et de l'Arduino Nano.
    - Explication des points de mesure : définir les différents endroits où seront placées les stations (intérieur, extérieur, pièces fermées, etc.).
2. **Installation des stations de mesure**
    
    
    - Mise en place des stations avec le capteur DHT22 à différents endroits prédéfinis.
    - Vérification de la connectivité et du bon fonctionnement de chaque station.
    - Lancement de la collecte des données (durée de mesure à définir : quelques heures ou une journée complète).
3. **Collecte des données**
    
    
    - Chaque participant vérifie régulièrement les stations et enregistre les données (extraction via l’Arduino).
    - Récupération des température via l'Arduino IDE, puis exportation sur Excel ou Open Office. [![image.png](https://innovation.iha.unistra.fr/uploads/images/gallery/2024-10/scaled-1680-/1CKimage.png)](https://innovation.iha.unistra.fr/uploads/images/gallery/2024-10/1CKimage.png)
        
        [![image.png](https://innovation.iha.unistra.fr/uploads/images/gallery/2024-10/scaled-1680-/V2Gimage.png)](https://innovation.iha.unistra.fr/uploads/images/gallery/2024-10/V2Gimage.png)
    - Pour récupérer les température facilement il y a cette formule =DROITE(GAUCHE(A1; NBCAR(A1)-23); 5).
    - Pour récupérer la valeur de l'humidité vous pouvez utiliser cette formule =DROITE(GAUCHE(A1; NBCAR(A1)-2); 5) si vous avez collez votre texte dans la case A1, ensuite si vous êtes sur Exel n'oubliez pas de les convertir en valeurs.
    - [![image.png](https://innovation.iha.unistra.fr/uploads/images/gallery/2024-09/scaled-1680-/SmEimage.png)](https://innovation.iha.unistra.fr/uploads/images/gallery/2024-09/SmEimage.png)
    - 
    - **<span style="color: rgb(224, 62, 45);">Attention si vous êtes sur Libre Office</span>**, il faut copier vos valeur puis les coller en "collage spécial" et ensuite sur "Texte non formaté". [![image.png](https://innovation.iha.unistra.fr/uploads/images/gallery/2024-10/scaled-1680-/cAvTlcimage.png)](https://innovation.iha.unistra.fr/uploads/images/gallery/2024-10/cAvTlcimage.png)
        
          
        Et ensuite appuyer sur "OK".
    - Faire de même pour les valeurs de l'humidité.
4. **Analyse des données sur Excel**
    
    
    - Importation des données dans Excel ou Libre Office.
    - Structuration des informations sous forme de tableau.
    - Création des graphiques : courbes de tendance pour visualiser les écarts de température selon les points de mesure.
    - Pour créer un graphique sur Excel sélectionnez votre tableau et allez dans "Insertion" puis "Graphiques Recommandés".
    - Sur Libre Office sélectionnez vos valeurs puis allez dans "Insertion", "Diagrammes", "Ligne", et prenez le 2ème.
        
        [![image.png](https://innovation.iha.unistra.fr/uploads/images/gallery/2024-10/scaled-1680-/KLbimage.png)](https://innovation.iha.unistra.fr/uploads/images/gallery/2024-10/KLbimage.png)
    - Après avoir obtenue l'image ci-dessus, faites un clic droit sur le graphique et ensuite dans "plage de données" allez dans "séries de données".
    - [![image.png](https://innovation.iha.unistra.fr/uploads/images/gallery/2024-10/scaled-1680-/I23image.png)](https://innovation.iha.unistra.fr/uploads/images/gallery/2024-10/I23image.png)
    - Et vous avez juste à supprimer les données des heures.
    - ![](https://innovation.iha.unistra.fr/uploads/images/gallery/2024-10/embedded-image-tj0bqwek.png)
    - **<span style="color: rgb(224, 62, 45);">Sur Excel</span>** n'oubliez pas de changer l'échelle des température en mettant la température la plus basse à 0.
    - Analyse des résultats : interpréter les différences entre les différents points de mesure.
    - Faire la même chose pour l'humidité.
5. **Conclusion et échanges**
    
    
    - Chaque participant présente ses résultats sous forme de graphiques.
    - Discussion autour des facteurs qui peuvent influencer les écarts de température (environnement, exposition au soleil, ventilation, etc.).
    - Synthèse des principaux apprentissages de la séance.

# Club Robotique - Voiture RC



# Description du projet

#### **Introduction**

Pour ce cycle, nous allons créer une voiture contrôlable avec notre smartphone

##### **Compétences techniques et mécaniques**

- **Assemblage de pièces mécaniques** : Les élèves apprendront à assembler une structure mobile en fixant des moteurs, roues, châssis et autres composants physiques.
- **Transmission et mouvement** : Comprendre comment le mouvement des moteurs se traduit en déplacement des roues et en direction du véhicule.
- **Résolution de problèmes pratiques** : Adapter ou modifier le montage mécanique en cas de désalignement, d’instabilité ou de contraintes physiques.
- **Utilisation d’outils simples** : Utiliser des tournevis, pinces et autres petits outils pour fixer les composants.

##### **Compétences en électronique**

- **Câblage et connexion de composants** : Relier correctement les moteurs, le module Bluetooth, le module de contrôle moteur et l’Arduino Nano en respectant les schémas électroniques qu'ils auront réalisés.
- **Compréhension des circuits de base** : Identifier les entrées/sorties, l'alimentation, la masse, et comprendre le rôle de chaque module.
- **Utilisation de capteurs pour asservir des moteurs** : Grâce aux encodeurs intégrés dans les moteurs, les élèves apprennent comment mesurer la vitesse ou la position d’un moteur afin de synchroniser deux moteurs pour qu'ils aillent à la même vitesse.
- **Sécurité électronique** : Apprendre à manipuler des composants électroniques sans les endommager et à vérifier les connexions pour éviter les courts-circuits.

##### **Compétences en programmation**

- **Écriture de programmes Arduino (langage C/C++)** : Les collégiens apprendront à écrire des programmes simples pour contrôler les moteurs selon des consignes reçues via Bluetooth.
- **Communication série** : Compréhension de la communication entre le smartphone et l’Arduino via le module HC-05.
- **Lecture des capteurs** : Exploiter les données des encodeurs pour améliorer la précision du mouvement (vitesse, distance, etc.).
- **Organisation et logique du code** : Structuration du code en fonctions, boucles, conditions, et apprentissage de la logique algorithmique pour la commande du véhicule.

##### **Compétences transversales**

- **Travail en équipe** : Collaboration pour répartir les tâches (mécanique, câblage, codage, documentation).
- **Gestion de projet** : Planification des étapes, gestion du temps, anticipation des besoins matériels.
- **Communication et documentation** : Rédiger un dossier technique clair, expliquer leur démarche, et présenter leur projet à d'autres.
- **Créativité et innovation** : Personnalisation de la voiture, ajout de fonctionnalités (phares, klaxon, application mobile plus évoluée).
- **Résolution de problèmes** : Développer une capacité à identifier des dysfonctionnements et à tester des solutions.

#### **Description du déroulé des séances:**

~9 séances :

- Introduction du projet (brainstorming)
- ~3 séances sur TinkerCAD et sur l'impression 3D (modification de certaines pièces de la voiture)
- ~1 séance sur l'actionneur : servomoteur RC 360°(déplacement)
- ~1 séance sur le capteur : ultrason (distance)
- ~1 séance sur le couplage capteur moteur
- ~1 séance sur l'assemblage du LittleBot
- ~2 séances sur la programmation du LittleBot

<div class="translate-tooltip-mtz translator-hidden" id="bkmrk-translator"></div>#### **Matériel**

Projet inspiré de : [https://www.thingiverse.com/thing:2417739](https://www.thingiverse.com/thing:2417739)

- 1 x Arduino Nano ou compatible ([seeeduino](https://www.lextronic.fr/carte-seeeduino-nano-102010268-59340.html), funduino,...) : ~10€
- 1 x câble USB C : ~1€
- 1 x [Sensor Shield](https://www.amazon.fr/Expansion-sensor-Shield-compatible-Arduino/dp/B072FCNF54/ref=sr_1_5?__mk_fr_FR=%C3%85M%C3%85%C5%BD%C3%95%C3%91&crid=EYZL0IOYS08U&keywords=expansion+arduino+nano&qid=1687874510&sprefix=epansion+arduino+nano%2Caps%2C157&sr=8-5) pour Arduino Nano : ~3€
- 2 x servomoteur à rotation 360° ([DM-S0090D-R 9g/0.08s/1.6kg.cm](https://fr.aliexpress.com/item/32657260546.html)) : ~2€
- 1 x Module ultrason ([HC-SR04](https://www.amazon.fr/gp/product/B078S45WTG/)) : ~2€
- 2 x élastique pour les roues
- 1 x porte pile 4xaa : ~2€
- Une imprimante 3D pour imprimer les pièces du robot (fichier disponible à la prochaine page)(~5€ de filament) :

# Moteur CC - Principe de fonctionnement

Explication du moteur à courant continue :

[https://www.youtube.com/watch?v=JV50zqHvqAM&amp;list=PLKLRexlzHZepqmJXVM3Kq52xCRRqlOZ0H](https://www.youtube.com/watch?v=JV50zqHvqAM&list=PLKLRexlzHZepqmJXVM3Kq52xCRRqlOZ0H)

Câblage et programmation avec Module L9110S :

[https://www.robot-maker.com/shop/blog/32\_Utilisation-des-encodeurs.html](https://www.robot-maker.com/shop/blog/32_Utilisation-des-encodeurs.html)

Câblage et programmation sans Module L9110D :

[https://wiki.dfrobot.com/Micro\_DC\_Motor\_with\_Encoder-SJ01\_SKU\_\_FIT0450](https://wiki.dfrobot.com/Micro_DC_Motor_with_Encoder-SJ01_SKU__FIT0450)

# Moteur CC - Commande de moteur à courant continu

### Moteur à courant continu "moteur jaune"

[https://seafile.unistra.fr/d/16f415226d224af5bd8f/](https://seafile.unistra.fr/d/16f415226d224af5bd8f/)

[\\Seafile\\Reseau\_FabLab\_Alsace\_Nord\\01\_Robotique\_Educative](https://seafile.unistra.fr/smart-link/062e582b-2ece-406f-a34f-bbfd49bbe16e/)

### Module de contrôle L9110S

Montage :

[![PXL_20240522_131216458_1080p.jpg](https://innovation.iha.unistra.fr/uploads/images/gallery/2024-05/scaled-1680-/pxl-20240522-131216458-1080p.jpg)](https://innovation.iha.unistra.fr/uploads/images/gallery/2024-05/pxl-20240522-131216458-1080p.jpg)

[https://arduino.blaisepascal.fr/controleur-l9110s/](https://arduino.blaisepascal.fr/controleur-l9110s/)

```
#define moteurA_1 5
#define moteurA_2 6
#define moteurB_1 10
#define moteurB_2 11
int vitesseA = 255;  // 0 à 255
int vitesseB = 255;  // 0 à 255
void setup() {
    // Configuration des ports en mode "sortie"
    pinMode(moteurA_1, OUTPUT);
    pinMode(moteurA_2, OUTPUT);
    pinMode(moteurB_1, OUTPUT);
    pinMode(moteurB_2, OUTPUT);
}
void loop() {
  digitalWrite(moteurA_1, LOW);
  analogWrite(moteurA_2, vitesseA);
  digitalWrite(moteurB_1, LOW);
  analogWrite(moteurB_2, vitesseB);
  delay(2000);
  
  analogWrite(moteurA_1, vitesseA);
  digitalWrite(moteurA_2, LOW);
  analogWrite(moteurB_1, vitesseB);
  digitalWrite(moteurB_2, LOW);
 
  delay(2000);
  digitalWrite(moteurA_1, LOW);
  digitalWrite(moteurA_2, LOW);
  digitalWrite(moteurB_1, LOW);
  digitalWrite(moteurB_2, LOW);
  
  delay(3000);
}
```

### Module de contrôle L298

Attention le module entraîne une chute de tension d'environ 3V. Donc si vous voulez délivrer 5V à vos moteurs à courant continu il faudra une alimentation de 8V.

[https://arduino.blaisepascal.fr/pont-en-h-l298n/](https://arduino.blaisepascal.fr/pont-en-h-l298n/)

```
// Pont en H L298N

//Ports de commande du moteur B
int motorPin1 = 10;
int motorPin2 = 11;
int enablePin = 5;
 
// Vitesse du moteur
int state = 55;

void setup() {
    // Configuration des ports en mode "sortie"
    pinMode(motorPin1, OUTPUT);
    pinMode(motorPin2, OUTPUT);
    pinMode(enablePin, OUTPUT);
    
    // Initialisation du port série
    Serial.begin(9600);
}
 
void loop() {
    if (Serial.available() > 0)
    {
      // Lecture de l'entier passé au port série
      state = Serial.parseInt();

      //
      // Sens du mouvement
      //
      if (state > 0) // avant
      {
        digitalWrite(motorPin1, HIGH); 
        digitalWrite(motorPin2, LOW);
        Serial.print("Avant ");
        Serial.println(state);
      }
      else if (state < 0) // arrière
      {
        digitalWrite(motorPin1, LOW); 
        digitalWrite(motorPin2, HIGH);
        Serial.print("Arriere ");
        Serial.println(state);
      }
      else // Stop (freinage)
      {
        digitalWrite(motorPin1, HIGH); 
        digitalWrite(motorPin2, HIGH);
        Serial.println("Stop");
      }

      //
      // Vitesse du mouvement
      //
      analogWrite(enablePin, abs(state));
    }
    delay(100);
}
```

### PWM

[https://arduino.blaisepascal.fr/conversion-numeriqueanalogique-pwm/](https://arduino.blaisepascal.fr/conversion-numeriqueanalogique-pwm/)

# Moteur CC - Contrôler la vitesse avec une roue encodeuse

### Utilisation des encodeurs

[https://wiki.dfrobot.com/Micro\_DC\_Motor\_with\_Encoder-SJ01\_SKU\_\_FIT0450](https://wiki.dfrobot.com/Micro_DC_Motor_with_Encoder-SJ01_SKU__FIT0450)

- Installer [Arduino PID](https://github.com/br3ttb/Arduino-PID-Library/) depuis le gestionnaire de librairies

[![image.png](https://innovation.iha.unistra.fr/uploads/images/gallery/2024-05/scaled-1680-/Jhwimage.png)](https://innovation.iha.unistra.fr/uploads/images/gallery/2024-05/Jhwimage.png)

```
//source Sample Code 2 https://wiki.dfrobot.com/Micro_DC_Motor_with_Encoder-SJ01_SKU__FIT0450#target_3
//The sample code for driving one way motor encoder
#include <PID_v1.h>
const byte encoder0pinA = 2;//A pin -> the interrupt pin 0
const byte encoder0pinB = 3;//B pin -> the digital pin 3
// int E_left =5; //The enabling of L298PDC motor driver board connection to the digital interface port 5
// int M_left =4; //The enabling of L298PDC motor driver board connection to the digital interface port 4
int MOTEUR_A_1 =5; //Connexion du pilote de moteur CC l9110s au port digital 5
int MOTEUR_A_2 =6; //Connexion du pilote de moteur CC l9110s au port digital 6
byte encoder0PinALast;
double duration,abs_duration;//the number of the pulses
boolean Direction;//the rotation direction
boolean result;

double val_output;//Power supplied to the motor PWM value.
double Setpoint;
double Kp=0.6, Ki=5, Kd=0;
PID myPID(&abs_duration, &val_output, &Setpoint, Kp, Ki, Kd, DIRECT);

void setup()
{
  Serial.begin(9600);//Initialize the serial port
   pinMode(MOTEUR_A_1, OUTPUT);   //L298P Control port settings DC motor driver board for the output mode
   pinMode(MOTEUR_A_2, OUTPUT);
   Setpoint =80;  //Set the output value of the PID
   myPID.SetMode(AUTOMATIC);//PID is set to automatic mode
   myPID.SetSampleTime(100);//Set PID sampling frequency is 100ms
  EncoderInit();//Initialize the module
}

void loop()
{
      advance();//Motor Forward
      abs_duration=abs(duration);
      result=myPID.Compute();//PID conversion is complete and returns 1
      if(result)
      {
        Serial.print("Pluse: ");
        Serial.println(duration);
        duration = 0; //Count clear, wait for the next count
      }


}

void EncoderInit()
{
  Direction = true;//default -> Forward
  pinMode(encoder0pinB,INPUT);
  attachInterrupt(0, wheelSpeed, CHANGE);
}

void wheelSpeed()
{
  int Lstate = digitalRead(encoder0pinA);
  if((encoder0PinALast == LOW) && Lstate==HIGH)
  {
    int val = digitalRead(encoder0pinB);
    if(val == LOW && Direction)
    {
      Direction = false; //Reverse
    }
    else if(val == HIGH && !Direction)
    {
      Direction = true;  //Forward
    }
  }
  encoder0PinALast = Lstate;

  if(!Direction)  duration++;
  else  duration--;

}
void advance()//Motor Forward
{
     digitalWrite(MOTEUR_A_1,LOW);
     analogWrite(MOTEUR_A_2,val_output);
}
void back()//Motor reverse
{
     digitalWrite(MOTEUR_A_1,HIGH);
     analogWrite(MOTEUR_A_2,val_output);
}

void Stop()//Motor stops
{
     digitalWrite(MOTEUR_A_2, LOW);
}
```


### Avec la librairie Motor PID

[https://github.com/natnqweb/Motor\_PID](https://github.com/natnqweb/Motor_PID)

### Interruptions

[https://www.best-microcontroller-projects.com/arduino-interrupt.html](https://www.best-microcontroller-projects.com/arduino-interrupt.html)

[https://forum.arduino.cc/t/solved-arduino-nano-and-interrupt-on-pin-6/1090623/3](https://forum.arduino.cc/t/solved-arduino-nano-and-interrupt-on-pin-6/1090623/3)

### Sources

[https://www.robot-maker.com/shop/blog/32\_Utilisation-des-encodeurs.html](https://www.robot-maker.com/shop/blog/32_Utilisation-des-encodeurs.html)

# Le module Bluetooth HC-05

### Test et configuration du module

- Suivre les instructions pour le module HC-05, qui peut être configuré en module maître ou esclave. Le module HC-06 lui ne peut être que esclave, mais il est plus simple à configurer.

[https://www.aranacorp.com/fr/votre-arduino-communique-avec-le-module-hc-05/](https://www.aranacorp.com/fr/votre-arduino-communique-avec-le-module-hc-05/)

- On peut communiquer avec le *module bluetooth HC-05* via la liaison série de l'*Arduino Nano*
- Se renseigner sur ce qu'est une liaison série, par ex. ici : [https://arduino.blaisepascal.fr/bibliotheque-serial/](https://arduino.blaisepascal.fr/bibliotheque-serial/)
- Réaliser le câblage entre l'Arduino Nano et le module bluetooth HC-05

[![image.png](https://innovation.iha.unistra.fr/uploads/images/gallery/2024-05/scaled-1680-/KgFimage.png)](https://innovation.iha.unistra.fr/uploads/images/gallery/2024-05/KgFimage.png)

- Bien vérifier que le Pin qui **R**eçoit les données sur l'Arduino (**R**xDpin) soit connecté au Pin du HC-05 qui **T**ansmet (TxDpin). Et vice-versa, donc chaque câble transmet les données dans une direction opposée.
- Si on prend les Pins RX (Digital 0) et TX (Digital 1) de l'arduino pour connecter RXD et TXD du HC-05, cela rentre en conflit avec la connexion USB entre l'arduino et le PC.
- Donc on prend les Pins Digital 2 et 3 et on utilise la bibliothèque `SoftwareSerial`

```c
//Test et Configuration du module Bluetooth HC-05

//Le port série matériel de l'Arduino Nano (Pins 0/RX et 1/TX) est déjà utilisé pour la liaison Arduino-USB avec l'ordinateur
//On utilise donc une liaison série logicielle pour la liaison Arduino-HC05 avec le module Bluetooth
#include <SoftwareSerial.h>  //Software Serial Port  
#define RxDpin 2    //Pin Digital 2 pour arduino Rx (pin0=serial) 
#define TxDpin 3    //Pin Digital 3 pour arduino Tx (pin1)
//Pour la liaison SoftwareSerial Arduino-HC05, quand on veut configurer le HC-05
//on maintient le bouton à côté de la PIN EN/KEY enfoncé au démarrage de l'Arduino
#define baudrate 38400 //Vitesse pour la liaion Arduino-HC05 en mode configuration
//Pour la liaison SoftwareSerial Arduino-HC05, quand on veut communiquer à travers le bluetooth depuis un smartphone,
//on appaire le HC-05 depuis l'appli avec le mot-de-passe par défaut : 1234
// #define baudrate 9600 //Vitesse pour la liaion Arduino-HC05 en mode utilisation smartphone
SoftwareSerial BTSerie(RxDpin,TxDpin); 

char caractereTexte;
String phraseTexte;

void setup()

{
Serial.begin(9600); //Vitesse (baudRate) pour la liaison Arduino-USB
delay(500);  
Serial.println("En mode communication USB - Pret pour les commandes AT");  
Serial.println("Le HC-05 doit clignoter lentement (2 secondes)");

//Configuration de la liaison SoftwareSerial avec le HC-05  
pinMode(RxDpin, INPUT);   //Configuration du Pin RxD (Receive) en mode entrée
pinMode(TxDpin, OUTPUT);  //Configuration du Pin TxD (Transmit) en mode sortie
BTSerie.begin(baudrate);  //Vitesse pour la liaion Arduino-HC05
if (baudrate==38400) {
  Serial.println("En mode communication USB - Pret pour les commandes AT");
  Serial.println("Le HC-05 doit clignoter lentement (2 secondes)");
}
else if (baudrate==9600){
  Serial.println("En mode smartphone - Pret pour être appairé");
  Serial.println("Le HC-05 doit clignoter rapidement avant d'être appairé");
}
else{
  Serial.println("La vitesse de communication (baudrate) a été personnalisée");
}

delay(500);  
// Commandes AT pour le HC-05
// BTSerie.print("AT+NAME?");  //Demande le nom du module. Noter le ?
// BTSerie.print("AT+NAME=RCcar-HC-05-1");  //Définir le nom du module.
BTSerie.print("AT+VERSION?");  //Demande le N° de version. Noter le ?
// BTSerie.print("AT+UART?");  //Demande la vitesse série (baudrate). Noter le ?
// BTSerie.print("AT+UART=57600,0,0");  //Définir la vitesse série (baudrate).
// BTSerie.print("AT+ROLE?");  //Demande le mode du module, maitre ou esclave. Noter le ?
// BTSerie.print("AT+PSWD?");  //Demande le mot-de-passe du module. Noter le ?
// La console série de l'ordinateur d'où l'on envoie les commandes AT doit être réglée de telle sorte que 
// les fins de ligne soient « les deux, NL et CR », ce qui revient à envoyer \r\n à la fin de chaque commande.
BTSerie.print("\r\n");     // sur HC-05, toutes les commandes doivent se terminer par \r\n
// afficher ce que le module bluetooth répond
  Serial.print( BTSerie.read() );     // afficher sur la console ce qui est lu sur BT
// pour AT+VERSION?, c'est le n° de version puis OK qui s'affiche

void loop(){
  //On lit ce qui est envoyé à l'Arduino depuis la console via la liaison Serial
  readSerialPort();
  //Et on l'Arduino l'envoie au HC-05 via la liaison SoftwareSerial
  if(phraseTexte!="") BTSerie.println(phraseTexte);
  //L'Arduino lit ce que le HC-05 envoie via la liaison SoftwareSerial et l'envoie vers la console
  if (BTSerie.available()>0){
    Serial.write(BTSerie.read());
  }
}
void readSerialPort(){
  phraseTexte="";
  while (Serial.available()) {
    delay(10);
    if (Serial.available() >0) {
      caractereTexte = Serial.read(); 	//le port série envoie des caractères de texte octet par octet (byte from serial buffer)
      phraseTexte += caractereTexte; //construction d'une phrase en concaténant les caractères reçus
    }
 }
}
```

### Pilotage d'un moteur CC via bluetooth

[![image.png](https://innovation.iha.unistra.fr/uploads/images/gallery/2024-05/scaled-1680-/nGximage.png)](https://innovation.iha.unistra.fr/uploads/images/gallery/2024-05/nGximage.png)


<div id="bkmrk--4" style="color: #4e5b61; background-color: #ffffff; font-family: Consolas, 'Courier New', monospace; font-weight: normal; font-size: 14px; line-height: 19px; white-space: pre;"></div><div id="bkmrk--5"></div><div id="bkmrk--6"></div><div id="bkmrk--7"></div>```c
//Voiture modélisée radiocommandée (RC car) avec deux moteurs CC à l'arrière et un servomoteur de direction

#include <Servo.h>
Servo myservo;  // create servo object to control a servo 

//Le port série matériel de l'Arduino Nano (Pins 0/RX et 1/TX) est déjà utilisé pour la liaison Arduino-USB avec l'ordinateur
//On utilise donc une liaison série logicielle pour la liaison Arduino-HC05 avec le module Bluetooth
#include <SoftwareSerial.h>  //Software Serial Port  
#define RxDpin 2    //Pin Digital 2 pour arduino Rx (pin0=serial) 
#define TxDpin 3    //Pin Digital 3 pour arduino Tx (pin1)
//Pour la liaison SoftwareSerial Arduino-HC05, quand on veut configurer le HC-05
//on maintient le bouton à côté de la PIN EN/KEY enfoncé au démarrage de l'Arduino
// #define baudrate 38400 //Vitesse pour la liaion Arduino-HC05 en mode configuration
//Pour la liaison SoftwareSerial Arduino-HC05, quand on veut communiquer à travers le bluetooth depuis un smartphone,
//on appaire le HC-05 depuis l'appli avec le mot-de-passe par défaut : 1234
#define baudrate 9600 //Vitesse pour la liaion Arduino-HC05 en mode utilisation smartphone
SoftwareSerial BTSerie(RxDpin,TxDpin); 

char caractereTexte;
String phraseTexte;

void setup()

{
Serial.begin(9600); //Vitesse (baudRate) pour la liaison Arduino-USB
delay(500);  

//Configuration de la liaison SoftwareSerial avec le HC-05  
pinMode(RxDpin, INPUT);   //Configuration du Pin RxD (Receive) en mode entrée
pinMode(TxDpin, OUTPUT);  //Configuration du Pin TxD (Transmit) en mode sortie
BTSerie.begin(baudrate);  //Vitesse pour la liaion Arduino-HC05
if (baudrate==38400) {
  Serial.println("En mode communication USB - Pret pour les commandes AT");
  Serial.println("Le HC-05 doit clignoter lentement (2 secondes)");
}
else if (baudrate==9600){
  Serial.println("En mode smartphone - Pret pour être appairé");
  Serial.println("Le HC-05 doit clignoter rapidement avant d'être appairé");
}
else{
  Serial.println("La vitesse de communication (baudrate) a été personnalisée");
}

delay(500);

pinMode(13,OUTPUT);   //left motors forward
pinMode(12,OUTPUT);   //left motors reverse
pinMode(11,OUTPUT);   //right motors forward
pinMode(10,OUTPUT);   //right motors reverse
pinMode(9,OUTPUT);   //Led
pinMode(5,OUTPUT);   //SG90 steering motor
myservo.attach(5);  // attaches the servo on pin 5 to the servo object
}
 
void loop() {
  // Serial.write(blueToothSerial.read());  

  //On lit caractere par caractere sur la liaion Arduino-USB et on affiche sur la liaison Arduino-HC05
  if (Serial.available()) {  
    caractereTexte = Serial.read();  
    BTSerie.write(caractereTexte);  
    // Serial.println("Caractere envoye vers bluetooth : ");  
    // Serial.println(caractereRecu);  
  }  
  //On lit caractere par caractere sur la liaion Arduino-HC05 et on affiche sur la liaison Arduino-USB
  if (BTSerie.available()) {  
    caractereTexte = BTSerie.read();  
    Serial.print(caractereTexte);  
  // }  

if(caractereTexte == 'F'){            //move forward(all motors rotate in forward direction)
  digitalWrite(10,LOW);
  digitalWrite(12,LOW);
  digitalWrite(13,HIGH);
  digitalWrite(11,HIGH);
  // myservo.write(90);                  // sets the servo position according to the scaled value
}
 
else if(caractereTexte == 'B'){      //move reverse (all motors rotate in reverse direction)
  digitalWrite(13,LOW);
  digitalWrite(11,LOW);
  digitalWrite(12,HIGH);
  digitalWrite(10,HIGH);
  // myservo.write(90);                  // sets the servo position according to the scaled value
}
 
else if(caractereTexte == 'L'){      //turn right (left side motors rotate in forward direction, right side motors doesn'caractereRecu rotate)
  digitalWrite(10,LOW);
  digitalWrite(12,LOW);
  digitalWrite(13,LOW);
  digitalWrite(11,HIGH);
  // myservo.write(60);                  // sets the servo position according to the scaled value
}
 
else if(caractereTexte == 'R'){      //turn left (right side motors rotate in forward direction, left side motors doesn'caractereRecu rotate)
  digitalWrite(10,LOW);
  digitalWrite(12,LOW);
  digitalWrite(11,LOW);
  digitalWrite(13,HIGH);
  // myservo.write(120);                  // sets the servo position according to the scaled value
}

 
else if(caractereTexte == 'S'){      //STOP (all motors stop)
  digitalWrite(13,LOW);
  digitalWrite(12,LOW);
  digitalWrite(11,LOW);
  digitalWrite(10,LOW);
  // myservo.write(90); 
}
delay(100);
  }
}

```

#### Depuis le clavier de PC  


voir : [https://innovation.iha.unistra.fr/books/robotique-educative/page/rc-car-voiture-modelisme-radiocommandee#bkmrk-depuis-le-moniteur-s](https://innovation.iha.unistra.fr/books/robotique-educative/page/rc-car-voiture-modelisme-radiocommandee#bkmrk-depuis-le-moniteur-s)

#### Depuis une application bluetooth de smartphone Android  


- Ajouter le HC-05 depuis les paramètres Bluetooth Android
- Rentrer le code PIN `1234`
- Démarrer l'Application Bluetooth
- Appuyer sur les flèches / le joystick
- Si les flèches ne fonctionnent pas c'est qu'elles n'envoient pas les bons caractères
- Vous pouvez envoyer directement les caractères via un terminal série d'une Application Bluetooth

Voici les caractères Android :

- F pour Forward : Avancer
- B pour Backward : Reculer
- R pour Right : Aller à droite
- L pour Left : Aller à gauche
- S pour Stop : Arrêter

Voici le fonctionnement du joystick de l'application [E&amp;E: Arduino Automation par Engineers &amp; Electronics](https://play.google.com/store/apps/details?id=com.himanshu.ArduinoAutomation)

- Quand on appuie sur la flèche du haut, le caractère `F` (objet `char`) est envoyé par le téléphone au HC-05 puis à l'Arduino via la liaison série Software Arduino-HC05 qui est configurée par défaut en baudrate 9600 (vérifiable en envoyant la commande `BTSerie.print("AT+UART?");` au HC-05)
- Quand on relâche le bouton, le caractère `S` est envoyé

L'application E&amp;E: Arduino Automation par Engineers &amp; Electronics est testée ne semble pas fonctionner avec les Android récents ni iOS :

- [https://play.google.com/store/apps/details?id=com.himanshu.ArduinoAutomation](https://play.google.com/store/apps/details?id=com.himanshu.ArduinoAutomation&hl=en_GB)
- Chercher une application alternative en tapant les mots-clé bluetooth arduino
- Autres applications possibles : Carino, bluetooth2, BLE RobotCar, Arduino Bluetooth Controller (giumig)

### Sources

[https://knowledge.parcours-performance.com/arduino-bluetooth-hc-05-hc-06/](https://knowledge.parcours-performance.com/arduino-bluetooth-hc-05-hc-06/)

# RC Car - Voiture modélisme radiocommandée

### Pilotage depuis le clavier d'un PC

#### via la liaison série Arduino-USB

- Sans contrôle de vitesse des moteurs CC

```c
//Voiture modélisée radiocommandée (RC car) avec deux moteurs CC à l'arrière et un servomoteur de direction

  // A COMPLETER pour le servo //

//Le port série matériel de l'Arduino Nano (Pins 0/RX et 1/TX) est déjà utilisé pour la liaison Arduino-USB avec l'ordinateur
//On utilise donc une liaison série logicielle pour la liaison Arduino-HC05 avec le module Bluetooth
#include <SoftwareSerial.h>  //Software Serial Port  
#define RxDpin 2    //Pin Digital 2 pour arduino Rx (pin0=serial) 
#define TxDpin 3    //Pin Digital 3 pour arduino Tx (pin1)
//Pour la liaison SoftwareSerial Arduino-HC05, quand on veut configurer le HC-05
//on maintient le bouton à côté de la PIN EN/KEY enfoncé au démarrage de l'Arduino
// #define baudrate 38400 //Vitesse pour la liaion Arduino-HC05 en mode configuration
//Pour la liaison SoftwareSerial Arduino-HC05, quand on veut communiquer à travers le bluetooth depuis un smartphone,
//on appaire le HC-05 depuis l'appli avec le mot-de-passe par défaut : 1234
#define baudrate 9600 //Vitesse pour la liaion Arduino-HC05 en mode utilisation smartphone
SoftwareSerial BTSerie(RxDpin,TxDpin); 

char caractereTexte;
String phraseTexte;

void setup()

{
Serial.begin(9600); //Vitesse (baudRate) pour la liaison Arduino-USB
delay(500);  

//Configuration de la liaison SoftwareSerial avec le HC-05  
pinMode(RxDpin, INPUT);   //Configuration du Pin RxD (Receive) en mode entrée
pinMode(TxDpin, OUTPUT);  //Configuration du Pin TxD (Transmit) en mode sortie
BTSerie.begin(baudrate);  //Vitesse pour la liaion Arduino-HC05
if (baudrate==38400) {
  Serial.println("En mode communication USB - Pret pour les commandes AT");
  Serial.println("Le HC-05 doit clignoter lentement (2 secondes)");
}
else if (baudrate==9600){
  Serial.println("En mode smartphone - Pret pour être appairé");
  Serial.println("Le HC-05 doit clignoter rapidement avant d'être appairé");
}
else{
  Serial.println("La vitesse de communication (baudrate) a été personnalisée");
}

delay(500);

pinMode(13,OUTPUT);   //left motors forward
pinMode(12,OUTPUT);   //left motors reverse
pinMode(11,OUTPUT);   //right motors forward
pinMode(10,OUTPUT);   //right motors reverse
pinMode(9,OUTPUT);   //Led
pinMode(5,OUTPUT);   //SG90 steering motor
  // A COMPLETER pour le servo //
//myservo.attach(5);  // attaches the servo on pin 5 to the servo object
}
 
void loop() {
  // Serial.write(blueToothSerial.read());  

  //On lit caractere par caractere sur la liaion Arduino-HC05 et on affiche sur la liaison Arduino-USB
  if (BTSerie.available()) {  
    caractereTexte = BTSerie.read();  
    Serial.print(caractereTexte);  
  }  
  //On lit caractere par caractere sur la liaion Arduino-USB et on affiche sur la liaison Arduino-HC05
  if (Serial.available()) {  
    caractereTexte = Serial.read();  
    BTSerie.write(caractereTexte);  
    // Serial.println("Caractere envoye vers bluetooth : ");  
    // Serial.println(caractereRecu);  
  // }  

if(caractereTexte == 'F'){            //F comme Forward - avancer (tous les moteurs vers l'avant, servo à 90°)
  digitalWrite(10,LOW);
  digitalWrite(11,HIGH);
  digitalWrite(12,LOW);
  digitalWrite(13,HIGH);
}
 
else if(caractereTexte == 'B'){      //B comme Backward reculer (tous les moteurs en sens inverse, servo à 90°)
  digitalWrite(10,HIGH);
  digitalWrite(11,LOW);
  // A COMPLETER //
}
 
else if(caractereTexte == 'L'){      //L comme Left - tourner à gauche (moteur de droite vers l'avant, gauche à l'arrêt, servo à 120°)
  // A COMPLETER //
}
 
else if(caractereTexte == 'R'){      //R comme Right - tourner à droite (moteur de gauche vers l'avant, droite à l'arrêt, servo à 60°)
  // A COMPLETER //
}

 
else if(caractereTexte == 'S'){      //STOP (tous les moteurs à l'arrêt, servo à 90°)
  // A COMPLETER //
}
delay(100);
  }
}
```

### Pilotage bluetooth avec contrôle de la vitesse des moteur

#### Depuis une application bluetooth de smartphone Android

voir : [https://innovation.iha.unistra.fr/books/robotique-educative/page/le-module-bluetooth-hc-05#bkmrk-application-bluetoot](https://innovation.iha.unistra.fr/books/robotique-educative/page/le-module-bluetooth-hc-05#bkmrk-application-bluetoot)

#### Depuis le moniteur série d'Arduino IDE

Source : https://www.instructables.com/View-Serial-Monitor-Over-Bluetooth/#

- Ajouter le HC-05 dans Windows depuis les périphériques bluetooth et saisir le code PIN `1234`

[![image.png](https://innovation.iha.unistra.fr/uploads/images/gallery/2024-06/scaled-1680-/QZTimage.png)](https://innovation.iha.unistra.fr/uploads/images/gallery/2024-06/QZTimage.png)

- Dans Arduino IDE
- Sélectionner le port série correspondant au HC-05. Il y en a deux, tester les deux

[![image.png](https://innovation.iha.unistra.fr/uploads/images/gallery/2024-06/scaled-1680-/8Thimage.png)](https://innovation.iha.unistra.fr/uploads/images/gallery/2024-06/8Thimage.png)

- Ouvrir le moniteur série

[![image.png](https://innovation.iha.unistra.fr/uploads/images/gallery/2024-06/scaled-1680-/x9Rimage.png)](https://innovation.iha.unistra.fr/uploads/images/gallery/2024-06/x9Rimage.png)

- Envoyer les commandes de pilotage : `F`, `B`, `L`, `R`, `S`.

[![image.png](https://innovation.iha.unistra.fr/uploads/images/gallery/2024-06/scaled-1680-/1WBimage.png)](https://innovation.iha.unistra.fr/uploads/images/gallery/2024-06/1WBimage.png)

```
//source Sample Code 2 https://wiki.dfrobot.com/Micro_DC_Motor_with_Encoder-SJ01_SKU__FIT0450#target_3
//The sample code for driving one way motor encoder
#include <PID_v1.h>
const byte encoder0pinA = 0;//A pin -> the interrupt pin 0
const byte encoder0pinB = 1;//B pin -> the digital pin 3
const byte encoder0pinA_2 = 8;//A pin -> the interrupt pin 0
const byte encoder0pinB_2 = 9;//B pin -> the digital pin 3
// int E_left =5; //The enabling of L298PDC motor driver board connection to the digital interface port 5
// int M_left =4; //The enabling of L298PDC motor driver board connection to the digital interface port 4
int MOTEUR_A_1 =12; //Connexion du pilote de moteur CC l9110s au port digital 5
int MOTEUR_A_2 =13; //Connexion du pilote de moteur CC l9110s au port digital 6
int MOTEUR_B_1 =10; //Connexion du pilote de moteur CC l9110s au port digital 5
int MOTEUR_B_2 =11; //Connexion du pilote de moteur CC l9110s au port digital 6
byte encoder0PinALast;
double duration,abs_duration;//the number of the pulses
boolean Direction;//the rotation direction
boolean result;

double val_output;//Power supplied to the motor PWM value.
double Setpoint;
double Kp=0.6, Ki=5, Kd=0;
PID myPID(&abs_duration, &val_output, &Setpoint, Kp, Ki, Kd, DIRECT);

#include <Servo.h>
#define trigPin 6
#define echoPin 7
// #define EncoderInit
Servo servo1;
Servo servo2;
Servo monServo;

//Le port série matériel de l'Arduino Nano (Pins 0/RX et 1/TX) est déjà utilisé pour la liaison Arduino-USB avec l'ordinateur
//On utilise donc une liaison série logicielle pour la liaison Arduino-HC05 avec le module Bluetooth
#include <SoftwareSerial.h>  //Software Serial Port  
#define RxDpin 2    //Pin Digital 2 pour arduino Rx (pin0=serial) 
#define TxDpin 3    //Pin Digital 3 pour arduino Tx (pin1)
//Pour la liaison SoftwareSerial Arduino-HC05, quand on veut configurer le HC-05
//on maintient le bouton à côté de la PIN EN/KEY enfoncé au démarrage de l'Arduino
// #define baudrate 38400 //Vitesse pour la liaion Arduino-HC05 en mode configuration
//Pour la liaison SoftwareSerial Arduino-HC05, quand on veut communiquer à travers le bluetooth depuis un smartphone,
//on appaire le HC-05 depuis l'appli avec le mot-de-passe par défaut : 1234
#define baudrate 9600
#include <Servo.h>
Servo myservo;  // create servo object to control a servo 


SoftwareSerial BTSerie(RxDpin,TxDpin); 

char caractereTexte;
String phraseTexte;

void setup()
{
  Serial.begin(9600);//Initialize the serial port
   pinMode(MOTEUR_A_1, OUTPUT);   //L298P Control port settings DC motor driver board for the output mode
   pinMode(MOTEUR_A_2, OUTPUT);
   pinMode(MOTEUR_B_1, OUTPUT);   //L298P Control port settings DC motor driver board for the output mode
   pinMode(MOTEUR_B_2, OUTPUT);   
   Setpoint =80;  //Set the output value of the PID
   myPID.SetMode(AUTOMATIC);//PID is set to automatic mode
   myPID.SetSampleTime(100);//Set PID sampling frequency is 100ms
  EncoderInit();//Initialize the module

pinMode(RxDpin, INPUT);   //Configuration du Pin RxD (Receive) en mode entrée
pinMode(TxDpin, OUTPUT);  //Configuration du Pin TxD (Transmit) en mode sortie
BTSerie.begin(baudrate); 
// Commandes AT pour le HC-05
// BTSerie.print("AT+NAME?");  //Demande le nom du module. Noter le ?
// BTSerie.print("AT+NAME=RCcar-HC-05-1");  //Définir le nom du module.
BTSerie.print("AT+VERSION?");  //Demande le N° de version. Noter le ?
// BTSerie.print("AT+UART?");  //Demande la vitesse série (baudrate). Noter le ?
// BTSerie.print("AT+UART=57600,0,0");  //Définir la vitesse série (baudrate).
// BTSerie.print("AT+ROLE?");  //Demande le mode du module, maitre ou esclave. Noter le ?
// BTSerie.print("AT+PSWD?");  //Demande le mot-de-passe du module. Noter le ?
// La console série de l'ordinateur d'où l'on envoie les commandes AT doit être réglée de telle sorte que 
// les fins de ligne soient « les deux, NL et CR », ce qui revient à envoyer \r\n à la fin de chaque commande.
BTSerie.print("\r\n");     // sur HC-05, toutes les commandes doivent se terminer par \r\n
// afficher ce que le module bluetooth répond
  Serial.print( BTSerie.read() );     // afficher sur la console ce qui est lu sur BT
// pour AT+VERSION?, c'est le n° de version puis OK qui s'affiche

if (baudrate==38400) {
  Serial.println("En mode communication USB - Pret pour les commandes AT");
  Serial.println("Le HC-05 doit clignoter lentement (2 secondes)");
}
else if (baudrate==9600){
  Serial.println("En mode smartphone - Pret pour être appairé");
  Serial.println("Le HC-05 doit clignoter rapidement avant d'être appairé");
}
else{
  Serial.println("La vitesse de communication (baudrate) a été personnalisée");
}
monServo.attach(5);
delay(500);

pinMode(13,OUTPUT);   //left motors forward
pinMode(12,OUTPUT);   //left motors reverse
pinMode(11,OUTPUT);   //right motors forward
pinMode(10,OUTPUT);   //right motors reverse
pinMode(9,OUTPUT);   //Led
pinMode(5,OUTPUT);   //SG90 steering motor
  // A COMPLETER pour le servo //
//myservo.attach(5);  // attaches the servo on pin 5 to the servo object
}
 

void loop()
{

//On lit caractere par caractere sur la liaion Arduino-USB et on affiche sur la liaison Arduino-HC05
if (Serial.available()) {  
caractereTexte = Serial.read();  
BTSerie.write(caractereTexte); 
// Serial.println("Caractere envoye vers bluetooth : ");  
// Serial.println(caractereRecu);  
}  

//On lit caractere par caractere sur la liaion Arduino-HC05 et on affiche sur la liaison Arduino-USB
if (BTSerie.available()) {  
caractereTexte = BTSerie.read();  
Serial.print(caractereTexte);  
// }  

if(caractereTexte == 'F'){            //move forward(all motors rotate in forward direction)
  advance();//Motor Forward
  monServo.write(90);                  // sets the servo position according to the scaled value
}
 
else if(caractereTexte == 'B'){      //move reverse (all motors rotate in reverse direction)
  back();//Motor reverse
  monServo.write(90);                  // sets the servo position according to the scaled value 
}
 
else if(caractereTexte == 'L'){      //turn right (left side motors rotate in forward direction, right side motors doesn'caractereRecu rotate)
  left();
  monServo.write(60);                  // sets the servo position according to the scaled value
}
 
else if(caractereTexte == 'R'){      //turn left (right side motors rotate in forward direction, left side motors doesn'caractereRecu rotate)
  right();
  monServo.write(120);                  // sets the servo position according to the scaled value
}

 
else if(caractereTexte == 'S'){      //STOP (all motors stop)
  Stop();
  monServo.write(90); 
}
abs_duration=abs(duration);
      result=myPID.Compute();//PID conversion is complete and returns 1
      if(result)
      {
        Serial.print("Pluse: ");
        Serial.println(duration);
        duration = 0; //Count clear, wait for the next count
      }              // sets the servo position according to the scaled value
}
}
void EncoderInit()
{
  Direction = true;//default -> Forward
  pinMode(encoder0pinB,INPUT);
  attachInterrupt(0, wheelSpeed, CHANGE);
}

void wheelSpeed()
{
  int Lstate = digitalRead(encoder0pinA);
  if((encoder0PinALast == LOW) && Lstate==HIGH)
  {
    int val = digitalRead(encoder0pinB);
    if(val == LOW && Direction)
    {
      Direction = false; //Reverse
    }
    else if(val == HIGH && !Direction)
    {
      Direction = true;  //Forward
    }
  }
  encoder0PinALast = Lstate;

  if(!Direction)  duration++;
  else  duration--;

}
void advance()//Motor Forward
{
     digitalWrite(MOTEUR_A_1,LOW);
     digitalWrite(MOTEUR_A_2,val_output);
     digitalWrite(MOTEUR_B_1,val_output);
     digitalWrite(MOTEUR_B_2,LOW);     
}
void back()//Motor reverse
{
     digitalWrite(MOTEUR_A_1,val_output);
     digitalWrite(MOTEUR_A_2,LOW);
     digitalWrite(MOTEUR_B_1,LOW);
     digitalWrite(MOTEUR_B_2,val_output);

}
void left()
{
     digitalWrite(MOTEUR_A_1,LOW);
     digitalWrite(MOTEUR_A_2,val_output);
     digitalWrite(MOTEUR_B_1,LOW);
     digitalWrite(MOTEUR_B_2,LOW);  
}
void right()
{
     digitalWrite(MOTEUR_A_1,LOW);
     digitalWrite(MOTEUR_A_2,LOW);
     digitalWrite(MOTEUR_B_1,val_output);
     digitalWrite(MOTEUR_B_2,LOW);
}

void Stop()//Motor stops
{
     digitalWrite(MOTEUR_A_1, LOW);
     digitalWrite(MOTEUR_A_2, LOW);
     digitalWrite(MOTEUR_B_1, LOW);
     digitalWrite(MOTEUR_B_2, LOW);
}

```

### Sources

[https://github.com/himanshus2847/Bluetooth-Controlled-Robot-using-Arduino](https://github.com/himanshus2847/Bluetooth-Controlled-Robot-using-Arduino)

[https://www.youtube.com/watch?v=o-aRCxh9IhE](https://www.youtube.com/watch?v=o-aRCxh9IhE)

# Code voiture RC

[![image.png](https://innovation.iha.unistra.fr/uploads/images/gallery/2024-06/scaled-1680-/1WBimage.png)](https://innovation.iha.unistra.fr/uploads/images/gallery/2024-06/1WBimage.png)

```
//source Sample Code 2 https://wiki.dfrobot.com/Micro_DC_Motor_with_Encoder-SJ01_SKU__FIT0450#target_3
//The sample code for driving one way motor encoder
#include <PID_v1.h>
const byte encoder0pinA = 0;//A pin -> the interrupt pin 0
const byte encoder0pinB = 1;//B pin -> the digital pin 3
const byte encoder0pinA_2 = 8;//A pin -> the interrupt pin 0
const byte encoder0pinB_2 = 9;//B pin -> the digital pin 3
// int E_left =5; //The enabling of L298PDC motor driver board connection to the digital interface port 5
// int M_left =4; //The enabling of L298PDC motor driver board connection to the digital interface port 4
int MOTEUR_A_1 =12; //Connexion du pilote de moteur CC l9110s au port digital 5
int MOTEUR_A_2 =13; //Connexion du pilote de moteur CC l9110s au port digital 6
int MOTEUR_B_1 =10; //Connexion du pilote de moteur CC l9110s au port digital 5
int MOTEUR_B_2 =11; //Connexion du pilote de moteur CC l9110s au port digital 6
byte encoder0PinALast;
double duration,abs_duration;//the number of the pulses
boolean Direction;//the rotation direction
boolean result;

double val_output;//Power supplied to the motor PWM value.
double Setpoint;
double Kp=0.6, Ki=5, Kd=0;
PID myPID(&abs_duration, &val_output, &Setpoint, Kp, Ki, Kd, DIRECT);

#include <Servo.h>
#define trigPin 6
#define echoPin 7
// #define EncoderInit
Servo servo1;
Servo servo2;
Servo monServo;

//Le port série matériel de l'Arduino Nano (Pins 0/RX et 1/TX) est déjà utilisé pour la liaison Arduino-USB avec l'ordinateur
//On utilise donc une liaison série logicielle pour la liaison Arduino-HC05 avec le module Bluetooth
#include <SoftwareSerial.h>  //Software Serial Port  
#define RxDpin 2    //Pin Digital 2 pour arduino Rx (pin0=serial) 
#define TxDpin 3    //Pin Digital 3 pour arduino Tx (pin1)
//Pour la liaison SoftwareSerial Arduino-HC05, quand on veut configurer le HC-05
//on maintient le bouton à côté de la PIN EN/KEY enfoncé au démarrage de l'Arduino
// #define baudrate 38400 //Vitesse pour la liaion Arduino-HC05 en mode configuration
//Pour la liaison SoftwareSerial Arduino-HC05, quand on veut communiquer à travers le bluetooth depuis un smartphone,
//on appaire le HC-05 depuis l'appli avec le mot-de-passe par défaut : 1234
#define baudrate 9600
#include <Servo.h>
Servo myservo;  // create servo object to control a servo 


SoftwareSerial BTSerie(RxDpin,TxDpin); 

char caractereTexte;
String phraseTexte;

void setup()
{
  Serial.begin(9600);//Initialize the serial port
   pinMode(MOTEUR_A_1, OUTPUT);   //L298P Control port settings DC motor driver board for the output mode
   pinMode(MOTEUR_A_2, OUTPUT);
   pinMode(MOTEUR_B_1, OUTPUT);   //L298P Control port settings DC motor driver board for the output mode
   pinMode(MOTEUR_B_2, OUTPUT);   
   Setpoint =80;  //Set the output value of the PID
   myPID.SetMode(AUTOMATIC);//PID is set to automatic mode
   myPID.SetSampleTime(100);//Set PID sampling frequency is 100ms
  EncoderInit();//Initialize the module

pinMode(RxDpin, INPUT);   //Configuration du Pin RxD (Receive) en mode entrée
pinMode(TxDpin, OUTPUT);  //Configuration du Pin TxD (Transmit) en mode sortie
BTSerie.begin(baudrate); 
// Commandes AT pour le HC-05
// BTSerie.print("AT+NAME?");  //Demande le nom du module. Noter le ?
// BTSerie.print("AT+NAME=RCcar-HC-05-1");  //Définir le nom du module.
BTSerie.print("AT+VERSION?");  //Demande le N° de version. Noter le ?
// BTSerie.print("AT+UART?");  //Demande la vitesse série (baudrate). Noter le ?
// BTSerie.print("AT+UART=57600,0,0");  //Définir la vitesse série (baudrate).
// BTSerie.print("AT+ROLE?");  //Demande le mode du module, maitre ou esclave. Noter le ?
// BTSerie.print("AT+PSWD?");  //Demande le mot-de-passe du module. Noter le ?
// La console série de l'ordinateur d'où l'on envoie les commandes AT doit être réglée de telle sorte que 
// les fins de ligne soient « les deux, NL et CR », ce qui revient à envoyer \r\n à la fin de chaque commande.
BTSerie.print("\r\n");     // sur HC-05, toutes les commandes doivent se terminer par \r\n
// afficher ce que le module bluetooth répond
  Serial.print( BTSerie.read() );     // afficher sur la console ce qui est lu sur BT
// pour AT+VERSION?, c'est le n° de version puis OK qui s'affiche

if (baudrate==38400) {
  Serial.println("En mode communication USB - Pret pour les commandes AT");
  Serial.println("Le HC-05 doit clignoter lentement (2 secondes)");
}
else if (baudrate==9600){
  Serial.println("En mode smartphone - Pret pour être appairé");
  Serial.println("Le HC-05 doit clignoter rapidement avant d'être appairé");
}
else{
  Serial.println("La vitesse de communication (baudrate) a été personnalisée");
}
monServo.attach(5);
delay(500);

pinMode(13,OUTPUT);   //left motors forward
pinMode(12,OUTPUT);   //left motors reverse
pinMode(11,OUTPUT);   //right motors forward
pinMode(10,OUTPUT);   //right motors reverse
pinMode(9,OUTPUT);   //Led
pinMode(5,OUTPUT);   //SG90 steering motor
  // A COMPLETER pour le servo //
//myservo.attach(5);  // attaches the servo on pin 5 to the servo object
}
 

void loop()
{

  //On lit caractere par caractere sur la liaion Arduino-HC05 et on affiche sur la liaison Arduino-USB
  if (BTSerie.available()) {  
    caractereTexte = BTSerie.read();  
    Serial.print(caractereTexte);  
  }  

//On lit caractere par caractere sur la liaion Arduino-USB et on affiche sur la liaison Arduino-HC05
  if (Serial.available()) {  
    caractereTexte = Serial.read();  
    BTSerie.write(caractereTexte); 
    // Serial.println("Caractere envoye vers bluetooth : ");  
    // Serial.println(caractereRecu);  
  // }  

if(caractereTexte == 'F'){            //move forward(all motors rotate in forward direction)
  advance();//Motor Forward
  monServo.write(90);                  // sets the servo position according to the scaled value
}
 
else if(caractereTexte == 'B'){      //move reverse (all motors rotate in reverse direction)
  back();//Motor reverse
  monServo.write(90);                  // sets the servo position according to the scaled value 
}
 
else if(caractereTexte == 'L'){      //turn right (left side motors rotate in forward direction, right side motors doesn'caractereRecu rotate)
  left();
  monServo.write(60);                  // sets the servo position according to the scaled value
}
 
else if(caractereTexte == 'R'){      //turn left (right side motors rotate in forward direction, left side motors doesn'caractereRecu rotate)
  right();
  monServo.write(120);                  // sets the servo position according to the scaled value
}

 
else if(caractereTexte == 'S'){      //STOP (all motors stop)
  Stop();
  monServo.write(90); 
}
abs_duration=abs(duration);
      result=myPID.Compute();//PID conversion is complete and returns 1
      if(result)
      {
        Serial.print("Pluse: ");
        Serial.println(duration);
        duration = 0; //Count clear, wait for the next count
      }              // sets the servo position according to the scaled value
}
}
void EncoderInit()
{
  Direction = true;//default -> Forward
  pinMode(encoder0pinB,INPUT);
  attachInterrupt(0, wheelSpeed, CHANGE);
}

void wheelSpeed()
{
  int Lstate = digitalRead(encoder0pinA);
  if((encoder0PinALast == LOW) && Lstate==HIGH)
  {
    int val = digitalRead(encoder0pinB);
    if(val == LOW && Direction)
    {
      Direction = false; //Reverse
    }
    else if(val == HIGH && !Direction)
    {
      Direction = true;  //Forward
    }
  }
  encoder0PinALast = Lstate;

  if(!Direction)  duration++;
  else  duration--;

}
void advance()//Motor Forward
{
     digitalWrite(MOTEUR_A_1,LOW);
     digitalWrite(MOTEUR_A_2,val_output);
     digitalWrite(MOTEUR_B_1,val_output);
     digitalWrite(MOTEUR_B_2,LOW);     
}
void back()//Motor reverse
{
     digitalWrite(MOTEUR_A_1,val_output);
     digitalWrite(MOTEUR_A_2,LOW);
     digitalWrite(MOTEUR_B_1,LOW);
     digitalWrite(MOTEUR_B_2,val_output);

}
void left()
{
     digitalWrite(MOTEUR_A_1,LOW);
     digitalWrite(MOTEUR_A_2,val_output);
     digitalWrite(MOTEUR_B_1,LOW);
     digitalWrite(MOTEUR_B_2,LOW);  
}
void right()
{
     digitalWrite(MOTEUR_A_1,LOW);
     digitalWrite(MOTEUR_A_2,LOW);
     digitalWrite(MOTEUR_B_1,val_output);
     digitalWrite(MOTEUR_B_2,LOW);
}

void Stop()//Motor stops
{
     digitalWrite(MOTEUR_A_1, LOW);
     digitalWrite(MOTEUR_A_2, LOW);
     digitalWrite(MOTEUR_B_1, LOW);
     digitalWrite(MOTEUR_B_2, LOW);
}

```

# Club Robotique - Bras Robotique



# Phase 1 - Robot 4 DDL à parallélogramme ARM.UNO

[![Capture d’écran 2025-01-16 105824.png](https://innovation.iha.unistra.fr/uploads/images/gallery/2025-01/scaled-1680-/capture-decran-2025-01-16-105824.png)](https://innovation.iha.unistra.fr/uploads/images/gallery/2025-01/capture-decran-2025-01-16-105824.png)

# Phase 2 - Assemblage des pièces

#### <span style="color: rgb(0, 0, 0);">**<span style="text-decoration: underline;">Phase 1 - Assemblage des pièces</span>**</span>

#### **Objectifs pédagogiques**

- **Découverte de la mécanique et de la robotique :** Initier les élèves à la construction d’un système mécanique articulé.
- **Travail en équipe :** Encourager la collaboration entre les élèves pour atteindre un objectif commun en temps limité.
- **Précision et méthode :** Apprendre à assembler un objet technique en suivant des étapes précises, avec soin et rigueur.
- **Pratique des compétences manuelles et techniques :** Familiariser les élèves avec l’utilisation d’outils de montage et la lecture d’un schéma d’assemblage.

#### **Compétences techniques visées**

- **Assemblage mécanique :** Être capable d'assembler les pièces du bras robot (structure, axes, moteurs, etc.) de manière précise et dans un ordre logique.
- **Utilisation d’outils :** Apprendre à manier correctement les outils nécessaires (tournevis, clé Allen, etc.).
- **Lecture d’un schéma technique :** Savoir interpréter un plan d'assemblage et identifier les différentes pièces et leur emplacement.
- **Montage des éléments motorisés :** Installer correctement les moteurs et éléments mécaniques du bras robot.
- 

#### **Savoir être (compétences comportementales)**

- **Travail en équipe :** Répartir les tâches de manière équitable et efficace au sein du groupe.
- **Rigueur et précision :** Être attentif aux détails lors de l’assemblage pour éviter les erreurs.
- **Gestion du temps :** Apprendre à respecter le temps imparti pour finaliser le projet.
- **Adaptabilité :** Savoir réagir en cas de difficulté ou de problème technique, et adapter sa méthode de travail.

#### **Compétences transversales**

- **Collaboration et communication :** Travailler efficacement en groupe, en partageant les responsabilités et en communiquant clairement.
- **Organisation :** Organiser les étapes de l'assemblage de manière logique et structurée.
- **Résolution de problèmes :** Trouver des solutions rapidement en cas de dysfonctionnements ou de blocages lors de l'assemblage.
- **Apprentissage pratique :** Développer des compétences en manipulant des objets techniques et en résolvant des problèmes concrets.

### <span style="text-decoration: underline;">**Montage du bras robotique :**</span>

<span style="text-decoration: underline;">**FICHE DE RÉFÉRENCE RAPIDE DES PARTIES STRUCTURELLES :**</span>

[![image.png](https://innovation.iha.unistra.fr/uploads/images/gallery/2025-01/scaled-1680-/image.png)](https://innovation.iha.unistra.fr/uploads/images/gallery/2025-01/image.png)

[![image.png](https://innovation.iha.unistra.fr/uploads/images/gallery/2025-01/scaled-1680-/v4Limage.png)](https://innovation.iha.unistra.fr/uploads/images/gallery/2025-01/v4Limage.png)

- 12 pièces - Écrou M3
- 32 pièce - Vis M3 x 12
- 4 pièces - Vis M3 x 20

[ ](https://innovation.iha.unistra.fr/uploads/images/gallery/2025-01/NRrimage.png)

##### <span style="text-decoration: underline;"><span style="color: rgb(0, 0, 0); text-decoration: underline;">**Montage de la Base :**</span></span>

[![Capture d’écran 2025-01-14 115314.png](https://innovation.iha.unistra.fr/uploads/images/gallery/2025-01/scaled-1680-/capture-decran-2025-01-14-115314.png)](https://innovation.iha.unistra.fr/uploads/images/gallery/2025-01/capture-decran-2025-01-14-115314.png)

##### **<span style="text-decoration: underline;">Matériel nécessaire :</span>**

[![Capture d’écran 2025-01-14 115635.png](https://innovation.iha.unistra.fr/uploads/images/gallery/2025-01/scaled-1680-/capture-decran-2025-01-14-115635.png)](https://innovation.iha.unistra.fr/uploads/images/gallery/2025-01/capture-decran-2025-01-14-115635.png)

##### <span style="text-decoration: underline;">**Etape 1 :**</span>

[![Capture d’écran 2025-01-14 115928.png](https://innovation.iha.unistra.fr/uploads/images/gallery/2025-01/scaled-1680-/capture-decran-2025-01-14-115928.png)](https://innovation.iha.unistra.fr/uploads/images/gallery/2025-01/capture-decran-2025-01-14-115928.png)

Fixez d'abord un palonnier double face à l'aide des petites vis fournies avec les servomoteurs.  
Faites attention à l'orientation des pièces. Notez la petite flèche gravée sur la pièce, qui pointe vers l'avant du bras. Positionnez le palonnier comme indiqué, puis retournez les deux pièces et fixez les deux petites vis.  
Positionnez toujours les vis à mi-distance ou plus loin du moyeu central du palonnier. Cela permet d'éviter une éventuelle interférence entre les têtes des vis et certains boîtiers de servomoteurs.

##### <span style="text-decoration: underline;">**Etape 2 :**</span>

##### [![Capture d’écran 2025-01-14 140932.png](https://innovation.iha.unistra.fr/uploads/images/gallery/2025-01/scaled-1680-/capture-decran-2025-01-14-140932.png)](https://innovation.iha.unistra.fr/uploads/images/gallery/2025-01/capture-decran-2025-01-14-140932.png)

SI LES ENCOCHES NE S'ALIGNENT PAS  
VÉRIFIEZ BIEN QUE LA PIÈCE EST ORIENTÉE COMME INDIQUÉ.  
NE FIXEZ PAS ENCORE LES ÉCROUS ET LES BOULONS.

##### **<span style="text-decoration: underline;">Etape 3 :</span>**

[![image.png](https://innovation.iha.unistra.fr/uploads/images/gallery/2025-01/scaled-1680-/oBcimage.png)](https://innovation.iha.unistra.fr/uploads/images/gallery/2025-01/oBcimage.png)

INSTALLEZ LA BARRE CENTRALE COMME INDIQUÉ.

AVEC LE DERNIER CÔTÉ INSTALLÉ, IL NE RESTE PLUS QU'À FIXER LES BOULONS ET LES ÉCROUS.

[![Capture d’écran 2025-01-14 141631.png](https://innovation.iha.unistra.fr/uploads/images/gallery/2025-01/scaled-1680-/capture-decran-2025-01-14-141631.png)](https://innovation.iha.unistra.fr/uploads/images/gallery/2025-01/capture-decran-2025-01-14-141631.png)

**<span style="text-decoration: underline;">Pour le coté Gauche :</span>**

[![Capture d’écran 2025-01-14 141843.png](https://innovation.iha.unistra.fr/uploads/images/gallery/2025-01/scaled-1680-/capture-decran-2025-01-14-141843.png)](https://innovation.iha.unistra.fr/uploads/images/gallery/2025-01/capture-decran-2025-01-14-141843.png)

[![image.png](https://innovation.iha.unistra.fr/uploads/images/gallery/2025-01/scaled-1680-/kZWimage.png)](https://innovation.iha.unistra.fr/uploads/images/gallery/2025-01/kZWimage.png)

Placez le cercle du palonnier dans le trou correspondant du servomoteur.  
Retournez les deux pièces et fixez à nouveau la vis du palonnier vers l'extrémité la plus éloignée afin d'éviter d'éventuels problèmes de dégagement avec le boîtier du servomoteur.

[![Capture d’écran 2025-01-14 142637.png](https://innovation.iha.unistra.fr/uploads/images/gallery/2025-01/scaled-1680-/capture-decran-2025-01-14-142637.png)](https://innovation.iha.unistra.fr/uploads/images/gallery/2025-01/capture-decran-2025-01-14-142637.png)

Pour la suite quelques petite précisions, il faut bien faire la différence entre l'avant du servomoteur et l'arrière.

[![Capture d’écran 2025-01-30 093130.png](https://innovation.iha.unistra.fr/uploads/images/gallery/2025-01/scaled-1680-/capture-decran-2025-01-30-093130.png)](https://innovation.iha.unistra.fr/uploads/images/gallery/2025-01/capture-decran-2025-01-30-093130.png)

Pour fixer le palonnier sur le servomoteur il faut d'abord donner ce code via l'Arduino nano pour connaître sa position 0.

[![image.png](https://innovation.iha.unistra.fr/uploads/images/gallery/2025-01/scaled-1680-/Gc7image.png)](https://innovation.iha.unistra.fr/uploads/images/gallery/2025-01/Gc7image.png)

Arrivé à la position 0 mettez le palonnier à l'horizontal vers l'avant du servomoteur.

[![image.png](https://innovation.iha.unistra.fr/uploads/images/gallery/2025-01/scaled-1680-/9nZimage.png)](https://innovation.iha.unistra.fr/uploads/images/gallery/2025-01/9nZimage.png)

[![Capture d’écran 2025-01-14 143030.png](https://innovation.iha.unistra.fr/uploads/images/gallery/2025-01/scaled-1680-/capture-decran-2025-01-14-143030.png) ](https://innovation.iha.unistra.fr/uploads/images/gallery/2025-01/capture-decran-2025-01-14-143030.png)[![QxVimage.png](https://innovation.iha.unistra.fr/uploads/images/gallery/2025-01/scaled-1680-/qxvimage.png)](https://innovation.iha.unistra.fr/uploads/images/gallery/2025-01/qxvimage.png)

##### <span style="text-decoration: underline;"><span style="color: rgb(0, 0, 0); text-decoration: underline;">**Coté droit :**</span></span>

<span style="text-decoration: underline;"><span style="color: rgb(0, 0, 0); text-decoration: underline;">**Matériel :**</span></span>

[![Capture d’écran 2025-01-14 144431.png](https://innovation.iha.unistra.fr/uploads/images/gallery/2025-01/scaled-1680-/capture-decran-2025-01-14-144431.png)](https://innovation.iha.unistra.fr/uploads/images/gallery/2025-01/capture-decran-2025-01-14-144431.png)

Pour le servomoteur du coté droit, dans un premier temps le mettre à la position 0, puis placer le palonnier à l'horizontal vers l'arrière.

[![Capture d’écran 2025-01-30 093130.png](https://innovation.iha.unistra.fr/uploads/images/gallery/2025-01/scaled-1680-/capture-decran-2025-01-30-093130.png)](https://innovation.iha.unistra.fr/uploads/images/gallery/2025-01/capture-decran-2025-01-30-093130.png)

[![Capture d’écran 2025-01-14 144655.png](https://innovation.iha.unistra.fr/uploads/images/gallery/2025-01/scaled-1680-/capture-decran-2025-01-14-144655.png)](https://innovation.iha.unistra.fr/uploads/images/gallery/2025-01/capture-decran-2025-01-14-144655.png)

[![image.png](https://innovation.iha.unistra.fr/uploads/images/gallery/2025-01/scaled-1680-/IV5image.png)](https://innovation.iha.unistra.fr/uploads/images/gallery/2025-01/IV5image.png)

**<span style="text-decoration: underline;">ASSEMBLAGE DU SERVOMOTEUR DU CÔTÉ DROIT AVEC LA BASE :</span>**

[![Capture d’écran 2025-01-14 145050.png](https://innovation.iha.unistra.fr/uploads/images/gallery/2025-01/scaled-1680-/capture-decran-2025-01-14-145050.png) ](https://innovation.iha.unistra.fr/uploads/images/gallery/2025-01/capture-decran-2025-01-14-145050.png)[![image.png](https://innovation.iha.unistra.fr/uploads/images/gallery/2025-01/scaled-1680-/FcWimage.png)](https://innovation.iha.unistra.fr/uploads/images/gallery/2025-01/FcWimage.png)

##### <span style="text-decoration: underline;">**Matériel de l'assemblage de la poutre du lien supérieur :**</span>

[![image.png](https://innovation.iha.unistra.fr/uploads/images/gallery/2025-01/scaled-1680-/xxWimage.png)](https://innovation.iha.unistra.fr/uploads/images/gallery/2025-01/xxWimage.png)

<span style="text-decoration: underline;">**Fixez la renfort de la poutre du lien supérieur comme indiqué ci dessous :**</span>

[![image.png](https://innovation.iha.unistra.fr/uploads/images/gallery/2025-01/scaled-1680-/dYeimage.png)](https://innovation.iha.unistra.fr/uploads/images/gallery/2025-01/dYeimage.png)

[![Capture d’écran 2025-01-14 145652.png](https://innovation.iha.unistra.fr/uploads/images/gallery/2025-01/scaled-1680-/capture-decran-2025-01-14-145652.png)](https://innovation.iha.unistra.fr/uploads/images/gallery/2025-01/capture-decran-2025-01-14-145652.png)

[![Capture d’écran 2025-01-30 112310.png](https://innovation.iha.unistra.fr/uploads/images/gallery/2025-01/scaled-1680-/capture-decran-2025-01-30-112310.png)](https://innovation.iha.unistra.fr/uploads/images/gallery/2025-01/capture-decran-2025-01-30-112310.png)

[ ![Capture d’écran 2025-01-14 150331.png](https://innovation.iha.unistra.fr/uploads/images/gallery/2025-01/scaled-1680-/capture-decran-2025-01-14-150331.png)](https://innovation.iha.unistra.fr/uploads/images/gallery/2025-01/capture-decran-2025-01-14-150331.png)

L'assemblage principal du bras est maintenant terminé et prêt à recevoir l'assemblage de la pince.

##### <span style="text-decoration: underline;">**Assemblage du servomoteur de la pince :**</span>

<span style="text-decoration: underline; color: rgb(0, 0, 0);">**Matériel nécessaire :**</span>

[![Capture d’écran 2025-01-14 150549.png](https://innovation.iha.unistra.fr/uploads/images/gallery/2025-01/scaled-1680-/capture-decran-2025-01-14-150549.png)](https://innovation.iha.unistra.fr/uploads/images/gallery/2025-01/capture-decran-2025-01-14-150549.png)

[![image.png](https://innovation.iha.unistra.fr/uploads/images/gallery/2025-01/scaled-1680-/NLpimage.png)](https://innovation.iha.unistra.fr/uploads/images/gallery/2025-01/NLpimage.png)

##### <span style="text-decoration: underline;"><span style="color: rgb(0, 0, 0); text-decoration: underline;">**Assemblage du reste de la pince :**</span></span>

<span style="text-decoration: underline;"><span style="color: rgb(0, 0, 0); text-decoration: underline;">**Matériel nécessaire :**</span></span>

[![Capture d’écran 2025-01-14 152158.png](https://innovation.iha.unistra.fr/uploads/images/gallery/2025-01/scaled-1680-/capture-decran-2025-01-14-152158.png)](https://innovation.iha.unistra.fr/uploads/images/gallery/2025-01/capture-decran-2025-01-14-152158.png)

[![Capture d’écran 2025-01-14 152430.png](https://innovation.iha.unistra.fr/uploads/images/gallery/2025-01/scaled-1680-/capture-decran-2025-01-14-152430.png)](https://innovation.iha.unistra.fr/uploads/images/gallery/2025-01/capture-decran-2025-01-14-152430.png)

Mettre le servomoteur de la pince à la position 0 et mettre le palonnier à l'horizontal vers l'arrière.

[![Capture d’écran 2025-01-30 093130.png](https://innovation.iha.unistra.fr/uploads/images/gallery/2025-01/scaled-1680-/capture-decran-2025-01-30-093130.png)](https://innovation.iha.unistra.fr/uploads/images/gallery/2025-01/capture-decran-2025-01-30-093130.png)

[![Capture d’écran 2025-01-16 102542.png](https://innovation.iha.unistra.fr/uploads/images/gallery/2025-01/scaled-1680-/capture-decran-2025-01-16-102542.png)](https://innovation.iha.unistra.fr/uploads/images/gallery/2025-01/capture-decran-2025-01-16-102542.png)

<span style="text-decoration: underline;">**Montage de la pince sur le bras :**</span>

[![Capture d’écran 2025-01-16 102859.png](https://innovation.iha.unistra.fr/uploads/images/gallery/2025-01/scaled-1680-/capture-decran-2025-01-16-102859.png)](https://innovation.iha.unistra.fr/uploads/images/gallery/2025-01/capture-decran-2025-01-16-102859.png)

Fixer la pince au lien supérieur gauche du bras avec une vis de 3 mm x 10 mm. ne pas trop serrer, car les vis pourraient comprimer le boîtier du moteur servo, ce qui entraînerait le blocage du train d'engrenages.

[![Capture d’écran 2025-01-16 104248.png](https://innovation.iha.unistra.fr/uploads/images/gallery/2025-01/scaled-1680-/capture-decran-2025-01-16-104248.png)](https://innovation.iha.unistra.fr/uploads/images/gallery/2025-01/capture-decran-2025-01-16-104248.png)

Fixer le lien parallèle à la pince avec un écrou et une vis de 3 mm x 10 mm. Ajuster le serrage pour permettre un mouvement libre.

##### <span style="text-decoration: underline;">**assemblage de la base et du roulement :**</span>

[![image.png](https://innovation.iha.unistra.fr/uploads/images/gallery/2025-01/scaled-1680-/G8vimage.png)](https://innovation.iha.unistra.fr/uploads/images/gallery/2025-01/G8vimage.png)

Quand vous fixer le servomoteur mettez le à la position 90 puis vous avez juste à mettre votre bras robotique vers l'arrière à l'inverse de la dernière image.

[![image.png](https://innovation.iha.unistra.fr/uploads/images/gallery/2025-01/scaled-1680-/Fxfimage.png)](https://innovation.iha.unistra.fr/uploads/images/gallery/2025-01/Fxfimage.png)

[![Capture d’écran 2025-01-16 105824.png](https://innovation.iha.unistra.fr/uploads/images/gallery/2025-01/scaled-1680-/capture-decran-2025-01-16-105824.png)](https://innovation.iha.unistra.fr/uploads/images/gallery/2025-01/capture-decran-2025-01-16-105824.png)

Vous pouvez rajouter les extensions de la pince avec les pièces 31 et 32 comme ci-dessus.

Et voilà le montage de votre bras robotique est fini!!!

Source : [Armuno A1Hd -V0.5-Assembly-7-22-2015-copy](https://microbotlabs.com/assets/armuno-a1hd--v0.5-assembly-7-22-2015-web.pdf)

# Phase 3 - Programmation du bras robotique

### Cinématique d'un bras robot

La cinématique est un domaine de la mécanique qui se concentre sur l’étude des mouvements. Ça tombe bien, le but d'un robot étant de bouger ! L'étude cinématique consiste donc à déterminer les positions, vitesses et accélérations des différentes parties d’un robot, sans prendre en compte les forces qui causent ces mouvements (puissance des moteurs par exemple). Un robot, souvent décrit comme une machine automatisée, peut effectuer des tâches complexes apportant une réelle valeur ajoutée dans divers secteurs.

Notre robot a 4 moteurs, l'objectif est de les actionner pour :

- Fermer la pince pour saisir un objet
- Déplacer la pince pour déplacer l'objet
- Ouvrir la pince pour lâcher l'objet

Les 4 moteurs contrôlent 4 mouvements possibles :

- Moteur 1 : Base
- Moteur 2 : Coude
- Moteur 3 : Épaule
- Moteur 4 : Pince

[https://www.youtube.com/watch?v=xQkPjDEbFoU](https://www.youtube.com/watch?v=xQkPjDEbFoU)

Attention chaque Servomoteur possède des positions maximums et minimums à bien respecter pour pas que ce dernier ne fonctionne plus.

Voici un tableau qui regroupe ces valeurs si vous l'avez monter comme dans la phase 1 :

[![image.png](https://innovation.iha.unistra.fr/uploads/images/gallery/2025-02/scaled-1680-/Uhtimage.png)](https://innovation.iha.unistra.fr/uploads/images/gallery/2025-02/Uhtimage.png)

Pour ouvrir et fermer la pince c'est donc facile, on actionne le moteur 4.

Espace Cartésien : les mouvements de la pince et des objets

Espace articulaire : les mouvements des moteurs

La question principale qu'on se pose c'est comment actionner mes moteurs pour faire bouger ma pince comme je veux ? C'est le modèle cinématique inverse.

On peut aussi se demander : si je bouge mes moteurs à telle position, quelle sera la position de ma pince ? C'est le modèle cinématique direct.

Voici un code mblock qui permet de prendre un objet à une où le coude est à la position 140 et l'épaule à la position 150.

Epaule : Pin 6

Coude : Pin 9

Base : Pin 3

Pince : Pin 13

<span style="text-decoration: underline;"><span style="color: rgb(0, 0, 0); text-decoration: underline;">**Partie 1 :**</span></span>

[![image.png](https://innovation.iha.unistra.fr/uploads/images/gallery/2025-02/scaled-1680-/8Igimage.png)](https://innovation.iha.unistra.fr/uploads/images/gallery/2025-02/8Igimage.png)

<span style="text-decoration: underline;">**Partie 2 :**</span>

[![image.png](https://innovation.iha.unistra.fr/uploads/images/gallery/2025-02/scaled-1680-/O3Eimage.png)](https://innovation.iha.unistra.fr/uploads/images/gallery/2025-02/O3Eimage.png)

### Code traduit en Arduino

```arduino
#include <Servo.h>

Servo monServo1;
Servo monServo2;  // Création de l'objet Servo
Servo monServo3;
Servo monServo4;


void setup() {
    monServo1.attach(3);
    monServo2.attach(6);
    monServo3.attach(9);
    monServo4.attach(13); // Attache le servomoteur à la broche définie

    monServo1.write(0);
    monServo2.write(90);
    monServo3.write(180);
    monServo4.write(90);
}

void loop() {

  delay(1000);
    // Balayage de 0° à 180°
    for (int angle =0; angle <= 90; angle++) {
        monServo1.write(angle); // Déplace le servo à l'angle spécifié
        delay(10); // Pause pour que le servo ait le temps de bouger
    }

    delay(1000);

    for (int angle =180; angle >= 140; angle--) {
        monServo3.write(angle); // Déplace le servo à l'angle spécifié
        delay(10); // Pause pour que le servo ait le temps de bouger
    }

    delay(1000);

    for (int angle =90; angle <= 150; angle++) {
        monServo2.write(angle); // Déplace le servo à l'angle spécifié
        delay(10); // Pause pour que le servo ait le temps de bouger
    }

    delay(1000);

    for (int angle =90; angle <= 150; angle++) {
        monServo4.write(angle); // Déplace le servo à l'angle spécifié
        delay(10); // Pause pour que le servo ait le temps de bouger
    }

    delay(1000);

    for (int angle =150; angle >= 90; angle--) {
        monServo2.write(angle); // Déplace le servo à l'angle spécifié
        delay(10); // Pause pour que le servo ait le temps de bouger
    }

    delay(1000);

    for (int angle =140; angle <= 180; angle++) {
        monServo3.write(angle); // Déplace le servo à l'angle spécifié
        delay(10); // Pause pour que le servo ait le temps de bouger
    }

    delay(1000);

    for (int angle =90; angle >= 0; angle--) {
        monServo1.write(angle); // Déplace le servo à l'angle spécifié
        delay(10); // Pause pour que le servo ait le temps de bouger
    }

    delay(1000);

    for (int angle =180; angle >= 140; angle--) {
        monServo3.write(angle); // Déplace le servo à l'angle spécifié
        delay(10); // Pause pour que le servo ait le temps de bouger
    }

    delay(1000);

    for (int angle =90; angle <= 150; angle++) {
        monServo2.write(angle); // Déplace le servo à l'angle spécifié
        delay(10); // Pause pour que le servo ait le temps de bouger
    }

    delay(1000);

    for (int angle =150; angle >= 90; angle--) {
        monServo4.write(angle); // Déplace le servo à l'angle spécifié
        delay(10); // Pause pour que le servo ait le temps de bouger
    }

    delay(1000);

    for (int angle =90; angle <= 150; angle++) {
        monServo4.write(angle); // Déplace le servo à l'angle spécifié
        delay(10); // Pause pour que le servo ait le temps de bouger
    }

    delay(1000);

    for (int angle =150; angle >= 90; angle--) {
        monServo2.write(angle); // Déplace le servo à l'angle spécifié
        delay(10); // Pause pour que le servo ait le temps de bouger
    }

    delay(1000);

    for (int angle =140; angle <= 180; angle++) {
        monServo3.write(angle); // Déplace le servo à l'angle spécifié
        delay(10); // Pause pour que le servo ait le temps de bouger
    }

    delay(1000);
}
```

### Sources

Cinématique des robots série :

[https://howtomechatronics.com/tutorials/arduino/diy-arduino-robot-arm-with-smartphone-control/](https://howtomechatronics.com/tutorials/arduino/diy-arduino-robot-arm-with-smartphone-control/)

[https://poppy.discourse.group/t/presentation-dun-travail-de-cinematique-2d-avec-le-robot-poppy-ergo-jr-1ere-s/2611](https://poppy.discourse.group/t/presentation-dun-travail-de-cinematique-2d-avec-le-robot-poppy-ergo-jr-1ere-s/2611)

[https://poppy.discourse.group/t/algorithme-de-cinematique-inverse-applique-a-poppy-inverse-kinematic-algorithm-applied-to-poppy/1582](https://poppy.discourse.group/t/algorithme-de-cinematique-inverse-applique-a-poppy-inverse-kinematic-algorithm-applied-to-poppy/1582)

[https://learn.ros4.pro/fr/theory/](https://learn.ros4.pro/fr/theory/)

[https://files.ros4.pro/theorie.pdf](https://files.ros4.pro/theorie.pdf)

[https://www.youtube.com/watch?v=vKD20BTkXhk](https://www.youtube.com/watch?v=vKD20BTkXhk)

Robot série à parallélogramme :

[https://www.youtube.com/watch?v=GnrRk9mWv7A](https://www.youtube.com/watch?v=GnrRk9mWv7A)

[https://www.youtube.com/watch?v=xQkPjDEbFoU](https://www.youtube.com/watch?v=xQkPjDEbFoU)

[https://www.youtube.com/watch?v=Z7HWoh\_MR1s](https://www.youtube.com/watch?v=Z7HWoh_MR1s)

[https://drive.google.com/drive/folders/1zaOw2QcZatylyqQoVnYhIK7iysyCOY2d](https://drive.google.com/drive/folders/1zaOw2QcZatylyqQoVnYhIK7iysyCOY2d)

[https://www.youtube.com/watch?v=Q9JOKQaIR1w](https://www.youtube.com/watch?v=Q9JOKQaIR1w)

Un peu complexe :

[https://eduscol.education.fr/sti/ressources\_pedagogiques/analyse-et-performance-cinematique-dun-robot-bi-articule#fichiers-liens](https://eduscol.education.fr/sti/ressources_pedagogiques/analyse-et-performance-cinematique-dun-robot-bi-articule#fichiers-liens)

[https://eduscol.education.fr/sti/sites/eduscol.education.fr.sti/files/ressources/pedagogiques/14480/14480-1-robot-bi-articule-doc-ressource.pdf](https://eduscol.education.fr/sti/sites/eduscol.education.fr.sti/files/ressources/pedagogiques/14480/14480-1-robot-bi-articule-doc-ressource.pdf)

# Club Robotique - Plieur de Linge



# Phase 1 - Conception du fichier 2D avec Inkscape

### Phase 1 - Conception 2D avec Inkscape

<span style="text-decoration: underline;"><span style="color: rgb(0, 0, 0); text-decoration: underline;">**Compétences techniques :**</span></span>

- Utiliser Inkscape pour créer des fichiers vectoriels destinés à la découpe laser.
- Concevoir un fichier adaptée à un projet spécifique.
- Travailler en groupe et présenter les solutions conçues.

<span style="text-decoration: underline;">**Savoir-être, compétences transversales :**</span>

- Travail individuel et collectif.
- Lire et suivre un tutoriel détaillé.

**<span style="text-decoration: underline;">Déroulement de la séance :</span>**

<span style="text-decoration: underline;">Consignes: Sécurité, précautions matériel :</span>

- Travail individuel.
- Rappel: Respecter les consignes de sécurité liées à la découpe laser.

<span style="text-decoration: underline;">Phases et méthodes d’animation :</span>

- Présentation de l'activité du jour (Introduction à Inkscape et explication des fichiers vectoriels pour la découpe laser).
- Importance de la modélisation 2D dans le projet.
- Objectifs rappelés.

<span style="text-decoration: underline;">Prise en main du logiciel Inkscape :</span>

<span style="text-decoration: underline;">**Présentation de l’Outil de Modélisation :**</span>

- Introduction rapide à Inkscape, un logiciel de dessin vectoriel.
- Explication des principes de base : chemins, objets, calques et opérations booléennes.

<span style="text-decoration: underline;">**Démonstration :**</span>

- Comment créer des formes de base (rectangles, cercles, polygones).
- Comment modifier les dimensions et les alignements.
- Utilisation de l'outil "Aligner et distribuer" pour organiser les objets.
- Paramétrage des contours pour la découpe (ligne rouge 0,01 mm) et pour la gravure (ligne noire ou remplissage).

#### <span style="text-decoration: underline;">**Création du premier fichier de découpe :**</span>

<span style="text-decoration: underline;">**Création des volets du plieur de linge :**</span>

1. Ouvrir Inkscape et créer un nouveau document.
2. Définir la taille de la page en fonction du matériau utilisé ( ici une plaque de 600 mm x 300 mm).
3. Utiliser l’outil rectangle pour créer le volet du plieur (370 mm x 150 mm).
    
    [![image.png](https://innovation.iha.unistra.fr/uploads/images/gallery/2025-03/scaled-1680-/image.png)](https://innovation.iha.unistra.fr/uploads/images/gallery/2025-03/image.png)
    
    [![image.png](https://innovation.iha.unistra.fr/uploads/images/gallery/2025-03/scaled-1680-/iMIimage.png)](https://innovation.iha.unistra.fr/uploads/images/gallery/2025-03/iMIimage.png)
4. Aller dans "Fond et Contour" et enlever le fond, mettre le contour en rouge d'une épaisseur de 0,260 mm. [![image.png](https://innovation.iha.unistra.fr/uploads/images/gallery/2025-03/scaled-1680-/MROimage.png) ](https://innovation.iha.unistra.fr/uploads/images/gallery/2025-03/MROimage.png)[![image.png](https://innovation.iha.unistra.fr/uploads/images/gallery/2025-03/scaled-1680-/Fm7image.png)](https://innovation.iha.unistra.fr/uploads/images/gallery/2025-03/Fm7image.png)
5. Ajouter un deuxième rectangle plus petit pour créer un contour extérieur (140 mm x 60 mm), puis utiliser la fonction "Union".
    
    [![image.png](https://innovation.iha.unistra.fr/uploads/images/gallery/2025-03/scaled-1680-/JqEimage.png)](https://innovation.iha.unistra.fr/uploads/images/gallery/2025-03/JqEimage.png)
    
    [![image.png](https://innovation.iha.unistra.fr/uploads/images/gallery/2025-03/scaled-1680-/E4Timage.png)](https://innovation.iha.unistra.fr/uploads/images/gallery/2025-03/E4Timage.png)

**Ajout des encoches et trous pour les Servomoteurs :**

1. Pour les encoches créer un rectangle de dimensions ( 3 mm x 10 mm ).
2. Ensuite la dupliquer ( CTRL D ) et la déplacer avec les flèches du clavier.
3. Résultat : [![image.png](https://innovation.iha.unistra.fr/uploads/images/gallery/2025-03/scaled-1680-/Mj3image.png)](https://innovation.iha.unistra.fr/uploads/images/gallery/2025-03/Mj3image.png)

<span style="text-decoration: underline;">**Création des cales des volets :**</span>

1. Créer un rectangle de 12 mm x 100 mm.
2. Le placer comme ceci : [![image.png](https://innovation.iha.unistra.fr/uploads/images/gallery/2025-03/scaled-1680-/AQ5image.png)](https://innovation.iha.unistra.fr/uploads/images/gallery/2025-03/AQ5image.png)
3. Dupliquer les encoches et ensuite sélectionner le rectangle avec.
4. Plus qu'à utiliser l'outil "Union".
5. Pour surélever la cale on vient créer un autre rectangle de 16 mm x 35 mm et le placer comme l'image. [![image.png](https://innovation.iha.unistra.fr/uploads/images/gallery/2025-03/scaled-1680-/0TOimage.png)\*](https://innovation.iha.unistra.fr/uploads/images/gallery/2025-03/0TOimage.png)
6. Et pour le final utiliser l'outil "Union sur les 2 formes.

Puis y placer un cercle de 2,9 mm x 2,9 mm.

[![image.png](https://innovation.iha.unistra.fr/uploads/images/gallery/2025-03/scaled-1680-/mZdimage.png)](https://innovation.iha.unistra.fr/uploads/images/gallery/2025-03/mZdimage.png)

<span style="text-decoration: underline;">**Création des boites pour surélever les servomoteurs :** </span>

1. Aller sur boxes.py pour créer une "Basedbox" de 35 mm x 35 mm x 15 mm. [![image.png](https://innovation.iha.unistra.fr/uploads/images/gallery/2025-03/scaled-1680-/MLsimage.png)](https://innovation.iha.unistra.fr/uploads/images/gallery/2025-03/MLsimage.png)
2. Ajouter cette boite au fichier et rajouter des trous de 2,9 mm sur la face du dessus. [![image.png](https://innovation.iha.unistra.fr/uploads/images/gallery/2025-03/scaled-1680-/c82image.png)](https://innovation.iha.unistra.fr/uploads/images/gallery/2025-03/c82image.png)
3. Dupliquer la boite 3 fois pour en avoir 4 au total.

#### **<span style="text-decoration: underline;">Création du deuxième fichier de découpe :</span>**

1. Faire un copier-coller du 1er volet sur le 1er fichier de découpe.

<span style="text-decoration: underline;">**Création de la partie du milieu :**</span>

1. Créer un rectangle de 225 mm x 300 mm sans oublier d'enlever le fond et de mettre les contours en rouge.
2. Créer un rectangle de 40 mm x 50 mm.
3. Placer le rand rectangle en x = 0 et Y = 0 et le petit rectangle en x = 0 et y = 150.
4. Sélectionner les 2 rectangle et réaliser une différence. [![image.png](https://innovation.iha.unistra.fr/uploads/images/gallery/2025-03/scaled-1680-/gp1image.png)](https://innovation.iha.unistra.fr/uploads/images/gallery/2025-03/gp1image.png)
5. Pour les encoches du milieu, pointés ci-dessous faire comme pour les cales des volets ci-dessus. [![image.png](https://innovation.iha.unistra.fr/uploads/images/gallery/2025-03/scaled-1680-/4t5image.png)](https://innovation.iha.unistra.fr/uploads/images/gallery/2025-03/4t5image.png)
6. Pour les encoches de cotés faire un carré de 30 mm x 250 mm et le placer à coté des encoches.
7. Dupliquer les encoches et faire une union.
8. Résultat : [![image.png](https://innovation.iha.unistra.fr/uploads/images/gallery/2025-03/scaled-1680-/eR2image.png)](https://innovation.iha.unistra.fr/uploads/images/gallery/2025-03/eR2image.png)

#### <span style="text-decoration: underline;">**Création du troisième fichier de découpe :**</span>

1. Créer 2 rectangles de dimensions 370 mm x 150 mm, qui vont permettre à rallonger les volets du plieur.

<span style="text-decoration: underline;">Ajustements Finaux :</span>

- Vérifier l’alignement et les dimensions de chaque pièce.
- Vérifier que les contours sont aux bonnes dimensions pour la machine (ici 0,260 mm).

<span style="text-decoration: underline;">Validation et Export :</span>

- Vérifier visuellement la modélisation en 2D.
- Exporter le fichier au format SVG ou DXF pour la découpe laser.

<span style="text-decoration: underline;">Conclusion / Rangement / Démontage :</span>

- Retour sur les notions clés de la séance.
- Q&amp;R pour clarifier les doutes.
- Rangement en fin de séance.
- Éteindre les PC.

# Club Robotique - Robot Araignée



# Ressources

- Ressources de Williams [https://seafile.unistra.fr/smart-link/e4252684-7103-47dc-8e07-496ef497a856/](https://seafile.unistra.fr/smart-link/e4252684-7103-47dc-8e07-496ef497a856/)
- [https://www.instructables.com/4-Legged-Spider-Robot-With-3D-Printed-Parts-8-Serv/](https://www.instructables.com/4-Legged-Spider-Robot-With-3D-Printed-Parts-8-Serv/)
- [https://www.instructables.com/ARDUINO-SPIDER-ROBOT-QUADRUPED/](https://www.instructables.com/ARDUINO-SPIDER-ROBOT-QUADRUPED/)
- [https://robotlk.com/how-to-make-spider-robot-12dof-sg90-servo-arduino-nano/](https://robotlk.com/how-to-make-spider-robot-12dof-sg90-servo-arduino-nano/)

# Sélection de ressources sur la robotique éducative

### Arduino

- blog Eskimon [https://eskimon.fr/tuto-arduino-602-un-moteur-qui-a-de-la-t%C3%AAte-le-servomoteur](https://eskimon.fr/tuto-arduino-602-un-moteur-qui-a-de-la-t%C3%AAte-le-servomoteur)
- Lycée Blaise Pascal de Clermont-Ferrant : [https://arduino.blaisepascal.fr/presentation/site-internet/](https://arduino.blaisepascal.fr/presentation/site-internet/) ([https://si.blaisepascal.fr/uc-arduino/](https://si.blaisepascal.fr/uc-arduino/) )
- Cours de GEII : [https://intra.iha.unistra.fr/doku.php?id=intranet\_geii:cours](https://intra.iha.unistra.fr/doku.php?id=intranet_geii:cours)

# Club robotique - Maison connectée



# Description du projet

#### <span style="text-decoration: underline;">**Introduction**</span>

Pour ce cycle, nous allons créer une **maquette de maison connectée** équipée de capteurs et d’objets contrôlables (lumières, température, buzzer, servomoteur, etc…), en utilisant une carte microcontrôleur ESP32 et divers composants électroniques.

*(Photo du projet)*

#### **Description des compétences visées :** 

##### **Compétences techniques et mécaniques**

- Conception : réalisation de plan en 2D de différentes partie de la maison
- Assemblage de composants : apprendre à manipuler et assembler les différentes parties (composants, murs, câbles, etc.)
- Choix des matériaux : identifier les matériaux adaptés au projet

##### **Compétences en électronique**

- Découverte du fonctionnement et câblage de capteurs
- Apprentissage de la domotique
- Schémas électriques : savoir réaliser un schéma de câblage et connecter les composants sur une carte Arduino.

##### **Compétences en programmation**

- Programmation d'un microcontrôleur Arduino : écrire un code qui gère les capteurs, les délais, etc.
- Logique conditionnelle : comprendre comment programmer des conditions simples.
- Optimisation du fonctionnement : ajuster les temps de réponse, durée de déplacement, détection d'obstacle etc.

##### **Compétences transversales**

- - Gestion de projet : planifier les étapes de réalisation, répartir les tâches, respecter les délais.
    - Résolution de problèmes : savoir réagir face aux imprévus techniques ou fonctionnels.
    - Travail en équipe : collaborer efficacement si le projet est collectif.

#### **Description du déroulé des séances:**

~9 séances :

<div class="translate-tooltip-mtz translator-hidden" id="bkmrk-translator"></div>#### **Matériel**

Projet inspiré de : [https://www.thingiverse.com/thing:2417739](https://www.thingiverse.com/thing:2417739)

- 1 x Esp32 : ~10€
- 1 x câble USB C : ~1€
- 1 x Capteur PIR
- 1 x Capteur DTH22
- 1 x Buzzer
- 1 x Servomoteur
- 1 x Pavé numérique
- 1 x Module Led (indicateur pour activation de l'alarme)
- Une imprimante 3D pour imprimer les pièces du robot (fichier disponible à la prochaine page)(~5€ de filament) :

# Fonctionnement et programmation des composants ( version Arduino )

#### <span style="text-decoration: underline;">**Qu'est ce qu'un ESP32 :**</span>

https://innovation.iha.unistra.fr/books/robotique-educative/page/quest-ce-quun-esp32

#### <span style="text-decoration: underline;">**Découverte de Arduino IDE :**</span>

L'objectif est de comprendre l’environnement de développement Arduino IDE. Pour cela, rendez vous sûr la page suivante.

[https://innovation.iha.unistra.fr/books/robotique-educative/page/decouvre-arduino-ide-et-la-logique-dun-programme](https://innovation.iha.unistra.fr/books/robotique-educative/page/decouvre-arduino-ide-et-la-logique-dun-programme)

Le microcontrôleur que nous allons utiliser ici est un ESP32. En suivant le tutoriel précédent vous pouvez donc sélectionner la carte ESP32.

**Si vous ne la trouvez pas,** vérifier bien si elle est installer. Si ce n'est pas le cas, installer la de cette façon.

Ouvrez Arduino IDE, allez dans "Outils &gt; Carte &gt; Gestionnaire de carte" et dans la barre de recherche écrire "ESP32".

Installer ceci :

[![image.png](https://innovation.iha.unistra.fr/uploads/images/gallery/2025-07/scaled-1680-/CNTimage.png)](https://innovation.iha.unistra.fr/uploads/images/gallery/2025-07/CNTimage.png)

#### <span style="text-decoration: underline;">**Fonctionnement et programmation d'une LED :**</span>

#### <span style="text-decoration: underline;">**Fonctionnement et programmation du buzzer :**</span>

#### <span style="text-decoration: underline;">**Fonctionnement et programmation du servomoteur :**</span>

#### <span style="text-decoration: underline;">**Fonctionnement et programmation du capteur PIR :**</span>

#### <span style="text-decoration: underline;">**Défi intermédiaire :**</span>

Réaliser un programme qui lorsque le capteur PIR détecte une présence, le servomoteur ferme la porte, la led s'allume en rouge et le buzzer sonne.

#### <span style="text-decoration: underline;">**Fonctionnement et programmation du DHT22 :**</span>

#### <span style="text-decoration: underline;">**Fonctionnement et programmation du pavé numérique :**</span>


#### <span style="text-decoration: underline;">**Défi intermédiaire :**</span>


Réaliser un programme qui lorsque si l'alarme est activée et le capteur PIR détecte une présence, le servomoteur ferme la porte, la led s'allume en rouge et le buzzer sonne. Et, que si l'alarme est désactivée à l'aide du pavé numérique en ayant entré le bon code alors cela ne fait rien. Si le code est entré est faux 3 fois de suite, l'alarme sonne. Pour activé l'alarme, le code doit être entrée puis le bouton validée du pavé numérique presser

#### <span style="text-decoration: underline;">**Fonctionnement et programmation de l'écran OLED :**</span>

# Modélisation de la maison en 2D



# Programme final de la maison connectée

# Club robotique - Drone Tello

Utilisation du drone Tello

# Présentation du drone Tello EDU

# Présentation du drone **Tello EDU**

Le **Tello EDU** est un petit drone conçu spécialement pour l’apprentissage et la découverte de la programmation. Il est fabriqué par **Ryze** en collaboration avec **DJI.**

[![image.png](https://innovation.iha.unistra.fr/uploads/images/gallery/2025-09/scaled-1680-/4Xtimage.png)](https://innovation.iha.unistra.fr/uploads/images/gallery/2025-09/4Xtimage.png)

### Caractéristiques principales

- **Poids** : 87 g → très léger, facile à transporter et à utiliser en intérieur.
- **Autonomie** : environ 13 minutes de vol par batterie.
- **Caméra** : 5 mégapixels pour les photos, vidéo en 720p.
- **Stabilité** : il peut maintenir son vol stationnaire automatiquement grâce à ses capteurs.
- **Portée** : jusqu’à 100 mètres, mais en pratique on le garde souvent plus près pour la sécurité.
- **Vitesse** : maximum 8 m/s, réglable selon le mode choisi.

---

# Utilisation éducative

### 1. Pilotage manuel

- Il peut être contrôlé via **smartphone ou tablette** avec l’application dédiée.
- Possibilité d’utiliser une **télécommande Bluetooth** compatible pour plus de précision.
- C’est une bonne façon d’apprendre les bases du pilotage de drone en sécurité.

### 2. Programmation

Le grand intérêt du Tello EDU, c’est qu’il peut être **programmé** :

- Avec **Scratch** → parfait pour débuter avec des blocs de code.
- Avec **Python** → pour aller plus loin avec de vraies instructions de programmation.

Les élèves peuvent écrire un programme pour :

- Décoller, avancer, tourner, atterrir automatiquement.
- Faire des figures simples (loopings, virages précis).
- Réaliser des **parcours autonomes** dans la salle.
- Utiliser plusieurs drones en **vol en essaim** (coordination entre plusieurs Tello EDU).

---

# Points forts pour l’enseignement

- **Sécurité** : faible poids, protections d’hélices, peu de danger pour les élèves.
- **Pédagogique** : permet de lier **robotique, mathématiques et informatique**.
- **Motivant** : les élèves voient directement le résultat concret de leur code dans le vol du drone.
- **Accessible** : facile à mettre en œuvre dans une salle de classe ou un gymnase.

---

# Exemple d’activité simple pour ce soir

1. **Découverte** : présentation du drone et des règles de sécurité (distance, zones de vol).
2. **Premier pilotage manuel** : chaque élève fait décoller, maintenir en stationnaire et atterrir.
3. **Programmation basique** : écrire un programme en Scratch pour faire :
    
    
    - Décoller → avancer de 50 cm → tourner à gauche → avancer de 50 cm → atterrir.
4. **Défi** : programmer un petit parcours rectangulaire ou triangulaire.

# Contrôler un drone Ryze Tello avec Spyder et Python

# 1) Installer Python

### Sous **Windows**

1. Va sur le site officiel : [https://www.python.org/downloads/<svg class="block h-[0.75em] w-[0.75em] stroke-current stroke-[0.75]" data-rtl-flip="" fill="currentColor" height="20" viewbox="0 0 20 20" width="20" xmlns="http://www.w3.org/2000/svg"></svg>](https://www.python.org/downloads/).
2. Télécharge **Python 3.12.x** (ou 3.11 si tu veux être plus conservateur).
3. Pendant l’installation :
    
    
    - ✅ **Coche "Add Python to PATH"** (important).
    - Choisis **Install for all users** si possible.

👉 Une fois installé, ouvre **CMD** et tape :

```cmd
python --version
```

Tu dois voir quelque chose comme :

```
Python 3.12.6
```

### Sous **Linux (Ubuntu/Debian par ex.)**

La plupart des distros ont déjà Python installé. Vérifie avec :

```
python3 --version
```

Si besoin, installe Python 3.12 avec :

```
sudo apt update
sudo apt install python3.12 python3.12-venv python3.12-dev
```

## 2) Créer un environnement virtuel (recommandé)

C’est mieux d’isoler ton projet. Dans CMD ou Terminal, fais :

```
python -m venv tello-env
```

Puis active-le :

- **Windows** :

```
tello-env\Scripts\activate
```

- **Linux** :

```
source tello-env/bin/activate
```

Tu verras `(tello-env)` au début de ta ligne → c’est bon.

## 3) Installer les paquets nécessaires

Dans ton environnement actif, exécute :

```
python -m pip install -U pip setuptools wheel
pip install opencv-python spyder-kernels
pip install "spyder-kernels===2.5.*"
pip install djitellopy
```

✅ Compatible avec **Python 3.10 → 3.12**.  
⚠️ Évite pour l’instant **Python 3.13+** (encore trop récent, certaines libs n’ont pas de wheels stables).

---

## 4) Installer et configurer Spyder

### Installation

- **Windows** : installe Spyder depuis <a class="decorated-link cursor-pointer" data-end="1987" data-start="1929" rel="noopener" target="_new">https://www.spyder-ide.org/<svg class="block h-[0.75em] w-[0.75em] stroke-current stroke-[0.75]" data-rtl-flip="" fill="currentColor" height="20" viewbox="0 0 20 20" width="20" xmlns="http://www.w3.org/2000/svg"></svg></a> ou via `pip install spyder`.
- **Linux** : souvent disponible via `pip install spyder` ou ton gestionnaire (`sudo apt install spyder`).

### Configuration

1. Lance Spyder.
2. Va dans **Outils &gt; Préférences &gt; Python interpreter**.
3. Sélectionne ton interpréteur Python de l’environnement `tello-env`.
4. Redémarre Spyder.

---

## 5) Connexion au drone Tello

1. Allume le Tello.
2. Sur ton PC, connecte-toi au Wi-Fi du drone (`TELLO-xxxx`).  
    ⚠️ Tu perds l’accès Internet le temps du vol, c’est normal.

---

## 6) Script de test minimal

Crée un fichier `tello_test.py` et mets-y :

```python
from djitellopy import Tello
import time

def main():
    tello = Tello()
    try:
        tello.connect()
        print("Batterie:", tello.get_battery(), "%")

        tello.takeoff()
        time.sleep(2)

        tello.move_up(200)        # monte de 200 cm = 2 mètres
        time.sleep(2)

        tello.move_forward(100)   # avance de 1 mètre
        time.sleep(2)

        tello.rotate_clockwise(90)  # rotation de 90°
        time.sleep(2)

        tello.land()
        print("Atterrissage terminé.")
    except Exception as e:
        print("Erreur :", e)
        try:
            tello.land()
        except:
            pass
    finally:
        tello.end()

if __name__ == "__main__":
    main()

```

## 7) Commandes utiles du Tello

- ### 🔹 Base
    
    
    - `tello.connect()` → se connecter au drone.
    - `tello.end()` → fermer la connexion proprement.
    - `tello.takeoff()` → décollage.
    - `tello.land()` → atterrissage.
    - `tello.emergency()` → arrêt immédiat des moteurs (urgence).
    
    ### 🔹 Déplacements (20–500 cm)
    
    
    - `tello.move_up(x)` / `tello.move_down(x)`
    - `tello.move_forward(x)` / `tello.move_back(x)`
    - `tello.move_left(x)` / `tello.move_right(x)`
    
    ### 🔹 Rotations
    
    
    - `tello.rotate_clockwise(x)` → rotation horaire en degrés.
    - `tello.rotate_counter_clockwise(x)` → rotation antihoraire.
    
    ### 🔹 Vitesse
    
    
    - `tello.set_speed(x)` → règle la vitesse (10–100 cm/s).
    - `tello.get_speed()` → retourne la vitesse actuelle.
    
    ### 🔹 Flips
    
    
    - `tello.flip_forward()`
    - `tello.flip_back()`
    - `tello.flip_left()`
    - `tello.flip_right()`
    
    ### 🔹 Info / télémétrie
    
    
    - `tello.get_battery()` → % batterie.
    - `tello.get_height()` → hauteur (cm).
    - `tello.get_temperature()` → température interne.
    - `tello.get_flight_time()` → temps de vol depuis décollage (s).
    - `tello.get_acceleration_x()` / `_y()` / `_z()` → accéléromètre.
    - `tello.get_barometer()` → altitude barométrique.
    
    ### 🔹 Vidéo &amp; photo
    
    
    - `tello.streamon()` → active le flux vidéo.
    - `tello.streamoff()` → coupe le flux vidéo.
    - `tello.get_frame_read()` → récupère l’image actuelle (OpenCV compatible).
    - `tello.take_picture()` → capture une photo.
    
    ### 🔹 Positionnement avancé
    
    
    - `tello.go_xyz_speed(x, y, z, speed)` → va à une position relative (cm) avec une vitesse.
    - `tello.curve_xyz_speed(x1, y1, z1, x2, y2, z2, speed)` → trajectoire courbe.
    
    ### 🔹 Réseau
    
    
    - `tello.connect_to_wifi(ssid, password)` → connecter le Tello à un Wi-Fi (mode station, pas toujours stable).

---

## 8) Bonnes pratiques &amp; sécurité

- Teste d’abord avec des petits déplacements (`move_up(20)` par ex.).
- Vérifie toujours la batterie avant le vol.
- Vol en intérieur uniquement si tu as de la place dégagée ; sinon, extérieur.
- Garde une main près du bouton **atterrissage d’urgence** (dans ton script ou via l’app officielle).

---

## 9) Dépannage rapide

- **Module introuvable** → Vérifie que tu es bien dans ton environnement (`tello-env`).
- **Pas de connexion** → Assure-toi d’être connecté au Wi-Fi du Tello.
- **Erreur OpenCV** → Sous Linux, installe `libgl1` :

```bash
sudo apt install libgl1
```

# Club robotique - Distributeur de boisson



# Description du projet

Liste des composants :

- Arduino Nano
- Shield pour Arduino Nano
- Pompe péristaltique 5V
- Module relais
- Écran OLED
- Capteur IR (TCRT5000)
- SONGLE SRD-05VDC-SL-C avec entrée 5V
- Interrupteur
- Bouton poussoir

# Fonctionnement et programmation des composants

# Stages de Robotique pour les collégiens - Station Mesure Eau

Le stage se déroule de la manière suivante :
1. Conception de la formation des animateurs
2. Conception du contenu technique du stage
3. Journée de formation des animateurs (1 jour)
4. Ateliers de robotique éducative pour jeunes (3 jours)

Coût :

# Fiche résumé

### Intitulé de l'atelier

### Illustration / Image

### Durée de l'atelier

### Objectifs pédagogiques

### Autres objectifs (si applicable)

- <label class="control-label col-sm-3">Objectifs de Développement Durables concernés (ODD)</label><label for="checkboxListeObjectifSDeDeveloppementDurableConcbf_checkbox_group_doczero_odd[odd17]"></label>
- Défis Résilience des territoires ADEME (si applicable)

[![image.png](https://innovation.iha.unistra.fr/uploads/images/gallery/2023-05/scaled-1680-/image.png)](https://innovation.iha.unistra.fr/uploads/images/gallery/2023-05/image.png)

## Préparation

### Outillage (investissement)  


Ex. Imprimante 3D

- 
- Coût d'un robot :

### Matériaux (consommable pour un stage)  


Consommable

### Financement

- Coût par enfant : 5000€/24
- 

### Local / Lieu / Équipement  


- 1 PC par élève (minimum 1 PC pour deux)
- 1 animateur pour 4 participants
- 

### Équipe

- animateurs ayant participé à la formation
- 1 animateur pour 4 participants

### Normes / Sécurité

- Autorisation parentale -&gt; sortie de bâtiment sans les parents
- Droit à l'image -&gt; photos pour la com'
- Carnet de vaccination
- Fiche sanitaire

# Conception technique du stage

## Exécution

### Accueil

### Consignes

### Préparation des Matériaux / Kits

### Pauses

### Fabrication / Assemblage

### Etapes avec les participants

#### Matin

#### Après-midi

### Rangement

### Photo de Groupe

## Après l'Atelier

### Communication

### Documentation

### Contact Documentation / Atelier

# Conception de la formation des animateurs

## Exécution

### Accueil

### Consignes

### Préparation des Matériaux / Kits

### Pauses

### Fabrication / Assemblage

### Etapes avec les participants

#### Matin

#### Après-midi

### Rangement

### Photo de Groupe

## Après l'Atelier

### Communication

### Documentation

### Contact Documentation / Atelier

# Ateliers de développement de la station de mesure de l'eau (5 jours)

**<span style="font-size: 22.0pt; line-height: 107%; font-family: 'Space Grotesk'; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; mso-bidi-font-family: 'Times New Roman'; mso-bidi-theme-font: minor-bidi; mso-ansi-language: FR; mso-fareast-language: EN-US; mso-bidi-language: AR-SA;">Mission Otez l’eau </span>**

<span style="mso-fareast-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'; mso-font-kerning: 0pt; mso-ligatures: none; mso-fareast-language: FR;">Depuis quelques mois, un changement soudain dans la qualité de l'eau a été signalé dans plusieurs régions du monde, ce qui soulève des inquiétudes. Les premières enquêtes révèlent une contamination progressive de l'eau, liée à des défaillances dans les systèmes de traitement et de rejets des eaux usés par une usine. Face à cette menace environnementale et sanitaire, l'association Savoirs Vivants, et l’IUT de Haguenau, ont été missionné par les services secrets français pour monter une équipe de roboticiens et de chercheurs pour identifier l’usine à la source de ces contaminations. </span>

<span style="mso-fareast-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'; mso-font-kerning: 0pt; mso-ligatures: none; mso-fareast-language: FR;">En tant que nouveaux membres de ce consortium de chercheurs votre première mission sera de vous trouver un nom d’équipe pour réussir à communiquer facilement avec le reste des autres chercheurs et votre chef d’équipe. </span>

<span style="mso-fareast-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'; mso-font-kerning: 0pt; mso-ligatures: none; mso-fareast-language: FR;">Votre mission consiste à concevoir, assembler, et programmer la **Station AquaLife** pour qu'elle soit capable de détecter les contaminants dans l'eau avec précision et efficacité. Pour cela, vous utiliserez des technologies de pointe en robotique, en informatique et en analyse chimique.</span>

<span style="mso-fareast-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'; mso-font-kerning: 0pt; mso-ligatures: none; mso-fareast-language: FR;"> </span>

<span style="mso-fareast-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'; mso-font-kerning: 0pt; mso-ligatures: none; mso-fareast-language: FR;">La **Station AquaLife** que vous allez concevoir pour collecter et analyser des échantillons d'eau en temps réel, fournira des données essentielles pour identifier les sources d’eau contaminé et ainsi trouver la source de ces contaminations. </span>

**<span style="mso-fareast-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'; mso-font-kerning: 0pt; mso-ligatures: none; mso-fareast-language: FR;">Déroulement du projet :</span>**

- **<span style="mso-fareast-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'; mso-font-kerning: 0pt; mso-ligatures: none; mso-fareast-language: FR;">Lundi : Conception 3D</span>**<span style="mso-fareast-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'; mso-font-kerning: 0pt; mso-ligatures: none; mso-fareast-language: FR;"> - Initiez-vous au design assisté par ordinateur pour concevoir la pièce manquante de la Station AquaLife, permettant d’afficher les données sur l’écran.</span>
- **<span style="mso-fareast-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'; mso-font-kerning: 0pt; mso-ligatures: none; mso-fareast-language: FR;">Mardi : Assemblage et Pratique</span>**<span style="mso-fareast-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'; mso-font-kerning: 0pt; mso-ligatures: none; mso-fareast-language: FR;"> - Construisez le prototype de votre Station AquaLife en assemblant les capteurs et les circuits nécessaires.</span>
- **<span style="mso-fareast-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'; mso-font-kerning: 0pt; mso-ligatures: none; mso-fareast-language: FR;">Mercredi : Programmation Fonctionnelle</span>**<span style="mso-fareast-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'; mso-font-kerning: 0pt; mso-ligatures: none; mso-fareast-language: FR;"> - Implémentez le code informatique qui permettra à la Station AquaLife de collecter et d'analyser les données.</span>
- **<span style="mso-fareast-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'; mso-font-kerning: 0pt; mso-ligatures: none; mso-fareast-language: FR;">Jeudi : Tests chimiques</span>**<span style="mso-fareast-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'; mso-font-kerning: 0pt; mso-ligatures: none; mso-fareast-language: FR;"> - Testez votre Station AquaLife avec différents échantillons d'eau récoltés autours des usines ciblés.</span>
- **<span style="mso-fareast-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'; mso-font-kerning: 0pt; mso-ligatures: none; mso-fareast-language: FR;">Vendredi : Analyse et Présentation</span>**<span style="mso-fareast-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'; mso-font-kerning: 0pt; mso-ligatures: none; mso-fareast-language: FR;"> - Interprétez les données collectées, identifiez les tendances et préparez une présentation de vos résultats. Cette étape sera cruciale pour identifier la source de la contamination.</span>

<span style="font-size: 11.0pt; line-height: 107%; font-family: 'Space Grotesk'; mso-fareast-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'; mso-font-kerning: 0pt; mso-ligatures: none; mso-ansi-language: FR; mso-fareast-language: FR; mso-bidi-language: AR-SA;">En participant à la **Mission Otez l’eau**, vous apportez une contribution concrète à la résolution d'un problème environnemental d’envergure. Vous acquerrez des compétences en robotique, en analyse de données et en travail d'équipe, tout en aidant à protéger la ressource la plus précieuse de notre planète : l'eau. **Prêts à relever ce défi vital ?**</span>

### Préparation des Matériaux / Kits

#### Station de mesure de l'eau  


Liste du matériel de la station : [Liste\_materiel.pdf](https://innovation.iha.unistra.fr/attachments/30)

Connexion des capteurs sur la carte d'extension DRF0762 : [connexion\_capteurs\_carte\_DFR0762.pdf](https://innovation.iha.unistra.fr/attachments/31)

#### Arduino

Installation de la carte ESP2 et des bibliothèques pour la station d'eau dans l'IDE Arduino : [Arduino\_Installation\_Cartes\_Bibliotheques.pdf](https://innovation.iha.unistra.fr/attachments/39)

Programme Arduino complet de la station d'eau : [2024\_stage\_collegiens\_v5\_Station\_Eau.ino](https://innovation.iha.unistra.fr/attachments/25)

Ci-dessous, le programme simplifié :

```
/// CODE SIMPLIFIE SANS TDS ET TURBIDITE
// #include <Arduino.h>
#include <U8g2lib.h> // by oliver <olikraus@gmail.com> testé 2.34.22
#include <DHT.h>
#include <OneWire.h>
#include <DallasTemperature.h>

//****************************************************************************************//
//           Constante de temps et broches de connexion des capteurs                      //
//****************************************************************************************//

const int pause_affichage_ms = 100;      // temps de pause d'affichage en milliseconde

// #define TDS_Sensor_Pin_Num A2           // TDS sensor on Analog pin Ax
// #define Turbidity_Sensor_Pin_Num A3     // Turbidity sensor on Analog pin Ax
#define pH_Sensor_Pin_Num A4            // pH sensor on Analog pin Ax
#define DS18S20_Pin_Num_v2 D2           // DS18B20 sensor on digital pin Dx                      <======= Zone d'affectation des capteurs et actionneurs
#define DHT_Sensor_Pin_Num D6           // DHT on Digital pin Dx

//****************************************************************************************//

//Données et configuration pour le capteur DHT
#define ref_DHT DHT22                     // référence du DHT (DHT11, DHT22...)
char Hum_DHT[8], Temp_DHT[8];
DHT dht(DHT_Sensor_Pin_Num, ref_DHT);

// Données pour le capteur pH meter (v2) ==> site DFRobot
const int numMeasure = 10;
char pH_2[8];
float offset_pH2 = 0;    // valeur standard = -1.8 avec la carte pH alimentée en 3.3V et -2.5 avec carte alimentée en 5V

// Donnée TDS meter (v1)
// char TDS_1[8];
// float temperature = 25;

// Données pour le capteur de turbidité
// char Turbi_volt[8], NTU_strg[8];
// float Turbi_val = 0;

// Configuration pour le capteur de température DS18B20 (v2)
OneWire ds(DS18S20_Pin_Num_v2);  //on digital pin 2
char Temp_DS_2[8];


// Configuration de l'afficheur SSD1315
U8G2_SSD1306_128X64_NONAME_F_SW_I2C u8g2(/* rotation=*/ U8G2_R0, /* clock=*/ SCL, /* data=*/ SDA, /* reset=*/ U8X8_PIN_NONE);    //Low spped I2C
/*
  U8g2lib Example Overview:
    Frame Buffer Examples: clearBuffer/sendBuffer. Fast, but may not work with all Arduino boards because of RAM consumption
    Page Buffer Examples: firstPage/nextPage. Less RAM usage, should work with all Arduino boards.
    U8x8 Text Only Example: No RAM usage, direct communication with display controller. No graphics, 8x8 Text only.   
*/

void get_DHT()
{
  float h = 0.0;
  float t = 0.0;

  h = dht.readHumidity();
  dtostrf(h, 5, 1, Hum_DHT);      // conversion digital to string 
  t = dht.readTemperature();
  dtostrf(t, 5, 1, Temp_DHT);

  Serial.print("DHT ==>    Humidité : ");
  Serial.print(Hum_DHT);
  Serial.print("    Température (°C) : ");
  Serial.println(Temp_DHT);

}

void get_pH_2()
{
  int buf[10],temp;
  
  for(int i=0;i<numMeasure;i++)       //Get 10 sample value from the sensor for smooth the value
  { 
    buf[i]=analogRead(pH_Sensor_Pin_Num);
    delay(10);
  }
  
  for(int i=0;i<numMeasure-1;i++)        //sort the analog from small to large
  {
    for(int j=i+1;j<numMeasure;j++)
    {
      if(buf[i]>buf[j])
      {
        temp=buf[i];
        buf[i]=buf[j];
        buf[j]=temp;
      }
    }
  }

  unsigned long int sumValue = 0;  //Store the average value of the sensor feedback
  
  for(int i=2;i<numMeasure-2;i++)                      //take the average value of 6 center sample
    sumValue+=buf[i];
  
  float phValue=(float)sumValue*5.0/4096/(numMeasure-4);    //convert the analog into millivolt
//  phValue=3.5*phValue + offset_pH2;                       //convert the millivolt into pH value avec carte pH alimentée en 5v
  phValue=5.3*phValue + offset_pH2;                         //convert the millivolt into pH value avec carte pH alimentée en 3.3v
  
  dtostrf(phValue, 5, 1, pH_2);
 
  Serial.print("pH_2 value: ");  
  Serial.println(phValue,2);

}

// void get_TDS_1()
// {
//   int TDS_ADC = 0;
//   float TDS_volt = 0;
//   float compensationCoefficient = 1.0+0.02*(temperature-25.0);    //temperature compensation formula: fFinalResult(25^C) = fFinalResult(current)/(1.0+0.02*(fTP-25.0));
//   float compensationVolatge = 0;  //temperature compensation
//   float TDS_val = 0;

//   TDS_ADC = analogRead(TDS_Sensor_Pin_Num);

//   TDS_volt = TDS_ADC/4096.0*5.0;
//   compensationVolatge = TDS_volt/compensationCoefficient;
//   TDS_val=(133.42*compensationVolatge*compensationVolatge*compensationVolatge - 255.86*compensationVolatge*compensationVolatge + 857.39*compensationVolatge)*0.5; //convert voltage value to tds value

//   dtostrf(TDS_val, 5, 1, TDS_1);  

//   Serial.print("TDS_1 valADC (0 à 4095) : ");
//   Serial.print(TDS_ADC);
//   Serial.print("    voltage (V) : ");
//   Serial.print(TDS_volt);
//   Serial.print("    ppm : ");
//   Serial.println(TDS_val);

// }

// void get_Turbidity()
// {
//   int sensorValue = 0;
//   float voltage = 0, NTU = 0;

//   sensorValue = analogRead(Turbidity_Sensor_Pin_Num);   // read the input on analog pin
  
//   voltage = sensorValue * (5.0 / 4096);             // Convert the analog reading (which goes from 0 - 4095) to a voltage (0 - 5V)

//   dtostrf(voltage, 5, 1, Turbi_volt);

//   NTU = -1120.4*voltage*voltage + 5742.3*voltage - 4352.9;   //

//   dtostrf(NTU, 5, 0, NTU_strg);

//   Serial.print("Turbidity (volt) : "); // print out the value you read:
//   Serial.print(voltage); // print out the value you read:
//   Serial.print("    Turbidity (NTU) : "); // print out the value you read:
//   Serial.println(NTU); // print out the value you read: 

//   Turbi_val = voltage; 
// }

void get_TempDS_2()
{
  //returns the temperature from one DS18S20 in DEG Celsius
  
  byte data[12];
  byte addr[8];

  if (!ds.search(addr))
  {
    //no more sensors on chain,reset search
    Serial.println("No more addresses.");
    Serial.println();
    ds.reset_search();
  }
  
  Serial.print("ROM =");
  for(int i = 0; i < 8; i++) 
  {
    Serial.write(' ');
    Serial.print(addr[i], HEX);
  }
  Serial.println();

  if (OneWire::crc8(addr,7)!=addr[7])
  {
    Serial.println("CRC is not valid!");
  }
  
  // the first ROM byte indicates which chip
  byte type_s;
  switch (addr[0]) 
  {
    case 0x10:
      Serial.println("  Chip = DS18S20");  // or old DS1820
      type_s = 1;
      break;
    case 0x28:
      Serial.println("  Chip = DS18B20");
      type_s = 0;
      break;
    case 0x22:
      Serial.println("  Chip = DS1822");
      type_s = 0;
      break;
    default:
      Serial.println("Device is not a DS18x20 family device.");
      break;
  } 

  if (addr[0] != 0x10 && addr[0] != 0x28)
  {
    Serial.print("Device is not recognized");
  }

  ds.reset();
  ds.select(addr);
  ds.write(0x44,1);   //start conversion, with parasite power on at the end
  
  byte present = ds.reset();
  ds.select(addr);
  ds.write(0xBE);     //ReadScratchpad
  
  for(int i=0; i<9; i++) //weneed9bytes
  {
    data[i]=ds.read();
  }
  ds.reset_search();

  byte MSB=data[1];
  byte LSB=data[0];

  float tempRead=((MSB<<8)|LSB);    //using two's compliment
  float TemperatureSum = tempRead/16;
  
//  return TemperatureSum;

  dtostrf(TemperatureSum, 5, 1, Temp_DS_2);
  Serial.print("Temperature DS (en °C) : ");
  Serial.println(TemperatureSum);

}



void setup()
{
  // put your setup code here, to run once:
  
  Serial.begin(115200);
  
  Serial.println("**********************************************");
  Serial.println("Setup Serial monitor OK");

  u8g2.begin();
  Serial.println("Setup écran OLED OK");

  dht.begin();

  pinMode(pH_Sensor_Pin_Num,INPUT);             // Set pH sensor pin to input mode
  // pinMode(Turbidity_Sensor_Pin_Num, INPUT);     // Set the turbidity sensor pin to input mode

  Serial.println("End of setup");
  Serial.println("**********************************************");
}

void loop()
{
  // put your main code here, to run repeatedly:   
 
  get_DHT();
  get_pH_2();

  // affichage des données

  u8g2.setFont(u8g2_font_ncenB08_tr);   // choose a suitable font

//****************************************************************************************//
// écran OLED SSD1315 :
// fonction U8g2.drawStr(n°colonne,n°ligne,string)

  u8g2.clearBuffer();                     // clear the internal memory
  u8g2.drawStr(0,10,"Station eau");       // write something to the internal memory  
  u8g2.drawStr(0,25,"Humidity DHT :");    // affichage du texte "Humidity DHT:"
  u8g2.drawStr(92,25,Hum_DHT);            // affichage de la valeur de l'humidité
  u8g2.drawStr(0,30,"Temp DHT :");        // affichage du texte "Temp DHT :"
  u8g2.drawStr(68,30,Temp_DHT);           // affichage de la valeur de température fournie par le capteur DHT            <== zone à modifier (remplacer xx par des valeurs)
  u8g2.drawStr(0,35,"pH :");              // affichage du texte "pH :"
  u8g2.drawStr(20,35,pH_2);               // affichage de la valeur du pH
  u8g2.sendBuffer();                      // transfer internal memory to the display

  delay(pause_affichage_ms);

//****************************************************************************************//
  
  // get_TDS_1();
  // get_Turbidity();
  get_TempDS_2();

//****************************************************************************************//

  u8g2.clearBuffer();                       // clear the internal memory
  // u8g2.drawStr(0,25,"TDS :");               // affichage du texte "TDS :" 
  // u8g2.drawStr(35,25,TDS_1);                // affichage de la valeur de conductivité TDS
  // u8g2.drawStr(0,37,"Turbidity (V) :");     // affichage du texte "Turbidity (V) :"
  // u8g2.drawStr(80,37,Turbi_volt);           // affichage de la valeur de turbidité en volt                 <== zone à modifier
  u8g2.drawStr(0,49,"Temp DS :");           // affichage du texte "Temp_DS :" à la position
  u8g2.drawStr(57,49,Temp_DS_2);            // affichage de la valeur de température du DS18B20
  u8g2.sendBuffer();

//****************************************************************************************//


//****************************************************************************************//
//                              Code pour gérer une LED                                   //
//****************************************************************************************//

// Affciher un message d'alerte selon la valeur de la turbidité 

/*
  float seuil = x;                    // valeur du seuil

  if (Turbi_val > seuil)              // comparaison par rapport au seuil
  {
    u8g2.drawStr(0,62,"Eau limpide !");
    u8g2.sendBuffer();
  }
  else
  {
    u8g2.drawStr(0,62,"Eau trouble !");
    u8g2.sendBuffer();
  }
*/


  delay(pause_affichage_ms);


  Serial.println();

}

```

#### Calibration du capteur pH

Programme Arduino pour la calibration du capteur pH : [2024\_calibration\_materiel\_capteur\_pH.ino](https://innovation.iha.unistra.fr/attachments/28)

Procédure de calibration matériel du capteur pH : [Procedure\_Calibration\_Materiel\_Capteur\_pH.pdf](https://innovation.iha.unistra.fr/attachments/36)


### **Jour 1 - Conception 3D**  


##### **Mission :**

Une dernière pièce est manquante pour la réalisation de la station. Vous allez devoir la concevoir et la produire sur mesure en utilisant un logiciel de conception 3D (TINKERCAD), ce qui permettra d'obtenir le boitier de la station AquaLife.

##### **Conception Tinkercad T78-12G-PM4** 

**<span style="font-size: 11.0pt; line-height: 107%; font-family: 'Space Grotesk'; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; mso-bidi-font-family: 'Times New Roman'; mso-bidi-theme-font: minor-bidi; mso-ansi-language: FR; mso-fareast-language: EN-US; mso-bidi-language: AR-SA;">TINKERCAD</span>**<span style="font-size: 11.0pt; line-height: 107%; font-family: 'Space Grotesk'; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; mso-bidi-font-family: 'Times New Roman'; mso-bidi-theme-font: minor-bidi; mso-ansi-language: FR; mso-fareast-language: EN-US; mso-bidi-language: AR-SA;"> est un logiciel de conception 3D simple et efficace. Ce tutoriel vous aidera à l’utiliser : </span><span style="font-size: 11.0pt; line-height: 107%; font-family: 'Space Grotesk'; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; mso-bidi-font-family: 'Times New Roman'; mso-bidi-theme-font: minor-bidi; mso-ansi-language: FR; mso-fareast-language: EN-US; mso-bidi-language: AR-SA;">[https://innovation.iha.unistra.fr/books/2-fablab-activites-logiciels/page/initiation-3d-tinkercad](https://innovation.iha.unistra.fr/books/2-fablab-activites-logiciels/page/initiation-3d-tinkercad)</span>

<span style="font-size: 11.0pt; line-height: 107%; font-family: 'Space Grotesk'; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; mso-bidi-font-family: 'Times New Roman'; mso-bidi-theme-font: minor-bidi; mso-ansi-language: FR; mso-fareast-language: EN-US; mso-bidi-language: AR-SA;">Ouvrir Tinkercad à partir de la barre de recherche Windows de votre ordinateur.   
</span>

<span style="font-size: 11.0pt; line-height: 107%; font-family: 'Space Grotesk'; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; mso-bidi-font-family: 'Times New Roman'; mso-bidi-theme-font: minor-bidi; mso-ansi-language: FR; mso-fareast-language: EN-US; mso-bidi-language: AR-SA;">Dans l'onglet <span style="color: red;">3</span>, prenez l'outil nommé « boîtes », ensuite faites-le glisser sur le plan de <span style="color: #00b050;">construction</span>.</span>

Une fenêtre apparaîtra, vous permettant de régler différents paramètres de cette fenêtre (rayon, étapes, longueur, largeur et hauteur) pour voir ce qui se passe.

Vous êtes désormais prêt(e) à conceptualiser les pièces nécessaires pour finaliser notre station AquaLife. C<span style="font-size: 11.0pt; line-height: 107%; font-family: 'Space Grotesk'; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; mso-bidi-font-family: 'Times New Roman'; mso-bidi-theme-font: minor-bidi; mso-ansi-language: FR; mso-fareast-language: EN-US; mso-bidi-language: AR-SA;"><span style="font-size: 11.0pt; line-height: 107%; font-family: 'Space Grotesk'; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; mso-bidi-font-family: 'Times New Roman'; mso-bidi-theme-font: minor-bidi; color: black; mso-themecolor: text1; mso-ansi-language: FR; mso-fareast-language: EN-US; mso-bidi-language: AR-SA;">elle-ci doit à la fin ressembler à la photo ci-dessous.</span></span>

[![image.png](https://innovation.iha.unistra.fr/uploads/images/gallery/2024-04/scaled-1680-/eG5image.png)](https://innovation.iha.unistra.fr/uploads/images/gallery/2024-04/eG5image.png) [![image.png](https://innovation.iha.unistra.fr/uploads/images/gallery/2024-04/scaled-1680-/Yjlimage.png)](https://innovation.iha.unistra.fr/uploads/images/gallery/2024-04/Yjlimage.png)

**<span style="font-size: 11.0pt; line-height: 107%; font-family: 'Space Grotesk'; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; mso-bidi-font-family: 'Times New Roman'; mso-bidi-theme-font: minor-bidi; mso-ansi-language: FR; mso-fareast-language: EN-US; mso-bidi-language: AR-SA;">Création de la dernière pièce de la station :</span>**<span style="font-size: 11.0pt; line-height: 107%; font-family: 'Space Grotesk'; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; mso-bidi-font-family: 'Times New Roman'; mso-bidi-theme-font: minor-bidi; mso-ansi-language: FR; mso-fareast-language: EN-US; mso-bidi-language: AR-SA;"> Pour commencer, il vous faut un rectangle avec les mesures suivantes : Longueur = 126 mm ; Largeur = 54 mm ; Hauteur = 3 mm.</span>

[![image.png](https://innovation.iha.unistra.fr/uploads/images/gallery/2024-04/scaled-1680-/I8Rimage.png)](https://innovation.iha.unistra.fr/uploads/images/gallery/2024-04/I8Rimage.png)

<span style="font-size: 11.0pt; line-height: 107%; font-family: 'Space Grotesk'; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; mso-bidi-font-family: 'Times New Roman'; mso-bidi-theme-font: minor-bidi; mso-ansi-language: FR; mso-fareast-language: EN-US; mso-bidi-language: AR-SA;">Nous devons créer un emplacement pour l’afficheur. Pour ce faire, nous avons besoin d’un rectangle de perçage. Donnez-lui les dimensions suivantes : Longueur = 25 mm ; Largeur = 18 mm ; Hauteur = 4 mm.</span>

[![image.png](https://innovation.iha.unistra.fr/uploads/images/gallery/2024-04/scaled-1680-/PXaimage.png)](https://innovation.iha.unistra.fr/uploads/images/gallery/2024-04/PXaimage.png)

Centrez le sur votre rectangle rouge avec l'outil **aligner.**

[![image.png](https://innovation.iha.unistra.fr/uploads/images/gallery/2024-04/scaled-1680-/guKimage.png)](https://innovation.iha.unistra.fr/uploads/images/gallery/2024-04/guKimage.png)

<span style="mso-no-proof: yes;">Pour assembler les deux pièces vous devez sélectionnez les 2 pièces et utiliser l'outil **regrouper en union.**</span>

<span style="mso-no-proof: yes;">Voici le rendu que vous devriez avoir :</span>

[![image.png](https://innovation.iha.unistra.fr/uploads/images/gallery/2024-04/scaled-1680-/KRDimage.png)](https://innovation.iha.unistra.fr/uploads/images/gallery/2024-04/KRDimage.png)

<span style="font-size: 11.0pt; font-family: 'Space Grotesk';">Par la suite, créez l’emplacement pour la vis qui maintiendra votre afficheur.</span>

<span style="font-size: 11.0pt; font-family: 'Space Grotesk';">Pour ce faire, créez un cylindre de perçage.</span>

<span style="font-size: 11.0pt; font-family: 'Space Grotesk';">Voici ses dimensions : Diamètre = 8 mm ; Hauteur = 5 mm.</span>

[![image.png](https://innovation.iha.unistra.fr/uploads/images/gallery/2024-04/scaled-1680-/1UBimage.png)](https://innovation.iha.unistra.fr/uploads/images/gallery/2024-04/1UBimage.png)

Déplacez-le pour le mettre au bon endroit.

L’outil « règle » sera votre meilleur ami pour placer correctement le cylindre.

[![image.png](https://innovation.iha.unistra.fr/uploads/images/gallery/2024-04/scaled-1680-/idJimage.png)](https://innovation.iha.unistra.fr/uploads/images/gallery/2024-04/idJimage.png)

<span style="font-size: 11.0pt; line-height: 107%; font-family: 'Space Grotesk'; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; mso-bidi-font-family: 'Times New Roman'; mso-bidi-theme-font: minor-bidi; mso-ansi-language: FR; mso-fareast-language: EN-US; mso-bidi-language: AR-SA;">Placez cet outil dans le coin inférieur droit de l’emplacement de l’afficheur. Une fois placé, des cotes apparaîtront, comme sur l'image suivante :</span>

[![image.png](https://innovation.iha.unistra.fr/uploads/images/gallery/2024-04/scaled-1680-/GnMimage.png)](https://innovation.iha.unistra.fr/uploads/images/gallery/2024-04/GnMimage.png)

<span style="font-size: 11.0pt; line-height: 107%; font-family: 'Space Grotesk'; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; mso-bidi-font-family: 'Times New Roman'; mso-bidi-theme-font: minor-bidi; mso-ansi-language: FR; mso-fareast-language: EN-US; mso-bidi-language: AR-SA;">Modifiez seulement les cotes en vert. La cote de gauche sera de 5 mm et celle du bas de 7 mm. Ensuite, assemblez les deux en faisant : Ctrl+A puis Ctrl+G.  
</span>[![image.png](https://innovation.iha.unistra.fr/uploads/images/gallery/2024-04/scaled-1680-/NsNimage.png)](https://innovation.iha.unistra.fr/uploads/images/gallery/2024-04/NsNimage.png)

<span style="font-size: 11.0pt; line-height: 107%; font-family: 'Space Grotesk'; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; mso-bidi-font-family: 'Times New Roman'; mso-bidi-theme-font: minor-bidi; mso-ansi-language: FR; mso-fareast-language: EN-US; mso-bidi-language: AR-SA;">Votre support pour l’afficheur est maintenant prêt !</span>

### **Jour 2 - Assemblage mécanique et électronique**  


##### **Mission :**

Aujourd’hui, votre objectif est d’assembler les capteurs de votre station AquaLife. Pour réaliser l’assemblage et le montage, vous allez d’abord découvrir les différents capteurs, les fixer à votre station et les câbler à la carte ESP32 en fonction des recommandations de connexion. Ci-dessous une image du montage final :

[![image.png](https://innovation.iha.unistra.fr/uploads/images/gallery/2024-04/scaled-1680-/B6bimage.png)](https://innovation.iha.unistra.fr/uploads/images/gallery/2024-04/B6bimage.png)

##### **Tutoriel des capteurs :** 

<table border="1" id="bkmrk-l%27esp32-%28et-son-exte" style="border-collapse: collapse; width: 100.494%; height: 1648px;"><colgroup><col style="width: 50.0412%;"></col><col style="width: 50.0412%;"></col></colgroup><tbody><tr style="height: 263.2px;"><td style="height: 263.2px;">[![image.png](https://innovation.iha.unistra.fr/uploads/images/gallery/2024-04/scaled-1680-/p8uimage.png)](https://innovation.iha.unistra.fr/uploads/images/gallery/2024-04/p8uimage.png)

</td><td style="height: 263.2px;">[![image.png](https://innovation.iha.unistra.fr/uploads/images/gallery/2024-04/scaled-1680-/nJximage.png)](https://innovation.iha.unistra.fr/uploads/images/gallery/2024-04/nJximage.png)

</td></tr><tr style="height: 155.2px;"><td style="width: 234.3pt; padding: 0cm 5.4pt; height: 155.2px;" valign="top" width="312">L'**ESP32** (et son extension) est une carte microcontrôleur très performante qui permet de créer des projets électroniques connectés. Grâce à ses nombreux ports, tu peux y connecter des capteurs, des moteurs, ou d'autres composants pour réaliser des gadgets intelligents, des systèmes de domotique, ou des robots.

</td><td style="height: 155.2px;">Un **afficheur** est un écran qui permet de montrer des informations ou des données provenant du microcontrôleur. On peut l'utiliser pour afficher des textes, des chiffres... C'est très utile pour voir ce que fait le microcontrôleur en temps réel, comme la température d'une pièce, le score d'un jeu, ou l'état d'un système.

</td></tr><tr style="height: 263.2px;"><td style="height: 263.2px;">[![image.png](https://innovation.iha.unistra.fr/uploads/images/gallery/2024-04/scaled-1680-/SKRimage.png)](https://innovation.iha.unistra.fr/uploads/images/gallery/2024-04/SKRimage.png)

</td><td style="height: 263.2px;">[![image.png](https://innovation.iha.unistra.fr/uploads/images/gallery/2024-04/scaled-1680-/ou0image.png)](https://innovation.iha.unistra.fr/uploads/images/gallery/2024-04/ou0image.png)

</td></tr><tr style="height: 137.467px;"><td style="width: 234.3pt; padding: 0cm 5.4pt; height: 137.467px;" valign="top" width="312"><span style="font-size: 11.0pt; font-family: 'Space Grotesk';">Un **conductimètre** est un instrument qui mesure la capacité de l'eau à conduire l'électricité, ce qui nous informe sur la quantité de sels ou d'autres substances dissoutes dans l'eau. Plus l'eau contient de substances dissoutes, mieux elle conduit l'électricité. Cette mesure est très utile pour vérifier la pureté de l'eau. </span>

</td><td style="width: 232.8pt; padding: 0cm 5.4pt; height: 137.467px;" valign="top" width="310">Un **turbidimètre**, permet de mesurer la turbidité, qui sert à évaluer la clarté de l'eau en détectant combien de petites particules sont suspendues dans celle-ci. Plus l'eau contient de particules comme de la terre, des micro-organismes, ou des substances chimiques, plus elle apparaît trouble.

</td></tr><tr style="height: 275.333px;"><td style="width: 234.3pt; padding: 0cm 5.4pt; height: 275.333px;">[![image.png](https://innovation.iha.unistra.fr/uploads/images/gallery/2024-04/scaled-1680-/Cdfimage.png)](https://innovation.iha.unistra.fr/uploads/images/gallery/2024-04/Cdfimage.png)

<span style="font-size: 11.0pt; font-family: 'Space Grotesk';">  
</span>

</td><td style="width: 232.8pt; padding: 0cm 5.4pt; height: 275.333px;">[![image.png](https://innovation.iha.unistra.fr/uploads/images/gallery/2024-04/scaled-1680-/sFSimage.png)](https://innovation.iha.unistra.fr/uploads/images/gallery/2024-04/sFSimage.png)

</td></tr><tr style="height: 183.733px;"><td style="width: 234.3pt; padding: 0cm 5.4pt; height: 183.733px;">Un **pH-mètre** est un instrument utilisé pour mesurer l'acidité ou la basicité d'une solution. Il donne une valeur appelée "pH", qui varie généralement de 0 à 14. Un pH de 7 est neutre, des valeurs inférieures à 7 indiquent une acidité, et des valeurs supérieures à 7 révèlent une basicité. Le pH-mètre est essentiel, car il aide à comprendre l'équilibre chimique des solutions.

<span style="font-size: 11.0pt; font-family: 'Space Grotesk';">  
</span>

</td><td style="width: 232.8pt; padding: 0cm 5.4pt; height: 183.733px;" valign="top" width="310">Un **thermomètre** est un instrument qui permet de mesurer la température de l'eau. En mesurant la température, on peut s'assurer que l'eau est dans les conditions optimales, que ce soit pour assurer la santé des organismes aquatiques, garantir la sécurité des baigneurs, ou maintenir l'efficacité des processus industriels.

</td></tr><tr style="height: 281.4px;"><td style="width: 234.3pt; padding: 0cm 5.4pt; height: 281.4px;">[ ![image.png](https://innovation.iha.unistra.fr/uploads/images/gallery/2024-04/scaled-1680-/8T3image.png)](https://innovation.iha.unistra.fr/uploads/images/gallery/2024-04/8T3image.png)

</td><td style="width: 232.8pt; padding-top: 0cm; padding-right: 5.4pt; padding-bottom: 0cm; height: 281.4px; text-align: justify;" valign="top" width="310">Le **DHT22** est un capteur qui mesure à la fois la **température et l'humidité de l'air** ambiant. Il fournit des informations précieuses pour contrôler les conditions environnementales. En mesurant l'humidité, le DHT22 aide à surveiller la quantité de vapeur d'eau dans l'air, ce qui est crucial pour maintenir une bonne qualité de l'air. Pour la température, il assure que les conditions soient confortables et sûres.</td></tr></tbody></table>

Avec ces informations vous êtes prêts à assembler votre station.

##### **Étape 1 : Aller chercher les composants auprès de l'animateur**  


- Un afficheur, avec des câbles femelle-femelle de toutes les couleurs.
- Un conductimètre avec sa carte d’interface, ainsi qu’un câble correspondant.
- Un turbidimètre, avec sa carte d’interface, ainsi qu’un câble correspondant.
- Un pH-mètre, avec sa carte d’interface, ainsi qu’un câble correspondant.
- Un thermomètre, avec sa carte d’interface, ainsi qu’un câble correspondant.
- Un DHT22, avec sa carte d’interface, ainsi qu’un câble correspondant.Un ESP32 et son extension, ainsi qu’un câble USB/USB-C pour alimenter votre station à l’ordinateur.

##### **Étape 2 : Fixer les interfaces des capteurs à la station.**   


Fixer avec des vis adaptées, les interfaces des capteurs dans la boite de la station comme indiqué ci-dessous.[![image.png](https://innovation.iha.unistra.fr/uploads/images/gallery/2024-04/scaled-1680-/p9Ximage.png)](https://innovation.iha.unistra.fr/uploads/images/gallery/2024-04/p9Ximage.png)

##### **Étape 3 : Brancher l’afficheur et les capteurs à l’ESP32 via la carte d’extension présentée ci-dessous.**

Observer l’organisation de la carte d’extension et repérer les différents signaux.

[![image.png](https://innovation.iha.unistra.fr/uploads/images/gallery/2024-04/scaled-1680-/VIBimage.png)](https://innovation.iha.unistra.fr/uploads/images/gallery/2024-04/VIBimage.png)

Connecter les capteurs et l'afficheur sur la carte d'extension DFR0762 selon les indications ci-dessous :

[![image.png](https://innovation.iha.unistra.fr/uploads/images/gallery/2024-04/scaled-1680-/IT8image.png)](https://innovation.iha.unistra.fr/uploads/images/gallery/2024-04/IT8image.png)

<table border="1" id="bkmrk--12" style="border-collapse: collapse; width: 100%;"><colgroup><col style="width: 50%;"></col><col style="width: 50%;"></col></colgroup><tbody><tr><td>[![image.png](https://innovation.iha.unistra.fr/uploads/images/gallery/2024-04/scaled-1680-/hGKimage.png)](https://innovation.iha.unistra.fr/uploads/images/gallery/2024-04/hGKimage.png)</td><td>[![image.png](https://innovation.iha.unistra.fr/uploads/images/gallery/2024-04/scaled-1680-/73jimage.png)](https://innovation.iha.unistra.fr/uploads/images/gallery/2024-04/73jimage.png)

</td></tr></tbody></table>

<table border="1" id="bkmrk--13" style="border-collapse: collapse; width: 100%;"><colgroup><col style="width: 50%;"></col><col style="width: 50%;"></col></colgroup><tbody><tr><td>[![image.png](https://innovation.iha.unistra.fr/uploads/images/gallery/2024-04/scaled-1680-/mhPimage.png)](https://innovation.iha.unistra.fr/uploads/images/gallery/2024-04/mhPimage.png)</td><td>[![image.png](https://innovation.iha.unistra.fr/uploads/images/gallery/2024-04/scaled-1680-/f9Ximage.png)](https://innovation.iha.unistra.fr/uploads/images/gallery/2024-04/f9Ximage.png)</td></tr></tbody></table>

### **Jour 3 - Programmation Arduino**

##### **Mission :**

Aujourd’hui, votre objectif est de programmer la station AquaLife. Vous allez écrire, modifier et tester le code nécessaire pour contrôler les différents capteurs selon les instructions décrites ci-dessous. Bonne chance.

##### **Étape 1 : Lancement de l'IDE Arduino et configuration de l'application**

- Ouvrez l'application Arduino IDE [![image.png](https://innovation.iha.unistra.fr/uploads/images/gallery/2024-04/scaled-1680-/HQYimage.png)](https://innovation.iha.unistra.fr/uploads/images/gallery/2024-04/HQYimage.png)
- Charger le fichier : **2024\_stage\_collegiens\_v5.ino**
- Connectez votre station ESP32 à votre ordinateur via un câble USB-A/USB-C.
- Vérifiez le port de connexion de votre ESP32 (CH340K), en consultant le gestionnaire de périphériques de votre ordinateur pour identifier le port de communication (dans notre exemple ci-dessous : COM10).

[![image.png](https://innovation.iha.unistra.fr/uploads/images/gallery/2024-04/scaled-1680-/df3image.png)](https://innovation.iha.unistra.fr/uploads/images/gallery/2024-04/df3image.png)

- Sélectionnez ce port de communication dans l'environnement Arduino en utilisant le menu déroulant situé en haut à gauche, comme indiqué dans l'exemple (indiqué comme "Unknown COM10" dans cet exemple).

[![image.png](https://innovation.iha.unistra.fr/uploads/images/gallery/2024-04/scaled-1680-/2wkimage.png)](https://innovation.iha.unistra.fr/uploads/images/gallery/2024-04/2wkimage.png)

- Choisissez le modèle de carte approprié pour votre ESP32 dans les options de carte disponibles. Pour cet exemple, sélectionnez **"FireBeetle 2 ESP32-E"** (voir dans l’exemple ci-dessous).

[![image.png](https://innovation.iha.unistra.fr/uploads/images/gallery/2024-04/scaled-1680-/tLgimage.png)](https://innovation.iha.unistra.fr/uploads/images/gallery/2024-04/tLgimage.png)

##### **Étape 2 : Assignation des pins des capteurs dans le code**

- Dans le code, de la **ligne 13 à 17**, remplacez les marqueurs **"Ax"** et **"Dx"** par les numéros de pin correspondants à votre câblage sur la carte d'extension de l'ESP32. Par exemple, si le pin analogique pour le capteur de TDS est 9, remplacez **"TDS\_Sensor\_Pin\_Num Ax"** par **"TDS\_Sensor\_Pin\_Num A9"**.

[![image.png](https://innovation.iha.unistra.fr/uploads/images/gallery/2024-04/scaled-1680-/i3timage.png)](https://innovation.iha.unistra.fr/uploads/images/gallery/2024-04/i3timage.png)

##### **Étape 3 : Compiler et charger le code dans l’ESP32** 

[![image.png](https://innovation.iha.unistra.fr/uploads/images/gallery/2024-04/scaled-1680-/dWximage.png)](https://innovation.iha.unistra.fr/uploads/images/gallery/2024-04/dWximage.png)

- Un message d’erreur apparaît, notez les numéros des lignes de code mentionnés.

[![image.png](https://innovation.iha.unistra.fr/uploads/images/gallery/2024-04/scaled-1680-/7sHimage.png)](https://innovation.iha.unistra.fr/uploads/images/gallery/2024-04/7sHimage.png)

- Remplacez les chaînes de caractères **"xxxxx"**, **"yyyyy"** et **"zzzzz"** mentionnées dans les lignes d'erreur par l'identifiant du capteur spécifié. Ces identifiants, comme **"TDS\_Sensor\_Pin\_Num"** pour le turbidimètre, sont indiqués en orange dans les **lignes de code de 13 à 17**.
- Assurez-vous que le capteur concerné par l'erreur est correctement décrit dans une fonction dont le nom est en adéquation avec ce capteur, située dans les lignes précédant l’erreur.
- Recompilez le code pour vérifier que les erreurs ont été corrigées.  
    Une fois le code compilé sans erreurs, chargez-le dans l'ESP32 en cliquant de nouveau sur le bouton encadré en rouge.

##### [![image.png](https://innovation.iha.unistra.fr/uploads/images/gallery/2024-04/scaled-1680-/7Kcimage.png)](https://innovation.iha.unistra.fr/uploads/images/gallery/2024-04/7Kcimage.png)

##### **Étape 4 : Correction de l'affichage pour une lecture claire des informations des capteurs**

- Modifiez la durée de pause entre chaque séquence d'affichage, qui se trouve à la **ligne 11**. Changez la valeur actuelle de 0,1 seconde à 2 secondes. Notez que cette valeur doit être saisie en millisecondes dans le code.
- Le code pour la première séquence d'affichage est situé entre les **lignes 275 et 291**. Vous remarquerez que les lignes de texte se superposent, rendant difficile la lecture des informations.
- Corrigez ce problème en ajustant le deuxième paramètre (x) dans la fonction d'affichage **u8g2.drawStr(x, y, "texte");** pour bien séparer les informations relatives aux capteurs "Humidity DHT", "Temp DHT", et "pH" sur l'afficheur.

[![image.png](https://innovation.iha.unistra.fr/uploads/images/gallery/2024-04/scaled-1680-/obximage.png)](https://innovation.iha.unistra.fr/uploads/images/gallery/2024-04/obximage.png)

##### **Étape 5 : Activation d’un message d’alerte sur l’afficheur**

- Identifiez dans le code les **lignes 309 à 328** qui permettront d'afficher un message d'alerte en lien avec le capteur de turbidité.
- Actuellement, ces lignes sont en commentaire et ne sont pas prises en compte lors de la compilation. Pour les activer, supprimez les marqueurs de commentaire **/\*** et **\*/** qui se trouvent respectivement aux **lignes 315 et 328**.
- Relevez la valeur de turbidité affichée sur votre appareil et définissez un seuil inférieur à cette valeur. Modifiez la valeur dans la déclaration (**float seuil = x;**) pour y placer votre seuil (supérieur à 0 et inférieur à votre valeur d’affichage).
- Compilez et téléchargez à nouveau le programme dans votre ESP32.
- Testez le fonctionnement du message d’alerte en plaçant une feuille de papier devant le turbidimètre pour simuler une turbidité élevée.

### **Jour 4 - Tests** 

##### **Mission :**

Aujourd’hui, votre objectif est de tester les différents échantillons d’eau qui nous sont parvenu de trois pays différents avec votre station AquaLife. Vous avez un échantillon d’un cours d’eau de l’**A**ustralie (noté **A**), la **B**résil (noté **B**), le **C**anada (noté **C**) et un cours d’eau en Alsace qui sera le Témoin (noté **T**), faites les analyses et compléter le tableau proposé dans le document.

##### **Étape 1 : Collecte et préparation des échantillons d’eau**

- Notez et remplissez à moitié quatre gobelets avec des échantillons d'eau provenant de différents pays : **A**ustralie (noté **<span style="color: rgb(0, 0, 0);">A</span>**), **B**résil (noté **B**), **C**anada (noté **C**) et le cours d’eau en Alsace qui servira de **T**émoin (noté **T**).
- Avant de verser l'eau dans les gobelets, agitez bien les bouteilles pour homogénéiser les échantillons.
- Utilisez un cinquième gobelet pour rincer vos capteurs après chaque analyse. Remplissez ce gobelet avec de l'eau du robinet. Assurez-vous de changer l'eau de rinçage dans ce gobelet entre chaque type d’eau analysé (A, B, C, et T).

[![image.png](https://innovation.iha.unistra.fr/uploads/images/gallery/2024-05/scaled-1680-/ZRbimage.png)](https://innovation.iha.unistra.fr/uploads/images/gallery/2024-05/ZRbimage.png)

##### **Étape 2 : Analyses physique des échantillons d’eau A, B, C et T**

- Pour analyser un échantillon, par exemple l'échantillon A, plongez les capteurs dans le gobelet correspondant. Homogénéisez la solution en remuant doucement le gobelet ou en déplaçant lentement les capteurs dans l'eau.
- Notez les résultats de l'analyse dans le tableau prévu à cet effet (Voir 4ème partie : Compléter le tableau avec vos analyses).
- Après chaque analyse, rincez les capteurs dans le gobelet de rinçage. Répétez la mesure jusqu'à obtenir trois résultats pour chaque capteur et pour chaque échantillon. Ce processus, appelé "tripliquas", est expliqué plus en détail un peu plus loin.
- Pensez à changer l'eau du gobelet de rinçage entre chaque type d’eau analysé (A, B, C et T).

[![image.png](https://innovation.iha.unistra.fr/uploads/images/gallery/2024-05/scaled-1680-/LaBimage.png)](https://innovation.iha.unistra.fr/uploads/images/gallery/2024-05/LaBimage.png)

##### **Étape 3 : Analyses chimiques des échantillons d’eau A, B, C et T** 

- Réalisez l’analyse chimique du Nitrate, à l’aide du photomètre. C'est un appareil qui permet de mesurer la concentration en polluants. Celui-ci mesure la différence entre l’échantillon et la solution (Echantillon avec le réactif), grâce au changement de couleur.
- Pour cela, suivez le protocole illustré dans le schéma ci-dessous.
- Notez les résultats de l'analyse dans le tableau prévu à cet effet un peu plus loin.

[![image.png](https://innovation.iha.unistra.fr/uploads/images/gallery/2024-05/scaled-1680-/pmBimage.png)](https://innovation.iha.unistra.fr/uploads/images/gallery/2024-05/pmBimage.png)

**<u>Protocole du Photomètre : </u>**

<span style="mso-fareast-font-family: 'Space Grotesk'; mso-bidi-font-family: 'Space Grotesk';"><span style="mso-list: Ignore;">1.<span style="font: 7.0pt 'Times New Roman';"> </span></span></span>Prélèvement : À l'aide d'une pipette jaugée, prélevez 10 ml de l’échantillon à analyser.

<span style="mso-fareast-font-family: 'Space Grotesk'; mso-bidi-font-family: 'Space Grotesk';"><span style="mso-list: Ignore;">2.<span style="font: 7.0pt 'Times New Roman';"> </span></span></span>Transfert : Versez l’eau de la pipette jaugée dans une cuvette propre.

<span style="mso-fareast-font-family: 'Space Grotesk'; mso-bidi-font-family: 'Space Grotesk';"><span style="mso-list: Ignore;">3.<span style="font: 7.0pt 'Times New Roman';"> </span></span></span>Calibration : Réalisez un étalonnage en faisant le blanc (zéro) pour ajuster le photomètre avant l'analyse proprement dite.

<span style="mso-fareast-font-family: 'Space Grotesk'; mso-bidi-font-family: 'Space Grotesk';"><span style="mso-list: Ignore;">4.<span style="font: 7.0pt 'Times New Roman';"> </span></span></span>Ajout du réactif : Introduisez le réactif approprié dans l’échantillon.

<span style="mso-fareast-font-family: 'Space Grotesk'; mso-bidi-font-family: 'Space Grotesk';"><span style="mso-list: Ignore;">5.<span style="font: 7.0pt 'Times New Roman';"> </span></span></span>Mélange : Agitez doucement la solution pour bien mélanger le réactif avec l'échantillon.

<span style="mso-fareast-font-family: 'Space Grotesk'; mso-bidi-font-family: 'Space Grotesk';"><span style="mso-list: Ignore;">6.<span style="font: 7.0pt 'Times New Roman';"> </span></span></span>Mesure : Placez la cuvette dans le photomètre et lancez la mesure en appuyant sur le bouton "start".

[![image.png](https://innovation.iha.unistra.fr/uploads/images/gallery/2024-05/scaled-1680-/Zt4image.png)](https://innovation.iha.unistra.fr/uploads/images/gallery/2024-05/Zt4image.png)

*Schéma d’utilisation du photomètre*

##### **Étape 4 : Compléter le tableau avec vos analyses** 

<table border="0" cellpadding="0" cellspacing="0" class="MsoTable15List7ColorfulAccent6" id="bkmrk-echantillon-t%C3%A9moin-%28" style="border-collapse: collapse; mso-yfti-tbllook: 1184; mso-padding-alt: 0cm 5.4pt 0cm 5.4pt;"><tbody><tr style="mso-yfti-irow: -1; mso-yfti-firstrow: yes; mso-yfti-lastfirstrow: yes;"><td style="width: 92.05pt; border: solid #16987C 1.0pt; mso-border-alt: solid #16987C .5pt; background: #C5E0B3; mso-background-themecolor: accent6; mso-background-themetint: 102; padding: 0cm 5.4pt 0cm 5.4pt;" valign="top" width="123">**<span style="font-size: 13.0pt; mso-bidi-font-size: 11.0pt; mso-fareast-font-family: 'Times New Roman'; mso-fareast-theme-font: major-fareast; mso-bidi-font-family: 'Times New Roman'; mso-bidi-theme-font: major-bidi; color: black; mso-color-alt: windowtext; mso-no-proof: yes;">Echantillon</span>**

</td><td style="width: 90.15pt; border: solid #16987C 1.0pt; border-left: none; mso-border-left-alt: solid #16987C .5pt; mso-border-alt: solid #16987C .5pt; background: #C5E0B3; mso-background-themecolor: accent6; mso-background-themetint: 102; padding: 0cm 5.4pt 0cm 5.4pt;" valign="top" width="120">**<span style="font-size: 12.0pt; mso-bidi-font-size: 10.0pt; mso-fareast-font-family: 'Times New Roman'; mso-fareast-theme-font: major-fareast; mso-bidi-font-family: 'Times New Roman'; mso-bidi-theme-font: major-bidi; color: black; mso-color-alt: windowtext; mso-no-proof: yes;">Témoin (T)</span>**

</td><td style="width: 90.3pt; border: solid #16987C 1.0pt; border-left: none; mso-border-left-alt: solid #16987C .5pt; mso-border-alt: solid #16987C .5pt; background: #C5E0B3; mso-background-themecolor: accent6; mso-background-themetint: 102; padding: 0cm 5.4pt 0cm 5.4pt;" valign="top" width="120">**<span style="font-size: 12.0pt; mso-bidi-font-size: 10.0pt; mso-fareast-font-family: 'Times New Roman'; mso-fareast-theme-font: major-fareast; mso-bidi-font-family: 'Times New Roman'; mso-bidi-theme-font: major-bidi; color: black; mso-color-alt: windowtext; mso-no-proof: yes;">Australie (A)</span>**

</td><td style="width: 90.35pt; border: solid #16987C 1.0pt; border-left: none; mso-border-left-alt: solid #16987C .5pt; mso-border-alt: solid #16987C .5pt; background: #C5E0B3; mso-background-themecolor: accent6; mso-background-themetint: 102; padding: 0cm 5.4pt 0cm 5.4pt;" valign="top" width="120">**<span style="font-size: 12.0pt; mso-bidi-font-size: 10.0pt; mso-fareast-font-family: 'Times New Roman'; mso-fareast-theme-font: major-fareast; mso-bidi-font-family: 'Times New Roman'; mso-bidi-theme-font: major-bidi; color: black; mso-color-alt: windowtext; mso-no-proof: yes;">Brésil (B)</span>**

</td><td style="width: 90.25pt; border: solid #16987C 1.0pt; border-left: none; mso-border-left-alt: solid #16987C .5pt; mso-border-alt: solid #16987C .5pt; background: #C5E0B3; mso-background-themecolor: accent6; mso-background-themetint: 102; padding: 0cm 5.4pt 0cm 5.4pt;" valign="top" width="120">**<span style="font-size: 12.0pt; mso-bidi-font-size: 10.0pt; mso-fareast-font-family: 'Times New Roman'; mso-fareast-theme-font: major-fareast; mso-bidi-font-family: 'Times New Roman'; mso-bidi-theme-font: major-bidi; color: black; mso-color-alt: windowtext; mso-no-proof: yes;">Canada (C)</span>**

</td></tr><tr style="mso-yfti-irow: 0;"><td rowspan="3" style="width: 92.05pt; border: solid #16987C 1.0pt; border-top: none; mso-border-top-alt: solid #16987C .5pt; mso-border-alt: solid #16987C .5pt; background: #E2EFD9; mso-background-themecolor: accent6; mso-background-themetint: 51; padding: 0cm 5.4pt 0cm 5.4pt;" width="123">**<span style="font-size: 13.0pt; mso-bidi-font-size: 11.0pt; mso-fareast-font-family: 'Times New Roman'; mso-fareast-theme-font: major-fareast; mso-bidi-font-family: 'Times New Roman'; mso-bidi-theme-font: major-bidi; color: black; mso-color-alt: windowtext; mso-no-proof: yes;">pH</span>**

</td><td style="width: 90.15pt; border-top: none; border-left: none; border-bottom: solid #16987C 1.0pt; border-right: solid #16987C 1.0pt; mso-border-top-alt: solid #16987C .5pt; mso-border-left-alt: solid #16987C .5pt; mso-border-alt: solid #16987C .5pt; padding: 0cm 5.4pt 0cm 5.4pt;" valign="top" width="120"><span style="color: #16987c; mso-no-proof: yes;"> </span>

</td><td style="width: 90.3pt; border-top: none; border-left: none; border-bottom: solid #16987C 1.0pt; border-right: solid #16987C 1.0pt; mso-border-top-alt: solid #16987C .5pt; mso-border-left-alt: solid #16987C .5pt; mso-border-alt: solid #16987C .5pt; padding: 0cm 5.4pt 0cm 5.4pt;" valign="top" width="120"><span style="color: #16987c; mso-no-proof: yes;"> </span>

</td><td style="width: 90.35pt; border-top: none; border-left: none; border-bottom: solid #16987C 1.0pt; border-right: solid #16987C 1.0pt; mso-border-top-alt: solid #16987C .5pt; mso-border-left-alt: solid #16987C .5pt; mso-border-alt: solid #16987C .5pt; padding: 0cm 5.4pt 0cm 5.4pt;" valign="top" width="120"><span style="color: #16987c; mso-no-proof: yes;"> </span>

</td><td style="width: 90.25pt; border-top: none; border-left: none; border-bottom: solid #16987C 1.0pt; border-right: solid #16987C 1.0pt; mso-border-top-alt: solid #16987C .5pt; mso-border-left-alt: solid #16987C .5pt; mso-border-alt: solid #16987C .5pt; padding: 0cm 5.4pt 0cm 5.4pt;" valign="top" width="120"><span style="color: #16987c; mso-no-proof: yes;"> </span>

</td></tr><tr style="mso-yfti-irow: 1;"><td style="width: 90.15pt; border-top: none; border-left: none; border-bottom: solid #16987C 1.0pt; border-right: solid #16987C 1.0pt; mso-border-top-alt: solid #16987C .5pt; mso-border-left-alt: solid #16987C .5pt; mso-border-alt: solid #16987C .5pt; padding: 0cm 5.4pt 0cm 5.4pt;" valign="top" width="120"><span style="color: #16987c; mso-no-proof: yes;"> </span>

</td><td style="width: 90.3pt; border-top: none; border-left: none; border-bottom: solid #16987C 1.0pt; border-right: solid #16987C 1.0pt; mso-border-top-alt: solid #16987C .5pt; mso-border-left-alt: solid #16987C .5pt; mso-border-alt: solid #16987C .5pt; padding: 0cm 5.4pt 0cm 5.4pt;" valign="top" width="120"><span style="color: #16987c; mso-no-proof: yes;"> </span>

</td><td style="width: 90.35pt; border-top: none; border-left: none; border-bottom: solid #16987C 1.0pt; border-right: solid #16987C 1.0pt; mso-border-top-alt: solid #16987C .5pt; mso-border-left-alt: solid #16987C .5pt; mso-border-alt: solid #16987C .5pt; padding: 0cm 5.4pt 0cm 5.4pt;" valign="top" width="120"><span style="color: #16987c; mso-no-proof: yes;"> </span>

</td><td style="width: 90.25pt; border-top: none; border-left: none; border-bottom: solid #16987C 1.0pt; border-right: solid #16987C 1.0pt; mso-border-top-alt: solid #16987C .5pt; mso-border-left-alt: solid #16987C .5pt; mso-border-alt: solid #16987C .5pt; padding: 0cm 5.4pt 0cm 5.4pt;" valign="top" width="120"><span style="color: #16987c; mso-no-proof: yes;"> </span>

</td></tr><tr style="mso-yfti-irow: 2;"><td style="width: 90.15pt; border-top: none; border-left: none; border-bottom: solid #16987C 1.0pt; border-right: solid #16987C 1.0pt; mso-border-top-alt: solid #16987C .5pt; mso-border-left-alt: solid #16987C .5pt; mso-border-alt: solid #16987C .5pt; padding: 0cm 5.4pt 0cm 5.4pt;" valign="top" width="120"><span style="color: #16987c; mso-no-proof: yes;"> </span>

</td><td style="width: 90.3pt; border-top: none; border-left: none; border-bottom: solid #16987C 1.0pt; border-right: solid #16987C 1.0pt; mso-border-top-alt: solid #16987C .5pt; mso-border-left-alt: solid #16987C .5pt; mso-border-alt: solid #16987C .5pt; padding: 0cm 5.4pt 0cm 5.4pt;" valign="top" width="120"><span style="color: #16987c; mso-no-proof: yes;"> </span>

</td><td style="width: 90.35pt; border-top: none; border-left: none; border-bottom: solid #16987C 1.0pt; border-right: solid #16987C 1.0pt; mso-border-top-alt: solid #16987C .5pt; mso-border-left-alt: solid #16987C .5pt; mso-border-alt: solid #16987C .5pt; padding: 0cm 5.4pt 0cm 5.4pt;" valign="top" width="120"><span style="color: #16987c; mso-no-proof: yes;"> </span>

</td><td style="width: 90.25pt; border-top: none; border-left: none; border-bottom: solid #16987C 1.0pt; border-right: solid #16987C 1.0pt; mso-border-top-alt: solid #16987C .5pt; mso-border-left-alt: solid #16987C .5pt; mso-border-alt: solid #16987C .5pt; padding: 0cm 5.4pt 0cm 5.4pt;" valign="top" width="120"><span style="color: #16987c; mso-no-proof: yes;"> </span>

</td></tr><tr style="mso-yfti-irow: 3;"><td rowspan="3" style="width: 92.05pt; border: solid #16987C 1.0pt; border-top: none; mso-border-top-alt: solid #16987C .5pt; mso-border-alt: solid #16987C .5pt; background: #E2EFD9; mso-background-themecolor: accent6; mso-background-themetint: 51; padding: 0cm 5.4pt 0cm 5.4pt;" width="123">**<span style="font-size: 13.0pt; mso-bidi-font-size: 11.0pt; mso-fareast-font-family: 'Times New Roman'; mso-fareast-theme-font: major-fareast; mso-bidi-font-family: 'Times New Roman'; mso-bidi-theme-font: major-bidi; color: black; mso-color-alt: windowtext; mso-no-proof: yes;">Turbidité</span>**

</td><td style="width: 90.15pt; border-top: none; border-left: none; border-bottom: solid #16987C 1.0pt; border-right: solid #16987C 1.0pt; mso-border-top-alt: solid #16987C .5pt; mso-border-left-alt: solid #16987C .5pt; mso-border-alt: solid #16987C .5pt; padding: 0cm 5.4pt 0cm 5.4pt;" valign="top" width="120"><span style="color: #16987c; mso-no-proof: yes;"> </span>

</td><td style="width: 90.3pt; border-top: none; border-left: none; border-bottom: solid #16987C 1.0pt; border-right: solid #16987C 1.0pt; mso-border-top-alt: solid #16987C .5pt; mso-border-left-alt: solid #16987C .5pt; mso-border-alt: solid #16987C .5pt; padding: 0cm 5.4pt 0cm 5.4pt;" valign="top" width="120"><span style="color: #16987c; mso-no-proof: yes;"> </span>

</td><td style="width: 90.35pt; border-top: none; border-left: none; border-bottom: solid #16987C 1.0pt; border-right: solid #16987C 1.0pt; mso-border-top-alt: solid #16987C .5pt; mso-border-left-alt: solid #16987C .5pt; mso-border-alt: solid #16987C .5pt; padding: 0cm 5.4pt 0cm 5.4pt;" valign="top" width="120"><span style="color: #16987c; mso-no-proof: yes;"> </span>

</td><td style="width: 90.25pt; border-top: none; border-left: none; border-bottom: solid #16987C 1.0pt; border-right: solid #16987C 1.0pt; mso-border-top-alt: solid #16987C .5pt; mso-border-left-alt: solid #16987C .5pt; mso-border-alt: solid #16987C .5pt; padding: 0cm 5.4pt 0cm 5.4pt;" valign="top" width="120"><span style="color: #16987c; mso-no-proof: yes;"> </span>

</td></tr><tr style="mso-yfti-irow: 4;"><td style="width: 90.15pt; border-top: none; border-left: none; border-bottom: solid #16987C 1.0pt; border-right: solid #16987C 1.0pt; mso-border-top-alt: solid #16987C .5pt; mso-border-left-alt: solid #16987C .5pt; mso-border-alt: solid #16987C .5pt; padding: 0cm 5.4pt 0cm 5.4pt;" valign="top" width="120"><span style="color: #16987c; mso-no-proof: yes;"> </span>

</td><td style="width: 90.3pt; border-top: none; border-left: none; border-bottom: solid #16987C 1.0pt; border-right: solid #16987C 1.0pt; mso-border-top-alt: solid #16987C .5pt; mso-border-left-alt: solid #16987C .5pt; mso-border-alt: solid #16987C .5pt; padding: 0cm 5.4pt 0cm 5.4pt;" valign="top" width="120"><span style="color: #16987c; mso-no-proof: yes;"> </span>

</td><td style="width: 90.35pt; border-top: none; border-left: none; border-bottom: solid #16987C 1.0pt; border-right: solid #16987C 1.0pt; mso-border-top-alt: solid #16987C .5pt; mso-border-left-alt: solid #16987C .5pt; mso-border-alt: solid #16987C .5pt; padding: 0cm 5.4pt 0cm 5.4pt;" valign="top" width="120"><span style="color: #16987c; mso-no-proof: yes;"> </span>

</td><td style="width: 90.25pt; border-top: none; border-left: none; border-bottom: solid #16987C 1.0pt; border-right: solid #16987C 1.0pt; mso-border-top-alt: solid #16987C .5pt; mso-border-left-alt: solid #16987C .5pt; mso-border-alt: solid #16987C .5pt; padding: 0cm 5.4pt 0cm 5.4pt;" valign="top" width="120"><span style="color: #16987c; mso-no-proof: yes;"> </span>

</td></tr><tr style="mso-yfti-irow: 5;"><td style="width: 90.15pt; border-top: none; border-left: none; border-bottom: solid #16987C 1.0pt; border-right: solid #16987C 1.0pt; mso-border-top-alt: solid #16987C .5pt; mso-border-left-alt: solid #16987C .5pt; mso-border-alt: solid #16987C .5pt; padding: 0cm 5.4pt 0cm 5.4pt;" valign="top" width="120"><span style="color: #16987c; mso-no-proof: yes;"> </span>

</td><td style="width: 90.3pt; border-top: none; border-left: none; border-bottom: solid #16987C 1.0pt; border-right: solid #16987C 1.0pt; mso-border-top-alt: solid #16987C .5pt; mso-border-left-alt: solid #16987C .5pt; mso-border-alt: solid #16987C .5pt; padding: 0cm 5.4pt 0cm 5.4pt;" valign="top" width="120"><span style="color: #16987c; mso-no-proof: yes;"> </span>

</td><td style="width: 90.35pt; border-top: none; border-left: none; border-bottom: solid #16987C 1.0pt; border-right: solid #16987C 1.0pt; mso-border-top-alt: solid #16987C .5pt; mso-border-left-alt: solid #16987C .5pt; mso-border-alt: solid #16987C .5pt; padding: 0cm 5.4pt 0cm 5.4pt;" valign="top" width="120"><span style="color: #16987c; mso-no-proof: yes;"> </span>

</td><td style="width: 90.25pt; border-top: none; border-left: none; border-bottom: solid #16987C 1.0pt; border-right: solid #16987C 1.0pt; mso-border-top-alt: solid #16987C .5pt; mso-border-left-alt: solid #16987C .5pt; mso-border-alt: solid #16987C .5pt; padding: 0cm 5.4pt 0cm 5.4pt;" valign="top" width="120"><span style="color: #16987c; mso-no-proof: yes;"> </span>

</td></tr><tr style="mso-yfti-irow: 6;"><td rowspan="3" style="width: 92.05pt; border: solid #16987C 1.0pt; border-top: none; mso-border-top-alt: solid #16987C .5pt; mso-border-alt: solid #16987C .5pt; background: #E2EFD9; mso-background-themecolor: accent6; mso-background-themetint: 51; padding: 0cm 5.4pt 0cm 5.4pt;" width="123">**<span style="font-size: 13.0pt; mso-bidi-font-size: 11.0pt; mso-fareast-font-family: 'Times New Roman'; mso-fareast-theme-font: major-fareast; mso-bidi-font-family: 'Times New Roman'; mso-bidi-theme-font: major-bidi; color: black; mso-color-alt: windowtext; mso-no-proof: yes;">C<span style="background: #E2EFD9; mso-shading-themecolor: accent6; mso-shading-themetint: 51;">onductivité</span></span>**

</td><td style="width: 90.15pt; border-top: none; border-left: none; border-bottom: solid #16987C 1.0pt; border-right: solid #16987C 1.0pt; mso-border-top-alt: solid #16987C .5pt; mso-border-left-alt: solid #16987C .5pt; mso-border-alt: solid #16987C .5pt; padding: 0cm 5.4pt 0cm 5.4pt;" valign="top" width="120"><span style="color: #16987c; mso-no-proof: yes;"> </span>

</td><td style="width: 90.3pt; border-top: none; border-left: none; border-bottom: solid #16987C 1.0pt; border-right: solid #16987C 1.0pt; mso-border-top-alt: solid #16987C .5pt; mso-border-left-alt: solid #16987C .5pt; mso-border-alt: solid #16987C .5pt; padding: 0cm 5.4pt 0cm 5.4pt;" valign="top" width="120"><span style="color: #16987c; mso-no-proof: yes;"> </span>

</td><td style="width: 90.35pt; border-top: none; border-left: none; border-bottom: solid #16987C 1.0pt; border-right: solid #16987C 1.0pt; mso-border-top-alt: solid #16987C .5pt; mso-border-left-alt: solid #16987C .5pt; mso-border-alt: solid #16987C .5pt; padding: 0cm 5.4pt 0cm 5.4pt;" valign="top" width="120"><span style="color: #16987c; mso-no-proof: yes;"> </span>

</td><td style="width: 90.25pt; border-top: none; border-left: none; border-bottom: solid #16987C 1.0pt; border-right: solid #16987C 1.0pt; mso-border-top-alt: solid #16987C .5pt; mso-border-left-alt: solid #16987C .5pt; mso-border-alt: solid #16987C .5pt; padding: 0cm 5.4pt 0cm 5.4pt;" valign="top" width="120"><span style="color: #16987c; mso-no-proof: yes;"> </span>

</td></tr><tr style="mso-yfti-irow: 7;"><td style="width: 90.15pt; border-top: none; border-left: none; border-bottom: solid #16987C 1.0pt; border-right: solid #16987C 1.0pt; mso-border-top-alt: solid #16987C .5pt; mso-border-left-alt: solid #16987C .5pt; mso-border-alt: solid #16987C .5pt; padding: 0cm 5.4pt 0cm 5.4pt;" valign="top" width="120"><span style="color: #16987c; mso-no-proof: yes;"> </span>

</td><td style="width: 90.3pt; border-top: none; border-left: none; border-bottom: solid #16987C 1.0pt; border-right: solid #16987C 1.0pt; mso-border-top-alt: solid #16987C .5pt; mso-border-left-alt: solid #16987C .5pt; mso-border-alt: solid #16987C .5pt; padding: 0cm 5.4pt 0cm 5.4pt;" valign="top" width="120"><span style="color: #16987c; mso-no-proof: yes;"> </span>

</td><td style="width: 90.35pt; border-top: none; border-left: none; border-bottom: solid #16987C 1.0pt; border-right: solid #16987C 1.0pt; mso-border-top-alt: solid #16987C .5pt; mso-border-left-alt: solid #16987C .5pt; mso-border-alt: solid #16987C .5pt; padding: 0cm 5.4pt 0cm 5.4pt;" valign="top" width="120"><span style="color: #16987c; mso-no-proof: yes;"> </span>

</td><td style="width: 90.25pt; border-top: none; border-left: none; border-bottom: solid #16987C 1.0pt; border-right: solid #16987C 1.0pt; mso-border-top-alt: solid #16987C .5pt; mso-border-left-alt: solid #16987C .5pt; mso-border-alt: solid #16987C .5pt; padding: 0cm 5.4pt 0cm 5.4pt;" valign="top" width="120"><span style="color: #16987c; mso-no-proof: yes;"> </span>

</td></tr><tr style="mso-yfti-irow: 8;"><td style="width: 90.15pt; border-top: none; border-left: none; border-bottom: solid #16987C 1.0pt; border-right: solid #16987C 1.0pt; mso-border-top-alt: solid #16987C .5pt; mso-border-left-alt: solid #16987C .5pt; mso-border-alt: solid #16987C .5pt; padding: 0cm 5.4pt 0cm 5.4pt;" valign="top" width="120"><span style="color: #16987c; mso-no-proof: yes;"> </span>

</td><td style="width: 90.3pt; border-top: none; border-left: none; border-bottom: solid #16987C 1.0pt; border-right: solid #16987C 1.0pt; mso-border-top-alt: solid #16987C .5pt; mso-border-left-alt: solid #16987C .5pt; mso-border-alt: solid #16987C .5pt; padding: 0cm 5.4pt 0cm 5.4pt;" valign="top" width="120"><span style="color: #16987c; mso-no-proof: yes;"> </span>

</td><td style="width: 90.35pt; border-top: none; border-left: none; border-bottom: solid #16987C 1.0pt; border-right: solid #16987C 1.0pt; mso-border-top-alt: solid #16987C .5pt; mso-border-left-alt: solid #16987C .5pt; mso-border-alt: solid #16987C .5pt; padding: 0cm 5.4pt 0cm 5.4pt;" valign="top" width="120"><span style="color: #16987c; mso-no-proof: yes;"> </span>

</td><td style="width: 90.25pt; border-top: none; border-left: none; border-bottom: solid #16987C 1.0pt; border-right: solid #16987C 1.0pt; mso-border-top-alt: solid #16987C .5pt; mso-border-left-alt: solid #16987C .5pt; mso-border-alt: solid #16987C .5pt; padding: 0cm 5.4pt 0cm 5.4pt;" valign="top" width="120"><span style="color: #16987c; mso-no-proof: yes;"> </span>

</td></tr><tr style="mso-yfti-irow: 9;"><td rowspan="3" style="width: 92.05pt; border: solid #16987C 1.0pt; border-top: none; mso-border-top-alt: solid #16987C .5pt; mso-border-alt: solid #16987C .5pt; background: #E2EFD9; mso-background-themecolor: accent6; mso-background-themetint: 51; padding: 0cm 5.4pt 0cm 5.4pt;" width="123">**<span style="font-size: 13.0pt; mso-bidi-font-size: 11.0pt; mso-fareast-font-family: 'Times New Roman'; mso-fareast-theme-font: major-fareast; mso-bidi-font-family: 'Times New Roman'; mso-bidi-theme-font: major-bidi; color: black; mso-color-alt: windowtext; mso-no-proof: yes;">Température</span>**

</td><td style="width: 90.15pt; border-top: none; border-left: none; border-bottom: solid #16987C 1.0pt; border-right: solid #16987C 1.0pt; mso-border-top-alt: solid #16987C .5pt; mso-border-left-alt: solid #16987C .5pt; mso-border-alt: solid #16987C .5pt; padding: 0cm 5.4pt 0cm 5.4pt;" valign="top" width="120"><span style="color: #16987c; mso-no-proof: yes;"> </span>

</td><td style="width: 90.3pt; border-top: none; border-left: none; border-bottom: solid #16987C 1.0pt; border-right: solid #16987C 1.0pt; mso-border-top-alt: solid #16987C .5pt; mso-border-left-alt: solid #16987C .5pt; mso-border-alt: solid #16987C .5pt; padding: 0cm 5.4pt 0cm 5.4pt;" valign="top" width="120"><span style="color: #16987c; mso-no-proof: yes;"> </span>

</td><td style="width: 90.35pt; border-top: none; border-left: none; border-bottom: solid #16987C 1.0pt; border-right: solid #16987C 1.0pt; mso-border-top-alt: solid #16987C .5pt; mso-border-left-alt: solid #16987C .5pt; mso-border-alt: solid #16987C .5pt; padding: 0cm 5.4pt 0cm 5.4pt;" valign="top" width="120"><span style="color: #16987c; mso-no-proof: yes;"> </span>

</td><td style="width: 90.25pt; border-top: none; border-left: none; border-bottom: solid #16987C 1.0pt; border-right: solid #16987C 1.0pt; mso-border-top-alt: solid #16987C .5pt; mso-border-left-alt: solid #16987C .5pt; mso-border-alt: solid #16987C .5pt; padding: 0cm 5.4pt 0cm 5.4pt;" valign="top" width="120"><span style="color: #16987c; mso-no-proof: yes;"> </span>

</td></tr><tr style="mso-yfti-irow: 10;"><td style="width: 90.15pt; border-top: none; border-left: none; border-bottom: solid #16987C 1.0pt; border-right: solid #16987C 1.0pt; mso-border-top-alt: solid #16987C .5pt; mso-border-left-alt: solid #16987C .5pt; mso-border-alt: solid #16987C .5pt; padding: 0cm 5.4pt 0cm 5.4pt;" valign="top" width="120"><span style="color: #16987c; mso-no-proof: yes;"> </span>

</td><td style="width: 90.3pt; border-top: none; border-left: none; border-bottom: solid #16987C 1.0pt; border-right: solid #16987C 1.0pt; mso-border-top-alt: solid #16987C .5pt; mso-border-left-alt: solid #16987C .5pt; mso-border-alt: solid #16987C .5pt; padding: 0cm 5.4pt 0cm 5.4pt;" valign="top" width="120"><span style="color: #16987c; mso-no-proof: yes;"> </span>

</td><td style="width: 90.35pt; border-top: none; border-left: none; border-bottom: solid #16987C 1.0pt; border-right: solid #16987C 1.0pt; mso-border-top-alt: solid #16987C .5pt; mso-border-left-alt: solid #16987C .5pt; mso-border-alt: solid #16987C .5pt; padding: 0cm 5.4pt 0cm 5.4pt;" valign="top" width="120"><span style="color: #16987c; mso-no-proof: yes;"> </span>

</td><td style="width: 90.25pt; border-top: none; border-left: none; border-bottom: solid #16987C 1.0pt; border-right: solid #16987C 1.0pt; mso-border-top-alt: solid #16987C .5pt; mso-border-left-alt: solid #16987C .5pt; mso-border-alt: solid #16987C .5pt; padding: 0cm 5.4pt 0cm 5.4pt;" valign="top" width="120"><span style="color: #16987c; mso-no-proof: yes;"> </span>

</td></tr><tr style="mso-yfti-irow: 11;"><td style="width: 90.15pt; border-top: none; border-left: none; border-bottom: solid #16987C 1.0pt; border-right: solid #16987C 1.0pt; mso-border-top-alt: solid #16987C .5pt; mso-border-left-alt: solid #16987C .5pt; mso-border-alt: solid #16987C .5pt; padding: 0cm 5.4pt 0cm 5.4pt;" valign="top" width="120"><span style="color: #16987c; mso-no-proof: yes;"> </span>

</td><td style="width: 90.3pt; border-top: none; border-left: none; border-bottom: solid #16987C 1.0pt; border-right: solid #16987C 1.0pt; mso-border-top-alt: solid #16987C .5pt; mso-border-left-alt: solid #16987C .5pt; mso-border-alt: solid #16987C .5pt; padding: 0cm 5.4pt 0cm 5.4pt;" valign="top" width="120"><span style="color: #16987c; mso-no-proof: yes;"> </span>

</td><td style="width: 90.35pt; border-top: none; border-left: none; border-bottom: solid #16987C 1.0pt; border-right: solid #16987C 1.0pt; mso-border-top-alt: solid #16987C .5pt; mso-border-left-alt: solid #16987C .5pt; mso-border-alt: solid #16987C .5pt; padding: 0cm 5.4pt 0cm 5.4pt;" valign="top" width="120"><span style="color: #16987c; mso-no-proof: yes;"> </span>

</td><td style="width: 90.25pt; border-top: none; border-left: none; border-bottom: solid #16987C 1.0pt; border-right: solid #16987C 1.0pt; mso-border-top-alt: solid #16987C .5pt; mso-border-left-alt: solid #16987C .5pt; mso-border-alt: solid #16987C .5pt; padding: 0cm 5.4pt 0cm 5.4pt;" valign="top" width="120"><span style="color: #16987c; mso-no-proof: yes;"> </span>

</td></tr><tr style="mso-yfti-irow: 12; mso-yfti-lastrow: yes;"><td style="width: 92.05pt; border: solid #16987C 1.0pt; border-top: none; mso-border-top-alt: solid #16987C .5pt; mso-border-alt: solid #16987C .5pt; background: #E2EFD9; mso-background-themecolor: accent6; mso-background-themetint: 51; padding: 0cm 5.4pt 0cm 5.4pt;" valign="top" width="123">**<span style="font-size: 13.0pt; mso-bidi-font-size: 11.0pt; mso-fareast-font-family: 'Times New Roman'; mso-fareast-theme-font: major-fareast; mso-bidi-font-family: 'Times New Roman'; mso-bidi-theme-font: major-bidi; color: black; mso-color-alt: windowtext; mso-no-proof: yes;">Nitrate</span>**

</td><td style="width: 90.15pt; border-top: none; border-left: none; border-bottom: solid #16987C 1.0pt; border-right: solid #16987C 1.0pt; mso-border-top-alt: solid #16987C .5pt; mso-border-left-alt: solid #16987C .5pt; mso-border-alt: solid #16987C .5pt; padding: 0cm 5.4pt 0cm 5.4pt;" valign="top" width="120"><span style="color: #16987c; mso-no-proof: yes;"> </span>

</td><td style="width: 90.3pt; border-top: none; border-left: none; border-bottom: solid #16987C 1.0pt; border-right: solid #16987C 1.0pt; mso-border-top-alt: solid #16987C .5pt; mso-border-left-alt: solid #16987C .5pt; mso-border-alt: solid #16987C .5pt; padding: 0cm 5.4pt 0cm 5.4pt;" valign="top" width="120"><span style="color: #16987c; mso-no-proof: yes;"> </span>

</td><td style="width: 90.35pt; border-top: none; border-left: none; border-bottom: solid #16987C 1.0pt; border-right: solid #16987C 1.0pt; mso-border-top-alt: solid #16987C .5pt; mso-border-left-alt: solid #16987C .5pt; mso-border-alt: solid #16987C .5pt; padding: 0cm 5.4pt 0cm 5.4pt;" valign="top" width="120"><span style="color: #16987c; mso-no-proof: yes;"> </span>

</td><td style="width: 90.25pt; border-top: none; border-left: none; border-bottom: solid #16987C 1.0pt; border-right: solid #16987C 1.0pt; mso-border-top-alt: solid #16987C .5pt; mso-border-left-alt: solid #16987C .5pt; mso-border-alt: solid #16987C .5pt; padding: 0cm 5.4pt 0cm 5.4pt;" valign="top" width="120"><span style="color: #16987c; mso-no-proof: yes;"> </span>

</td></tr></tbody></table>

*<span style="mso-no-proof: yes;">Tableau des analyses des échantillons des différents pays </span>*

[![image.png](https://innovation.iha.unistra.fr/uploads/images/gallery/2024-05/scaled-1680-/meRimage.png)](https://innovation.iha.unistra.fr/uploads/images/gallery/2024-05/meRimage.png)

**<span style="font-size: 12.0pt; line-height: 107%; color: #16987c;">Les chercheurs font aussi des analyses en tripliquas, pourquoi ?</span>**

Lorsqu'on réalise des analyses en tripliquas, cela signifie qu'on fait la même expérience trois fois. Cela peut sembler répétitif, mais c’est très important, surtout dans la recherche scientifique.

**Confirmer les résultats :** Imagine que tu essaies une nouvelle recette de cookies avec tes amis. Si tu ne fais qu'un seul cookie et qu'il est parfait, c'est génial, mais tu ne sais pas si c'est parce que tu as suivi la recette à la lettre ou si tu as juste eu de la chance. Si tu fais trois fournées de cookies et qu'elles sont toutes délicieuses, alors tu peux être sûr que la recette est bonne.

**Trouver les erreurs :** Parfois, une erreur peut se glisser dans une expérience. Si tu ne fais l'expérience qu'une seule fois et qu'il y a une erreur, tu ne le sauras jamais. Mais si tu fais l'expérience trois fois et que les résultats de l'une sont différents des autres, cela peut te signaler qu'il y a eu un problème quelque part. Cela aide à être plus précis.

**Moyenne des résultats :** Lorsqu’on fait une expérience plusieurs fois, on peut calculer la moyenne des résultats. Cela permet d'avoir une idée plus claire de ce qui se passe réellement. Par exemple, si un jour il fait 25°C, un autre 28°C et un autre 26°C, la température moyenne te donne une idée plus stable du temps qu'il fait réellement.

**En faisant des analyses en tripliquas, les scientifiques s’assurent que leurs découvertes sont solides et fiables. C’est comme vérifier ton travail en mathématiques ; plus tu vérifies, plus tu es sûr de ton résultat !**

### **Jour 5 - Analyse et Présentation** 

##### **Mission :**

<span style="font-size: 11.0pt; line-height: 107%; font-family: 'Space Grotesk'; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; mso-bidi-font-family: 'Times New Roman'; mso-bidi-theme-font: minor-bidi; mso-ansi-language: FR; mso-fareast-language: EN-US; mso-bidi-language: AR-SA;">Aujourd’hui, votre objectif est de traiter les données des différents échantillons prélevés dans les cours d’eau de l’**A**ustralie (noté **A**), la **B**résil (noté **B**), le **C**anada (noté **C**) et le **T**émoin Alsace (noté **T**). Pour cela, vous devez traiter vos données à l’aide d’un fichier Excel, interpréter vos résultats pour apporter vos conclusions et enfin compléter un PowerPoint pour présenter vos résultats. </span>

##### **Étape 1 : Traitement des données à l’aide d’un fichier Excel** 

- Complétez le tableau Excel à votre disposition avec les données récoltées la veille par votre station AquaLife.
- Calculer la moyenne de vos tripliquas en utilisant la formule entre crochet \[=MOYENNE(Cellule1; Cellule2; Cellule3)\]  
    Rappel : une Cellule = Colonne + Ligne  
    Exemple : Cellule1 pour le premier échantillon de pH du Témoin est B2 qui contient la valeur 7,6 dans l’exemple. [![image.png](https://innovation.iha.unistra.fr/uploads/images/gallery/2024-05/scaled-1680-/ggJimage.png)](https://innovation.iha.unistra.fr/uploads/images/gallery/2024-05/ggJimage.png)
- Les graphiques pour le pH, la conductivité, la turbidité et la concentration en Nitrate apparaissent. Attention plusieurs erreurs se sont glissées à l’intérieur et il faut les corriger. Le graphique pour le pH est correct. Utilisez ce format comme modèle pour corriger les autres graphiques, en suivant les instructions ci-dessous : <span style="font-family: 'Courier New'; mso-fareast-font-family: 'Courier New';"><span style="mso-list: Ignore;">o<span style="font: 7.0pt 'Times New Roman';"> </span></span></span>Pour le graphique de la turbidité, il manque l’échantillon Témoin. Pour l’ajouter, faites un clic droit sur le graphique et allez dans "**Sélectionner les donnes…** " et cochez la case correspondant au Témoin (T).
    
    [![ikNimage.png](https://innovation.iha.unistra.fr/uploads/images/gallery/2024-10/scaled-1680-/iknimage.png)](https://innovation.iha.unistra.fr/uploads/images/gallery/2024-10/iknimage.png)
- <span style="font-family: 'Courier New'; mso-fareast-font-family: 'Courier New';"><span style="mso-list: Ignore;"><span style="color: rgb(224, 62, 45);">**ATTENTION**</span> </span></span><span style="font-family: 'Courier New'; mso-fareast-font-family: 'Courier New';"><span style="mso-list: Ignore;">si vous êtes sur open office cliquer sur le graphique jusqu'à ce que vous ayez ces 8 points verts, puis faites un clic droit.</span></span>[![image.png](https://innovation.iha.unistra.fr/uploads/images/gallery/2024-10/scaled-1680-/bYXimage.png)](https://innovation.iha.unistra.fr/uploads/images/gallery/2024-10/bYXimage.png)
- Cliquez sur "plage de données" et remplacer chacun des deux "C" par un "B" .
    
    [![image.png](https://innovation.iha.unistra.fr/uploads/images/gallery/2024-10/scaled-1680-/kI4image.png)](https://innovation.iha.unistra.fr/uploads/images/gallery/2024-10/kI4image.png)
    
    [![image.png](https://innovation.iha.unistra.fr/uploads/images/gallery/2024-10/scaled-1680-/Hocimage.png)](https://innovation.iha.unistra.fr/uploads/images/gallery/2024-10/Hocimage.png)
    
    <span style="font-family: 'Courier New'; mso-fareast-font-family: 'Courier New';"><span style="mso-list: Ignore;">o<span style="font: 7.0pt 'Times New Roman';"> </span></span></span>Pour le graphique de la conductivité, il manque les étiquettes des valeurs de vos échantillons. Pour les ajouter, faites un clic gauche sur le graphique et allez dans "**Eléments de graphique**" en haut à droite du graphique pour cocher la case "**étiquette de données**" pour les ajouter.
    
    [![image.png](https://innovation.iha.unistra.fr/uploads/images/gallery/2024-05/scaled-1680-/tuQimage.png)](https://innovation.iha.unistra.fr/uploads/images/gallery/2024-05/tuQimage.png)
- <span style="font-family: 'Courier New'; mso-fareast-font-family: 'Courier New';"><span style="mso-list: Ignore;"><span style="color: rgb(224, 62, 45);">**ATTENTION**</span> </span></span><span style="font-family: 'Courier New'; mso-fareast-font-family: 'Courier New';"><span style="mso-list: Ignore;">si vous êtes sur open office cliquer sur le graphique jusqu'à ce que vous ayez ces 4 points verts, puis faites un clic droit.</span></span>
- [![image.png](https://innovation.iha.unistra.fr/uploads/images/gallery/2024-10/scaled-1680-/p7gimage.png)](https://innovation.iha.unistra.fr/uploads/images/gallery/2024-10/p7gimage.png)
- Cliquez sur "Insérer des étiquettes de données".
- <span style="font-family: 'Courier New'; mso-fareast-font-family: 'Courier New';"><span style="mso-list: Ignore;">o<span style="font: 7.0pt 'Times New Roman';"> </span></span></span>Le <span style="font-size: 11.0pt; line-height: 107%; font-family: 'Space Grotesk'; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; mso-bidi-font-family: 'Times New Roman'; mso-bidi-theme-font: minor-bidi; mso-ansi-language: FR; mso-fareast-language: EN-US; mso-bidi-language: AR-SA;">graphique de la concentration en Nitrates est au format pourcentage (%), ce qui ne permet pas de distinguer les différences entre les échantillons. Faites un clic droit sur le graphique pour aller dans "**Modifier le type de graphique**" et choisissez "**Histogramme groupé**".<span style="mso-no-proof: yes;"> </span></span>

[![image.png](https://innovation.iha.unistra.fr/uploads/images/gallery/2024-05/scaled-1680-/oGuimage.png)](https://innovation.iha.unistra.fr/uploads/images/gallery/2024-05/oGuimage.png)

- <span style="font-family: 'Courier New'; mso-fareast-font-family: 'Courier New';"><span style="mso-list: Ignore;"><span style="color: rgb(224, 62, 45);">**ATTENTION**</span> </span></span><span style="font-family: 'Courier New'; mso-fareast-font-family: 'Courier New';"><span style="mso-list: Ignore;">si vous êtes sur open office cliquer sur le graphique jusqu'à ce que vous ayez ces 8 points verts, puis faites un clic droit.</span></span>
- [![image.png](https://innovation.iha.unistra.fr/uploads/images/gallery/2024-10/scaled-1680-/XIKimage.png)](https://innovation.iha.unistra.fr/uploads/images/gallery/2024-10/XIKimage.png)
- Cliquez sur "Type de diagramme" et sélectionner le premier qui se nomme "Normal".
- [![image.png](https://innovation.iha.unistra.fr/uploads/images/gallery/2024-10/scaled-1680-/uquimage.png)](https://innovation.iha.unistra.fr/uploads/images/gallery/2024-10/uquimage.png)

##### **Étape 2 : Interprétation et conclusion**

- Compléter le tableau ci-dessous, pour cela ajouter des **<span style="font-size: 14.0pt; line-height: 107%; color: #00b050;">- </span><span style="font-size: 14.0pt; line-height: 107%;">/ <span style="color: #ed7d31; mso-themecolor: accent2;">+</span> /<span style="color: red;">++</span> </span>**<span style="font-size: 14.0pt; line-height: 107%;"><span style="mso-spacerun: yes;"> </span></span>dans chaque ligne en fonction des informations présentées par la suite sur le pH, la turbidité, la conductivité et la concentration en nitrate de vos échantillons.   
    **Allez lire l’<span style="color: red;">Exemple</span> dans la section <span style="color: #16987c;">pH</span> en bas de la page.**
- Faite le **<span style="color: #16987c;">Bilan</span>** en comptant le nombre de + pour chaque échantillon. Celui qui en a le plus est probablement le cours d’eau le plus contaminé.<span style="font-family: Symbol; mso-fareast-font-family: Symbol; mso-bidi-font-family: Symbol;"><span style="mso-list: Ignore;"><span style="font: 7.0pt 'Times New Roman';">   
    </span></span></span>

**Attention, il n’y a pas de bonnes ou mauvaises réponses, c’est à vous d’interpréter vos résultats !**

<div align="center" id="bkmrk-echantillon-australi"><div align="center"><table border="0" cellpadding="0" cellspacing="0" class="MsoTable15List7ColorfulAccent6" style="border-collapse: collapse; width: 59.8765%; height: 168.667px;"><tbody><tr style="height: 45.3333px;"><td style="width: 0%; border: 1pt solid rgb(22, 152, 124); background: rgb(197, 224, 179); padding: 0cm 5.4pt; height: 45.3333px;" valign="top" width="123">**<span style="font-size: 13.0pt; mso-bidi-font-size: 11.0pt; mso-fareast-font-family: 'Times New Roman'; mso-fareast-theme-font: major-fareast; mso-bidi-font-family: 'Times New Roman'; mso-bidi-theme-font: major-bidi; color: black; mso-color-alt: windowtext; mso-no-proof: yes;">Echantillon</span>**

</td><td style="width: 0%; border-top: 1pt solid rgb(22, 152, 124); border-right: 1pt solid rgb(22, 152, 124); border-bottom: 1pt solid rgb(22, 152, 124); border-image: initial; border-left: none; background: rgb(197, 224, 179); padding: 0cm 5.4pt; height: 45.3333px;" valign="top" width="120">**<span style="font-size: 12.0pt; mso-bidi-font-size: 10.0pt; mso-fareast-font-family: 'Times New Roman'; mso-fareast-theme-font: major-fareast; mso-bidi-font-family: 'Times New Roman'; mso-bidi-theme-font: major-bidi; color: black; mso-color-alt: windowtext; mso-no-proof: yes;">Australie (A)</span>**

</td><td style="width: 0%; border-top: 1pt solid rgb(22, 152, 124); border-right: 1pt solid rgb(22, 152, 124); border-bottom: 1pt solid rgb(22, 152, 124); border-image: initial; border-left: none; background: rgb(197, 224, 179); padding: 0cm 5.4pt; height: 45.3333px;" valign="top" width="120">**<span style="font-size: 12.0pt; mso-bidi-font-size: 10.0pt; mso-fareast-font-family: 'Times New Roman'; mso-fareast-theme-font: major-fareast; mso-bidi-font-family: 'Times New Roman'; mso-bidi-theme-font: major-bidi; color: black; mso-color-alt: windowtext; mso-no-proof: yes;">Brésil (B)</span>**

</td><td style="width: 0%; border-top: 1pt solid rgb(22, 152, 124); border-right: 1pt solid rgb(22, 152, 124); border-bottom: 1pt solid rgb(22, 152, 124); border-image: initial; border-left: none; background: rgb(197, 224, 179); padding: 0cm 5.4pt; height: 45.3333px;" valign="top" width="120">**<span style="font-size: 12.0pt; mso-bidi-font-size: 10.0pt; mso-fareast-font-family: 'Times New Roman'; mso-fareast-theme-font: major-fareast; mso-bidi-font-family: 'Times New Roman'; mso-bidi-theme-font: major-bidi; color: black; mso-color-alt: windowtext; mso-no-proof: yes;">Canada (C)</span>**

</td></tr><tr style="height: 24.6667px;"><td style="width: 0%; border-right: 1pt solid rgb(22, 152, 124); border-bottom: 1pt solid rgb(22, 152, 124); border-left: 1pt solid rgb(22, 152, 124); border-image: initial; border-top: none; background: rgb(226, 239, 217); padding: 0cm 5.4pt; height: 24.6667px;" valign="top" width="123">**<span style="font-size: 13.0pt; mso-bidi-font-size: 11.0pt; mso-fareast-font-family: 'Times New Roman'; mso-fareast-theme-font: major-fareast; mso-bidi-font-family: 'Times New Roman'; mso-bidi-theme-font: major-bidi; color: black; mso-color-alt: windowtext; mso-no-proof: yes;">pH</span>**

</td><td style="width: 0%; border-top: none; border-left: none; border-bottom: 1pt solid rgb(22, 152, 124); border-right: 1pt solid rgb(22, 152, 124); padding: 0cm 5.4pt; height: 24.6667px;" valign="top" width="120">**<span style="mso-no-proof: yes;"> </span>**

</td><td style="width: 0%; border-top: none; border-left: none; border-bottom: 1pt solid rgb(22, 152, 124); border-right: 1pt solid rgb(22, 152, 124); padding: 0cm 5.4pt; height: 24.6667px;" valign="top" width="120">**<span style="mso-no-proof: yes;"> </span>**

</td><td style="width: 0%; border-top: none; border-left: none; border-bottom: 1pt solid rgb(22, 152, 124); border-right: 1pt solid rgb(22, 152, 124); padding: 0cm 5.4pt; height: 24.6667px;" valign="top" width="120">**<span style="mso-no-proof: yes;"> </span>**

</td></tr><tr style="height: 24.6667px;"><td style="width: 0%; border-top: none; border-left: 1pt solid rgb(22, 152, 124); border-bottom: none; border-right: 1pt solid rgb(22, 152, 124); background: rgb(226, 239, 217); padding: 0cm 5.4pt; height: 24.6667px;" width="123">**<span style="font-size: 13.0pt; mso-bidi-font-size: 11.0pt; mso-fareast-font-family: 'Times New Roman'; mso-fareast-theme-font: major-fareast; mso-bidi-font-family: 'Times New Roman'; mso-bidi-theme-font: major-bidi; color: black; mso-color-alt: windowtext; mso-no-proof: yes;">Turbidité</span>**

</td><td style="width: 0%; border-top: none; border-left: none; border-bottom: 1pt solid rgb(22, 152, 124); border-right: 1pt solid rgb(22, 152, 124); padding: 0cm 5.4pt; height: 24.6667px;" valign="top" width="120">**<span style="mso-no-proof: yes;"> </span>**

</td><td style="width: 0%; border-top: none; border-left: none; border-bottom: 1pt solid rgb(22, 152, 124); border-right: 1pt solid rgb(22, 152, 124); padding: 0cm 5.4pt; height: 24.6667px;" valign="top" width="120">**<span style="mso-no-proof: yes;"> </span>**

</td><td style="width: 0%; border-top: none; border-left: none; border-bottom: 1pt solid rgb(22, 152, 124); border-right: 1pt solid rgb(22, 152, 124); padding: 0cm 5.4pt; height: 24.6667px;" valign="top" width="120">**<span style="mso-no-proof: yes;"> </span>**

</td></tr><tr style="height: 24.6667px;"><td style="width: 0%; border-top: 1pt solid rgb(22, 152, 124); border-right: 1pt solid rgb(22, 152, 124); border-left: 1pt solid rgb(22, 152, 124); border-image: initial; border-bottom: none; background: rgb(226, 239, 217); padding: 0cm 5.4pt; height: 24.6667px;" width="123">**<span style="font-size: 13.0pt; mso-bidi-font-size: 11.0pt; mso-fareast-font-family: 'Times New Roman'; mso-fareast-theme-font: major-fareast; mso-bidi-font-family: 'Times New Roman'; mso-bidi-theme-font: major-bidi; color: black; mso-color-alt: windowtext; mso-no-proof: yes;">C<span style="background: #E2EFD9; mso-shading-themecolor: accent6; mso-shading-themetint: 51;">onductivité</span></span>**

</td><td style="width: 0%; border-top: none; border-left: none; border-bottom: 1pt solid rgb(22, 152, 124); border-right: 1pt solid rgb(22, 152, 124); padding: 0cm 5.4pt; height: 24.6667px;" valign="top" width="120">**<span style="mso-no-proof: yes;"> </span>**

</td><td style="width: 0%; border-top: none; border-left: none; border-bottom: 1pt solid rgb(22, 152, 124); border-right: 1pt solid rgb(22, 152, 124); padding: 0cm 5.4pt; height: 24.6667px;" valign="top" width="120">**<span style="mso-no-proof: yes;"> </span>**

</td><td style="width: 0%; border-top: none; border-left: none; border-bottom: 1pt solid rgb(22, 152, 124); border-right: 1pt solid rgb(22, 152, 124); padding: 0cm 5.4pt; height: 24.6667px;" valign="top" width="120">**<span style="mso-no-proof: yes;"> </span>**

</td></tr><tr style="height: 24.6667px;"><td style="width: 0%; border: 1pt solid rgb(22, 152, 124); background: rgb(226, 239, 217); padding: 0cm 5.4pt; height: 24.6667px;" valign="top" width="123">**<span style="font-size: 13.0pt; mso-bidi-font-size: 11.0pt; mso-fareast-font-family: 'Times New Roman'; mso-fareast-theme-font: major-fareast; mso-bidi-font-family: 'Times New Roman'; mso-bidi-theme-font: major-bidi; color: black; mso-color-alt: windowtext; mso-no-proof: yes;">Nitrate</span>**

</td><td style="width: 0%; border-top: none; border-left: none; border-bottom: 1pt solid rgb(22, 152, 124); border-right: 1pt solid rgb(22, 152, 124); padding: 0cm 5.4pt; height: 24.6667px;" valign="top" width="120">**<span style="mso-no-proof: yes;"> </span>**

</td><td style="width: 0%; border-top: none; border-left: none; border-bottom: 1pt solid rgb(22, 152, 124); border-right: 1pt solid rgb(22, 152, 124); padding: 0cm 5.4pt; height: 24.6667px;" valign="top" width="120">**<span style="mso-no-proof: yes;"> </span>**

</td><td style="width: 0%; border-top: none; border-left: none; border-bottom: 1pt solid rgb(22, 152, 124); border-right: 1pt solid rgb(22, 152, 124); padding: 0cm 5.4pt; height: 24.6667px;" valign="top" width="120">**<span style="mso-no-proof: yes;"> </span>**

</td></tr><tr style="height: 24.6667px;"><td style="width: 0%; border-right: 1pt solid rgb(22, 152, 124); border-bottom: 1pt solid rgb(22, 152, 124); border-left: 1pt solid rgb(22, 152, 124); border-image: initial; border-top: none; background: rgb(226, 239, 217); padding: 0cm 5.4pt; height: 24.6667px;" valign="top" width="123">**<span style="font-size: 13.0pt; mso-bidi-font-size: 11.0pt; mso-fareast-font-family: 'Times New Roman'; mso-fareast-theme-font: major-fareast; mso-bidi-font-family: 'Times New Roman'; mso-bidi-theme-font: major-bidi; color: #16987c; mso-no-proof: yes;">Bilan</span>**

</td><td style="width: 0%; border-top: none; border-left: none; border-bottom: 1pt solid rgb(22, 152, 124); border-right: 1pt solid rgb(22, 152, 124); padding: 0cm 5.4pt; height: 24.6667px;" valign="top" width="120">**<span style="mso-no-proof: yes;"> </span>**

</td><td style="width: 0%; border-top: none; border-left: none; border-bottom: 1pt solid rgb(22, 152, 124); border-right: 1pt solid rgb(22, 152, 124); padding: 0cm 5.4pt; height: 24.6667px;" valign="top" width="120">**<span style="mso-no-proof: yes;"> </span>**

</td><td style="width: 0%; border-top: none; border-left: none; border-bottom: 1pt solid rgb(22, 152, 124); border-right: 1pt solid rgb(22, 152, 124); padding: 0cm 5.4pt; height: 24.6667px;" valign="top" width="120">**<span style="mso-no-proof: yes;"> </span>**

</td></tr></tbody></table>

</div></div>- <span style="font-family: Symbol; mso-fareast-font-family: Symbol; mso-bidi-font-family: Symbol;"><span style="mso-list: Ignore;">·<span style="font: 7.0pt 'Times New Roman';"> </span></span></span>**<span style="color: #16987c;">Le pH</span>**, c'est comme une échelle qui nous dit si l'eau est acide, neutre ou basique. Pour les rivières et les lacs, le mieux, c'est que leur pH soit entre 6,5 et 8,5. C'est comme être juste au milieu, ni trop acide, ni trop basique, ce qui est parfait pour les plantes et les animaux qui vivent dans l'eau.
    
    <span style="font-family: 'Courier New'; mso-fareast-font-family: 'Courier New';"><span style="mso-list: Ignore;">o<span style="font: 7.0pt 'Times New Roman';"> </span></span></span>**Si le pH est en dessous de 6,5**, l'eau est trop acide, ça peut être difficile pour les poissons et d'autres créatures aquatiques de vivre, grandir et se reproduire normalement. Cela peut arriver à cause de la pollution de l'air qui tombe avec la pluie.
    
    <span style="font-family: 'Courier New'; mso-fareast-font-family: 'Courier New';"><span style="mso-list: Ignore;">o<span style="font: 7.0pt 'Times New Roman';"> </span></span></span>**Si le pH est au-dessus de 8,5**, l'eau est trop basique, ça peut aussi causer des problèmes aux poissons et à leur environnement, comme irriter leur peau ou changer la façon dont certains nutriments et toxines se comportent dans l'eau. Cela peut être dû à des rejets d'usines.
    
    **<u><span style="color: red;">Exemple :</span></u>**<span style="color: red;"> </span>Si j’ai un pH compris entre 6,5 et 8,5 alors je vais noter **<span style="font-size: 14.0pt; line-height: 107%; color: #00b050;">– </span>**dans mon tableau ; en revanche, si j’ai un pH compris entre 8,5 et 10, alors je vais noter **<span style="font-size: 14.0pt; line-height: 107%; color: #ed7d31; mso-themecolor: accent2;">+</span>**, car celui-ci s’éloigne un peu de la normal, mais si j’ai un pH &gt; 10 alors **<span style="font-size: 14.0pt; line-height: 107%; color: red;">++</span>**, car celui-ci s’éloigne fortement de la normal.
    
    Enfin, si j’ai un pH compris entre 5 et 6,5, alors je vais noter **<span style="font-size: 14.0pt; line-height: 107%; color: #ed7d31; mso-themecolor: accent2;">+</span>**, car celui-ci s’éloigne un peu de la normal, mais si j’ai un pH &lt; 5 alors **<span style="font-size: 14.0pt; line-height: 107%; color: red;">++</span>**, car celui-ci s’éloigne fortement de la normal.
- **<span style="color: #16987c;">La turbidité</span>**, correspond au trouble présent dans l'eau.

<span style="font-family: 'Courier New'; mso-fareast-font-family: 'Courier New';"><span style="mso-list: Ignore;">o<span style="font: 7.0pt 'Times New Roman';"> </span></span></span>**Si la turbidité est au-dessus du niveau normal** (**Témoin**), cela signifie généralement que l'eau est très claire. Cela peut être bon pour la pénétration de la lumière et aide à maintenir un écosystème sain pour la photosynthèse des plantes aquatiques.

<span style="font-family: 'Courier New'; mso-fareast-font-family: 'Courier New';"><span style="mso-list: Ignore;">o<span style="font: 7.0pt 'Times New Roman';"> </span></span></span>**Si la turbidité est en dessous du niveau normal** (**Témoin**), l'eau devient plus trouble. Cela peut être causé par des activités humaines comme le défrichement des terres ou la construction, qui déplacent beaucoup de terre. Une eau trouble peut créer plusieurs problèmes pour les animaux aquatiques comme des difficultés respiratoires (Les particules fines dans l'eau peuvent bloquer ou endommager les branchies des poissons, rendant difficile pour eux de respirer).<span style="font-family: Symbol; mso-fareast-font-family: Symbol; mso-bidi-font-family: Symbol;"><span style="mso-list: Ignore;"><span style="font: 7.0pt 'Times New Roman';">   
</span></span></span>

- **<span style="color: #16987c;">La conductivité</span>**, est une mesure qui nous dit combien l'eau peut conduire l'électricité. Pour les rivières et les lacs, une conductivité normale peut varier entre 50 et 1500 microsiemens par centimètre (µS/cm).

<span style="font-family: 'Courier New'; mso-fareast-font-family: 'Courier New';"><span style="mso-list: Ignore;">o<span style="font: 7.0pt 'Times New Roman';"> </span></span></span>**Si la conductivité est <span style="font-family: 'Space Grotesk'; mso-bidi-font-family: 'Times New Roman'; mso-bidi-theme-font: minor-bidi;">en dessous </span>du niveau normal** (**50-1500**), cela peut signifier que l'eau est très pure. Bien que cela puisse sembler positif, une faible conductivité peut parfois limiter la disponibilité de certains nutriments essentiels pour la vie aquatique, affectant ainsi les organismes qui dépendent de ces nutriments.

<span style="font-family: 'Courier New'; mso-fareast-font-family: 'Courier New';"><span style="mso-list: Ignore;">o<span style="font: 7.0pt 'Times New Roman';"> </span></span></span>**Si la conductivité est <span style="font-family: 'Space Grotesk'; mso-bidi-font-family: 'Times New Roman'; mso-bidi-theme-font: minor-bidi;">au-dessus </span>du niveau normal** (**50-1500**), cela peut être dû à des activités humaines telles que l'agriculture, où des fertilisants riches en minéraux sont utilisés, ou des effluents industriels. Une conductivité élevée peut poser des problèmes pour les espèces aquatiques.

- **<span style="color: #16987c;">La </span><span style="color: #16987c;">concentration en nitrate</span>**, est un indicateur important de la santé d'un cours d'eau, car les nitrates sont une forme de nutriment essentiel pour la croissance des plantes, mais peuvent être problématiques en grande quantité. Normalement, une concentration en nitrate dans un cours d'eau devrait être inférieure à 1000 microgramme par litre (µg/L) pour être considérée comme sûre pour la plupart des écosystèmes aquatiques.

<span style="font-family: 'Courier New'; mso-fareast-font-family: 'Courier New';"><span style="mso-list: Ignore;">o<span style="font: 7.0pt 'Times New Roman';"> </span></span></span>**Si la concentration en nitrate est <span style="font-family: 'Space Grotesk'; mso-bidi-font-family: 'Times New Roman'; mso-bidi-theme-font: minor-bidi;">en dessous </span>du niveau normal**, cela peut signifier qu'il y a peu de sources de pollution par les nitrates à proximité.

<span style="font-family: 'Courier New'; mso-fareast-font-family: 'Courier New';"><span style="mso-list: Ignore;">o<span style="font: 7.0pt 'Times New Roman';"> </span></span></span>**Si la concentration en nitrate est <span style="font-family: 'Space Grotesk'; mso-bidi-font-family: 'Times New Roman'; mso-bidi-theme-font: minor-bidi;">au-dessus </span>du niveau normal**, cela peut être un signe de pollution comme les déchets agricoles ou les eaux usées non traitées. Des niveaux élevés de nitrates peuvent entraîner plusieurs problèmes écologiques, notamment des effets sur la santé des organismes aquatiques et **<span style="font-family: 'Space Grotesk'; mso-bidi-font-family: 'Times New Roman'; mso-bidi-theme-font: minor-bidi;">risque pour la santé humaine.</span>**

##### **Étape 3 : Mise en forme des résultats sur PowerPoint** 

- Vous devez compléter la présentation PowerPoint en ajoutant vos graphiques dans les emplacements prévus : **pH, turbidité, conductivité et concentration en nitrate**. Pour cela faite un copier-coller de vos graphiques que vous avez créé de votre fichier Excel. Attention pour garder le bon code couleur, vous devez faire copier **Ctrl+C** et un collage spécial image avec le raccourci **Ctrl+Alt+V**.
- P<span style="mso-no-proof: yes;">our finir, remplacer les **<span style="color: red;">XXX </span>**par le nom du Pays qui a le cours d’eau le plus pollué d’après vos résultats. </span>

**<span style="font-size: 12.0pt; line-height: 107%; color: #16987c;">Félicitation vous avez réussi votre mission et   
identifié le cours d’eau le plus pollué parmi les échantillons d’eau !!</span>**

**<span style="font-size: 10.0pt; line-height: 107%;">Vous devez avoir obtenu une présentation qui ressemble à celle ci-dessous :</span>**

[![image.png](https://innovation.iha.unistra.fr/uploads/images/gallery/2024-05/scaled-1680-/H7Himage.png)](https://innovation.iha.unistra.fr/uploads/images/gallery/2024-05/H7Himage.png)

# Atelier de formation des animateurs

## Fiche de documentation de conduite d'atelier

## Exécution

1. Accueil des enfants + Jeu "brisure de la glace"
2. Atelier pédagogique (~ 1h30 max)
3. Activité ludique (jeux de société/en extérieur/etc...)
4. Goûter
5. Rituel de départ

### Accueil

### Consignes

### Préparation des Matériaux / Kits

### Pauses

- Pauses du goûter

### Fabrication / Assemblage

### Etapes avec les participants

#### Matin

#### Après-midi

### Exemples d'activités ludiques

- Jeux de société 
    - Loup-garou
- Jeux pour découvrir l'IUT 
    - Geogesser 
        - Exemple de badge

### Rangement

### Photo de Groupe

## Après l'Atelier

### Communication

### Documentation

### Contact Documentation / Atelier

# Séance Thématique



# Club robotique - Séance "Scratch & Snacks"

##### Bienvenue à notre grande fête de fin d’année : ***Scratch and Snacks* !** :

##### Un moment pour croquer des biscuits, partager des souvenirs, jouer comme des robots et déconnecter joyeusement après une belle année de découvertes !

[![22110287-2d4f-42c8-bb99-fc533cdf6451 (1).png](https://innovation.iha.unistra.fr/uploads/images/gallery/2025-06/scaled-1680-/22110287-2d4f-42c8-bb99-fc533cdf6451-1.png)](https://innovation.iha.unistra.fr/uploads/images/gallery/2025-06/22110287-2d4f-42c8-bb99-fc533cdf6451-1.png)

##### Dérouler de la séance :

##### **🧃 0–10 min : Accueil, goûter et création des équipes**  
Ambiance musicale, snacks partagés et création des équipes (binôme)!

##### **🎮 10–25 min : Jeu “Code Humain” façon Scratch**  
Donner des blocs d’instructions à exécuter (avancer, tourner, sauter, etc.) afin d'éviter les obstacles et finir la course ! Le travail d'équipe va être important ! (en binome)

##### **🔍 25–35 min : “Quiz Scratch &amp; Snacks”**  
Questions sur les clubs de robotique (vrai/faux, choix multiples).

##### **🎲 35–50 min : “Dessine ton robot”**  
Un thème donnée puis dessine un robot **à l'aveugle**… et laisser place à l’imagination (et aux fous rires) ! Attention, ici vous n'êtes plus en équipe alors accroché vous...   


##### **🎓 50–60 min : Diplômes, photo, au revoir !**

##### C'est l'heure de se dire aurevoir... jusqu'à l'année prochaine !

> En fonction du temps disponible, vous êtes libres d'ajuster les animations et les temps dédié à ces dernières.

##### **<u>1) "Code Humain" façon Scratch</u>**

##### <u>Introduction :</u>

##### Description de l'atelier aux jeunes. 

##### Exemple : Aujourd’hui, vous allez devenir des robots Scratch ! Vos amis vont vous donner des blocs d'instructions à suivre… mais attention : il faudra les exécuter dans l’ordre, comme un vrai programme afin d'éviter des obstacles et récupérer un objet à la fin du parcours."



##### <span style="text-decoration: underline;">Activité en binôme:</span>

##### Une fois la course d'obstacle prête, faire les équipes en binôme.

##### Les binômes choisissent un programmeur (qui donne les ordres en bloc) et un robot (qui exécute les ordres). Le robot doit avoir les yeux fermer. 

##### Le groupe qui prend le moins de temps gagne ! (Vous pouvez faire deux courses en parallèle si vous faites deux fois le parcours avec assez de matériels)

##### Attention, si vous toucher un obstacle alors c'est retour à la case départ. Si vous avez du mal essayer de changer les rôles!


##### - Présentation des blocs à utiliser : 

##### [1 - Avancer de "X" pas\*](https://innovation.iha.unistra.fr/uploads/images/gallery/2025-06/9SYimage.png)

##### 2 - Obstacle détectée

##### 3 - Reculer de "X" pas\*

##### 4- Tourner de "X" degré\*

##### 5 - S'arrêter 

##### 6 - Faire une danse 

##### 7 - Dire "je suis fatigué"


##### *\*Remplacer "X" par le nombre de pas souhaité ou par l'angle en degré dont vous voulez tourner\** 


##### <span style="text-decoration: underline;">Démonstration : </span>

##### Faire une démonstration avec un volontaire si besoin.



##### <span style="text-decoration: underline;">Répartition des points :</span>

##### Le comptage ce fait en individuel car il n'y aura qu'un vainqueur à la fin. 

##### Le premier groupe gagne chacun le nombre de point équivalent au nombre d'équipe qui participe. Le second groupe gagne chacun un point en moins et ainsi de suite.

##### Exemple : 3 équipes au total :

##### - Equipe 1 : Chacun des membres de l'équipe gagne 3 points

##### - Equipe 2 : Chacun des membres de l'équipe gagne 2 points 

##### - Equipe 3 : Chacun des membres de l'équipe gagne 1 points


##### Maintenant, il vous suffit de jouer. A vos marques! Prêt ? Partez !


##### **<span style="text-decoration: underline;">2) Quizz "Scratch and Snacks"</span>**

##### <span style="text-decoration: underline;">Introduction :</span>

##### Pour les quizz, nous utilisons le site quizz : [https://wayground.com/join](https://wayground.com/join)

##### Libre à vous de faire comme vous le souhaitez, tableau, ardoise, feuille et stylo ou encore à l'oral.

##### En fonction de la méthode utilisé, vous pouvez également faire en binôme. 

##### <span style="text-decoration: underline;">Objectif : </span>

##### Trouvez les bonnes réponses aux questions. 


##### <span style="text-decoration: underline;">Démonstration : </span>

##### Faire une démonstration si besoin.

##### <span style="text-decoration: underline;">Répartition des points :</span>

##### A vous de choisir le système de point. Ici nous prendrons le nombre de participants, le vainqueur gagnera le nombre de point équivalent correspondant aux nombres de participants. Le deuxième en gagne un de moins et ainsi de suite.

##### Exemple : 5 participants au total :

##### - Le 1er gagne 5 points

##### - Le 2ème gagne 4 points

##### - Le 3ème gagne 3 points 

##### - ainsi de suite…

##### Si vous choisissez de le faire en binôme, vous pouvez prendre la même répartition des points que pour le premier atelier.


##### <span style="text-decoration: underline;">**3) Quizz "Dessine ton robot"**</span>

##### <span style="text-decoration: underline;">Objectif :</span>

##### "Aujourd’hui, on va faire un défi un peu fou… Un défi où on va mélanger de l’imagination, du dessin, et… un peu de chaos rigolo !

##### Est-ce que vous êtes prêts à dessiner un robot ?   
Oui ? Très bien…  
Mais attention… vous allez devoir le faire les yeux fermés ! 

##### L’idée, ce n’est pas de faire un dessin parfait, mais de laisser parler votre cerveau de roboticien, votre mémoire et vos doigts, même sans regarder.

##### Vous aurez 1 minute pour créer un robot selon la consigne donnée, à l’aveugle. Et ensuite, on regardera tous ensemble le résultat pour voter le podium :

##### - Le robot le plus drôle

##### - Le plus étrange

##### - Le plus mignon

##### - Et peut-être… le plus effrayant !

#####  

##### A vous de choisir les thématique.

#####  

##### Prêts ? Fermez les yeux, attrapez vos crayons… et que le dessin robotique commence !"


##### <span style="text-decoration: underline;">Démonstration : </span>

##### Faire une démonstration avec un volontaire si besoin.

##### <span style="text-decoration: underline;">Répartition des points :</span>

##### A la fin du temps impartie nous passons au vote. Tout le monde à le droit de voter pour son préférer. Attention vous n'avez pas le droit de voter pour le votre. Vous devez donc voter votre dessin préférer selon la thématique donnée.

##### A vous de choisir le système de point. Ici nous prendrons le nombre de participants, le vainqueur gagnera le nombre de point équivalent correspondant aux nombres de participants. Le deuxième en gagne un de moins et ainsi de suite.

##### Exemple : 5 participants au total :

##### - Le 1er gagne 5 points

##### - Le 2ème gagne 4 points

##### - Le 3ème gagne 3 points 

##### - ainsi de suite…

# Nouvelle page



# Pour les animateurs et la création pédagogique des clubs



# Matériel et Plateforme standards pour la robotique éducative

Où acheter des composants et cartes électroniques :

- [https://www.lextronic.fr/](https://www.lextronic.fr/)
- [https://fr.rs-online.com/](https://fr.rs-online.com/)
- [https://www.conrad.fr](https://www.conrad.fr)
- [https://www.generationrobots.com/](https://www.generationrobots.com/)
- [https://www.robot-maker.com/](https://www.robot-maker.com/)
- [https://eu.robotshop.com/fr/](https://eu.robotshop.com/fr/)

Composant standards choisis excel et plateformes robotiques possibles :

<table border="1" id="bkmrk-%C2%A0-%C2%A0-direct-chine-%28al" style="border-collapse: collapse; width: 100%;"><colgroup><col style="width: 12.4845%;"></col><col style="width: 12.4845%;"></col><col style="width: 12.4845%;"></col><col style="width: 12.4845%;"></col><col style="width: 12.4845%;"></col><col style="width: 12.4845%;"></col><col style="width: 12.4845%;"></col><col style="width: 12.4845%;"></col></colgroup><tbody><tr><td class="xl66" height="20" style="height: 15.0pt; width: 60pt;" width="80"> </td><td class="xl65" style="width: 80pt;" width="107"> </td><td class="xl74" colspan="4" style="border-right: 1.0pt solid black; border-left: none; width: 164pt;" width="216">Direct Chine (AliExpress, Alibaba)</td><td class="xl71" colspan="2" style="width: 112pt;" width="150">CreaBot Robotique</td></tr><tr><td class="xl69" height="21" style="height: 15.75pt;">Type</td><td class="xl68">Désignation</td><td class="xl77" style="border-left: none;">Réf</td><td class="xl73">Marque</td><td class="xl73">Fournisseur</td><td class="xl82"><span style="mso-spacerun: yes;"> </span>Prix TTC+port<span style="mso-spacerun: yes;"> </span></td><td>LittleBot (creabot mobile)</td><td>RCcar (creabot car)</td></tr><tr><td class="xl66" height="20" style="height: 15.0pt; border-top: none;">Carte Microcontrôleur</td><td class="xl65" style="border-top: none;">Arduino Nano ATmega328P</td><td class="xl84"> </td><td class="xl85"> </td><td class="xl85"> </td><td class="xl87"> </td><td align="right">1</td><td align="right">1</td></tr><tr><td class="xl69" height="21" style="height: 15.75pt;">Development Shield</td><td class="xl68">Sensor Shield R3</td><td class="xl92"><u style="visibility: hidden; mso-ignore: visibility;"> </u></td><td class="xl81"> </td><td class="xl81"> </td><td class="xl83"> </td><td align="right">1</td><td align="right">1</td></tr><tr><td class="xl66" height="20" style="height: 15.0pt; border-top: none;">Distance ultrason</td><td class="xl65" style="border-top: none;">Ultrason HC-SR04</td><td class="xl78" style="border-left: none;">[HC-SR04 Ultraljudsmodul](https://www.amazon.fr/gp/product/B078S45WTG)</td><td class="xl73">AZDelivery</td><td class="xl73">Amazon</td><td class="xl82"><span style="mso-spacerun: yes;"> </span>1,85 €</td><td align="right">1</td><td align="right">1</td></tr><tr><td height="20" style="height: 15.0pt;">Suivi ligne infrarouge</td><td class="xl70">TRCT5000 coulée infrarouge<span style="mso-spacerun: yes;"> </span></td><td class="xl79" style="border-left: none;">[MH-Sensor-Series](https://fr.aliexpress.com/item/1005006304693304.html)</td><td class="xl73">DIY-Victor</td><td class="xl73">AliExpress</td><td class="xl82"><span style="mso-spacerun: yes;"> </span>0,72 €</td><td align="right">1</td><td align="right">1</td></tr><tr><td height="20" style="height: 15.0pt;">Accéléromètre</td><td class="xl70">Gyroscope 6DDL MPU-6050</td><td class="xl78" style="border-left: none;">[H-1-0122](https://www.amazon.fr/gp/product/B07XRK5FHP)</td><td class="xl73">Hailege</td><td class="xl73">Amazon</td><td class="xl82"><span style="mso-spacerun: yes;"> </span>4,13 €</td><td> </td><td> </td></tr><tr><td height="20" style="height: 15.0pt;">Température et humidité</td><td class="xl70">DHT11 JST PH</td><td class="xl77" style="border-left: none;"> </td><td class="xl73"> </td><td class="xl73"> </td><td class="xl82"> </td><td> </td><td> </td></tr><tr><td height="20" style="height: 15.0pt;">Température et humidité</td><td class="xl70">DHT22 Dupont</td><td class="xl79" style="border-left: none;">[DHT22](https://fr.aliexpress.com/item/1005005545184001.html)</td><td class="xl73">TZT</td><td class="xl73">AliExpress</td><td class="xl82"><span style="mso-spacerun: yes;"> </span>1,65 €</td><td> </td><td> </td></tr><tr><td class="xl69" height="21" style="height: 15.75pt;">Température et humidité</td><td class="xl68">DHT22 JST PH</td><td class="xl67" style="border-left: none;"> </td><td class="xl81"> </td><td class="xl81"> </td><td class="xl83"> </td><td> </td><td> </td></tr><tr><td class="xl66" height="20" style="height: 15.0pt; border-top: none;">Moteur CC</td><td class="xl65" style="border-top: none;">Moteur CC encodeur</td><td class="xl84" style="border-top: none; border-left: none;"> </td><td class="xl85" style="border-top: none;"> </td><td class="xl85" style="border-top: none;"> </td><td class="xl87" style="border-top: none;"> </td><td> </td><td align="right">2</td></tr><tr><td height="20" style="height: 15.0pt;">Moteur CC</td><td class="xl70">Moteur CC jaune</td><td class="xl77" style="border-left: none;"> </td><td class="xl73"> </td><td class="xl73"> </td><td class="xl82"> </td><td> </td><td> </td></tr><tr><td height="20" style="height: 15.0pt;">pilote moteur CC</td><td class="xl70">double pont H L298N</td><td class="xl79" style="border-left: none;">[N30](https://www.amazon.fr/gp/product/B094FHW2TY)</td><td class="xl73">xocom,ATOYT</td><td class="xl73">AliExpress</td><td class="xl82"><span style="mso-spacerun: yes;"> </span>3,40 €</td><td> </td><td> </td></tr><tr><td height="20" style="height: 15.0pt;">pilote moteur CC</td><td class="xl70">double pont H L9110S</td><td class="xl78" style="border-left: none;">[L9110S](https://fr.aliexpress.com/item/1005006205377334.html)</td><td class="xl73">PUMUDDSY</td><td class="xl73">AliExpress</td><td class="xl82"><span style="mso-spacerun: yes;"> </span>0,95 €</td><td align="right">1</td><td align="right">1</td></tr><tr><td height="20" style="height: 15.0pt;">Servomoteur vitesse</td><td class="xl70">servomoteurs DM-S0090D-R 9g/0.08s/1.6kg.cm 22.9X12X22.5mm</td><td class="xl78" style="border-left: none;">[DM-S0090D-R](https://fr.aliexpress.com/item/32657260546.html)</td><td class="xl73">DORCRCMAN</td><td class="xl73">AliExpress</td><td class="xl82"><span style="mso-spacerun: yes;"> </span>2,22 €</td><td align="right">2</td><td> </td></tr><tr><td height="20" style="height: 15.0pt;">Servomoteur position</td><td class="xl70">Servomoteur 180° SG90 9g</td><td class="xl78" style="border-left: none;">[SG90](https://fr.aliexpress.com/item/1005006379480535.html)</td><td class="xl73">TowerPro</td><td class="xl73">AliExpress</td><td class="xl82"><span style="mso-spacerun: yes;"> </span>2,19 €</td><td> </td><td align="right">1</td></tr><tr><td height="20" style="height: 15.0pt;">Moteur pas-à-pas</td><td class="xl70">Nema 14 35x35x34mm arbre 24mm</td><td class="xl79" style="border-left: none;">[14HS13-0804S](https://www.aliexpress.com/item/32573904476.html)</td><td class="xl73">STEPPERONLINE</td><td class="xl73">AliExpress</td><td class="xl82"><span style="mso-spacerun: yes;"> </span>15,21 €</td><td> </td><td> </td></tr><tr><td height="20" style="height: 15.0pt;">pilote moteur pas-à-pas</td><td class="xl70">CNC shield V4 HW-702 v0.0.0</td><td class="xl79" style="border-left: none;">[V4 DRV8825](https://www.aliexpress.com/item/1915894898.html)</td><td class="xl73">RoarKit</td><td class="xl73">AliExpress</td><td class="xl82"><span style="mso-spacerun: yes;"> </span>7,14 €</td><td> </td><td> </td></tr><tr><td class="xl69" height="21" style="height: 15.75pt;">pilote moteur pas-à-pas</td><td class="xl68">pilote moteur CC DRV8825</td><td class="xl88" style="border-left: none;">[V4 DRV8825](https://www.aliexpress.com/item/1915894898.html)</td><td class="xl81">RoarKit</td><td class="xl81" colspan="2" style="mso-ignore: colspan; border-right: 1.0pt solid black;">AliExpress</td><td> </td><td> </td></tr></tbody></table>

<table border="1" id="bkmrk-fonction-composant-l" style="border-collapse: collapse; width: 100%; height: 397px;"><colgroup><col style="width: 16.6831%;"></col><col style="width: 16.6831%;"></col><col style="width: 16.6831%;"></col><col style="width: 16.6831%;"></col><col style="width: 16.6831%;"></col><col style="width: 16.6831%;"></col></colgroup><tbody><tr style="height: 29.6px;"><td style="height: 29.6px;">Fonction  
</td><td style="height: 29.6px;">Composant  
</td><td style="height: 29.6px;">LittleBot  
</td><td style="height: 29.6px;">K2024  
</td><td style="height: 29.6px;">Référence  
</td><td style="height: 29.6px;">Prix unitaire (€)  
</td></tr><tr style="height: 96.8px;"><td style="height: 96.8px;">Microcontrôleur  
</td><td style="height: 96.8px;">Arduino Nano</td><td style="height: 96.8px;">1</td><td style="height: 96.8px;">1  
</td><td style="height: 96.8px;">https://www.lextronic.fr/carte-seeeduino-nano-102010268-59340.html</td><td style="height: 96.8px;">10  
</td></tr><tr style="height: 118.6px;"><td style="height: 118.6px;">Carte de développement  
</td><td style="height: 118.6px;">Sensor Shield Nano compatible UNO  
</td><td style="height: 118.6px;">1  
</td><td style="height: 118.6px;">1  
</td><td style="height: 118.6px;">https://www.amazon.fr/Expansion-sensor-Shield-compatible-Arduino/dp/B072FCNF54</td><td style="height: 118.6px;">3  
</td></tr><tr style="height: 46.4px;"><td style="height: 46.4px;">Câble Alim + Prog  
</td><td style="height: 46.4px;">USB C  
</td><td style="height: 46.4px;">1  
</td><td style="height: 46.4px;">1  
</td><td style="height: 46.4px;"> </td><td style="height: 46.4px;">1  
</td></tr><tr style="height: 46.4px;"><td style="height: 46.4px;">Actionneur  
</td><td style="height: 46.4px;">servomoteur à rotation 360°</td><td style="height: 46.4px;">2  
</td><td style="height: 46.4px;">0  
</td><td style="height: 46.4px;">[DM-S0090D-R 9g/0.08s/1.6kg.cm](https://fr.aliexpress.com/item/32657260546.html)</td><td style="height: 46.4px;">2  
</td></tr><tr style="height: 29.6px;"><td style="height: 29.6px;">  
</td><td style="height: 29.6px;">servomoteur à rotation 180°</td><td style="height: 29.6px;">0  
</td><td style="height: 29.6px;">1  
</td><td style="height: 29.6px;">  
</td><td style="height: 29.6px;">  
</td></tr><tr style="height: 29.6px;"><td style="height: 29.6px;">Capteur  
</td><td style="height: 29.6px;">module ultrason  
</td><td style="height: 29.6px;">1  
</td><td style="height: 29.6px;">0  
</td><td style="height: 29.6px;">[HC-SR04](https://www.amazon.fr/gp/product/B078S45WTG/)</td><td style="height: 29.6px;">1  
</td></tr><tr><td>  
</td><td>Capteur de ligne  
</td><td>0  
</td><td>1  
</td><td>  
</td><td>  
</td></tr></tbody></table>

# Installation des PC

### Dual-boot Windows Ubuntu

Pour le pilotage du bras robot SO-ARM100 et des drones, on privilégie Ubuntu et la programmation en Python.

Après avoir configuré correctement le PC Windows [https://doc.ubuntu-fr.org/cohabitation\_ubuntu\_windows](https://doc.ubuntu-fr.org/cohabitation_ubuntu_windows) :

- Configuration du Bios
- Désactivation de Secure Boot depuis Windows

<p class="callout warning">Si Secure Boot n'est pas désactivé, le dual boot est possible mais il faudra booter sur Windows exclusivement depuis le Bios en appuyant sur F12. Si on démarre Windows via le Grub, secure boot demande une clé de sécu.</p>

Installer Ubuntu LTS depuis une clé USB Live.

Après l'installation il y a deux possibilités pour basculer entre Windows et Ubuntu :

- Appuyer sur F12 dès le démarrage pour afficher le menu de Boot du Bios 
    - Sélectionner Windows ou Ubuntu
- Attendre que le menu Grub s'affiche 
    - Sélectionner Windows Boot Manager ou Ubuntu

[![OIP-2633633953.jpeg](https://innovation.iha.unistra.fr/uploads/images/gallery/2025-07/scaled-1680-/oip-2633633953.jpeg)](https://innovation.iha.unistra.fr/uploads/images/gallery/2025-07/oip-2633633953.jpeg)

 Il est possible de changer l'ordre de boot par défaut du menu Grub : [https://askubuntu.com/a/110738](https://askubuntu.com/a/110738)

# Mblock 5 pour l'animation STEM



# Création de blocs d'extensions aevc mBlock 5 Extension Builder

Voir [https://forum.makeblock.com/t/how-to-add-an-extension-for-mblock/2280](https://forum.makeblock.com/t/how-to-add-an-extension-for-mblock/2280)

Mblock est normalement installé dans `C:\ProgramData`

Sur mon PC il est installé dans `C:\Users\USER\mblock` (voir aussi dans `C:\Users\Public\Programs`

Les extensions sont installées dans : `C:\Users\USER\mblock\exts`

Les sources sont en JavaScript... Il faut trouver comment remonter aux sources C (fichiers .c et .h) qui appellent les librairies dont dépendent les blocs de programmation et définissent le code C équivalent à chaque bloc. A défaut, trouver si les fournisseurs de l'extensions ont mis le code source sur une forge logicielle publique.

### Création de nouveau bloc avec mBlock 5 Extension Builder

<div class="page-content clearfix" component="page-display" id="bkmrk-cr%C3%A9er-un-compte-sur-" option:page-display:page-id="341"><div class="page-content clearfix" component="page-display" option:page-display:page-id="341"><div dir="auto"><div style="clear: left;">  
</div>- Créer un compte sur [https://ext.mblock.cc/](https://ext.mblock.cc/)
- Une bonne documentation existe en Anglais : [https://www.yuque.com/makeblock-help-center-en/extension-builder](https://www.yuque.com/makeblock-help-center-en/extension-builder)
- Mais elle n'explique pas comment créer un bloc qui fait appel à une librairie externe non disponible dans mBlock. Voir prochain paragraphe -&gt; Maintenant si : [https://www.yuque.com/makeblock-help-center-en/extension-builder/arduino-add-third-party-library](https://www.yuque.com/makeblock-help-center-en/extension-builder/arduino-add-third-party-library)

</div></div></div>### Avec des librairies de dépendance

[https://support.makeblock.com/hc/en-us/articles/15264543414935-Example-Arduino-Add-a-Third-party-Library-for-an-Arduino-Extension](https://support.makeblock.com/hc/en-us/articles/15264543414935-Example-Arduino-Add-a-Third-party-Library-for-an-Arduino-Extension)

[https://www.yuque.com/makeblock-help-center-en/extension-builder/arduino-add-third-party-library](https://www.yuque.com/makeblock-help-center-en/extension-builder/arduino-add-third-party-library)

Pour inspiration, on importe une librairie existante :

[![image.png](https://innovation.iha.unistra.fr/uploads/images/gallery/2025-04/scaled-1680-/1Ffimage.png)](https://innovation.iha.unistra.fr/uploads/images/gallery/2025-04/1Ffimage.png)

Pour créer une nouvelle librairie :

[![image.png](https://innovation.iha.unistra.fr/uploads/images/gallery/2025-04/scaled-1680-/2a2image.png)](https://innovation.iha.unistra.fr/uploads/images/gallery/2025-04/2a2image.png)

[![image.png](https://innovation.iha.unistra.fr/uploads/images/gallery/2025-04/scaled-1680-/MZHimage.png)](https://innovation.iha.unistra.fr/uploads/images/gallery/2025-04/MZHimage.png)

Scroller jusqu'en bas et importer un dossier `src` contenant les fichiers `.h` et `.cpp` de votre lib

[![image.png](https://innovation.iha.unistra.fr/uploads/images/gallery/2025-04/scaled-1680-/IZ4image.png)](https://innovation.iha.unistra.fr/uploads/images/gallery/2025-04/IZ4image.png)

### Publier un block

[https://www.yuque.com/makeblock-help-center-en/extension-builder/how-to-publish](https://www.yuque.com/makeblock-help-center-en/extension-builder/how-to-publish)

[https://www.yuque.com/makeblock-help-center-en/extension-builder/publishing-criteria](https://www.yuque.com/makeblock-help-center-en/extension-builder/publishing-criteria)

### Sources

<div class="page-content clearfix" component="page-display" id="bkmrk-introduction-extensi" option:page-display:page-id="341"><div dir="auto">- Introduction Extension Builder et usage basique : [https://www.yuque.com/makeblock-help-center-en/extension-builder](https://www.yuque.com/makeblock-help-center-en/extension-builder)
- Comment ajouter un bloc qui fait appel à une librairie qui n'est pas dispo dans mBlock ? [https://support.makeblock.com/hc/en-us/articles/15264543414935-Example-Arduino-Add-a-Third-party-Library-for-an-Arduino-Extension](https://support.makeblock.com/hc/en-us/articles/15264543414935-Example-Arduino-Add-a-Third-party-Library-for-an-Arduino-Extension)

</div></div>

# Création d'une extension pour Mblock pour une carte type arduino

Pour l'exemple, nous allons créer une extension Mblock pour un servo-moteur 360° à rotation continue.

Ouvrir Mblock et aller dans le menu des extensions.

[![capture1.PNG](https://innovation.iha.unistra.fr/uploads/images/gallery/2025-03/scaled-1680-/capture1.PNG)](https://innovation.iha.unistra.fr/uploads/images/gallery/2025-03/capture1.PNG)

Cliquer sur "Créer une nouvelle extension". Cela vous ouvre une page dans le navigateur.

[![Capture2.PNG](https://innovation.iha.unistra.fr/uploads/images/gallery/2025-03/scaled-1680-/capture2.PNG)](https://innovation.iha.unistra.fr/uploads/images/gallery/2025-03/capture2.PNG)

> Ci un message d'erreur s'affiche dans votre navigateur et que vous ne pouvez pas utiliser l'éditeur d'extension mblock. Ouvrez L'IDE mblock en ligne via ce lien : [https://ide.mblock.cc/](https://ide.mblock.cc/) et recommencez les étapes ci-dessus

Initialement le site est en chinois. Pour mettre le site en français il vous suffit d'utiliser le traducteur intégrer dans votre moteur de rechercher Avec Google Chrome, aller dans les paramètres puis "Traduire".

[![Capture3.png](https://innovation.iha.unistra.fr/uploads/images/gallery/2025-03/scaled-1680-/capture3.png)](https://innovation.iha.unistra.fr/uploads/images/gallery/2025-03/capture3.png)

Cliquez sur "Mes plugins" &gt; "Mes extension" &gt; "Créer une nouvelle extension"

[![Capture4.PNG](https://innovation.iha.unistra.fr/uploads/images/gallery/2025-03/scaled-1680-/capture4.PNG)](https://innovation.iha.unistra.fr/uploads/images/gallery/2025-03/capture4.PNG)

Sélectionner la case "Modèles prédéfinis Arduino" puis valider. Saisissez ensuite un nom pour votre extension puis validez.

Vous arrivez maintenant sur cette onglet :

[![Capture5.PNG](https://innovation.iha.unistra.fr/uploads/images/gallery/2025-03/scaled-1680-/capture5.PNG)](https://innovation.iha.unistra.fr/uploads/images/gallery/2025-03/capture5.PNG)

Cliquez sur cette icone

![Capture6.PNG](https://innovation.iha.unistra.fr/uploads/images/gallery/2025-03/scaled-1680-/capture6.PNG)

# Animation avec un bloc non publié

Ouvrir l'IDE de test de l'extension et récupérer l'URL du type

[https://ide.mblock.cc/preview.html#/?extId=39817](https://ide.mblock.cc/preview.html#/?extId=39817)

Connexion au PC

Ouvrir Chrome  
sélectionner DuckduckGo

ide.mblock.cc  
skip  
etudiant1@fablab-alsacenord.fr  
etudiantfablab1  
[https://ide.mblock.cc/preview.html#/?extId=39817](https://ide.mblock.cc/preview.html#/?extId=39817)

# Club Robotique - Lego Mindstorms



# Lien de téléchargement du logiciel de programmation

https://education.lego.com/fr-fr/downloads/mindstorms-ev3/software/

# Mis à jour du Firmware

Lien du site pour la mis à jour de la brick lego :

[https://ev3manager.education.lego.com/](https://ev3manager.education.lego.com/)

Une fois sur le site vous devrez télécharger "EV3DeviceManager.msi" que le site vous proposera d'installer.

Redémarrer votre ordinateur puis retourner sur le site précédent.

Sélectionner le firmware que vous voulez télécharger dans la brick et lancer la mis à jour.

Attendez jusqu'à ce que ce soit fini

# Club Robotique - Joystick



# Phase 1