Activité mBot : Détecteur d’intrusion
Détecteur d'intrusion avec mBot : capteur ultrason surveille un seuil, LED et buzzer alertent. Variables et conditions.
Illustration générée par IA
Détecteur d'intrusion avec mBot : capteur ultrason surveille un seuil, LED et buzzer alertent. Variables et conditions.
Tu vas transformer ton mBot en petit “gardien” :
Avant de commencer, assure-toi d’avoir :
Conseil : pour éviter les soucis de connexion, commence si possible en USB (le Bluetooth marche, mais peut être plus capricieux).
Le capteur à ultrason sert à mesurer une distance.
Le capteur fait comme une chauve-souris :
mBot (capteur) obstacle
ping ───────────────────────────────►
◄────────────────────────────── écho
Le son voyage dans l’air à une vitesse finie : en pratique on retient souvent environ 340 m/s (en réalité plutôt ~343 m/s à 20 °C ; la valeur exacte dépend un peu de la température et de l’humidité).
À l’échelle de l’Univers, 340 m/s, c’est énorme pour un être humain (comme un avion de ligne). À l’échelle d’un petit robot à quelques dizaines de centimètres d’un obstacle, c’est au contraire assez lent — et heureusement :
Formule (aller-retour). Si t est le temps entre l’émission du ping et le retour de l’écho, alors la distance d jusqu’à l’obstacle est :
d = (v_son × t) / 2
Le ÷2 vient du fait que t compte le trajet aller + retour : l’onde parcourt deux fois la distance d.
Exemple d’ordre de grandeur. Pour un obstacle à 34 cm (0,34 m), l’aller-retour représente 0,68 m ; avec v_son ≈ 340 m/s, le délai est de l’ordre de 0,68 / 340 ≈ 0,002 s, soit 2 ms. C’est court pour nous, mais c’est largement suffisant pour une puce électronique — d’où la précision “à quelques centimètres” des capteurs ultrason courants.
Dans cette activité, on ne cherche pas une mesure parfaite au millimètre : on veut surtout détecter un changement (quelque chose est apparu / a bougé).
But : le robot mémorise une distance “de référence” au départ, puis compare en boucle.
Si ça change beaucoup, il crie “intrusion !”.



Pour te laisser le temps de :
reference : la distance “normale” au début.mesure : la distance mesurée maintenant.À créer dans Variables :
| Variable | À quoi elle sert |
|---|---|
reference | Distance de départ (cm) |
mesure | Distance actuelle (cm) |
intrusions | Compteur (pour la version 3.2) |
Programme de base (détection simple) :
reference à la distance ultrason (cm)mesure à la distance ultrason (cm)mesure est très différente de reference alors :
Le capteur peut varier un peu même si personne ne passe.
Donc au lieu de “≠”, utilise un seuil, par exemple 3 cm :
si |mesure - reference| > 3 alors intrusion
Comme ça, un petit “tremblement” de mesure ne déclenche pas l’alarme.
Si tu n’as pas le bloc “valeur absolue”, tu peux faire un test plus simple :
“intrusion simesure > reference + 3OUmesure < reference - 3”.
Le programme de base marche, mais il manque une chose :
combien de fois quelqu’un est passé ?
On va donc :
intrusions,
intrusions à 0intrusionsintrusions sur la matrice LEDAstuce : pour éviter de compter 20 fois la même intrusion (quand quelqu’un reste devant), ajoute un
attendre 1 secondeaprès l’alerte.
Quand le script grandit, il devient difficile à lire.
On va donc ranger les actions dans des “petites fonctions” (dans mBlock : Mes blocs).
But : que le programme principal reste court et clair.

nbr_intrusion pour afficher le compteur même en veille — voir l’encadré ci-dessousintrusions = intrusions + 1Ensuite, dans la boucle, tu fais juste :
nbr_intrusion au bloc “État veille” ? (pédagogie)Pour l’enseignement, j’ai volontairement donné au bloc personnalisé « État veille » un paramètre du type nbr_intrusion, même si ce n’était pas strictement nécessaire.
Dans mBlock / Scratch, la variable intrusions est en général une variable globale : une fois créée dans l’onglet Variables, tout le programme (y compris l’intérieur d’un bloc personnalisé) peut la lire et la modifier sans qu’on ait besoin de la « passer en argument ».
C’est quoi la portée d’une variable ?
En informatique, la portée (ou scope en anglais), c’est l’endroit du programme où une variable existe et est visible.
intrusions quand tu l’as créée comme variable de scène.Donc, pour État veille, on pourrait tout à fait utiliser directement intrusions à l’intérieur du bloc : le compteur serait quand même le bon, grâce à la portée globale.
Alors pourquoi ajouter nbr_intrusion quand même ?
Quand mBlock génère le programme en C (Arduino), on voit souvent ça sous forme de fonctions avec des paramètres. La capture ci-dessous illustre cette idée de portée et la façon dont le bloc personnalisé reçoit nbr_intrusion :

Dernier petit détail : parfois, le compteur s’affiche avec des virgules (ex. 3.00).
Pour un compteur d’intrusions, on veut un nombre entier : 1, 2, 3…
Dans beaucoup de versions de mBlock, si tu utilises “ajouter 1 à intrusions” et que tu l’affiches tel quel, ça s’affiche déjà bien.
Si, chez toi, ça affiche en décimal, tu peux corriger côté code.
intrusions de float à intÀ faire avec un adulte / un prof si tu es jeune : on touche au code “texte”.
Tu peux télécharger les programmes mBlock de l’activité :
programme_detection_basique.mblockprogramme_detection_compteur intrusion.mblockprogramme_detection_compteur_intrusion_sous_programme.mblockSi tu préfères le reconstruire à la main, tu peux aussi suivre :
Voir aussi : Programmes mBlock.
Si tu veux progresser, voici une progression “facile” :
Et si tu veux aller plus loin en programmation, Scratch/mBlock sont une très bonne porte d’entrée : le plus important, c’est de comprendre variables + conditions + boucles.
Pour la classe : nos 10 projets mBot gratuits proposent une progression complète en 10 séances, avec fiches élèves et corrigés en PDF.
Vous hésitez entre deux modèles ou vous avez besoin d'aide sur un montage ? Écrivez-nous, nous vous répondons rapidement par e-mail.