Aller au contenu

Sciences de l'ingénieur (spécialité) · Première

Programmer un microcontrôleur : exercices corrigés de 1re SI

Publié le 6 novembre 2026 · Mis à jour le 6 novembre 2026 · Signaler une erreur

L'essentiel

  • Programmer, c'est partir du cahier des charges, écrire un algorithme (souvent un algorigramme), puis le traduire en programme exécutable 34.
  • Avant de coder, liste les entrées (capteurs, boutons), les sorties (LED, actionneurs) et les conditions qui les relient.
  • Une grandeur analogique lue par le microcontrôleur devient un nombre entier : sache passer de la tension à la valeur numérique et inversement.
  • Teste toujours les cas limites (valeur exactement égale au seuil, premier et dernier passage dans une boucle).
  • Un temps d'attente se calcule : durée d'une itération multipliée par le nombre d'itérations.

Comment utiliser ces exercices

Ces exercices t'entraînent à la démarche qui mène d'un besoin à un programme de microcontrôleur. Dans les activités de formation, on attend de l'élève qu'il sache construire l'algorithme d'un programme à partir de ce que demande le cahier des charges 3. Une compétence du référentiel porte ensuite sur la mise en code : passer de l'algorithme à un programme que la machine peut exécuter 4. Les exercices suivent ce chemin : comprendre le besoin, écrire l'algorithme, puis vérifier par le calcul que le programme se comportera comme prévu.

Cherche d'abord seul(e), sur une feuille. Ouvre un indice seulement si tu es bloqué(e), puis compare ta solution à la correction, étape par étape.

Les exercices

Exercice 1 Combien de valeurs pour un convertisseur ?

★☆☆Environ 5 min

Un microcontrôleur lit la tension d'un capteur grâce à un convertisseur analogique-numérique (CAN) de 10 bits. Le résultat de la conversion est un nombre entier écrit sur 10 bits.

  1. Combien de valeurs entières différentes le résultat peut-il prendre ?
  2. Le CAN mesure des tensions entre 00 et 5 V5\ \text{V} et répartit cette plage en autant d'intervalles que de valeurs. Quelle est la taille d'un intervalle, en millivolts (arrondie au centième) ?
Indice 1

Le codage de l'information numérique te donne le nombre de combinaisons de nn bits : 2n2^n.

Indice 2

Divise la plage de tension par le nombre de valeurs, puis convertis en millivolts.

Voir la correction pas à pas
  1. On rappelle que nn bits donnent 2n2^n combinaisons différentes.

  2. On applique avec n=10n = 10 : 210=10242^{10} = 1024 valeurs possibles.

  3. On calcule la taille d'un intervalle : 51024≈0,004883 V\dfrac{5}{1024} \approx 0{,}004883\ \text{V}.

  4. On convertit en millivolts : 0,004883×1000≈4,88 mV0{,}004883 \times 1000 \approx 4{,}88\ \text{mV}.

Le CAN distingue 1024 valeurs ; deux tensions qui diffèrent de moins de 4,88 mV4{,}88\ \text{mV} peuvent donc donner le même nombre. C'est cet intervalle qui limite la précision de la mesure.

Exercice 2 De la tension au nombre lu

★☆☆Environ 8 min

Le CAN de 10 bits de l'exercice précédent est utilisé avec une tension de référence Uref=5 VU_{ref} = 5\ \text{V}. Dans cet exercice, on admet que la valeur numérique NN obtenue est la partie entière de :

N=UUref×1024N = \dfrac{U}{U_{ref}} \times 1024

Un capteur délivre U=3,2 VU = 3{,}2\ \text{V}.

  1. Calcule NN.
  2. Le programme allume la LED verte si N>600N > 600. La LED verte s'allume-t-elle ?
Indice 1

Remplace UU et UrefU_{ref} par leurs valeurs avant de multiplier par 10241024.

Indice 2

N'arrondis pas : prends la partie entière, c'est-à-dire que tu supprimes les décimales.

Voir la correction pas à pas
  1. On écrit la formule avec les données : N=3,25×1024N = \dfrac{3{,}2}{5} \times 1024.

  2. On calcule le rapport : 3,25=0,64\dfrac{3{,}2}{5} = 0{,}64.

  3. On multiplie : 0,64×1024=655,360{,}64 \times 1024 = 655{,}36.

  4. On prend la partie entière : N=655N = 655.

  5. On compare au seuil : 655>600655 > 600 est vrai, donc la condition est satisfaite.

On obtient N=655N = 655 et la LED verte s'allume. Retiens le réflexe : le programme ne manipule jamais des volts, mais des entiers qu'on sait relier aux volts par un calcul.

Exercice 3 Trouver la valeur de seuil à programmer

★★☆Environ 10 min

