140 lines
2.6 KiB
Markdown
140 lines
2.6 KiB
Markdown
# TP Tests Unitaires – Moteur DC & Capteur HC-SR04
|
||
|
||
Niveau : débutant – MicroPython – ESP32
|
||
|
||
## Objectifs du TP
|
||
|
||
Comprendre ce qu’est un test unitaire.
|
||
|
||
Apprendre à séparer la logique du programme du pilotage matériel.
|
||
|
||
Créer une fonction simple représentant la logique d’un moteur DC ou d’un capteur ultrason.
|
||
|
||
Écrire des tests unitaires avec assert en MicroPython.
|
||
|
||
## TP1 — Tests unitaires d’un moteur DC
|
||
### Contexte
|
||
|
||
Un moteur DC piloté via un pont en H utilise :
|
||
|
||
deux signaux logiques in1, in2 pour choisir le sens,
|
||
|
||
un signal PWM pour la vitesse.
|
||
|
||
Dans ce TP, vous n’allez pas piloter un vrai moteur.
|
||
Vous allez tester la logique qui décide des valeurs à envoyer.
|
||
|
||
### Énoncé
|
||
|
||
Vous devez écrire une fonction :
|
||
|
||
calcul_signaux_moteur(vitesse_pourcent, pwm_max=1023)
|
||
|
||
|
||
Elle reçoit une vitesse en pourcentage, entre -100 et +100, et doit retourner un dictionnaire contenant :
|
||
|
||
{
|
||
"in1": ...,
|
||
"in2": ...,
|
||
"pwm": ...
|
||
}
|
||
|
||
La logique à implémenter :
|
||
[img logique]( img/image.png )
|
||
|
||
#### Calcul du PWM :
|
||
|
||
pwm = pwm_max * (abs(vitesse) / 100)
|
||
|
||
Exemple (si pwm_max = 1000) :
|
||
|
||
vitesse = 50 → pwm = 500
|
||
|
||
vitesse = -100 → pwm = 1000
|
||
|
||
vitesse = 200 → pwm = 1000 (clamp)
|
||
|
||
## Vous devez faire :
|
||
|
||
Compléter le fichier :
|
||
logique_moteur_eleve.py
|
||
(qui contient des zones ____ à remplir)
|
||
|
||
Puis compléter les tests dans :
|
||
test_logique_moteur_eleve.py
|
||
|
||
Les tests vérifieront automatiquement :
|
||
|
||
l’arrêt,
|
||
|
||
la marche avant,
|
||
|
||
la marche arrière,
|
||
|
||
le PWM proportionnel,
|
||
|
||
la saturation des valeurs extrêmes.
|
||
|
||
## TP2 — Tests unitaires du capteur HC-SR04
|
||
### Contexte
|
||
|
||
Le HC-SR04 mesure une distance grâce à l’écho d’un ultrason.
|
||
|
||
Il renvoie un temps d’écho (en microsecondes), et la distance se calcule via :
|
||
|
||
distance_cm = (temps_echo_microsecondes × 0.0343) / 2
|
||
|
||
|
||
Dans ce TP, vous n’allez pas utiliser de vrai capteur.
|
||
Vous allez tester la fonction de calcul seulement.
|
||
|
||
### Énoncé
|
||
|
||
Vous devez écrire une fonction :
|
||
|
||
calcul_distance_cm(temps_echo_us)
|
||
|
||
|
||
Elle doit :
|
||
|
||
1. Retourner None si :
|
||
|
||
temps_echo_us est None
|
||
|
||
ou ≤ 0
|
||
|
||
2. Sinon :
|
||
|
||
convertir les microsecondes en secondes
|
||
|
||
appliquer le calcul de distance
|
||
|
||
retourner la distance en centimètres (float)
|
||
|
||
Aides :
|
||
|
||
1 seconde = 1 000 000 microsecondes
|
||
|
||
vitesse du son = 343 m/s = 34300 cm/s
|
||
|
||
Exemple :
|
||
|
||
1000 µs → environ 17.15 cm
|
||
|
||
3000 µs → environ 51.45 cm
|
||
|
||
## Vous devez faire :
|
||
|
||
Compléter le fichier :
|
||
logique_hcsr04_eleve.py
|
||
|
||
Compléter les tests dans :
|
||
test_logique_hcsr04_eleve.py
|
||
|
||
Les tests vérifieront :
|
||
|
||
les entrées invalides,
|
||
|
||
les distances calculées,
|
||
|
||
la cohérence des valeurs retournées. |