Programmation embarquée (initiation)
Microcontrôleur et capteurs.
Programmation embarquée (initiation)
Contexte
La programmation embarquée pilote un système via un microcontrôleur (Arduino, STM32, ESP32, Raspberry Pi Pico). Elle repose sur une boucle infinie qui lit les capteurs, décide, et pilote les actionneurs.
Structure d'un programme Arduino
#include <Arduino.h>
const int LED = 13;
const int BOUTON = 2;
void setup() {
pinMode(LED, OUTPUT);
pinMode(BOUTON, INPUT_PULLUP);
Serial.begin(9600);
}
void loop() {
if (digitalRead(BOUTON) == LOW) { // bouton pressé
digitalWrite(LED, HIGH);
Serial.println("Bouton pressé");
} else {
digitalWrite(LED, LOW);
}
delay(50);
}
setup(): configuration initiale, exécutée une fois.loop(): boucle infinie, cœur du programme.
Types de données courants
| Type | Taille | Plage |
|---|---|---|
bool | 1 bit | 0/1 |
byte | 8 bits | 0-255 |
int (AVR) | 16 bits | -32 768 à 32 767 |
long | 32 bits | ± 2·10⁹ |
float | 32 bits | 6-7 chiffres significatifs |
Structures de contrôle
- Test :
if / else if / else. - Boucle :
for(int i=0;i<N;i++),while(). - Fonction :
int add(int a, int b) { return a + b; }.
Entrées / sorties
- Numériques :
digitalRead(),digitalWrite(). - Analogiques (CAN) :
analogRead()retourne 0-1023 (10 bits Arduino). - PWM :
analogWrite(pin, 0-255)génère un signal carré à rapport cyclique variable (490 Hz). - Série UART :
Serial.print()pour debug (baudrate 9600, 115200).
Communication capteur : I²C
#include <Wire.h>
Wire.begin();
Wire.requestFrom(0x68, 6); // MPU6050
while (Wire.available()) {
data[i++] = Wire.read();
}
Bonnes pratiques
- Éviter
delay()bloquant : préférermillis()pour tâches concurrentes. - Utiliser des noms parlants (const
PIN_LED). - Séparer le code en fonctions courtes (< 40 lignes).
- Commenter les intentions, pas la syntaxe.
- Documenter les branchements (schéma associé).
Exemple : régulation ON/OFF de température
const int SEUIL = 25; // °C
void loop() {
float T = lireTemperature();
if (T > SEUIL + 0.5) digitalWrite(RELAI, LOW); // hystérésis
else if (T < SEUIL - 0.5) digitalWrite(RELAI, HIGH);
delay(1000);
}
Hystérésis évite les commutations rapides.
Écosystèmes modernes
- PlatformIO (VSCode) remplace l'IDE Arduino.
- MicroPython : Python sur ESP32/RP2040, plus lisible.
- Rust embarqué : sécurité mémoire, adopté par l'aérospatial.
À retenir
- Structure :
setup()+loop(). - CAN Arduino : 10 bits, PWM : 8 bits.
- Éviter le
delay(), préférermillis(). - I²C, SPI, UART : trois bus universels.
Quiz de révision
- Question 1.
La fonction
setup()s'exécute : - Question 2.
analogRead()sur Arduino Uno retourne : - Question 3.
Le rapport cyclique de
analogWrite(pin, 127)vaut environ : - Question 4.
Pour piloter un capteur sur bus I²C, on utilise la bibliothèque :
Sources et références
Ce cours est rédigé par l'équipe RévisionBac à partir du programme officiel et des sources institutionnelles ci-dessous. Elles permettent de vérifier les définitions, les chiffres et les normes citées.
- 1.Programmes et ressources du lycée général et technologique — Éduscol — Ministère de l'Éducation nationale
- 2.Bulletin officiel de l'Éducation nationale (programmes du baccalauréat) — education.gouv.fr
- 3.Chiffres clés énergie, climat et économie circulaire — ADEME
- 4.Normes internationales (ISO 14001, ISO 50001…) — ISO
- 5.Réglementation environnementale RE 2020 — Ministère de la Transition écologique
- 6.Guides et recommandations de sécurité numérique — ANSSI
Contenu vérifié et mis à jour le 08/08/2026. Les liens renvoient vers les sites officiels des éditeurs cités.
Historique éditorial
Ce chapitre est rédigé et relu par l'équipe RévisionBac, puis enrichi par les contributions validées.
- — Dernière mise à jour du cours (relecture et enrichissement)
- — Première publication de la fiche de cours