TC-ALGO · 4 ECTS

Algorithmique et Programmation

25h CM + 40h TP — 10 séances. Organigrammes, pseudocode, structures de contrôle, premiers programmes Python pour IoT.

10 Séances 25h CM 40h TP 4 ECTS
1

Organigramme + pseudocode d'un programme IoT

Semaine 2CM · 2h
Définir ce qu'est un algorithme et ses propriétés fondamentales
Savoir expliquer
Représenter un algorithme par organigramme et pseudocode
Savoir faire
Analyser un problème simple et le décomposer en étapes
Savoir analyser
Produire un organigramme normé pour un système de lecture capteur
Savoir produire

1. Qu'est-ce qu'un algorithme ?

Un algorithme est une suite d'instructions précises, finies et non ambiguës permettant de résoudre un problème. Trois propriétés fondamentales :

  • Précision : chaque instruction doit être comprise sans interprétation possible. Exemple : "ajouter 1 à la variable compteur" est précis ; "augmenter un peu le compteur" est ambigu.
  • Finitude : l'algorithme doit se terminer après un nombre fini d'étapes. Une boucle infinie accidentelle viole cette propriété.
  • Non-ambiguïté : le résultat est le même quel que soit l'exécutant (humain ou machine).

2. Structures algorithmiques fondamentales

Tout algorithme peut s'écrire avec trois structures de base :

  • Séquence : les instructions s'exécutent les unes après les autres, dans l'ordre.
  • Condition (sélection) : si une condition est vraie, exécuter le bloc A, sinon exécuter le bloc B.
  • Boucle (itération) : répéter un bloc d'instructions tant qu'une condition est vraie (while) ou pour un nombre déterminé de répétitions (for).

3. Organigramme et pseudocode

L'organigramme (ordinogramme) est une représentation graphique normalisée (norme ISO 5807) utilisée en documentation technique industrielle.

SymboleSignificationExemple
OvaleDébut / FinDébut programme
ParallélogrammeEntrée / SortieLire température, Afficher valeur
RectangleOpération / TraitementCalculer moyenne
LosangeDécision / Conditiontemp > 30°C ?

Le pseudocode est un langage descriptif proche du français structuré, sans syntaxe stricte, qui sert de pont entre l'algorithme et l'implémentation réelle.

4. Exemple IoT : lecture d'un capteur DHT22

Problème : Lire la température toutes les 5 secondes. Si la température dépasse 30°C, allumer une LED rouge. Sinon, allumer une LED verte.

lecture_capteur.pseudoPseudocode
DEBUT
  Initialiser le capteur DHT22 sur pin 4
  Initialiser LED_rouge sur pin 7 en sortie
  Initialiser LED_verte sur pin 8 en sortie

  REPETER INDEFINIMENT
    Lire température depuis DHT22
    
    SI température > 30 ALORS
      Allumer LED_rouge
      Éteindre LED_verte
    SINON
      Allumer LED_verte
      Éteindre LED_rouge
    FIN SI

    Attendre 5 secondes
  FIN REPETER
FIN

5. Organigramme associé

Le même algorithme représenté en organigramme montrerait : Début → Rectangle "Initialiser capteur et LEDs" → Losange "temp > 30°C ?" (branche OUI → Allumer rouge/Éteindre verte ; branche NON → Allumer verte/Éteindre rouge) → Rectangle "Attendre 5s" → boucle retour vers la lecture.

Exercice 1 — Algorithmique et représentations

a) Conception d'algorithme : Écrivez en pseudocode un algorithme qui lit la valeur d'un potentiomètre, la convertit en angle (0-180°) pour un servo-moteur, et attend 100 ms.

b) Trace d'exécution : Simulez l'algorithme avec les valeurs d'entrée 0V, 2.5V et 5V. Notez les sorties obtenues.

c) Organigramme : Dessinez l'organigramme correspondant à l'algorithme de la question a) sur papier ou avec draw.io.

d) BONUS — Implémentez l'algorithme en Arduino : Réalisez le programme complet de lecture potentiomètre et contrôle de servo.

2

Variables, types et opérateurs en Python

Semaine 3CM · 2h
Distinguer les types de base (int, float, str, bool)
Savoir expliquer
Déclarer et assigner des variables en Python
Savoir faire
Utiliser les opérateurs arithmétiques et logiques
Savoir analyser
Convertir des types (casting) pour le traitement de données capteurs
Savoir produire

