Kart autonome

Bonjour à toutes et à tous et bienvenue !

Nous sommes quatre étudiants de PEIP2 à Polytech Angers et nous avons décidé, dans le cadre de notre formation de réaliser un kart autonome. Passionnés de mécanique et de programmation, vous êtes au bon endroit!

Introduction:

Avant de vous parler de ce que nous avons fait, il est important de vous expliquer ce qui a été réalisé par nos prédécesseurs. En effet, nous avons repris le projet des élèves de l’année passée. Ces derniers avaient réalisé un travail monumental en fabriquant à l’aide de pièces de récupération un châssis et une direction. C’est donc avec cette solide base que nous avons commencé notre projet. Cependant au vu de la complexité de notre tâche, nous nous sommes divisés cette dernière en plusieurs sous-parties : le frein, la direction, l’automatisation, la motorisation, et enfin, la carrosserie.

Le frein:

Le frein, élément indispensable sur tous les véhicules, est l’une des premières choses sur laquelle nous nous sommes attelés. De fait, l’année passée, les étudiants avaient dû, par manque de temps, se contenter d’un frein à main seulement sur la roue arrière droite. Ainsi nous avons décidé de réaliser un tout nouveau système de freinage, cette fois-ci à la pédale.

Etape 1: Assemblage des roues arrières

A l’origine, la raison pour laquelle le véhicule ne freinait que de la roue arrière droite provenait du fait que les deux roues n’étaient pas reliées. Cependant, on ne pouvait pas simplement effectuer l’assemblage à l’aide d’une tige en métal que l’on soudrait. En effet, cela aurait empêché nos suspensions de réaliser leur fonction, ou cette tige se serait cassée en cas d’efforts trop importants. Ainsi nous avons envisagé une solution technique nécessitant deux cardans, un arbre cannelé et une douille lisse nervurée (respectivement ci-dessous).

Les deux cardans nous permettent de gérer la différence de hauteur entre les roues. L’arbre et la douille permettent quant à eux de transmettre la rotation tout en gérant la variation de l’écart entre les roues. Effectivement, étant donné que nous avons un triangle de suspension à l’arrière, plus il y a du poids dans le véhicule, plus les roues s’écartent.

Etape 2: Mise en place du système

Une fois ce problème de roues réglé, nous avons réfléchi à un système de freinage à la pédale. Pour réaliser celui-ci, nous nous sommes servis d’un câble de frein de vélo, de plaques métalliques, d’une pédale et d’un frein à disque provenant d’un motoculteur. De cette manière, nous avons attaché le câble au frein puis nous l’avons tendu et caché à l’aide d’une plaque métallique. Enfin, nous l’avons attaché à la pédale. Cette dernière est fixée sur une tige métallique traversant perpendiculairement le kart dans la largeur. Grâce à la tension importante du câble, la pédale se relève d’elle-même. Cependant la course de celle-ci est faible.

Direction :

En parallèle, nous nous sommes attaqués à l’automatisation de la direction. Nos prédécesseurs avaient pour projet de gérer la direction avec un capteur relié à une carte Arduino pour contrôler un moteur électrique.

Nous pensions que cela aurait été assez rapide. Finalement, après avoir raccordé le moteur au volant de notre Kart, nous nous sommes rendus compte que le couple du moteur électrique était trop faible. Ainsi, nous avons décidé de concevoir un réducteur pour réduire la vitesse et augmenter le couple. Ne disposant que d’imprimantes 3D et d’une découpeuse laser, nous avons dû concevoir ce réducteur en plastique, en bois et en plexiglass. Après un long travail de CAO, nous nous sommes attelés à la réalisation du réducteur.

Après l’avoir terminé, nous l’avons testé sur notre kart. Malheureusement, un problème important est survenu: le moteur arrivait à bien faire tourner les arbres du réducteur, et par conséquent le volant. Cependant, quand nous tournions le volant, cela cassait le dernier arbre du réducteur dû à une différence de couple entre le moteur et le réducteur. Ainsi, nous avons décidé de concevoir un différentiel que nous placerions entre le moteur électrique et le réducteur. De cette manière, le moteur électrique entraîne le différentiel qui lui-même entraîne le réducteur, mais à l’inverse quand le volant tourne, il entraine le réducteur et arrive au différentiel qui continue de tourner mais n’entraine pas le moteur.

