Séance 1 — Algorithmique appliquée au SIN
1) Du besoin à l’algorithme
Exemple fil rouge : allumer une LED quand la luminosité est faible.
- Entrée : LDR → lum (valeur analogique).
- Sortie : LED (ON/OFF).
- Paramètre : seuil S.
Notions clés : séquence, condition, boucle, variables.
2) Représentations
Logigramme
Début
Lire la luminosité
Si luminosité < seuil alors
Allumer LED
Sinon
Éteindre LED
Fin Si
Fin
Pseudo-code
variable lum, seuil
début
seuil ← 40
lire lum
si lum < seuil alors
afficher "LED ON"
sinon
afficher "LED OFF"
fin si
fin
3) Vers le code
Python (simulation)
seuil = 40
lum = 35
if lum < seuil:
print("LED ON")
else:
print("LED OFF")
Arduino (embarqué)
int seuil = 400; // à calibrer
void loop(){
int lum = analogRead(A0);
if(lum < seuil) digitalWrite(5, HIGH);
else digitalWrite(5, LOW);
}
4) Bonnes pratiques (ajouts)
- Étalonnage : relever lum en clair/sombre, choisir S au milieu. Tracer via Serial ou moniteur Python.
- Anti-bruit : moyenne glissante ou médiane sur 5 mesures.
- Hystérésis : ON si lum < S_on, OFF si lum > S_off pour éviter le clignotement.
- Échelle : analogRead() renvoie 0..1023; normaliser en % si besoin.
- Clarté : commentaires courts, noms explicites, indentation stable.
// Snippet Arduino — hystérésis
const int S_ON=380, S_OFF=420;
bool led=false;
void loop(){
int lum=analogRead(A0);
if(!led && lum<S_ON) led=true;
if( led && lum>S_OFF) led=false;
digitalWrite(5, led?HIGH:LOW);
}
5) Mini-exercices d’ancrage (ajouts)
- Donner 2 jeux de valeurs lum et décider ON/OFF pour S=40 puis S=60.
- Écrire le pseudo-code avec hystérésis (deux seuils).
- Modifier la condition si le câblage rend lum plus grand quand il fait sombre.
Objectifs
- Identifier E/S et variables.
- Représenter la logique en logigramme puis pseudo-code.
- Simuler en Python avant l’embarqué.
Contexte
Éclairage automatique : allumer une LED quand la luminosité descend sous un seuil S ajustable.
- Entrée : LDR → lum
- Sortie : LED
- Paramètre : S
Notions : séquence | condition | variables | test
Démarche
- Analyse du besoin : E/S, variables, cas limites.
- Formalisation : logigramme clair → pseudo-code indenté.
- Simulation Python : tableau de mesures, test du seuil.
- Mise en commun : comparer les seuils et la clarté des étapes.
Extensions (ajouts facultatifs)
- Seuil réglable par potentiomètre sur A1.
- Journalisation série + tracé Moniteur/Plotter.
- Hystérésis simple pour éviter l’oscillation.
Exemple Python minimal
# Simulation d'un éclairage automatique
seuil = 40
mesures = [80, 65, 42, 39, 35, 45, 60]
for lum in mesures:
if lum < seuil:
print(f"Lum={lum} -> LED ON")
else:
print(f"Lum={lum} -> LED OFF")
Squelette Arduino (à compléter)
void setup(){
pinMode(A0, INPUT); // LDR
pinMode(5, OUTPUT); // LED
Serial.begin(9600);
}
void loop(){
int lum = analogRead(A0);
// TODO: comparer à un seuil S et piloter la LED
}
Bonus Arduino — seuil réglable & log (ajout)
const int PIN_LDR=A0, PIN_POT=A1, PIN_LED=5;
void setup(){ pinMode(PIN_LED,OUTPUT); Serial.begin(9600); }
void loop(){
int lum = analogRead(PIN_LDR); // 0..1023
int pot = analogRead(PIN_POT); // 0..1023
int S = map(pot,0,1023,200,800); // fenêtre utile
bool on = (lum < S);
digitalWrite(PIN_LED, on?HIGH:LOW);
Serial.print("lum=");Serial.print(lum);
Serial.print(" S=");Serial.print(S);
Serial.print(" LED=");Serial.println(on?"ON":"OFF");
delay(80);
}
Évaluation formative
| Critère | Attendu | Pts |
|---|---|---|
| Identification E/S | Entrées/sorties et variables correctement relevées | 4 |
| Logigramme / pseudo-code | Clair, complet, enchaînement logique correct | 8 |
| Simulation Python | Fonctionnelle, deux cas de test, commentaires utiles | 6 |
| Justifications | Réponses précises et argumentées | 2 |
Total: 20 points (formatif)
Pièces jointes (à déposer sur le site)
- /uploads/sin-algo/00_gabarit_logigramme.pdf
- /uploads/sin-algo/00_gabarit_pseudo_code.pdf
- /uploads/sin-algo/s1_seuil_lumiere.py
Exemple d’attendu — Autre système : Ventilation automatique
Objectif : activer un ventilateur si la température dépasse Tseuil.
- Entrée : capteur température → temp
- Sortie : ventilateur ON/OFF
- Paramètre : Tseuil
# Simulation ventilation automatique
Tseuil = 25
mesures = [22, 24, 26, 28, 23, 27]
for temp in mesures:
if temp > Tseuil:
print(f"Temp={temp}°C -> Ventilateur ON")
else:
print(f"Temp={temp}°C -> Ventilateur OFF")
// Squelette Arduino
int capteur = A1; // Température
int ventil = 6; // Ventilateur
int Tseuil = 25;
void setup(){ pinMode(capteur,INPUT); pinMode(ventil,OUTPUT); Serial.begin(9600); }
void loop(){
int temp = analogRead(capteur); // conversion à adapter selon capteur
if(temp > Tseuil) digitalWrite(ventil,HIGH);
else digitalWrite(ventil,LOW);
delay(1000);
}
Variante : signaler la surchauffe par buzzer ou LED rouge.