Python est un langage interprété à typage dynamique. Une variable se crée par simple assignation : temperature = 28.5. Les types principaux sont int (entier), float (décimal), str (chaîne) et bool (booléen). Les opérateurs arithmétiques (+, -, *, /, //, %, **) et de comparaison (==, !=, <, >, <=, >=) permettent d'exprimer les calculs et conditions.

Exercice 2 — Variables et types

a) Créez des variables température (float), humidité (int) et nom_capteur (str). Affichez leur type avec type().

b) Convertissez une valeur brute ADC (0-1023) en tension (0-5V) et affichez le résultat.

c) Visualisation : Affichez les valeurs dans la console avec f-string formaté.

d) BONUS : Écrivez un script qui lit une variable et affiche son type dynamiquement.

3

Conditions if/elif/else

Semaine 4CM · 2h
Comprendre la structure conditionnelle en programmation
Savoir expliquer
Écrire des conditions simples et imbriquées
Savoir faire
Combiner plusieurs conditions avec and/or/not
Savoir analyser
Implémenter une logique de décision pour un système IoT
Savoir produire

La structure if / elif / else permet d'exécuter différents blocs selon l'évaluation de conditions booléennes. En IoT, on s'en sert pour déclencher des alertes (température excessive), changer de mode (jour/nuit) ou gérer des états (marche/arrêt).

Exercice 3 — Conditions

a) Écrivez un programme qui lit une température et affiche "Froid" (<20°C), "Confort" (20-30°C), "Chaud" (>30°C).

b) Ajoutez une condition humidité combinée (temp > 30 ET hum > 80% → "Risque moisissure").

c) Visualisation : Affichez l'état avec une barre de progression ASCII.

d) BONUS : Simulez un thermostat avec hysteresis (évite les basculements rapides).

4

Boucles while et for

Semaine 5CM · 2h
Distinguer boucle bornée (for) et non bornée (while)
Savoir expliquer
Écrire des boucles avec break et continue
Savoir faire
Éviter les boucles infinies accidentelles
Savoir analyser
Acquérir N échantillons capteur en boucle
Savoir produire

for parcourt une séquence un nombre connu de répétitions. while répète tant qu'une condition est vraie. En IoT, on utilise while True pour la boucle principale et for pour l'acquisition de N échantillons ou le balayage de plages de valeurs.

Exercice 4 — Boucles

a) Écrivez une boucle qui acquiert 100 échantillons d'un capteur et calcule la moyenne glissante.

b) Comparez while et for pour le même problème. Quels sont les avantages de chacun ?

c) Visualisation : Affichez les échantillons sous forme de graphique console.

d) BONUS : Implémentez une boucle avec timeout de sécurité (max 10s).

5

Listes et tuples

Semaine 6CM · 2h
Comprendre les séquences mutables (list) et immutables (tuple)
Savoir expliquer
Manipuler des listes (ajout, suppression, parcours)
Savoir faire
Utiliser les compréhensions de liste
Savoir analyser
Stocker un historique de mesures en liste
Savoir produire

Les listes (crochets []) stockent des séquences modifiables. Les tuples (parenthèses ()) sont immutables, parfaits pour des données constantes comme les coordonnées GPS ou les coefficients de calibration. Les compréhensions permettent des transformations concises : [x*2 for x in mesures].

Exercice 5 — Listes

a) Créez une liste de 10 températures et calculez min, max, moyenne.

b) Ajoutez 5 nouvelles mesures et triez la liste.

c) Visualisation : Affichez l'évolution temporelle avec matplotlib.

d) BONUS : Utilisez une deque pour une fenêtre glissante des 100 dernières mesures.

6

Fonctions et modularité

Semaine 7CM · 2h
Comprendre l'intérêt de la modularité (DRY, réutilisabilité)
Savoir expliquer
Définir et appeler des fonctions avec paramètres et return
Savoir faire
Distinguer variables locales et globales
Savoir analyser
Structurer un programme capteur en fonctions réutilisables
Savoir produire

Une fonction est un bloc de code réutilisable qui prend des paramètres en entrée et retourne une valeur. En IoT, on organise le code en fonctions : lire_capteur(), envoyer_serveur(), calculer_moyenne(). Cela améliore la lisibilité, la testabilité et la maintenance.

Exercice 6 — Fonctions

a) Écrivez une fonction celsius_to_fahrenheit(c) et testez-la avec plusieurs valeurs.

