Barrière de parking automatique
Un servomoteur lève et baisse une petite barrière. Appuie sur le bouton (ou approche de moins de 10 cm pour la version capteur), elle s'ouvre. Comme à l'entrée d'un parking.
Tu peux fabriquer la barrière en carton ou en bois. La version « avec carte magnétique » nécessite un module RFID (à ajouter en option).
SunuMake Robotique
Donne vie à des machines qui bougent — 7 composants inclus.
Les étapes
- 1
Matériel
1 servomoteur SG90, 1 bouton poussoir, un bâton de glace ou un bout de carton rigide pour faire la barrière, 5 fils.
- 2
Fabrique la barrière
Fixe le bâton ou le morceau de carton sur la palette blanche du servo (un peu de scotch double-face suffit). Le servo peut tourner sur 180° — la barrière sera à 0° (baissée) et à 90° (levée).
- 3
Câble le servo
Le servo a 3 fils. Marron (ou noir) → GND. Rouge → 5 V. Orange (ou jaune) → broche 9 de l'Arduino. ⚠️ Si tu fais tourner plusieurs servos, alimente-les avec une source externe — un seul servo sur le 5 V de l'Arduino est OK, mais à plusieurs ça redémarre la carte.
- 4
Câble le bouton
Bouton entre la broche 2 et GND. On utilise `INPUT_PULLUP` dans le code, comme pour la LED+bouton.
- 5
Téléverse, appuie, et regarde
Téléverse. Le servo doit aller en position « barrière baissée ». Appuie sur le bouton : la barrière se lève, attend 3 secondes (le temps qu'un véhicule passe), puis se rebaisse toute seule.
Le programme à téléverser
Copie ce code dans l'IDE Arduino, branche ta carte en USB et clique sur le bouton « Téléverser » (la flèche en haut à gauche).
// Barrière de parking — servo sur la broche 9, bouton sur la 2#include <Servo.h>Servo barriere;const int BOUTON = 2;const int POS_BAS = 0; // angle barrière baisséeconst int POS_HAUT = 90; // angle barrière levéevoid setup() { barriere.attach(9); pinMode(BOUTON, INPUT_PULLUP); barriere.write(POS_BAS); // barrière baissée au démarrage}void loop() { if (digitalRead(BOUTON) == LOW) { // bouton pressé barriere.write(POS_HAUT); delay(3000); // laisse 3 secondes pour passer barriere.write(POS_BAS); delay(500); // anti-rebond simple }}Comment ça marche ?
Un servomoteur est un moteur intelligent : il sait se positionner précisément à un angle donné (de 0° à 180°) et y rester. À l'intérieur, il y a un petit moteur, un système d'engrenages réducteurs, et un capteur de position relié à une électronique d'asservissement. Tout ça dans un boîtier 23 × 12 × 22 mm.
La bibliothèque Servo.h te cache toute la complexité du signal qu'il faut envoyer (du PWM avec un timing précis toutes les 20 ms). Tu écris juste barriere.write(90) et c'est fait.
Pourquoi delay(500) à la fin du if ? C'est un anti-rebond très basique : sans ça, si l'utilisateur garde le bouton appuyé, la barrière monterait, descendrait, remonterait, etc. en boucle. Les 500 ms laissent le temps de relâcher.