Un capteur de température délivre une tension proportionnelle à la température : 10 mV10\ \text{mV} par degré Celsius, soit 0,01 V/°C0{,}01\ \text{V/°C}. Le CAN est celui de l'exercice précédent (1010 bits, Uref=5 VU_{ref}=5\ \text{V}, NN = partie entière de UUref×1024\dfrac{U}{U_{ref}}\times 1024).

Le cahier des charges demande d'allumer une LED d'alerte lorsque la température atteint 30 °C30\ \text{°C}.

  1. Quelle tension le capteur délivre-t-il à 30 °C30\ \text{°C} ?
  2. Quelle valeur de seuil NseuilN_{seuil} (partie entière) le programmeur doit-il comparer au résultat de la conversion ?
Indice 1

La tension se déduit du coefficient du capteur : tension = coefficient ×\times température.

Indice 2

Applique ensuite la formule de conversion et garde la partie entière.

Voir la correction pas à pas
  1. On calcule la tension à 30 °C30\ \text{°C} : U=0,01×30=0,30 VU = 0{,}01 \times 30 = 0{,}30\ \text{V}.

  2. On applique la formule : N=0,305×1024N = \dfrac{0{,}30}{5} \times 1024.

  3. On calcule : 0,06×1024=61,440{,}06 \times 1024 = 61{,}44.

  4. On prend la partie entière : Nseuil=61N_{seuil} = 61.

  5. On vérifie la cohérence : pour N=61N = 61 la tension est 61×51024≈0,298 V61 \times \dfrac{5}{1024} \approx 0{,}298\ \text{V}, soit environ 29,8 °C29{,}8\ \text{°C}, tout près des 30 °C30\ \text{°C} visés.

Le test du programme sera de la forme « si N≥61N \geq 61 alors allumer la LED ». À cause de l'intervalle de conversion, la LED s'allume à quelques dixièmes de degré près : c'est la précision du CAN, pas une erreur de programme.

Exercice 4 Le rapport cyclique d'un clignotement

★★☆Environ 8 min

Pour signaler un défaut, un programme fait clignoter une LED en boucle : il l'allume pendant 500 ms500\ \text{ms}, puis l'éteint pendant 1500 ms1500\ \text{ms}, puis recommence.

  1. Quelle est la période du clignotement, en secondes ?
  2. Quelle est sa fréquence, en hertz ?
  3. Calcule le rapport cyclique, c'est-à-dire la part de la période pendant laquelle la LED est allumée, en pourcentage.
Indice 1

La période regroupe la durée d'allumage et la durée d'extinction.

Indice 2

Le rapport cyclique est une durée d'allumage divisée par la période complète.

Voir la correction pas à pas
  1. On additionne les deux durées : 500+1500=2000 ms500 + 1500 = 2000\ \text{ms}, soit une période T=2 sT = 2\ \text{s}.

  2. On calcule la fréquence : f=1T=12=0,5 Hzf = \dfrac{1}{T} = \dfrac{1}{2} = 0{,}5\ \text{Hz}.

  3. On forme le rapport : 5002000=0,25\dfrac{500}{2000} = 0{,}25.

  4. On exprime en pourcentage : 0,25×100=25 %0{,}25 \times 100 = 25\ \%.

La LED est allumée 25 % du temps, avec une période de 2 s2\ \text{s} et une fréquence de 0,5 Hz0{,}5\ \text{Hz}. Piège classique : diviser 500500 par 15001500 donnerait 33 %33\ \%, ce qui oublie que la période contient les deux phases.

Exercice 5 Tracer le comportement d'une boucle

★★☆Environ 10 min

Voici un algorithme décrit en langage naturel :

  • nn prend la valeur 00 ;
  • tant que n<7n < 7 : nn prend la valeur n+3n + 3 ;
  • afficher nn.
  1. Dresse le tableau des valeurs de nn à chaque passage.
  2. Combien de fois le corps de la boucle est-il exécuté ?
  3. Quelle valeur est affichée à la fin ?
Indice 1

Avant chaque passage, tu testes la condition « n<7n < 7 » avec la valeur actuelle de nn.

Indice 2

La boucle s'arrête dès que la condition devient fausse ; la valeur de nn à ce moment-là est celle affichée.

Voir la correction pas à pas
  1. On initialise : n=0n = 0.

  2. Test : 0<70 < 7 est vrai, donc on exécute le corps et n=3n = 3.

  3. Test : 3<73 < 7 est vrai, donc n=6n = 6.

  4. Test : 6<76 < 7 est vrai, donc n=9n = 9.

  5. Test : 9<79 < 7 est faux, la boucle s'arrête sans exécuter le corps une quatrième fois.

  6. On compte les exécutions du corps : trois.

  7. On lit la valeur finale : n=9n = 9.