Pour finir, nous devions faire un bâti reliant le moteur, le différentiel et le réducteur. Cependant, l’impression de ce dernier a rencontré un problème. Ainsi, nous avons dû nous résoudre à faire le bâti en bois ce qui nous a pris plus de temps et de place. Enfin, nous avons réussi à coder un programme pour faire tourner le moteur en fonction de la direction demandé.

Automatisation:

A l’origine, l’objectif était d’automatiser à la fois la direction et le freinage. Malheureusement, par manque de temps, nous nous sommes rapidement concentrés sur la direction. Pour ce faire, nous avons utilisé un capteur lidar (capteur laser) et plus particulièrement le YDLIDAR G2 (image ci-dessus) qui permet de détecter, à 360 degrés, des obstacles allant de 0,12 à 12 mètres. Ce capteur, réputé simple d’utilisation, peut fonctionner sous Arduino. Ainsi, une fois la carte d’acquisition correctement reliée à notre appareil, il ne nous restait plus qu’à écrire le programme.

Dans un premier temps, nous avons défini ce que concrètement nous devions faire. De cette manière, nous avons déterminé qu’il fallait que le véhicule tourne en cas d’obstacle sur sa route et que dépendamment de la position de celui-ci (à droite ou à gauche), le kart choisisse le côté le plus optimal. Aussi, en cas de présence de plusieurs obstacles, il évite l’entrave la plus proche.

Une fois ceci bien défini, nous avons retranscrit cela en langage Arduino. Ainsi, nous avons demandé au capteur de réaliser plusieurs tours (afin d’avoir une meilleure précision) à l’aide de la condition: if (old_angle>angle). En effet, celle-ci signifie que la mesure de l’angle précèdent est supérieur à celle de l’angle du point actuellement étudié. Ce qui implique que le capteur a fait un tour complet. Des calculs de trigonométrie nous ont permis de localiser les différents obstacles. De cette manière, nous sommes parvenus à récupérer et à analyser les données du capteur.

Pour les plus téméraires d’entre vous, voici le code:

void loop() {
  


    if (lidar.waitScanDot() == RESULT_OK) {   //(lidar.waitScanDot() == RESULT_OK)
      const scanPoint &p = lidar.getCurrentScanPoint(); //Recuperation du point

      float angle = float(p.angle);        //Renommer la variable
      float distance = float(p.distance);  //Renommer la variable
      
      
      if (angle < old_angle){   // si le capteur a fait un tour complet
        nb_tour +=1;            // incrementation du nb de tours 
        
          if (nb_tour==30){     // nb tours au bout duquel on prend une décision
            nb_tour =0;         // reinitialisation de la variable 
            if(obs_droite == 1){
                printf("Tourner gauche\n");
                digitalWrite(11,LOW);         // activation des sorties digitales pour tourner à gauche
                digitalWrite(10,HIGH);        // 
                digitalWrite(12,LOW);         //
                distance_obs = 6000;          // réinitialise la distance de l'obs en dehors de notre zone de détection
                 obs_gauche = 0;              //Reinitialisation des variables obs
                 obs_droite = 0;              //

            }else if(obs_gauche == 1){
                printf("Tourner droite\n");
                digitalWrite(10,LOW);         // activation des sorties digitales pour tourner à droite
                digitalWrite(11,HIGH);        //
                digitalWrite(12,LOW);         //
                distance_obs = 6000;          // réinitialise la distance de l'obs en dehors de notre zone de détection
                printf("\n");
                 obs_gauche = 0;              //Reinitialisation des variables obs
                 obs_droite = 0;              //
            }else {
                printf("Avancer\n");
                digitalWrite(10,LOW);         // activation des sorties digitales pour avancer
                digitalWrite(11,LOW);         //
                digitalWrite(12,HIGH);        //
            }
            }

          

         
      }else{

        if (angle <= 258 && angle > 180){              // tourner à gauche 
          x = distance * cos (angle * PI/180 - PI);       // coordonnées de l'obs en mm 
          l = distance * sin (angle * PI/180 - PI);       // 
          if ( x<= 5000 && x >= 120 && l <= 555 && distance_obs>distance){  //condition pour que l'obs appartienne à la zone de détection et que l'obs détecté soit le plus proche
              distance_obs=distance;                   //nouvelle distance obs
              obs_gauche = 0;                          
              obs_droite = 1;

            }
          }
      }

        if (angle >= 102 && angle <= 180){        //tourner à droite
          l = distance * cos (angle* PI/180  - PI/2);        // coordonnées de l'obs en mm
          x = distance * sin (angle* PI/180  - PI/2);        // 
            if ( x<= 5000 && x >= 120 && l <= 555 && distance_obs>distance){  //condition pour que l'obs appartienne à la zone de détection et que l'obs détecté soit le plus proche
             
              distance_obs=distance;              //nouvelle distance obs     
              obs_gauche = 1;
              obs_droite = 0;
            
            }
      }
      old_angle = angle;                          //Mise a jour de la valeur de l'angle

    
    }else {
      // printf("Fail to get scan point!\n");
      delay(1);
    
    }
    
    
  } 