b) Créez un module capteurs.py avec les fonctions lire_dht22() et lire_bmp280().

c) Visualisation : Importez le module et affichez les données dans un tableau.

d) BONUS : Ajoutez une fonction avec paramètre par défaut pour le filtrage.

7

Chaînes de caractères

Semaine 8CM · 2h
Manipuler les chaînes (indexation, slicing, concaténation)
Savoir expliquer
Utiliser les méthodes de formatage (f-string, .format())
Savoir faire
Parser une chaîne JSON ou CSV reçue d'un capteur
Savoir analyser
Formater les données pour envoi série ou MQTT
Savoir produire

Les chaînes sont omniprésentes en IoT : formatage de messages, parsing de données JSON, construction de payloads MQTT. Python offre un riche ensemble de méthodes (split(), join(), strip(), replace()) et le formatage moderne avec f-strings : f"Température : {temp:.1f}°C".

Exercice 7 — Chaînes

a) Formatez une chaîne CSV "28.5,72.3,1024" en extrayant les 3 valeurs avec split().

b) Construisez un payload JSON : {"temp": 28.5, "hum": 72.3} avec f-string.

c) Visualisation : Affichez les données formatées dans un tableau aligné.

d) BONUS : Parsez une chaîne JSON réelle avec le module json de Python.

8

Dictionnaires et ensembles

Semaine 9CM · 2h
Comprendre la structure clé-valeur des dictionnaires
Savoir expliquer
Manipuler des dictionnaires (accès, ajout, parcours)
Savoir faire
Utiliser les ensembles pour des valeurs uniques
Savoir analyser
Représenter une mesure capteur avec un dictionnaire
Savoir produire

Les dictionnaires (accolades {}) associent des clés à des valeurs, parfaits pour représenter une mesure structurée : {"capteur": "DHT22", "temp": 28.5, "hum": 72.3}. Les ensembles (set) stockent des éléments uniques, utiles pour éliminer les doublons de trames.

Exercice 8 — Dictionnaires

a) Créez un dictionnaire avec les données d'un capteur (temp, hum, pression). Accédez et modifiez chaque valeur.

b) Parcourez le dictionnaire et affichez clé → valeur.

c) Visualisation : Convertissez le dictionnaire en JSON avec json.dumps().

d) BONUS : Utilisez un ensemble pour filtrer les IDs de capteurs uniques.

9

Fichiers et entrées/sorties

Semaine 10CM · 2h
Lire et écrire des fichiers texte et CSV
Savoir expliquer
Utiliser le gestionnaire de contexte with open()
Savoir faire
Journaliser des données capteurs dans un fichier
Savoir analyser
Lire un fichier de configuration YAML pour les paramètres IoT
Savoir produire

La persistance des données est essentielle en IoT : journalisation locale sur carte SD, export CSV pour analyse, fichiers de configuration YAML. Python utilise open() avec le gestionnaire with : with open("meteo.csv", "a") as f: f.write(ligne).

Exercice 9 — Fichiers

a) Écrivez les données d'un capteur dans un fichier CSV avec timestamp.

b) Lisez le fichier et calculez la moyenne des températures.

c) Visualisation : Utilisez pandas.read_csv() pour analyser le fichier.

d) BONUS : Créez un fichier config.ini avec la période d'échantillonnage et le seuil d'alerte.

10

Projet algorithmique — petit programme IoT

Semaine 11CM · 2h
Synthétiser l'ensemble des notions de programmation vues
Savoir expliquer
Concevoir l'architecture d'un petit système IoT
Savoir faire
Débuguer un programme pas à pas
Savoir analyser
Produire un programme fonctionnel et documenté
Savoir produire

Ce projet de synthèse mobilise toutes les notions du module : algorithmique, variables, conditions, boucles, listes, fonctions, chaînes, dictionnaires et fichiers. L'objectif est d'écrire un programme Python complet qui simule un système IoT réel.

Exercice 10 — Projet de synthèse

a) Écrivez un programme qui simule la lecture d'un capteur (valeur aléatoire), stocke les données dans une liste, écrit dans un fichier CSV et affiche un résumé.

b) Ajoutez une fonction d'alerte si la valeur dépasse un seuil configurable.

c) Visualisation : Générez un graphique d'évolution avec matplotlib.

d) BONUS : Structurez le code en modules séparés (capteur.py, stockage.py, alerte.py).