Le corps s'exécute 3 fois et le programme affiche 9, une valeur supérieure au seuil 77. Le test se fait avant chaque passage : la boucle peut donc dépasser le seuil au dernier tour. Cette trace à la main évite l'erreur d'une itération en trop ou en moins.

Exercice 6 Calculer une temporisation

★★★Environ 12 min

Pour attendre quelques millisecondes, un programmeur utilise une boucle d'attente. On suppose que chaque tour de cette boucle dure exactement 4 µs4\ \text{µs}, et que le microcontrôleur ne fait rien d'autre pendant ce temps.

Le cahier des charges impose d'attendre 2 ms2\ \text{ms} entre deux actions.

  1. Convertis les deux durées en secondes.
  2. Combien de tours de boucle faut-il programmer ?
  3. On veut maintenant attendre 20 ms20\ \text{ms}. Par quel facteur le nombre de tours est-il multiplié ?
Indice 1

Écris 1 ms=10−3 s1\ \text{ms} = 10^{-3}\ \text{s} et 1 µs=10−6 s1\ \text{µs} = 10^{-6}\ \text{s}.

Indice 2

Durée totale = nombre de tours ×\times durée d'un tour : isole le nombre de tours.

Voir la correction pas à pas
  1. On convertit la durée visée : 2 ms=2×10−3 s2\ \text{ms} = 2 \times 10^{-3}\ \text{s}.

  2. On convertit la durée d'un tour : 4 µs=4×10−6 s4\ \text{µs} = 4 \times 10^{-6}\ \text{s}.

  3. On écrit la relation : durée totale =Ntours×4×10−6= N_{tours} \times 4 \times 10^{-6}.

  4. On isole : Ntours=2×10−34×10−6N_{tours} = \dfrac{2 \times 10^{-3}}{4 \times 10^{-6}}.

  5. On calcule : Ntours=0,5×103=500N_{tours} = 0{,}5 \times 10^{3} = 500.

  6. Pour 20 ms20\ \text{ms}, la durée est multipliée par 1010 : le nombre de tours aussi, soit 50005000.

Il faut 500 tours pour 2 ms2\ \text{ms}, et 50005000 pour 20 ms20\ \text{ms}. La durée est proportionnelle au nombre de tours : c'est la clé de tout calcul de temporisation.

Exercice 7 Commander un vérin avec deux capteurs

★★★Environ 15 min

Une ressource de formation propose de transformer un algorithme en organigramme pour un microcontrôleur PIC, sur un vérin simple effet 3. On s'en inspire avec un cahier des charges inventé.

  • Une entrée BB est à 11 quand l'opérateur appuie sur le bouton de sortie.
  • Une entrée FF est à 11 quand le capteur de fin de course détecte la tige sortie.
  • Une sortie DD commande le distributeur : à 11, la tige sort ; à 00, elle rentre (rappel par ressort).

Règles : la tige sort tant que le bouton est maintenu et que la fin de course n'est pas atteinte ; sinon elle rentre.

  1. Écris la condition logique de DD en fonction de BB et FF.
  2. Complète le tableau de vérité de DD pour les quatre combinaisons.
  3. Écris l'algorithme sous la forme d'une boucle infinie avec un test.
  4. Quel cas limite faut-il tester sur le banc ?
Indice 1

Utilise la logique combinatoire : « et » et « non » suffisent ici.

Indice 2

Le cas où les deux capteurs sont actifs en même temps mérite un test particulier.

Voir la correction pas à pas
  1. On traduit la règle : sortir si B=1B = 1 et F=0F = 0, ce qui s'écrit D=B⋅F‾D = B \cdot \overline{F}.

  2. On construit le tableau : (B,F)=(0,0)→D=0(B,F) = (0,0) \rightarrow D=0 ; (0,1)→D=0(0,1) \rightarrow D=0 ; (1,0)→D=1(1,0) \rightarrow D=1 ; (1,1)→D=0(1,1) \rightarrow D=0.

  3. On écrit l'algorithme : répéter indéfiniment ; lire BB ; lire FF ; si B=1B = 1 et F=0F = 0 alors D←1D \leftarrow 1 sinon D←0D \leftarrow 0.

  4. On repère le cas limite : B=1B=1 et F=1F=1 (bouton maintenu, tige déjà au bout), où le distributeur doit retomber à 00.

  5. On prévoit le test : appuyer sur le bouton jusqu'à la fin de course, puis vérifier que la tige ne force pas et que DD passe bien à 00.

La commande est D=B⋅F‾D = B \cdot \overline{F}. Le cas B=1B=1 et F=1F=1 est celui qui révèle une condition mal écrite : un programme qui ne testerait que BB ferait forcer le vérin en butée.

Exercice 8 Programmer un indicateur de température par couleurs

★★★Environ 15 min