Ensuite, nous nous sommes servis des entrées/sorties digitales de notre carte Arduino afin de transmettre, en fonction des valeurs (0 ou 1) reçues, la commande à effectuer. Cette seconde carte contient le programme permettant de faire tourner le moteur chargé de la rotation du volant. Ce programme était fourni avec le moteur, nous l’avons simplement légèrement ajusté à nos besoins.

Motorisation:

Dans un premier temps, notre but était de fixer le moteur au kart. Nous avons utilisé le même principe que pour un vélo électrique. Nous avons intégré une partie rigide d’un cadre d’un ancien vélo. Puis, l’objectif consistait à relier le moteur au pignon par la chaîne mais aussi de raccorder le pignon à l’arbre. Pour cette dernière étape, nous avons créé une pièce 3D afin d’entraîner tout l’essieu arrière du kart.

Toutefois, lors de la mise en fonctionnement du moteur, nous avons été confrontés à un problème majeur qui a été la perte de puissance dû au soulèvement de l’essieu arrière. Pour essayer de résoudre ce problème, nous avons pensé à la réalisation d’une pièce 3D fixée aux suspensions pour empêcher ce soulèvement. Malheureusement, cette pièce a rompu lors de notre premier test car nous avions sous-estimé la pression soumise par l’essieu arrière sur la pièce. Le temps nous a manqué pour en concevoir une plus solide.

Carrosserie:

La dernière étape de notre projet a consisté à réaliser une carrosserie nous permettant ainsi de rendre notre véhicule plus esthétique. Dans ce but, nous avons utilisé des planches de contreplaqué que nous avons fixé au châssis à l’aide de vis. Nous nous sommes ensuite attelés à peindre notre kart aux couleurs de l’école.

Conclusion:

Nous sommes ravis d’avoir pu travailler sur ce projet à travers lequel nous avons appris énormément sur la mécanique et la programmation mais aussi l’organisation du travail en équipe. Au vu des difficultés rencontrées, nous sommes fiers du travail accompli bien que celui-ci ne soit pas pleinement abouti. Nous souhaitons particulièrement remercier notre tuteur de stage M. Lagrange, ainsi que toutes les personnes qui nous ont aidés sur ce projet: Boris pour toutes nos questions au fablab, M.Guyonneau pour son aide sur la programmation du capteur et enfin M.Bouljroufi pour ses conseils.

Nous vous remercions d’avoir lu notre blog et espérons qu’il vous ait plu.

Hugel Gaspard

Piccin Nathan

Denous Mathis

Genest Ethan

Liens des images utilisées:

Douille lisse nervurée : https://www.disumtec.com/fr/arbre-cannele-din-5463/55130009-douille-lisse-nervuree-din-5463.html

Arbre cannelé: https://www.prodealcenter.fr/arbre-cannele-1-3-8-6-cannelures-longueur-500-mm-1811428.html

Cardan : https://www.euromatik.fr/genouillere-cardan/2737-genouillere-acier-hexagonal-10-mm-hexagonal-10-mm-3663107017257.html

Moteur : https://www.conrad.com/en/p/joy-it-stepper-motor-nema-23-01-nema-23-01-3-nm-4-2-a-shaft-diameter-8-mm-1597326.html

Carte Arduino : https://store.arduino.cc/products/arduino-uno-rev3

Capteur YDLIDAR : https://www.generationrobots.com/fr/403021-telemetre-laser-360-degres-yd-lidar-g2.html

Système de stationnement automatique avec Arduino

Système de stationnement automatique

Bonjour à tous et bienvenue dans notre article.

