Dans ce projet, nous allons réaliser un barrière automatique à l’aide d’un capteur infrarouge et d’un servomoteur qui seront gérés par Arduino.
Objectif
A l’aide d’un programme Arduino, nous allons faire en sorte que la barrière automatique se lève au passage d’un objet et se baisse lorsque le passage est dégagé.
Matériel
- Ordinateur
- Arduino Nano
- Nano Expansion Shield
- Capteur infrarouge GP2Y0A21
- Câble USB A Mâle/ USB Mini B mâle
Installation du logiciel Arduino
Si ce n’est pas fait, veillez à installer le logiciel Arduino sur votre ordinateur en suivant ce tutoriel. Lorsque le logiciel est installé, vous pouvez vérifier que la carte Arduino est bien reconnue par l’ordinateur.
Téléverser un code dans l’Arduino
Nous allons à présent vérifier que nous pouvons téléverser un code dans l’Arduino Nano.
Pour cela, ouvrez un nouveau fichier Arduino.
void setup() { // put your setup code here, to run once: } void loop() { // put your main code here, to run repeatedly: }
Dans le menu « Outils », veuillez sélectionner le type de carte, le processeur et le port correspondant à votre carte.
Dans ce projet, nous utilisons une carte Nano compatible Arduino utilisant le driver CH340 et qui utilise l’ancien Bootloader.
Nous sélectionnons donc « Arduino Nano », processeur: « Old Bootloader » et le port utilisé. Ici, « COM10 »
Vous pouvez ensuite cliquer sur la flèche (->) en haut à gauche ou dans le menu « Croquis>Téléverser » pour charger le code sur la carte. Si le logiciel affiche « Téléversement terminé », c’est que tout fonctionne correctement.
Schéma
Dans ce projet nous allons brancher le capteur infrarouge sur la broche Analogique A0 et le servomoteur sur la broche 3. Comme nous utilisons un shield d’expansion, le branchage se fait facilement. Vérifier bien le sens des broches pour ne pas endommager le matériel (SVG, S-signal, V- tension 5V, G- masse)
Code pour tester le capteur
Afin de déterminer la distance de l’objet au capteur à laquelle la barrière se lève, nous allons tester le fonctionnement du capteur infrarouge. Chargez le code suivant, puis passez la main devant le capteur afin de définir les valeurs seuils de déclenchement. Modifiez les valeurs DETECT_VAL et CLEAR_VAL pour obtenir le comportement désiré.
//Parameters #define DETECT_VAL 300 #define CLEAR_VAL 200 //Constants const int gp2y0a21Pin = A0; //Variables int gp2y0a21Val = 0; bool object=false,oldStatus=true; String comment =""; void setup() { //Init Serial USB Serial.begin(9600); Serial.println(F("Initialize System")); //Init ditance ir pinMode(gp2y0a21Pin, INPUT); } void loop() { readSensor(); delay(500); } void readSensor() { /* function testGP2Y0A21 */ ////Read distance sensor gp2y0a21Val = analogRead(gp2y0a21Pin); if (gp2y0a21Val > DETECT_VAL) { object=true; comment="Obstacle detected"; } if(gp2y0a21Val < CLEAR_VAL){ object=false; comment="No obstacle"; } if(oldStatus!=object){ Serial.print(F("Valeur du capteur : "));Serial.print(gp2y0a21Val); Serial.print(F(" -> "));Serial.println(comment); } oldStatus=object; }
Code pour tester le servomoteur
Afin de connaître les positions haute et basse de la barrière, nous allons tester le servomoteur. Nous allons envoyer deux commandes au servomoteur l’une représentant la position « levé » et l’autre la position « baissé ». Modifiez les valeurs HAUT et BAS en fonction de la position réelle observée.
//Librairie #include <Servo.h> //Déclaration des constantes #define UPDATE_TIME 15 #define HAUT 180 #define BAS 90 //Déclaration des paramètres int servoPin = 3; //Déclaration des variables Servo myServo; // création d'un objet Servo int pos=BAS; // variable contenant la position du servomoteur void setup() { Serial.begin(9600); myServo.attach(servoPin); } void loop() { for (pos = BAS; pos <= HAUT; pos += 1) { myServo.write(pos); delay(UPDATE_TIME); } Serial.print(F("Servo position HAUT : "));Serial.println(HAUT); delay(500); for (pos = HAUT; pos >= BAS; pos -= 1) { myServo.write(pos); delay(UPDATE_TIME); } Serial.print(F("Servo position BAS : "));Serial.println(BAS); delay(500); }
Code de la barrière automatique
Nous allons combiner les deux codes et apporter quelques modifications afin d’obtenir le comportement désiré. Nous allons créer deux fonctions fenceDown() et fenceUp(). L’une pour baisser la barrière et l’autre pour la lever. Lorsque la variable « objet » (obstacle détecté) est à true (1-Vrai) nous allons appeler la fonction fenceUp() et lorsqu’elle passe à false(0-Faux) nous allons appeler fenceDown() afin de baisser la barrière.
//Librairie #include <Servo.h> //Parameters #define DETECT_VAL 300 #define CLEAR_VAL 200 #define UPDATE_TIME 15 #define HAUT 180 #define BAS 90 //Constants const int gp2y0a21Pin = A0; const int servoPin = 3; //Variables int gp2y0a21Val = 0; bool object=false,oldStatus=true; String comment =""; int pos=BAS; // variable contenant la position du servomoteur Servo myServo; // création d'un objet Servo void setup() { //Init Serial USB Serial.begin(9600); Serial.println(F("Initialize System")); pinMode(gp2y0a21Pin, INPUT); myServo.attach(servoPin); } void loop() { readSensor(); } void readSensor() { /* function testGP2Y0A21 */ ////Read distance sensor gp2y0a21Val = analogRead(gp2y0a21Pin); if (gp2y0a21Val > DETECT_VAL) { object=true; comment="Obstacle detected"; } if(gp2y0a21Val < CLEAR_VAL){ object=false; comment="No obstacle"; } if(oldStatus!=object){ Serial.print(F("Valeur du capteur : "));Serial.print(gp2y0a21Val); Serial.print(F(" -> "));Serial.println(comment); if(object==true){ fenceUp(); }else{ fenceDown(); } } oldStatus=object; } void fenceUp(){ for (pos = pos; pos <= HAUT; pos += 1) { myServo.write(pos); delay(UPDATE_TIME); } Serial.print(F("Servo position HAUT : "));Serial.println(HAUT); } void fenceDown(){ for (pos = pos; pos >= BAS; pos -= 1) { myServo.write(pos); delay(UPDATE_TIME); } Serial.print(F("Servo position BAS : "));Serial.println(BAS); }
Prochaines étapes
- Ajouter une sécurité afin que la barrière se relève lorsqu’un objet est présent, même si elle n’a pas finit de se baisser
- Ajouter un feu de circulation à la barrière
- Ajouter un lecteur de carte RFID afin de n’ouvrir la barrière qu’avec le bon badge
Houa, trop cool ce tuto , a quand l’étape à greffer le montage sur un portail coulissant svp merci,