Le ColorEau est un produit qui informe l'utilisateur de la température de l'eau grâce à des couleurs ; l'activité associée demande de programmer le microcontrôleur pour piloter l'affichage des LED 3. On étudie une version simplifiée, avec un cahier des charges inventé.

On note TT la température mesurée, en degrés Celsius.

  • T<20T < 20 : LED bleue allumée seule.
  • 20≤T≤4020 \leq T \leq 40 : LED verte allumée seule.
  • T>40T > 40 : LED rouge allumée seule.
  1. Écris l'algorithme avec des tests imbriqués ou successifs.
  2. Dresse un jeu de valeurs de test qui couvre toutes les zones et les valeurs limites.
  3. Un élève écrit « si T<20T < 20 bleu, sinon si T<40T < 40 vert, sinon rouge ». Pour quelle valeur de TT son programme ne respecte-t-il pas le cahier des charges ?
Indice 1

Les zones sont consécutives : un « sinon si » suffit à enchaîner les tests.

Indice 2

Compare soigneusement les bornes du cahier des charges avec celles du programme de l'élève.

Voir la correction pas à pas
  1. On écrit l'algorithme : lire TT ; si T<20T < 20 alors allumer bleue ; sinon si T≤40T \leq 40 alors allumer verte ; sinon allumer rouge.

  2. On choisit des valeurs de test pour chaque zone : 1010 (bleue), 3030 (verte), 5050 (rouge).

  3. On ajoute les valeurs limites : 19,919{,}9 (bleue), 2020 (verte), 4040 (verte), 40,140{,}1 (rouge).

  4. On analyse le programme de l'élève : son deuxième test est T<40T < 40, donc T=40T = 40 échoue ce test.

  5. Pour T=40T = 40, son programme tombe dans le « sinon » et allume la LED rouge.

  6. Le cahier des charges demande la LED verte pour T=40T = 40 : c'est un écart.

Le programme de l'élève se trompe pour T=40T = 40 exactement : il faut écrire T≤40T \leq 40 et non T<40T < 40. Cette erreur d'une borne ne se voit qu'avec des valeurs de test choisies sur les limites, jamais avec des valeurs « au milieu ».

Les questions qu'on se pose

Faut-il faire l'algorigramme avant d'écrire le programme ?

Oui, pour tout problème qui comporte plusieurs cas ou une boucle. Les activités de prise en main du logiciel Flowcode procèdent ainsi : une première partie consiste à compléter l'algorigramme de fonctionnement, une seconde à créer le programme 3. L'algorigramme te force à réfléchir aux cas avant de te perdre dans le code.

Je dois programmer en quel langage ?

Cela dépend du support de ton lycée. Les ressources citent par exemple le module Arduino 2, le langage C pour l'électronique embarquée 5 et le logiciel Flowcode 3. La démarche reste la même : cahier des charges, algorithme, puis traduction en programme exécutable 4.

Pourquoi calculer des valeurs numériques si le programme le fait tout seul ?

Parce que c'est toi qui choisis les seuils à écrire dans le programme, et qui dois vérifier qu'ils répondent au cahier des charges. Sans ce calcul, tu ne peux pas savoir si la LED s'allumera à la bonne température ni quelle précision tu peux espérer.

Sources

Programme visé : Programme d'enseignement de spécialité de sciences de l'ingénieur des classes de première et terminale de la voie générale · Ministère de l'Éducation nationale et de la Jeunesse

  1. Programme d'enseignement de spécialité de sciences de l'ingénieur des classes de première et terminale de la voie générale, Ministère de l'Éducation nationale et de la Jeunesse. Consulté le 6 novembre 2026.
  2. Académie de Caen — Petit cours sur les microcontrôleurs, Éduscol STI. Consulté le 6 novembre 2026.
  3. STI2D Activité — Apprentissage à la programmation d'un microcontrôleur (niveau laser de chantier), Éduscol STI. Consulté le 6 novembre 2026.
  4. Projet en classe de première en Spécialité SI, Éduscol STI. Consulté le 6 novembre 2026.
  5. Formation « System on Chip » avec les microcontrôleurs CYPRESS PSoC, Éduscol STI. Consulté le 6 novembre 2026.
  6. Programmes et ressources en sciences de l'ingénieur — Voie générale, Éduscol. Consulté le 6 novembre 2026.

Les numéros dans le texte renvoient à ces sources. Une source qui ne dit pas ce qu'on lui fait dire ? Signale-le.

Signaler une erreur sur cette page

Je suis en…

Primaire

  • CP Bientôt
  • CE1 Bientôt
  • CE2 Bientôt
  • CM1 Bientôt
  • CM2 Bientôt

Collège

Lycée

Supérieur

  • BTS Bientôt
  • BUT Bientôt
  • Licence Bientôt
  • Prépas Bientôt

Sur cette page