Nous sommes Maxence, Victor et Margot, trois étudiants en 2ème année du cycle préparatoire intégré de Polytech Angers. Notre projet consiste à concevoir et mettre en place un système de stationnement basé sur Arduino (une maquette d’un parking automatisé). C’est à dire que la barrière s’ouvre et se ferme toute seule quand elle détecte une voiture. Les contraintes sur ce projet étaient de programmer avec Arduino, que le système doive permettre la gestion de stationnement: nombre des places inoccupées qui doivent être affiché sur un écran, la durée de stationnement (en heure) et le prix de stationnement pour chaque voiture garée dans le parking.​

Pourquoi avons nous choisie ce projet ?

Nous avons choisie ce projet car il permettait de toucher à tous les domaines : la conception, la programmation, la réalisation, l’impression 3D, etc. De plus, nous ne savions pas quelle spécialité choisir, donc travailler sur ce projet pouvait nous aider dans notre choix.

Étape de notre projet

  • Analyse fonctionnelle du système et de ses contraintes
  • Recherche de normes sur les vrais parkings
  • Recherche sur la maquette (pièces électroniques et planches)
  • Programmation sur Tinkercad
  • Devis
  • Fabrication pièces CAO
  • Construction maquette

Première phase: la recherche

Nous avons commencé notre projet par une phase de recherche, nous avons mis en commun nos idées sur le meilleur parking et ce que nous voulions faire. Tout d’abord nous avons fait un schéma fonctionnel pieuvre, que vous pouvez retrouver ci dessous. Grâce a cela nous avons eu une vision des contraintes : l’écologie, le prix, l’esthétique, etc.

schéma pieuvre

Ensuite nous avons fait un peu de recherche sur la construction d’un vrai parking, afin de respecter au mieux les normes est les dimensions.

La réflexion sur notre maquette

Après ces recherches, nous avons choisi à quoi notre maquette de parking allait ressembler. Nous voulions que le parking ait un étage, deux places handicapées ainsi que deux places électriques. Il y aura 23 places classiques avec une entrée et sortie différente. Les places libres seront indiqué grâce à deux écrans.

Nous avons fait plusieurs devis et commandes d’électronique et de bois pour la structure du parking.

Programmation sur Arduino

Au début nous avons utilisé le logiciel TINKERCAD avons d’avoir les composant. Ce logiciel est un simulateur Arduino avec les composant et la partie programmation. Cela nous a permis de commencé la programmation.

Ensuite nous avons programmé sur Arduino par l’intermédiaire d’une carte Arduino méga.

Conception support 3D

Nous avons principalement utilisé le logiciel SOLIDWORKS, c’est un logiciel de CAO très utilisé à Polytech. Nous y avons construit tout nos panneaux de signalisation ainsi que la barrière et un boitier pour couvrir les câbles et y mettre l’entrée et la sortie. Le point positif avec l’impression 3D est que l’on pouvait vraiment créer les pièces que nous voulions avec les mesures désirées.

le boitier d’entrée/sortie

Conception de la maquette

Une fois toutes nos planches reçues, nous avons commencé la construction de la maquette.

La première étape était de tracer toutes les places et passages sur les planches au crayon de bois. Cela nous a permis de voir comment rendait le parking et de faire quelque changement comme agrandir l’espace pour les barrières. Nous avons fait cela sur les deux planches.

première image de la maquette

Ensuite nous avons dimensionné et coupé les poteaux permettant de surélever le parking et de créer l’étage.

Après nous avons installé les capteurs et écrans (toutes l’électronique). Nous avons décidé de faire passer tous les fils sous la maquette pour que le rendu soit plus propre. Donc il a fallu faire plusieurs trous pour faire passer les capteurs.

En parallèle, nous avons imprimé les panneaux 3D ainsi que les barrières de protection et les barrières d’ouverture. Nous avons aussi créé des cartes de différentes couleurs avec des planches de bois et des stickers que nous avons conçu. Ces cartes vont permettre d’être reconnues par les capteurs couleur à l’entrée et à la sortie du parking, cela permet de simuler les cartes d’abonnement d’un parking réel.

Pour finir, nous avons tout fixer : les piliers sur l’étage, panneaux, barrière et toute la partie électronique, ainsi que repasser au crayon Posca tous les marquages. Notre maquette est prête ! Maintenant c’est le moment de tester. Nous vous avons mis ci-dessous une vidéo du fonctionnement complète de la maquette.

vidéo du fonctionnement du capteur couleur

Merci à vous !!!