Banc de vision et convoyeur

Banc de vision piloté

Fait par :

  • BOUDAOUDI Aissame
  • ANDERHUBER Tom

Objectif

L’objectif de ce projet est de réaliser un banc de vision et convoyeur pour pouvoir scanner des pièces en 3D et repérer les défauts existants. En utilisant un tapis avec un moteur pas à pas, des boutons pour gérer le tapis, des rubans de leds, un capteur de détection de pièces, une caméra et finalement un arduino UNO qui va nous permettre de lier tous ces éléments afin de les faire fonctionner.

Fonctionnement

Une caméra avec leds sur un banc de vision

Nous plaçons une pièce sur le convoyeur, cette pièce est éclairer par des leds afin d’avoir un reflet, une fois que la pièce est détecté par le capteur infrarouge, la caméra de vision prend une photo et analyse la pièce afin de vérifier la pièce et ainsi voir si cette dernière est conforme (présence d’un défaut ou non)

Afin de programmer tout cela nous utiliseront un Arduino UNO, ce dernier vas nous permettre de faire fonctionner les boutons poussoirs, le capteur infrarouge, le moteur du banc de vision et les bandeaux leds

Nous allons également utiliser anaconda afin de réaliser une liaison série qui vas nous permettre de contrôler le programme à distance via un ordinateur.

Nous avons décidé d’utiliser deux boutons et un switch.

Un bouton va gérer la fonction marche/arrêt du tapis, un deuxième bouton est pour l’instant libre, il ne fait rien, on l’a installé pour pouvoir le coder et programmer. Le switch va gérer le sens du tapis, en changeant la position du Switch on change le sens de rotation du tapis.

Partie électrique

Schéma de câblage

(Fichier disponible sur la plateforme ED campus )

  • On peut voir qu’on utilise un différentielle afin de protéger l’installation d’un défaut de tension, et couper la tension en cas de problème.

En ce qui concerne le matériel utilisé :

  • Arduino UNO
  • COnvertisseur 230V en 24V, 12V, et 5V
  • Différentielle merlin gerin multi 9 DPN vigi
  • Carte de commande Micrositch driver
  • Deux bouton, un switch
  • Un capteur de détection de pièces
  • Un Tapis avec moteur pas à pas

Plaque électronique

Partie code

On a fourni la code complet dans un fichier « ino » sur la plateforme EDCampus

Pour la partie code du projet, on a utilisé le logiciel arduino , et le langage C++ pour pouvoir donner des instructions bien précises à l’arduino et pouvoir le piloter aussi à distance en utilisant un ordinateur.

Le point de plus qui change cette année en comparant les deux projets celui de l’année dernière et l’actuel en tout ce qui est code c’est l’utilisation du TIMER, on va utiliser un Timer pour pouvoir gérer le tapis au lieu de le faire rouler avec des pas et des temporisations qui n’est pas pratique.

Bibliothèques

Pour pouvoir gérer les Leds, on utilisera une bibliothèque spécifique aux types des Leds utilisés « Adafruit_Neopixel » qu’on va intégrer dans notre code: #include <Adafruit_Neopixel.h>.

Ensuite On va créer quatre variables qu’on va utiliser pour configurer cette bibliothèque, on a choisi LED1_COUNT, LED1_PIN, LED2_COUNT et LED2_PIN, dont le rôle est de choisir un pin pour chaque ruban de leds et une autre qui va compter les leds de chaque ruban. On choisit après chaque ruban et on affecte ces variables au ruban.

//Bilbliothèque des Leds
Adafruit_NeoPixel strip1 = Adafruit_NeoPixel(LED1_COUNT, LED1_PIN, NEO_GRB + NEO_KHZ800);
Adafruit_NeoPixel strip2 = Adafruit_NeoPixel(LED2_COUNT, LED2_PIN, NEO_GRB + NEO_KHZ800);

Définition des Pins

On a définit les Pins de l’Arduino comme suit :

  • Pin 1 du Switch : 7
  • Pin 2 du Switch : 8
  • Pin du premier bouton : 2
  • Pin du deuxième bouton : 13
  • Pin du timer : 9
  • Pin qui gère le sens du tapis : 5
  • Pin pour alimenter le tapis : 6
  • Pin du premier ruban des leds : 3
  • Pin du deuxième ruban des leds : 4
  • Premier Pin de la caméra : 10
  • Deuxième Pin de la caméra : 11
//Définition des Pins
# define Switch_1 7
# define Switch_2 8
# define Entree_Bouton 2
# define Entree_Bouton2 13
# define OC1a_Timer 9
# define Sens_Tapis 5
# define Alim_Tapis 6

//led pin
#define LED1_PIN  3
#define LED1_COUNT  25
#define LED2_PIN  4
#define LED2_COUNT  25

//camera pins
#define CAM1_PIN 10
#define CAM2_PIN 11

Déclaration des varaiables globales

Pour pouvoir gérer les Leds on a créé les variables suivantes : br1, br2, r1, r2, g1, g2, b1, b2, rg1_1, rg1_2, rg2_1, rg2_2. PB1_state et PB2_state pour savoir si le bouton est appuyé ou relâché.

numChars est une variable qui va nous servir dans la liaison série pour pouvoir envoyer ou recevoir un nombre limité de caractères, et receivedChars est un tableau qui va contenir les caractères envoyés ou reçu. newData est juste un booléen qui est égal soit à 0 ou 1 et qui dépend de la réception du caractère (reçu ou non). Par défaut on lu affecte la valeur 0 ( ou False.)

Ensuite passons aux variables qu’on va utiliser pour gérer nos boutons :

– lastbottonstat est la variable qui va nous informer du dernier événement appliqué sur le bouton

– currentbottonstat est l’état actuel du bouton

–  tapistat est l’état du tapis s’il est en marche ou pas.

//Déclaration variables globales

//vriables leds
int br1, br2, r1, r2, g1, g2, b1, b2, rg1_1, rg1_2, rg2_1, rg2_2;
 
int PB1_state, PB2_state; //variables boutons


const byte numChars = 200;
char receivedChars[numChars];
boolean newData = false;



//variables boutons
bool lastbottonstat=LOW;
bool currentbottonstat=LOW;
bool tapistat=LOW;

On commence notre code finalement en initialiisant la liaison en série, on va choisir une vitesse de 9600 bauds avec un délai de 300 ms, et on va mettre cette inialisation dans la fonction void setup comme suit :

Serial.begin(9600); //Liaison en série
delay(300);

Et juste après, on initialise aussi le TIMER 1 de l’arduino Uno en choisisant une fréquence d’échentillonnage de 16 MHz.

TCCR1B = 0x18; // 0001 1000, Disable Timer Clock 
TCCR1A = 0xA2; // 1010 0010

ICR1 = 1400;
OCR1A = (int) (ICR1 * 0.25);
OCR1B = (int) (ICR1 * 0.50);
TCNT1=0x0;

TCCR1B |= 1; // Prescale=1, Enable Timer Clock

Toujours dans la fonction setup, on passe à l’étape de choix de Pins. Après déclarer et affecter les Pins à des variables précis, on choisit le mode de chaque Pin.

//Choix des Pins
  pinMode(Switch_1,INPUT_PULLUP);
  pinMode(Switch_2,INPUT_PULLUP);
  pinMode(Entree_Bouton,INPUT_PULLUP);
  pinMode(Entree_Bouton2,INPUT_PULLUP);
  pinMode(OC1a_Timer, OUTPUT);  // OC1a
  pinMode(Alim_Tapis,OUTPUT);
  pinMode(Sens_Tapis,OUTPUT);
  digitalWrite(Sens_Tapis,HIGH);
  digitalWrite(Alim_Tapis,LOW);
  digitalWrite(Entree_Bouton,HIGH);
  digitalWrite(Entree_Bouton2,HIGH);
  digitalWrite(Switch_1,HIGH);
  digitalWrite(Switch_2,HIGH);

Ensuite, on configure les leds à une valeur par défaut, pour pouvoir s’activer et afficher au moins une couleur au démarrage et quand on change pas la valeur du degré soir du bleu, rouge ou vert de chaque ruban. les variables sont décrites comme suit:

  • br1/2 est le degré de luminosité des rubans
  • r1/2 est la valeur de la couleur rouge
  • b1/2 est la valeur de la couleur bleu
  • g1/2 est la valeur de la couleur verte
  • rg1-1/2 est le nombre des leds dans chaque ruban
//Configuration des Leds
  br1 = 100;
    r1 = 255;
    g1 = 255;
    b1 = 255;
    rg1_1 = 0;
    rg1_2 = LED1_COUNT-1;
    strip1.begin();
    strip1.show();

    br2 = 100;
    r2 = 255;
    g2 = 255;
    b2 = 255;
    rg2_1 = 0;
    rg2_2 = LED2_COUNT-1;
    strip2.begin();
    strip2.show();


Fonctions utilisés

recvWithStartEndMarkers()

Cette fonction sert à recevoir des caractères en utilisant la liaison en série . Après vérifier qu’il n’y a pas de nouveaux Data qui arrive on recois les caratères et on les place dans notre tableau receivedChar sinon on patiente.

void recvWithStartEndMarkers() {
    static boolean recvInProgress = false;
    static byte ndx = 0;
    char startMarker = '<';
    char endMarker = '>';
    char rc;
 
    while (Serial.available() > 0 && newData == false) {
        rc = Serial.read();

        if (recvInProgress == true) {
            if (rc != endMarker) {
                receivedChars[ndx] = rc;
                ndx++;
                if (ndx >= numChars) {
                    ndx = numChars - 1;
                }
            }
            else {
                receivedChars[ndx] = '\0'; // terminate the string
                recvInProgress = false;
                ndx = 0;
                newData = true;
            }
        }

        else if (rc == startMarker) {
            recvInProgress = true;
        }
    }
}

ProcessNewData()

La fonction ProcessNewData sert à lire le caractères reçus. Si la valeur de newData est égale à 1 on lis les caratère reçus, si c’est

  • « Go » = Le tapis marche
  • « NoGo »: Le tapis s’arrête
  • « RightLeft » : le tapis tourne de droite à gauche
  • « LeftRight » : le tapis tourne au sens inverse de gauche à droite
  • « V » en indiquant un chiffre après: La vitesse du tapis change avec la valeur écrite après la chaîne de carctère V
  • « Led1_Go » : Lance le premier ruban de leds
  • « Led2_Go »: lance le deuxième ruban de leds
void ProcessNewData() {
    if (newData == true) {
    
        //Serial.print("The received data is :: ");
        //Serial.println(receivedChars);

        if (strcmp(receivedChars, "Go") == 0 || strcmp(receivedChars, "NoGo") == 0)
        {
            if (strcmp(receivedChars, "Go") == 0) 
              StartStopMotor(HIGH);
            else
              StartStopMotor(LOW);
        }
        if (strcmp(receivedChars, "RightLeft") == 0 || strcmp(receivedChars, "LeftRight") == 0)
        {
            if (strcmp(receivedChars, "RightLeft") == 0) 
              Direction(HIGH);
            else
              Direction(LOW);
        }
        
//##############
      if (strcmp(receivedChars, "V") == 0)
        {
           ICR1=receivedChars[1]-30*1000+receivedChars[2]-30*100+receivedChars[3]-30*10+receivedChars[4]-30;
           
        }
  

//################
        
        if (strcmp(receivedChars, "Vitesse") == 0)
        {
          Vitesse(ICR1);
        }
        else
        {
          char * pch;
          pch = strtok(receivedChars,",");
          while (pch != NULL)
          {
            
            if(strcmp(pch, "R1") == 0)
            {
              pch = strtok (NULL, ",");
              if (pch != NULL)
              {
                r1 = atoi(pch);
                //strip1.fill(strip1.Color(r1, g1, b1), rg1_1, rg1_2);
              }
            }
  
            else if(strcmp(pch, "R2") == 0)
            {
              pch = strtok (NULL, ",");
              if (pch != NULL)
              {
                r2 = atoi(pch);
                //strip2.fill(strip2.Color(r2, g2, b2), rg2_1, rg2_2);
              }
            }
  
            else if(strcmp(pch, "G1") == 0)
            {
              pch = strtok (NULL, ",");
              if (pch != NULL)
              {
                g1 = atoi(pch);
                //strip1.fill(strip1.Color(r1, g1, b1), rg1_1, rg1_2);
              }
            }
            else if(strcmp(pch, "G2") == 0)
            {
              pch = strtok (NULL, ",");
              if (pch != NULL)
              {
                g2 = atoi(pch);
                //strip2.fill(strip2.Color(r2, g2, b2), rg2_1, rg2_2);
              }
            }
            else if(strcmp(pch, "B1") == 0)
            {
              pch = strtok (NULL, ",");
              if (pch != NULL)
              {
                b1 = atoi(pch);
                //strip1.fill(strip1.Color(r1, g1, b1), rg1_1, rg1_2);
              }
            }
            else if(strcmp(pch, "B2") == 0)
            {
              pch = strtok (NULL, ",");
              if (pch != NULL)
              {
                b2 = atoi(pch);
                //strip2.fill(strip2.Color(r2, g2, b2), rg2_1, rg2_2);
              }
            }
            else if(strcmp(pch, "Br1") == 0)
            {
              pch = strtok (NULL, ",");
              if (pch != NULL)
              {
                br1 = atoi(pch);
                strip1.setBrightness(br1);
                //strip1.fill(strip1.Color(r1, g1, b1), rg1_1, rg1_2);
              }
            }
            else if(strcmp(pch, "Br2") == 0)
            {
              pch = strtok (NULL, ",");
              if (pch != NULL)
              {
                br2 = atoi(pch);
                strip2.setBrightness(br2);
                //strip2.fill(strip2.Color(r2, g2, b2), rg2_1, rg2_2);
              }
            }
            else if(strcmp(pch, "Rg1") == 0)
            {
              pch = strtok (NULL, ",");
              if (pch != NULL)
              {
                rg1_1 = atoi(pch);
                pch = strtok (NULL, ",");
                if (pch != NULL)
                {
                  rg1_2 = atoi(pch);
                  strip1.fill(strip1.Color(r1, g1, b1), rg1_1, rg1_2);
                }
              }
            }
            else if(strcmp(pch, "Rg2") == 0)
            {
              pch = strtok (NULL, ",");
              if (pch != NULL)
              {
                rg2_1 = atoi(pch);
                pch = strtok (NULL, ",");
                if (pch != NULL)
                {
                  rg2_2 = atoi(pch);
                  strip2.fill(strip2.Color(r2, g2, b2), rg2_1, rg2_2);
                }
              }
            }
            else if(strcmp(pch, "LED1_go") == 0)
            {
              strip1.show();
            }
            else if(strcmp(pch, "LED2_go") == 0)
            {
              strip2.show();
            }
            else if(strcmp(pch, "Sp") == 0)
            {
              pch = strtok (NULL, ",");
              if (pch != NULL)
              {
                Sp = atoi(pch);
              }
            }
            else if(strcmp(pch, "Dr") == 0)
            {
              pch = strtok (NULL, ",");
              if (pch != NULL)
              {
                Dr = atoi(pch);
              }
            }
            else if(strcmp(pch, "NbSteps") == 0)
            {
              pch = strtok (NULL, ",");
              if (pch != NULL)
              {
                NbSteps = atoi(pch);
              }
            }
            else if(strcmp(pch, "Ret") == 0)
            {
              pch = strtok (NULL, ",");
              if (pch != NULL)
              {
                Ret = atoi(pch);
              }
            }
            else if(strcmp(pch, "TrigPas1") == 0)
            {
              pch = strtok (NULL, ",");
              if (pch != NULL)
              {
                TrigSteps1 = atoi(pch);
              }
            }
            else if(strcmp(pch, "TrigPas2") == 0)
            {
              pch = strtok (NULL, ",");
              if (pch != NULL)
              {
                TrigSteps2 = atoi(pch);



                
              }
            }
          
            pch = strtok (NULL, ",");
          }
        }
        
        newData = false; 
    }
}

StartMotor()

StartMotor() est la fonction principale qui lance et arrête le moteur du tapis. En utilisant les variables « currentbottonstat » et « lastbottonstat » on peut savoir si le bouton a été relâché pour pouvoir arrêter, puis faire fonctionner le tapis.

Si l’état actuel du bouton est différent de l’état précédent on alimente le tapis et on le fait tourner sinon on l’arrête et bien sûr après avoir vérifié si le tapis tourne déjà ou pas.

La variable tapistat permet de vérifier si le tapis tourne ou pas, si tapistat est à la valeur HIGH on arrête le tapis sinon on le fait tourner.

void StartMotor(){
     
    //Utilisation du bouton STOP/Marche
    currentbottonstat = digitalRead(Entree_Bouton);
     if (digitalRead(Entree_Bouton) == HIGH){
        if ( currentbottonstat != lastbottonstat )
          {
                if ( currentbottonstat == HIGH )
                {
       
                    if ( tapistat == LOW ) 
                        {
                        digitalWrite(Alim_Tapis, HIGH);
                        tapistat = HIGH;
                        }
                    else          
                    {
                      digitalWrite(Alim_Tapis, LOW);
                      tapistat = LOW;
                     }
                  }
                  else
                  {
                      if ( tapistat == HIGH ) 
                      {
                        digitalWrite(6, LOW);
                        tapistat = LOW;
                      }
                      else          
                      {
                        digitalWrite(6, HIGH);
                        tapistat = HIGH;
                      }
                   }
            }
       }
        if (digitalRead(Entree_Bouton) == LOW) 
        {  
          if ( currentbottonstat != lastbottonstat )
          {
              if ( currentbottonstat == HIGH )
              {
                  if ( tapistat == LOW ) 
                  {
                      digitalWrite(6, HIGH);
                      tapistat = HIGH;
                  }
                  else 
                  {
                      digitalWrite(6, LOW);
                      tapistat = LOW;
                  }
                }
                else
                {
                    if ( tapistat == HIGH ) 
                    {
                      digitalWrite(6, LOW);
                      tapistat = LOW;
                    }
                    else          
                    {
                      digitalWrite(6, HIGH);
                      tapistat = HIGH;
                    }
                 }
            }
          }
    lastbottonstat = currentbottonstat;
          if (digitalRead(Switch_1) == HIGH)
        {
            digitalWrite(Sens_Tapis, LOW);
        }
        if (digitalRead(Switch_2) == HIGH)
        {
            digitalWrite(Sens_Tapis, HIGH);
        }
}

Direction()

void Direction(bool RightLeft){
  digitalWrite(Sens_Tapis, RightLeft);
  }
 

StartStopMotor()

void StartStopMotor(bool GoNoGo){
  digitalWrite(Alim_Tapis, GoNoGo);
}

Vitesse()

void Vitesse(int vit){
  digitalWrite(ICR1, vit);
}

Fonction Principale

void loop() {
    recvWithStartEndMarkers(); //Données données par l'utilisateur
    ProcessNewData(); 
    
    StartMotor();
}

Contrôle du banc de vision avec du Python

Finalement pour pouvoir contrôler le banc de vision en utilisant un ordinateur, il faut être obligatoirement connecté à l’Arduino en utilisant un câble USB, et on va utiliser dy python et le logiciel Anaconda.

On lance Anaconda, et on a utilisé Spyder comme éditeur de texte pour lancer notre programme. Le programme écrit en python nous permet de gérer les leds et le moteur du tapis en utilisant les commandes qu’on a intégré dans nos fonctions. Le bout de code qui nous permet de faire cela est le suivant :

if serial_arduino is not None:

    serial_arduino.write(('<Br1,255,B1,255,G1,255,R1,255,Rg1,0,12>').encode())
    serial_arduino.write(('<LED1_go>').encode())

    serial_arduino.write(('<Br2,255,B2,255,G2,255,R2,255,Rg2,0,12>').encode())
    serial_arduino.write(('<LED2_go>').encode())


    serial_arduino.write(('<Sp,300>').encode())
    sleep(1)
    serial_arduino.write(('<Dr,0>').encode())
    serial_arduino.write(('<NbSteps,50000,TrigSteps1,500,TrigSteps2,500>').encode())

    #sleep(1)
    #serial_arduino.write(('<Go>').encode())
    #sleep(1)
    #erial_arduino.write(('<NbSteps,1500>').encode())
    #sleep(1)

Caméra

Nous utiliseront une Caméra In-Sight D900 ainsi que le logiciel Insight Explorer afin de traiter les images renvoyées par la caméra, et pour pouvoir lire les défauts détectés.

Partie Structure

On un banc qui a été fait par les étudiants de l’année précédante, avec des plaques en couleur noir ayant pour but d’absorber la lumière, et des barres métalliques pour tenir le matériel qui sera installé dessus. On a aussi une plaque de bois bien rigide, qu’on a utilisé pour poser le tapis dessus, et coller l’alimentation, la carte commande et l’arduino au-dessous.

Carte électronique

Ensuite on a le convoyeur qui lui permet de déplacer les pièces , il s’agit d’un tapis mis en rotation par un moteur .

Et la structure qui vas accueillir ces 2 éléments ainsi que les le supports leds.

Cependant la plaque ne dispose pas d’une protection électrique certifié IP2X. On a protégé la partie alimentation avec un boitier qu’on a installé en utilisant des pièces magnétiques pour pouvoir le détacher facilement, mais il faut l’installer définitivement sans pouvoir le détacher, et protéger la partie Arduino et commande.

Résultats

  • Code Fonctionnel
  • Câblage installation terminé
  • Liaison série réussie

Travail à finir

  • Installer la caméra de vision afin de rendre le système opérationnel
  • Mettre en place une protection IP2X afin de protéger l’installation (un boitier fermé que l’on ne peux ouvrir qu’a l’aide d’un outil )
  • Améliorer le câblage de l’installation

Problèmes rencontrés

  • Problème de code parce que c’est a première fois qu’in utilise ce type de logiciel et on code en langage arduino
  • Problème de liaison série et les commandes à envoyer pour pouvoir le contrôler
  • Problème de protection IP2X , parce qu’il y avait pas assez de matériel et de temps pour pouvoir bien protéger le banc
  • Problème de câblage, parce que on a pas prévu des longs câbles pour les leds
  • Prôblème de gestion de temps et d’organisaton

Codes sources


Tracker Solaire

Réalisation d’un système « Tracker Solaire »

Apprenti : Pierre SIMON

Enseignants : Frédéric STEGER – Christophe CUDEL

SYNAPTEC

PROJET GEII : Etudes et Réalisations

Année 2021 – 2022   

Sommaire 

I. Projet de GEII

1. Introduction

2. Présentation du cahier des charges

3. Evolution du projet

a. Choix du matériel

b. Carte de commande moteur et de gestion (autonomie/secteur)

c. Carte principale CI

d. Programmation ZELIO

II. Utilisation et démontage 

III. Conclusion

IV. Annexe

 

I. Projet de GEII 

1.     Introduction  

Au courant de mon année 2021-2022, nous avons choisi un projet en Etudes et Réalisations. J’avais choisi le « Tracker Solaire » en binôme avec un second étudiant de génie électrique et deux étudiants de génie mécanique pour la partie mécanique.

Illustration 1 : Coffret électrique

Nous nous intéressons donc à l’implantation d’un coffret (voir illustration 1) électrique comprenant les batteries et la carte de gestion de la motorisation, sur le pilier du panneau solaire.

Illustration 2 : Photorésistance séparées par un T

Pour déterminer la position du soleil, le « Tracker » devait s’orienter grâce à l’information de luminosité transmise par des photorésistances (voir illustration 2) séparées par un T pour une orientation d’angles de 120 degrés chacune. Cependant, de nombreux désavantages pour déterminer la position du Soleil quand la météo ne le permet pas : vérification par temps clair, par temps couvert, exposition au gel, à la pluie, au dépôt de résidus (poussière, mousse, etc…) …

Différentes approches pour vérifier ces problèmes peuvent être mises en place. Dans le cas du temps clair, il faut effectuer une mesure au luxmètre entre les différents niveaux d’éclairement (coin le plus éloigner de la position du Soleil, et le plus proche). Essais avec des tubes pour concentrer le point de mesure suivant les parties du ciel.

Pour ce qui est du cas du temps couvert, effectuer des essais similaires pour déterminer la position du Soleil (épais nuage, brouillard) si elle s’avère déterminable. J’ai donc remarqué une uniformisation de l’intensité lumineuse par temps couvert, ce qui rend l’orientation compliquée pour l’obtention d’un rendement maximal (les photorésistance sont sensibles à l’intensité lumineuse en Lux, et non à la puissance surfacique). Déterminer la puissance surfacique à différents angles d’inclinaisons, lors de ciel voilé, pour contrôler si le tracking avec module logique permet réellement de maintenir un meilleur rendement, comparé au tracking en lecture directe (photorésistances).

Dans le cas du gel des cellules de positionnement, il faut intégrer un chauffage permettant d’éviter de fausser la position par réfraction lumineuse ou perte de précision.

Le problème posé par la pluie peut s’apparenter à celui du gel, une solution similaire s’impose.

Le dépôt de résidus de différentes natures oblige un entretien régulier des cellules de positionnement.

Malheureusement, l’étudiant de génie électrique n’est pas revenu à la seconde alternance. J’ai alors discuté avec mon maître d’apprentissage, pour effectuer mon projet d’entreprise en adéquation avec le projet de GEII. Les professeurs m’avaient dit que le tracker solaire avait été démarré il y a 5 ans, mais que, soit la partie électrique n’était pas faite, soit il s’agissait de la partie mécanique. J’ai commencé à réfléchir à une réalisation utile et ludique d’une maquette entièrement réalisée au sein de mon entreprise : SYNAPTEC.

J’ai utilisé différents logiciel pour réaliser mon projet :

  • Zélio Soft V5.3 pour la programmation du module logique ZELIO
  • Target 3000 pour schémas électronique et CAO
  • Galaad et Percival pour la réalisation des circuits imprimés FAO

2. Présentation du cahier des charges

Après avoir relevé les différents soucis liés au suivi du Soleil en lecture directe (voir illustration 2 de l’introduction), j’ai décidé de prendre un module logique ZELIO de la marque « SCHNEIDER Electric ». En effet, ce module logique intègre un bloque fonction permettant de fournir une orientation AZIMUT et une ELEVATION en fonction des coordonnées GPS du site d’implantation et du fuseau horaire. C’est donc beaucoup plus pratique, peu importe la météo et l’environnement.

Les professeurs d’encadrement du projet en GEII m’ont demandé d’une part, de mettre à l’horizontal le panneau photovoltaïque si le vent devenait violent, ainsi que d’économiser l’énergie du système via un cycle de fonctionnement périodique d’environ 30 min.

Ces deux conditions primordiales m’ont amené à penser un cahier des charges relativement complexe. J’ai réfléchi à comment gérer un réveil uniquement lorsqu’il fait jour puis périodique pendant la journée, ainsi qu’une mise à l’horizontal du système lorsqu’il y a du vent, peu importe s’il fait jour ou nuit. J’en ai conclu que mon module logique seul ne pourrait en aucun cas gérer ces deux gros points. J’avais deux solutions en tête : utilisation d’un microcontrôleur ou création d’une carte électronique. J’ai alors choisi la seconde solution car elle m’a permis de me familiariser avec la logique électronique et les différents logiciels qu’on utilise, pour la machine de gravure de carte électronique.

3.     Evolution du projet

a.       Choix du matériel

Pour le choix et la gestion des orientations, mon système a besoin de précision pour le positionnement des moteurs sur les axes AZIMUT et ELEVATION je me suis donc tourné vers une extension SR3XT43BD car elle possède 2 entrées analogiques 10 Bits (soit 1024 points) contrairement aux entrées analogiques classiques qui ne comprennent que 8 Bits (256 points).

Pour le module logique ZELIO (voir illustration 3), je me suis tourné vers le SR3B262BD car il possède des sorties transistorisées. Ces sorties sont utiles pour la rapidité d’exécution et de fermeture du contact qui commande la marche des moteurs.

Le module logique SR3B262BD fonctionne sous 24V, il possède 10 entrées et 10 sorties ToR (24V) + 6 entrées analogiques 8 Bits (0-10V) :

5 entrées ToR :

  • Un fin de course sur l’orientation AZIMUT (position NORD)
  • Un fin de course sur l’orientation ELEVATION (position ARRIERE)
  • Un fin de course sur l’orientation ELEVATION (position AVANT/RANGEMENT)
  • Une entrée mode TEMPETE (envoyé depuis une carte externe CI)
  • Une entrée mode REGLAGE (définis par un interrupteur)

3 entrées analogiques 8 Bits (0 à 255 points) :

  • Courant moteur azimut (gérer le blocage moteur envoyé depuis carte externe CI)
  • Courant moteur élévation (gérer le blocage moteur envoyé depuis carte externe CI)
  • Ensoleillement (envoyé depuis carte externe CI)

5 sorties ToR :

  • Grande vitesse
  • Marche moteur AZIMUT
  • Inversion moteur AZIMUT
  • Marche moteur ELEVATION
  • Inversion moteur ELEVATION
  • Défaut(s)
  • Ordre de SOMMEIL (en fin de cycle)

Le module logique possède un écran, pratique pour les messages de défauts, ainsi que 4 boutons programmables. L’extension analogique 2 entrées analogiques 10 Bits et 2 sorties analogiques 10 Bits (0-10V) :

2 entrées analogiques 10 Bits :

  • Recopie potentiomètre AZIMUT (envoyé depuis carte externe CI)
  • Recopie potentiomètre ELEVATION (envoyé depuis carte externe CI)

 Illustration 3 : Module logique Zélio + extension et alimentation 

Pour la maquette, j’ai fait le choix d’utiliser 6 cellules photoélectriques d’une tension de 6V chacune, montée sur le système pour me délivrer une tension de 12V et d’une puissance totale de 3 Watt (nominales). Une batterie de 12V et de 2.1 Ah (mon système au repos consomme 26 mA). Deux moteurs de 12V et 25 mA en fonctionnement normal. Une alimentation 230V~/24V= et de 1.2 A, avec un disjoncteur de 2A courbe C pour le branchement sur secteur. Pour la position, j’ai deux potentiomètres de 5 kOhms, et une photorésistance pour le réveil journalier.

b. Carte de commande moteur et de gestion (autonomie/secteur)

SYNAPTEC a acquis au courant de l’année 2020 une machine d’usinage pour la réalisation de carte électronique. J’ai alors pu profiter du nouveau système l’année dernière avec mon ancien projet. Cette année, je me suis attelé à une panoplie de carte électronique pour ce projet notamment celle permettant de gérer l’orientation du système sur deux axes et de gérer entre l’alimentation par secteur, ou l’alimentation par batterie (cellule photovoltaïque) en autonomie.

INTERFACE DE COMMANDE MOTEUR + GESTION ALIMENTATION : (voir annexe)

Illustration 4 : carte électronique.

Interface de commande des moteurs : Elle possède 8 bornes en bas de l’illustration 4 et 5 qui servent à l’alimentation en grande vitesse (12V), petite vitesse (4.5V). Les commandes du module logique : grande vitesse, marche azimut, inversion azimut, marche élévation et inversion élévation. La dernière borne c’est le 0V commun à tout le système.

Illustration 5 : Circuit imprimé gestion moteur/alim.

Les commandes de marche des moteurs actionnent des optocoupleurs prévus pour moduler le signal à l’approche du point, ou bien de le hacher, augmentant ainsi la précision et la vitesse d’exécution du système. Tout ceci est géré par le module logique et les fameuses sorties transistorisées.

En sortie, comme montré sur la carte imprimée (illustration 5) en bas à gauche, la carte actionne les moteurs d’élévations et d’azimut avec l’aide des sortie +/- ME et +/-MA.

Les sorties +M1 et 0V M1 permettent de mesurer le courant moteur qui est envoyé vers la carte principale, puis vers le module logique. Idem pour les sorties +M2 et 0V M2.

CIE et CIA sont les commandes d’inversion pour la marche moteur.

Sur l’illustration 5, nous pouvons observer en haut la gestion de l’alimentation entre secteur et autonomie : en effet, lorsqu’il y a de la tension (24V) aux bornes du 0V et du +24V, les 3 relais s’enclenche, mon système se retrouve alimenté par l’alimentation secteur 230V/24V. cependant, dans le cas contraire, les système est alimenté en 12V par la batterie. Un problème se pose, mon module logique ne fonctionne qu’en 24V. Au repos, les contacts des relais aiguillent le 12V des batterie vers un convertisseur externe à la carte (12V/24V) et le 24V est envoyé sur le ZELIO, lui permettant de continuer à fonctionner en autonomie. Voici pourquoi il y a un système de gestion d’alimentation.

Quand nous sommes sur secteur, la production des panneaux solaires est aiguillée sur la sortie E10 3W, pour observer sur une ampoule l’intensité de production (il s’agit d’une maquette). Lorsque nous sommes en autonomie, la production d’énergie des cellules est déviée vers la batterie.

c. Carte principale CI

TRACKER SOLAIRE : DESCRIPTIF DE LA CARTE ET SES FONCTIONS. (Voir annexe, pages 31 et 32)

Illustration 6 : Carte principal CI.

Tout d’abord, l’existence de cette carte réside en 2 points : la gestion du mode tempête et le réveil périodique durant la journée. En effet, cela ne peut être géré par le module logique, c’est donc via une pléiade de composants que j’ai pu concevoir un système répondant au cahier des charges (illustration 6).

Illustration 7 : Circuit imprimé principal CI.

Dans un premier temps, l’orientation des potentiomètres, la gestion du courant moteurs et l’ensoleillement via la photorésistance sont amplifiés via des amplificateurs opérationnels. J’ai pu appliquer certaines notions vues en cours et me perfectionner sur l’amplification de signaux mais également sur la gestion de seuil comme pour l’ensoleillement. Une fois amplifié, l’ensoleillement entre à nouveau dans un amplificateur opérationnel mais pour y être comparé à un seuil (environ 1000 Lux). Ce seuil a pour effet de m’indiquer, sans pour autant être perturbé par la moindre petite lumière durant la nuit, quand est-ce qu’il fait jour.

Les autres signaux simplement amplifiés tels que le courant de chaque moteurs est envoyé sur mes entrées analogiques 8 Bits du module logique, pour y être traiter. Il est vrai que l’amplification de mes signaux n’est pas présente juste pour appliquer des notions vues en cours, mais également car le signal entrant directement sur le ZELIO était trop faible…

Pour ce qui est de la gestion des potentiomètres, l’AZIMUT est géré vis-à-vis la résolution maximal : 0 à 10V est égal à 0 à 1023 points dans mon programme et correspond de 0 à 360 degrés de rotation. Ayant pour origine de la mesure le NORD (0 et 360 = NORD), 90° = EST, 180°=SUD et 240°=OUEST. Mes potentiomètres ont une plage de 0 à 340° équivalent à 0 à 5kOhms (plage morte de 20°). J’ai donc dû mettre en place une réduction sur ma tige AZIMUT pour que mes 0 à 340° potentiomètres conviennent à la mesure sur 0 à 360° de rotation.

Pour la gestion de l’ELEVATION, il s’agit d’une course maximale de rotation de 0 à 180°. J’ai alors ajusté mon 0 – 10V de lecture sur mon entrée ZELIO pour faire correspondre non pas de 0 à 340° mais bel et bien de 0 à 180°. Nous avons donc une résolution de traitement de 0 à 180° valant 0 à 1023 points. Tout cet ajustement est réalisé avec le bon pont diviseur sur l’entrée de l’amplificateur opérationnel.

Ce qu’il faut retenir : mes signaux apparaissant sur mes entrées (0-10V) 10 Bits de l’extension ZELIO et (0-10V) 8 Bits du ZELIO sont amplifiés pour correspondre à la plage maximale de traitement dans le programme (0-1023 pour 10 Bits et 0-255 pour 8 Bits). Ceci correspond aux bornes de gauche et en haut sur l’illustration 7.

En haut à droite nous avons une commande venant du ZELIO : le SOMMEIL. Cette commande arrive sur la bobine du bistable d’alimentation du ZELIO, elle permet de l’auto couper une fois son cycle de fonctionnement terminé.

Son cycle de REVEIL (Illustration 8) est, quant à lui, géré par la carte CI directement avec l’utilisation du seuil 1000 Lux lançant le mode JOUR. Le mode JOUR envoie une impulsion toute les 55 secondes, ou bien 30 min via le choix du switch entouré en vert sur l’illustration 6. Les 55 secondes correspondent au cycle de test, et les 30 min, au cycle de fonctionnement normal. L’impulsion périodique possible grâce à l’utilisation d’un NE555 monté en astable.

Illustration 8 : Synoptique système REVEIL

Sur la partie de droite (Illustration 7) nous retrouvons le contact d’alimentation du ZELIO, qui peut être court-circuité par le REVEIL en cas de VENT VIOLENT, laissant 30 secondes d’alimentation au module LOGIQUE pour effectuer sa mise en sécurité. Juste en dessous, il y a la borne reliée à l’entrée VENT du ZELIO qui lui indique ou non de mettre le système à l’horizontal. Cette dernière est remise à zéro s’il n’y a pas eu de Bourrasque de puis 55 secondes ou bien 30 min (en fonction de la position du switch). En bas à gauche nous retrouvons les différentes tensions d’alimentation permettant au système de fonctionner : 24V si alimentation sur secteur, dans le cas contraire nous entrons directement en 12V sur l’entrée +12V IN (gérée depuis la carte de gestion d’alimentation décrite plus haut).

Nous détectons une bourrasque grâce à un anémomètre électronique : Le montage entouré en bleu en annexe page 32 correspond à l’anémomètre en question. Le phénomène provient de la particularité des semis conducteurs qui est : 2 mV par °C. Nous nous retrouvons donc avec un transistor T1 monté en diode et non chauffé correspondant à la référence de température. Un second transistor T2 également monté en diode mais couplé thermiquement à un troisième transistor T3. T2 est réchauffé par T3 de quelques degrés supérieurs à la température actuelle. Si un déplacement d’air survient, T1 reste à sa température actuelle, cependant T2 qui était chauffé se voit perdre des calories. T3 est doc obligé de compenser cette perte de calories commandé par l’amplificateur opérationnel, ce qui a pour effet de faire varier le signal de ce dernier. Un second amplificateur permet de comparer ce signal à un seuil de vent qu’on a défini comme pouvant être dangereux à notre maquette. Il émet donc une impulsion à chaque bourrasque via un NE555 monté en monostable déclenchant ainsi le mode tempête (voir illustration 9).

Illustration 9 : Synoptique système TEMPETE.

En bref, si on souffle sur les 2 transistors T1 et T2 en même temps, symbolisant l’anémomètre, le système se met en mode tempête ! A noter (Illustration 8) qu’à chaque seuil atteint, le système de TEMPETE réinitialise le REVEIL pour prolonger la mise en sécurité. Si aucune bourrasque ne survient pendant le temps calibré (via le switch), le REVEIL du système annule le mode TEMPETE indiqué par le DEL bleue sur l’illustration 6.

                                               d.                Programmation ZELIO

TRACKER SOLAIRE : GESTION DE L’ORIENTATION.

Illustration 10 : Gestion du bloc TRACKING  

L’illustration 10 est la partie de gestion du bloc fonction donnant la position du soleil en temps réel. Pour se faire, il faut lui entrer les coordonnées GPS du lieu d’implantation sous forme décimal (conversion GSP de degré vers décimal), ainsi que le fuseau horaire en minute signé (+120 pour l’Alsace). Les valeurs brutes d’AZIMUT sont comprises entre -18000 et +18000 :           

0 (0°/360°) pour le NORD ;               

9000 (90°) pour l’EST ;                                        

+/-18000 (180°) pour le SUD ;          

-9000 (240°) pour l’OUEST.

Les valeurs d’ELEVATION sont comprises entre -9000 à + 9000 : +9000 (90°) pour le point le plus haut à l’horizontal, 0 (0°) pour l’horizon. Les valeurs négatives correspondent à la position du Soleil sous l’Horizon.

Une fois ces valeurs comprises, j’ai effectué des règles simples : notamment diviser directement par 10 pour pouvoir utiliser mes valeurs de mots correctement.

En effet, entre -18000 et +18000 il y a 36000 valeurs, mais 36000 valeurs je ne peux pas les traiter avec des octets signés… je divise donc chaque valeurs par 10 pour me ramener à -900 à +900 pour l’ELEVATION et -1800 à +1800 pour l’AZIMUT.

Pour l’ELEVATION, il me suffit d’appliquer une règle de trois : nous avons une cours totale de 0 à 180° soit 0 à 1023 points. Cependant, le bloc fonction ne va que jusqu’à 90° donc une cours de 0 à 511 points (la moitié). Je multiplie donc la sortie de ma division par un coefficient (GAIN) égal à 512/900. Une fois fait, je peux comparer ma donnée à mon entrée 10 Bits du potentiomètre d’ELEVATION.

J’effectue la même chose pour l’AZIMUT sans oublier que mon 0 à 1023 points se fait dans le sens Nord->Est->Sud->Ouest. Or, mon bloc sort une valeur perturbante : 0=NORD, 900=EST, 1800=SUD, -1800=SUD, -900=OUEST. Je dois donc arriver à gérer quand je suis entre 0 et 1800, et quand je suis entre -1800 et 0. J’effectue donc un multiplexage changeant entre l’avant ZENITH, et l’après ZENITH. Il suffit donc de distinguer deux règles à appliquer : entre 0 et 1800 je suis coté EST, je multiplie la sortie de la division par un coefficient (GAIN) égal à 512/1800. Pour la partie OUEST, entre -1800 et 0, il faut que j’additionne ma sortie avec 1800 pour me le ramener en positif. Puis j’applique le même coefficient mais avec un offset de 512 puisque nous avons déjà parcouru la moitié de la course avec le premier réglage.

TRACKER SOLAIRE : GESTION DE L’ORIENTATION avec COMPARAISON POTENTIOMETRE

Voici la dernière partie de la programmation, effectuée à ce jour. Les différents tests m’ont permis d’ajuster et d’affiner le réglage de l’approche de la position souhaitée.

Illustration 11 : Gestion de la motorisation AZIMUT

Les ronds entourés en rouges représentent d’une part, les blocs de comparaison entre la valeur du potentiomètre AZIMUT avec la gestion du bloc TRACKING vu plus haut, et l’action sur les sortie ToR de marche et inversion moteur AZIMUT. A +/- 35 points (soit environ +/-12.3 °), le système passe de grande à petite vitesse, quand il arrive dans une plage de 6 points (environ 2.1° soit +/- 1°) encadrant la valeur de stabilisation, le moteur se coupe.

Le rond vert correspond à la gestion du bloc TRACKING

TRACKER SOLAIRE : GESTION DE L’ORIENTATION avec COMPARAISON POTENTIOMETRE

Illustration 12 : Gestion de la motorisation ELEVATION

Le rond jaune sur l’illustration 11 correspond à la marche et l’inversion moteur ELEVATION. Le rond rouge sur l’illustration 12 correspond à la gestion d’avance avec précision pour l’ELEVATION. En effet, La grande vitesse n’est effective qu’au-delà de +/-120 points (+/-21°), en dessous de +/-40 points (+/-7°) j’applique un correcteur de type hacheur envoyant des impulsions pour stabiliser autour de +/-1 points (+/-0.17°). Ce correcteur me permet également d’être très précis et rapidement.

II. Utilisation et démontage 

TRACKER SOLAIRE : Mise en route du système

Dans cette partie il faut se référer à l’illustration 1 ci-dessous, je vais expliquer comment utiliser le système Tracker Solaire. Tout d’abord, il faut s’assurer du choix de l’alimentation, si on veut être en autonomie, ou sur secteur. Pour ce faire, si on veut une alimentation par secteur il suffit de brancher la fiche électrique sur une prise 230V alternatif, puis d’enclencher le disjoncteur C2. Sinon, il suffit d’actionner le levier rouge indiquant l’utilisation de la batterie (en vérifiant que les connecteurs de la batterie sont correctement fixés).

 Illustration 1 : Module logique Zélio + extension et alimentation 

Une fois cette première partie effectuée, nous pouvons passer au choix du fonctionnement, dans un premier temps, nous allons regarder les différents interrupteurs. Le premier en haut à droite permet de choisir si on veut être en mode AUTO sur la gestion du mode JOUR, ou si on veut avoir la main sur le mode JOUR/NUIT. Dans ce dernier cas, l’interrupteur en bas à gauche du pupitre permet le réglage forcé JOUR/NUIT. Si notre système doit être lancé pour de l’autonomie, mettre l’interrupteur en haut à gauche sur position photorésistance (un symbole est dessiné).  Pour être sûr d’être en AUTONOMIE, l’interrupteur en bas à droite doit être mis sur la position AUTO.

Maintenant, il faut regarder sur la carte principale CI (illustration 2 ci-dessous) la position du switch (55’’ ou 30’) :

Illustration 2 : Carte principal CI.

Le choix de cette position détermine le temps périodique de fonctionnement en journée pour régler l’orientation du panneau photovoltaïque. Le choix est donc de 55 secondes, ou de 30 minutes. Maintenant que vous avez mis en autonomie le système, il faut s’assurer qu’il n’y est aucun défaut symbolisé par la DEL rouge sur le pupitre (voir illustration 1) ou de message(s) affiché(s) sur l’écran du module logique ZELIO (voir illustration 1).

L’indicateur 0 à 10 (voir illustration 1) nous permet de visualiser l’intensité lumineuse via la petite cellule photoélectrique.

TRACKER SOLAIRE : Démontage pour déplacer le système

Pour pouvoir déplacer le système, il faut d’abord le mettre en position de rangement. Dans un premier temps, mettre l’interrupteur de mode AUTO/REGLAGE en position REGLAGE, puis appuyer sur le bouton 1 sous l’écran du ZELIO (voir illustration 1). Attendre que le système ne bouge plus et soit orienté plein SUD sur l’axe AZIMUT et que les cellules photovoltaïques doivent pointer vers l’horizon SUD. Une fois effectué, couper l’alimentation (disjoncteur C2 ou interrupteur Batterie).

Voici la position dans laquelle le système doit se trouver avant de couper l’alimentation.

Accéder au blocage du câble plat pour pouvoir le bouger.

Déloger le câble plat pour pouvoir le bouger complétement

Déconnecter le connecteur HE10 en délogeant les ailettes de blocage.

Soulever le plateau après avoir dévisser les écrous pour pouvoir extraire le câble plat.

Dégager délicatement le câble plat et fixé le avec les pièces de blocage permettant de maintenir les plis du câble HE10.

Positionner le plateau sur son support en polyester sur les deux guides filetés.

Fixer les écrous de blocage du plateau une fois positionné.

Voici le système une fois rangé. Effectuer le cheminement inverse pour le remontage.

       III.     Conclusion

Les étudiants qui reprendront ce projet pourront se baser sur le travail effectué dans la programmation du module logique. Remplacer les potentiomètres par des codeurs en 0-10 V permettrait de ne pas utiliser les amplificateurs opérationnels dédiés. En effet, l’usage des amplificateurs est principalement là pour ne pas avoir à débourser une grande somme dans des convertisseurs analogiques (la lecture directe sur les entrées ZELIO introduirait une erreur).

La carte principal CI peut être réutilisée pour le système de mise en marche, ainsi que le cycle de réveil (30 min, ou bien dessouder les résistances définies pour 30 min et refaire le calcul pour un autre temps ; ou bien encore placer un potentiomètre pour avoir le choix sur une plage). Il faudra certainement que les futurs étudiants se procurent un véritable anémomètre, ou bien adaptent les 3 transistors pour déporter le système sur le véritable panneau solaire.

Enfin, les étudiants pourront s’appuyer sur le travail effectue pour gérer la marche des moteurs, et adapter au système à mettre en place. Idem pour le gestion d’alimentation entre le secteur ou l’autonomie, et vérifier les règles pour la récupération des informations (signaux analogiques 0-10V) de courant moteur.

En annexe, il y les schémas électroniques des cartes d’interface, ainsi que les plans de fabrication de la maquette.

Les étudiants devront très certainement trouver un moyen d’inclure la carte principale et le module logique ZELIO dans un coffret dédié au système de Tracking.

IV. Annexe 

gestion partie tempête (avec anémomètre électronique)
recopie potentiomètres
partie réveil + alim AOP

PLAN DE CONCEPTION structure du système de suivis du SOLEIL

Bloc fonction REMISE A L’EST

code source :

Projet complet

ZELIO : https://iskia.fr/dl/zip_tracker_solaire_pierre_simon.zip


Système automatisé : Robot UR3, API Siemens et caméra Cognex

L’objectif du projet était de réaliser une maquette de démonstration mettant en scène un traitement de pièces avec un convoyeur, une caméra Cognex et un Robot UR.

Le cahier des charges que nous avions établi était le suivant :

  • Réaliser un schéma de câblage du convoyeur
  • Refaire le câblage du convoyeur
  • Faire fonctionner le convoyeur
  • Refaire le câblage pneumatique
  • Faire communiquer le Robot UR, la caméra COGNEX et l’automate Siemens
  • Réaliser un programme de traitement des pièces avec le Robot UR
  • Réaliser un programme de traitement des pièces avec la caméra COGNEX
  • Faire un programme de traitement des pièces avec la CPU Siemens S7-1200

Pour répondre à ce cahier des charges, nous avons réalisé les tâches suivantes :

  • Programme Cognex
    • Organigramme
    • Communication entre les appareils
    • Programme Robot UR
    • Planification
    • Câblage pneumatique
    • Schématisation
    • Câblage électrique
    • Câblage pneumatique
    • Boitier de contrôle
    • Programme automate

Les équipements qui équipent le système sont les suivants :

  • CPU Siemens S7-1200 DC/DC/DC
  • Robot UR3
  • Caméra Cognex Insight 2000
  • Variateur Télémécanique ALTIVAR 11 0.18kW
  • Disjoncteur Merlin Gerin DT40 4A Courbe C
  • Disjoncteur Merlin Gerin DT40N 1A Courbe D
  • Alimentation 230VAC/24VDC Télémécanique ABL 7RM2401
  • Contacteur 24V Télémécanique LP1K0610BD

La communication se fait via un switch qu’il faut relier au réseau pour programmer l’automate ou se connecter à la caméra via l’application InSight Explorer.

Les équipements de la maquette représenté en figure 1 sont commandés par l’automate qui reçoit des informations des capteurs, de la caméra Cognex et qui envoie un ordre de marche au Robot UR.

Les capteurs détectent les pièces à trois niveaux et donnent les ordres suivants :

  • Présence pièce au départ => démarrage du tapis + action vérin au départ
  • Présence pièce à la caméra => lancement d’une acquisition
  • Présence pièce bonne avant le vérin => éjection de la pièce

Le scénario de la maquette est la suivante :

  1. Une pièce est introduite sur le tapis par un vérin pneumatique.
  2. La caméra Cognex prend un cliché de la pièce pour vérifier si elle est « bonne » ou « mauvaise ».
  3. Si la pièce est « bonne », elle continue sur le tapis et est éjecté par un vérin.
  4. Si la pièce est « mauvaise », le tapis s’arrête et le Robot UR prend la pièce sur le tapis.
Figure 1 : Convoyeur en configuration de marche

Commande système

Après avoir branché le convoyeur et le Robot UR, le système est commandé via une boite à bouton représenté sur la figure 2.

Figure 2 : Boite à bouton pour la commande du système

Programme automate

Le programme automate représenté ci-dessous est chargé dans la CPU Siemens et se met en route dès la mise sous tension du système.

Schéma de câblage

Le Folio 01 du schéma électrique ci-dessous représente le câblage de la partie puissance de la maquette et le folio 02 le câblage des E/S de l’automate.

Programme Caméra

Quand le capteur détecte une pièce, la caméra se déclenche et prend une photo. Pour que la caméra Cognex puisse reconnaitre les pièces bonnes ou mauvaises le principe est assez simple avec le modèle Insight 2000. En effet, il suffit d’utiliser la fonction model sur l’interface Insight, puis choisir la région de la pièce ainsi que le modèle. Le logiciel détectera automatiquement les détails sur la pièce, il faudra alors définir dans quel cas la pièce est bonne ou mauvaise (1 ou 0).

Programme robot

Pour commencer il nous fallait un signal de départ on a donc réfléchi à plusieurs solution modbus… Et on c’est alors rabattu sur un contact mouillé avec sa propre tension. Je m’explique le robot lancera sa boucle seulement si il reçoit du 24v à ses borne qui sera commander depuis un contact de l’automate Siemens. Pour continuer le scénario marche à l’aide d’une synchronisation entre la caméra et le temps de déclenchement qui donne une position approximative au robot. Il faut donc bien le positionner par rapport au repère du banc. On pourra imaginer par la suite que la position soit envoyer depuis la caméra. Le robot reçois le top départ seulement si la pièce est mauvaise il la prends et la dépose dans le bac. La pince marche en tcp nommée rg2 avec une prise directement sur le bras. On a un point d’initiation et à chaque fois une appro avant la prise et la dépose de pièce.

Programmes complets ici


DISTRIBUTEUR DE PIÈCES POUR BANC ROBOTIQUE INDUSTRIEL :

Sommaire :

•Ancien projet et objectifs
•Cahier des charges
•Fonctionnalités/Réalisation
-Distributeur de pièces
-Bras robotisé
•Matériel
•Programme des différents systèmes
-Arduino
-NodeRed
-Staubli
-Cognex
•Problèmes rencontrés
•Conclusion / Objectifs accomplis

1) Présentation de l’ancien projet :

Notre projet est basé sur l’amélioration d’un projet d’étudiants en DUT GEII de l’année précédente (Figure 1). Il consiste à créer une chaine automatisée afin de faire une démonstration lors des journées portes ouvertes de l’IUT. Le principe est simple, un automate dépose une pièce cylindrique d’une couleur quelconque sur un tapis roulant de manière aléatoire, une caméra envoie l’information de la couleur et de la position de la pièce au bras robotisé qui se chargera de déplacer la pièce pour la remettre dans le distributeur. Nous avons choisis d’améliorer ce projets, car le précédent distributeur automatisé utilisait des moteurs pas à pas, pilotés à l’aides de modules spécifique et d’une Arduino Mega (ce qui est très couteux).

Figure 1: Ancien projet

2) Cahier des Charges

Une fois que les besoins étaient définis nous avons pu établir un cahier des charges (Figure 2). Les deux fonctions principale sont:
-distribuer les pièces de manière aléatoire.
-stocker et trier ces pièces dans des compartiments.

Figure 2: Cahier des charges

3) Définition des fonctionnalités

A l’aide du cahier des charges nous avons pu définir des diagrammes FAST, afin de décrire toutes les fonctionnalités de notre projet (Figure 3.1 et 3.2).
Notre projet contient deux systèmes:

Partie distributeur de pièces (Figure 3.1):

Partie robot et caméra industrielle: (Figure 3.2):

4) Matériel

De ces différentes fonctionnalités, nous avons fait une liste de matériel, pour la création du distributeur de pièces (Figure 4):
Nous avons choisi d’utiliser un Arduino Yun car la programmation de petit systèmes embarqué comme celui-ci est très simple, de plus le Yun possède une interface Linux ce qui nous permettrait éventuellement de le relier à un serveur Node Red. Nous utilisons ces Servomoteurs, car ils ont un couple largement suffisant pour déplacer les pièces. Ils sont aussi très facilement pilotables avec la carte Arduino, car ils ne nécessitent pas de module spécifique. En revanche les capteurs de présence pièce initialement prévu n’ont pas été gardé car jugé trop encombrant pour ce qu’ils apportaient au projet.

Figure 4: Liste de matériel

5) Partie programmation

A) Programme Arduino

Le programme Arduino permet de distribuer une pièce de manière aléatoire à chaque fois que le délai d’attente a été passé. Nous utilisons la fonction rand() pour cela. Le programme a été conçue de manière modulaire, pour rajouter simplement des capteurs ou une nouvelle couleur de pièce c’est pour cela que tout est conçu sur des définitions de tableaux. Le pilotage des Servomoteurs se fait à l’aide d’une fonction ce qui permet de ne pas changer tout le programme en cas de changement du système de pilotage des actionneurs (Figure 5.1 et 5.2). On a aussi programmé un bouton poussoir, pour mettre en marche ce système. Pour éviter les problèmes de rebonds avec ce bouton, nous l’avons mis en parallèle avec une capacité (Figure 5.3).

Synoptique Arduino (Figure 5.1):

Programme Arduino (Figure 5.2):

#include <Servo.h>
#define pin_onoff 2

int temp_rotation = 420;
int pin_capteur[] = {7, 8, 7};
int valeur_pwm[][3] = {{700, 1480, 2300}, {700, 1485, 2300}, {700, 1475, 2300}};
int pin_moteur[] = {9, 10}; //11 et pin pwm obligatoire
int nbmoteur = (sizeof(pin_moteur)) / 2;
int temp_distribution = 1000;
unsigned long temp;
int distro;
bool onoff = 1;
Servo monservo;

void setup()
{
  Serial.begin(9600);
  for (int i = 0; i < nbmoteur ; i++ )
  {
    pinMode(pin_capteur[i], INPUT);
    pinMode(pin_moteur[i], OUTPUT);
  }

  //définition boutons IHM
  pinMode(pin_onoff, INPUT_PULLUP);
  pinMode(13,OUTPUT);
  attachInterrupt(digitalPinToInterrupt(pin_onoff), etat, FALLING);
  temp = millis(); //enregistre le temps écouler
  Serial.print("Durer de l'initialisation :");
  Serial.println(temp);
  Serial.print("NBMOTEUR :");
  Serial.println(nbmoteur);
}

void loop()
{
  
  if (onoff == 1) {
    if ((temp + temp_distribution) <= millis())
    {
      distro = random(0, nbmoteur);
      /*while (digitalRead(pin_capteur[distro]) == 0)
        {
        distro = random(0, nbmoteur);
        }*/
      lancement_piece(distro);
      temp = millis();
    }
  }
}



//fonction gérant le sens de rotation du servo moteur
void lancement_piece(int numero_moteur)
{
  moteur(numero_moteur, valeur_pwm[numero_moteur][0]);
  unsigned long temp = millis();
  while ((temp + temp_rotation) >= millis()) {}
  /*moteur(numero_moteur, valeur_pwm[numero_moteur][2]);
  temp = millis();
  while ((temp + temp_rotation) >= millis()) {}*/
  monservo.detach();
  //moteur(numero_moteur, valeur_pwm[numero_moteur][1]);
}

//fonction gérant le sens de rotation du servo moteur
void moteur(int numero_moteur, int valPWM)
{
  Serial.print("N° moteur:");
  Serial.print(numero_moteur);
  Serial.print("    Valeur PWM:");
  Serial.print(valPWM);
  Serial.print("    N° Pin Moteur");
  Serial.println(pin_moteur[numero_moteur]);
  monservo.attach(pin_moteur[numero_moteur]);
  monservo.writeMicroseconds(valPWM);

}
void etat() {
  temp = millis();
  if (100 + temp >= millis()) {
    onoff = !onoff;
    digitalWrite(13,onoff);
    //Serial.print("Etat On/Off : ");
    //Serial.println(onoff);
  }
}

Schéma électrique de l’Arduino:

Figure 5.3: schéma électrique de l’Arduino

Le programme est téléchargeable ici

B) Nodered

Synopsis global du transfert des données entre les différents systèmes (Figure 5.4):

Le serveur Node Red formate les données selon le destinataire et ajoute une interface web permettant ainsi des contrôles manuels.
Nous avons aussi défini aux travers de ce serveur 4 ports: Staubli receive « 1060 »; Staubli sent « 1061 »; cognex receive « 1062 »; cognex sent « 1063 » , ils permettent de faire la liaison entre la caméra et le robot (Figure 5.5).

Figure 5.5: Serveur + interface Node Red

Le fichier à importer pour recréer le serveur NodeRed est disponible ici.

C)Le Robot Staubli

Le robot (Figure 5.6), envoie des demandes de photo à la caméra jusqu’à la présence de pièces. Il attend les coordonnées ainsi que la couleur de la pièce, que la caméra va lui rendre. Une fois les données retournées, le robot ira saisir la pièce aux coordonnées indiquées et la posera au bon endroit (selon la couleur de cette pièce) (Figure 5.7 et 5.8).

Figure 5.6: Photo du robot

Synoptique du programme (Figure 5.7):

cls()
  prisetemp=prise
  deposetemp=depose
  deposetemp2=depose2

  // port receive 1060
  //port send 1061
  //S="1;300;500"


  while true
    S="0;0000;0000"  
    mult=0
    mult2=0
    couleur=0
    xpos=0
    ypos=0
    putln("Debut ")
    //  cameraSend=toString("snap",i)
    //  S=cameraReceive


    do
      clearBuffer(cameraReceive)
      clearBuffer(cameraSend)
      movej(j2,pince,rapide)
      cameraSend=toString("send",i) 
      S=cameraReceive 
      couleur=asc(S,0)-48

      put(couleur)
      putln("fin")
      delay(0.5)
    until(couleur>0)





    //teste le signe des coordonnées

    if asc(S,2)==45
      mult=-1
    endIf

    if asc(S,2)==48
      mult=1
    endIf

    if asc(S,7)==45
      mult2=-1
    endIf

    if asc(S,7)==48
      mult2=1
    endIf

    couleur=asc(S,0)-48

    xpos=mult*(asc(S,3)-48)*100+(asc(S,4)-48)*10+(asc(S,5)-48)
    put(xpos)
    put(" ")

    ypos=mult2*(asc(S,8)-48)*100+(asc(S,9)-48)*10+(asc(S,10)-48)
    put(ypos)

//gère le point de prise en fonction des coordonnées données par la cognex

    prisetemp.trsf.x=prise.trsf.x+xpos
    prisetemp.trsf.y=prise.trsf.y+ypos

    priseapp=appro(prisetemp,{0,0,-30,0,0,0})
    deposeapp=appro(deposetemp,{0,0,-30,0,0,0})
    deposeapp2=appro(deposetemp2,{0,0,-30,0,0,0})

    movej(j2,pince,lent)
    movej(priseapp,pince,rapide)
    movel(prisetemp,pince,lent)
    close(pince)
    movel(priseapp,pince,lent)

    //gère le point de dépose en fonction de la couleur
    if couleur==1

      movej(deposeapp,pince,rapide)
      movel(deposetemp,pince,lent)
      open(pince)
      movel(deposeapp,pince,lent)

    endIf

    if couleur==2

      movej(deposeapp2,pince,rapide)
      movel(deposetemp2,pince,lent)
      open(pince)
      movel(deposeapp2,pince,lent)
    endIf

    movej(j2,pince,rapide)
    putln(" fin")

  endWhile
  waitEndMove()

//Figure 5.8: Programme du robot

Le fichier du projet Staubli est disponible ici.

D) La caméra COGNEX

La caméra attend la demande d’une photo du Robot, s’il n’y a pas de pièces, alors la caméra reprend une photo jusqu’à la présence d’une pièce. Nous avons utilisé une syntaxe spécifique qui est commune au robot et à la caméra, pour la transmission de message (Figure 5.8).

Syntaxe 0;0000;0000
Explication Couleur de la pièces
(0 si absent;
1 si blanc; 2 si vert)
Coordonnées x (Premier caractère = ‘-‘ si Coordonnées négative ou ‘0’ si coordonnée positive)Coordonnées y (Premier caractère = ‘-‘ si Coordonnées négative ou ‘0’ si coordonnée positive))
Figure 5.8: Syntaxe des messages

Programme de la caméra cognex (Figure 5.9) :

La détection des pièces se fait à l’aide de la fonction « TrainPatMaxPattern »
Pour différentier deux couleurs (le vert et le blanc dans notre cas), on joue sur la luminosité.
Cela nous permet de différentier parfaitement la couleur verte de la blanche. Cependant, il arrive souvent qu’une pièce blanche soit détectée à la fois comme verte et blanche. C’est pour cela que quand une pièce est détectée comme verte et blanche, on priorise le blanc.
On a aussi créé un point de référence à l’aide de la fonction « Point », qui est le même pour le TX 60.
Enfin, toutes les coordonnées sont converties en millimètre pour pouvoir être exploitées par le robot.

Figure 5.9: Programme de la cognex

Le fichier du projet NodeRed est disponible ici.

6)Problèmes rencontrés

Les problèmes majeurs que nous avons rencontré sont :

– Chaque servomoteur a une valeur PWM différentes pour les mêmes mouvement (On as dû affiner ces valeurs par expérimentation).

– Les servomoteurs ont un courant de consommation crête bien plus élevé que ce que la datasheet donnait (1,1 A contre 1,6 A dans la réalité) ce qui créait des chutes de tension et redémarrait l’Arduino, on a donc dû surdimensionner l’alimentation.

– Les axes x et y de la caméra ne sont pas aligné avec les axes du bras robotisé ce qui empêche la bonne prise de pièces. Ce problème vient du robot Staubli, qui a son axe Y non perpendiculaire à la table.
Pour résoudre ce problème, il faut modifier le programme du Robot et mettre ceci dans les coordonnées du point de prise :

X’=X.cos(T) – Y sin(T)
Y’=X sin(T) + Y cos(T)

Ici X et Y sont les coordonnées envoyées par la caméra et T est l’angle d’écart qu’il y a entre le repère de la caméra et le repère du robot.

– La caméra positionnée au-dessus du robot est une caméra noire et blanc ce qui empêche la différenciation de plus de deux couleurs.

7) Conclusion

Ce projet fut très intéressant, il nous a permis d’appliquer les connaissances de In-sight et Staubli vu en cours directement sur un projet concret. En revanche la partie NodeRed fut une complète découverte !!

Cependant certain point reste à améliorer :
– Le système Arduino devrait être pilotable à travers l’interface web du serveur NodeRed.
– Intégrer la partie Arduino dans la maquette des DUT GMP, vu que cette maquette ne fut terminée qu’après nos séances de projets (Figure 7).
– Utiliser un condensateur pour éviter les chutes de tension plutôt que de surdimensionner l’alimentation.
– Utiliser une caméra couleur pour différencier plus de deux Couleurs.
– Calibrer les axes de la caméra et du robot TX 60.

Figure 7: Maquette des DUT GMP

Projet réalisé par :
– Erwan LAROPPE
-Louis MATHIS

Pour les curieux l’archive complète de notre projet est disponible ICI :
https://drive.google.com/drive/folders/1frOojPXsxAnuPceLYTKd4kq09x3KXn2p?usp=sharing


Bancs didactiques : Boîte de vitesse et train épicycloïdal

contexte : Les étudiants GMP avaient besoin d’un moyen simple, efficace et peu coûteux de pouvoir compter les tours que faisaient leurs maquettes de train épicycloïdale et de boite de vitesse dans le cadre de leur TP.

Nous avons récupéré la maquette réalisée par les étudiants GEII de l’année dernière. Nous avons décidé de garder le même principe avec des aimants et des capteurs à effet HALL. Mais nous avons choisi de mettre toutes notre partie à pars dans une boite qui sera brancher directement sur la maquette.


Distribution de pièces pour la robotique manufacturière

Sommaire

Présentation projet

Cahier des charges  (Bête à corne / Diagramme Pieuvre)

– Diagramme FAST

– Achats et appareils utilisés

– Partie programmation

– Arduino

– Staublie / Cognex

– Partie test

– Conclusion

Partie Intégration d’un capteur de détection pièce

1) Présentation du projet

2) Cahier des charges 

Diagramme pieuvre

tableau détaillants les fonctions primaires et secondaire à réaliser

RepèresFonctionscritères
FP1Stocker les pièces par couleurs dans des compartimentsArchitecture et milieu
FP2Libérer les pièces de façon aléatoireArduino et architecture
FC1Doit tenir dans la zone de travailcompact
FC2Doit être programmable par un pcProgrammable
FC3Doit fonctionner automatiquementautonome

3) Diagramme FAST

Avec la réalisation de ce diagramme Fast, nous avons le détails des fonctions primaires et comment les réaliser.

4) Achats et appareils utilisés

Voici le détail des achats réalisé dans le cadre du projet du support de pièce pour le Robot STAUBLI.p

5) Partie programmation

(La majeure partie des programmes ne sont pas compatible avec WordPass. M. CUDEL possède les programmes originaux.)

a) côté réservoir ( Arduino )

Ci-dessous le grafcet détaillant le fonctionnement du programme Arduino pour la libération des pièces de façon aléatoire.

Ci dessous le programmes Arduino qui s’occupe de la libération des pièces de façon aléatoire.

b) côté Robot/Vision

1)In sight Cognex

Voici le tableur de la partie vision sur le logiciel « In sight ». La caméra utilisé est une caméra couleur. Les programmes In-sight n’étant pas compatible avec WordPress, nous avons décidé de mettre les programmes sous forme de captures d’écrans.

détection de la couleur + coordonnées d’une pièce bleu sur le tapis.

détection de la couleur + coordonnées d’une pièce verte sur le tapis.

détection de la couleur + coordonnées d’une pièce rouge sur le tapis.

2) Staubli

Pour des raisons de non compatibilité, les programmes sont mis sous formes de captures d’écrans.
Nous retrouvons trois programmes pour les prises pièces des trois couleurs Et un programme qui simule la caméra Cognex (envois de coordonnées X,Y et la couleur présente(B,G,R)) . N’ayant pas réussit à connecter la partie Staubli à la partie In-sight, nous avons décidé de simuler la caméra directement sur le logiciel Staubli avec les même chaines de caractères.

6) Partie TEST

a) côté réservoir ( Arduino )

Voici une vidéo qui montre le bon fonctionnement du réservoir de pièce. Nous pouvons voir que la libération des pièces se fais de façon aléatoire et qu’il n’est pas possibles d’avoir deux pièces identiques à la suite. Si aucune chute de pièce est détectée au bout de 5 secondes, le moteur s’arrête.

b) côté Robot/Vision

7) Conclusion

Ce projet fut très intéressant, il nous a permis d’appliquer les connaissances de In-sight et Staubli vu en cours directement sur un projet concret.

Je vois quelques points à travailler pour améliorer ce projet notamment:
– Passer sur un automate serait une bonne idée
– surveillé la consommation des moteurs (passer sur des moteurs à courant continu pour limiter la consommation)
– Minimiser la chauffe des moteurs pour pouvoir faire tourner l’installation pendant une période plus longues.

Intégration d’un capteur de détection pièce

A côté du projet précédent, qui est un plan incliné pour la distribution de pièces pour la robotique manufacturière, nous avons procédé à l’intégration d’un capteur pouvant détecter la présence d’une pièce. Ce capteur est intégré au sein de la pince robot, au niveau des mors.

Mors de la pince robot

Ce capteur sera un simple interrupteur cylindrique intégré à l’un des mors. Cette intégration devra être étudiée à l’IUT Lab.

Le câblage de celui-ci est de préférence unipolaire, ce qui comprend une alimentation et un retour d’information. Pour effectuer ce câblage il faut utiliser les connecteurs J1203 sur l’avant bras du robot et J1202 sur le pied ainsi que sur la CPU. Les connecteurs à utiliser seront de la marques Binder Connector dans la gamme miniature. Ils seront de 19 broches en M16. Le format mâle est appliqué à l’avant bras et à la CPU. Tandis que le format femelle est adapté au connecteur sur le pied.

MARHEM Rémi

ENGGASSER Geoffrey

ROOS Hugo

MULLER Lucas


Ruche connectée & SigFox

Sommaire

  • Introduction
  • Cahier des charges
  • Solutions techniques mises en œuvre
    • Mesure du poids de la ruche
    • Mesure de la température et du taux d’humidité
    • Mesure de la fréquence des sons de la ruche
    • Transmission des données
    • Autonomie du système et optimisation de la consommation
    • Intégration des composants
    • Mise en œuvre d’une interface utilisateur
  • État des lieux du projet, et amélioration possibles
  • Conclusion

Introduction

A l’heure actuelle, de nombreux modèles de balances connectées pour ruches sont disponibles sur le marché. Ces balances présentent parfois des fonctionnalités supplémentaires, par exemple une station-météo intégrée, un antivol GPS, etc. Le prix de ces systèmes est assez élevé et ces modèles sont principalement destinés à des professionnels. C’est pour ces raisons que nous avons choisi de réaliser notre propre balance connectée, intégrant d’autres fonctionnalités.

Premièrement, dans la gestion d’une ruche, la température et le taux d’humidité internes sont très importants.  Ces deux grandeurs, informe directement l’apiculteur sur la santé de la colonie. Ensuite, nous avons choisi de mesurer les fréquence du bourdonnement des abeilles à l’intérieur de la ruche afin de pouvoir détecter un essaimage.

Cahier des charges

Solutions techniques mises en œuvre

Mesure du poids de la ruche

Nous avons choisi d’utiliser quatre capteurs de force en pont de Wheatstone, pouvant mesurer jusqu’à 50 Kg chacun. Ces capteurs sont connectés en parallèles, le poids maximal mesurable est donc de 200 Kg. La précision donnée par le constructeur est de ± 25 grammes. Les mesures sont effectuées par une carte programmable Arduino.

https://www.gotronic.fr/ori-capteur-de-force-50-kg-czl635-50-17601.jpg
Capteur de force

Un amplificateur – convertisseur est nécessaire pour effectuer les mesures. Le composant choisi est un amplificateur HX711. Il permet de convertir la valeur analogique de la masse mesurée en donnée numérique, transmise ensuite à la carte Arduino par communication série.

Amplificateur pour Cellule de Force HX711 - RobotShop
HX711

Il est nécessaire d’effectuer une calibration de ces capteurs, au moyen d’un code fourni par le fabriquant de l’amplificateur, utilisant une bibliothèque spécifique afin de simplifier la programmation.

Mesure de la température et du taux d’humidité

Pour mesurer la température et l’humidité à l’intérieur de la ruche, un capteur comportant ces deux fonctions est utilisé. Il s’agit d’un capteur AM2320. Ce capteur est capable de mesurer une température de -40°C à +80°C avec une précision de ±0,5°C, et un taux d’humidité allant de 0% à 99,9% avec une précision de ±3%. Il communique par un bus I2C avec la carte Arduino. Ce bus comporte deux voies, une voie d’horloge (SCL) et une voie de données (SCL). C’est un protocole standardisé très répandu dans les applications électroniques. Concernant la programmation, l’utilisation d’une bibliothèque fournie par Adafruit inclus toutes les fonctions nécessaires à la programmation.

https://www.gotronic.fr/ori-capteur-de-t-et-d-humidite-am2320-27959.jpg
AM2320

Mesure de la fréquence des sons de la ruche

               La fréquence des sons produits par les abeilles ne s’obtient pas directement par lecture de la valeur d’un capteur. Le capteur utilisé est un micro à électret amplifié ADA1063. Il dispose d’une sortie analogique. Pour obtenir la valeur de la fréquence, il est nécessaire d’effectuer une FFT (Fast Fourier Transform) sur un certain nombre d’échantillons de la sortie analogique du capteur. On choisit 128 échantillons (limite maximale pour Arduino) et une fréquence d’échantillonnage de 1212Hz, nécessaire pour mesurer des fréquences jusqu’à 600Hz. Le calcul de cette FFT est effectué par une bibliothèque Arduino (arduinoFFT). Ce calcul à ensuite été testé en utilisant un générateur de fréquences sonores sur smartphone. En faisant varier le générateur entre 50Hz et 600Hz, toutes les mesures obtenues sont justes, avec une tolérance de ± 4Hz. Cette plage de fréquences mesurables est donc tout à fait en adéquation avec la plage de fréquence des sons des abeilles, comme indiqué dans Abeille & Cie N°165.

ADA1063

Transmission des données

Pour transmettre les données issues de la ruche à l’apiculteur, nous avons choisi d’utiliser le réseau Sigfox. C’est un réseau de communication basse puissance (868Mhz) qui présente beaucoup d’avantages.

  • Avantages :
    • Basse puissance (non perturbant pour les abeilles)
    • Basse consommation
    • Couverture réseau très importante en France
    • 14 émissions par jour
    • Bidirectionnel (Émission / Réception)
  • Inconvénients :
    • Abonnement nécessaire (3€/an selon Sigfox).
    • Transmissions « lentes » en raison de la basse fréquence.

Plusieurs modèles de modules Sigfox existent.  Pour notre application, nous avons choisi d’utiliser une carte programmable Arduino MKR FOX 1200 qui intègre un moule de communication Sigfox. Cette carte est particulièrement adaptée au développement de ce type d’application, en raison de sa faible consommation, de son encombrement réduit, et de son coût.

Carte Arduino MKR FOX 1200 ABX00014 Arduino - Cartes MKR | GO TRONIC
Arduino MKR FOX 1200

Un abonnement d’un an au service Sigfox est inclus avec la carte programmable, qui s’active automatiquement dès le troisième message transmis sur Sigfox. Il sera donc nécessaire de renouveler par la suite cet abonnement.

Arduino fourni une bibliothèque Sigfox, proposant des fonctions simples pour envoyer des messages sur le réseau Sigfox. Le programme final effectue donc les mesures de poids, de température, de taux d’humidité, calcul la fréquence du son produits par les abeilles, et transmet ces données actualisées toutes les 20 minutes.

Alimentation, autonomie du système et optimisation de la consommation

Dans le but de diminuer la consommation du système, et donc d’augmenter son autonomie, plusieurs solutions sont mises en œuvre. D’une part, la programmation sous Arduino permet de réduire la consommation de deux façons. Premièrement, la carte utilisée est capable d’être « endormie » lorsqu’elle n’est pas utilisée. De la même façon, l’amplificateur HX711 peut lui aussi être mis en veille lorsqu’il n’est pas utilisé, grâce à sa bibliothèque. Passer cet amplificateur en veille réduit la consommation de 20mA.

Ensuite, il est nécessaire d’utiliser un régulateur de tension linéaire 5V, pour abaisser la tension de la batterie 12V en 5V. Dans un premier temps, nous avons utilisé un régulateur LM1085, qui consommé 10mA à vide. Nous l’avons finalement remplacé par un régulateur LM78L05, dans un boitier TO-92. La consommation à vide mesurée de ce régulateur est de 3,2mA, ce qui a permit de réduire encore la consommation de 6,8mA.

Des mesures de consommation en fonctionnement typique du système ont été effectuées. Ce fonctionnement est décomposé en 3 phases : « Sleep » lorsque la carte Arduino et l’amplificateur HX711 sont en veille entre deux transmissions, « Mesure » lorsque la carte Arduino effectue les mesures des différents capteurs et calcule la fréquence et « Emission », lorsque les données sont émises sur Sigfox. Pour un cycle, la phase « Mesures » dure 5 secondes, et la phase Emission dure 10 secondes. La phase « Sleep » dure tout le reste du temps, soit : 20min – 5s – 10s = 1195s.

Les consommations dans ces différentes phases, sont les suivantes :

  • Sleep : 16 mA (pendant 1195s)
  • Mesure : 44 mA (pendant 5s)
  • Emission : 59 mA (pendant 10s)

Afin de réduire encore ces consommations, la led Power implantée sur la carte Arduino, et allumée en permanence, a été dessoudée. A l’aide du schéma électronique fourni par Arduino, nous avions calculé que cette led consommait environ 10mA. Ce calcul a été confirmé par de nouvelles mesures de consommation. Supprimer cette led permet d’abaisser la consommation de 9mA. On obtient donc les mesures suivantes :

  • Sleep : 7 mA (pendant 1195s)
  • Mesure : 35 mA (pendant 5s)
  • Emission : 50 mA (pendant 10s)

Sur une heure, cela correspond à une consommation moyenne de 7,5mA/h soit 0,2A/h par jour.

Concernant la batterie, nous avons utilisé une batterie au plomb, que nous avions en stock à l’IUT. C’est une batterie 12V, 9Ah. Avec cette batterie, l’autonomie maximale du système est donc de 45 jours. Néanmoins le principal inconvénient de cette batterie est son encombrement. Elle mesure 15,1cm x 10,2cm x 6,5cm, et pèse 2,7Kg.

Intégration des composants

Afin de connecter les différents composants électroniques entre eux, nous avons réalisé un circuit imprimé dans le laboratoire d’électronique de l’IUT. Ce circuit permet d’accueillir le régulateur de tension, la carte Arduino et l’amplificateur HX711. Des borniers y sont aussi implantés, permettant de faciliter la connexion de l’alimentation, des capteurs de force, le micro et le capteur de température et d’humidité. Ce circuit imprimé ainsi que la batterie, sont placés dans un coffret plastique d’électricien.

Boitier électronique

Les étudiants en Génie Mécanique et Productique, ont réalisé le support de ruche intégrant les quatre capteurs de force.

Support de pesée

Mise en œuvre d’une interface utilisateur

               Une interface utilisateur a été mise en œuvre, afin de faciliter la lecture et le suivi des données.  Elle a été réalisée en utilisant Node Red. Elle est composée de trois onglets :

  • Synoptique : Dernières mesures, heure de la dernière transmission, graphique de l’évolution du poids sur 24h, météo en temps réel à l’emplacement de la balance.
  • Graphiques : Graphiques de l’évolution du poids sur 24h et sur 7 jours, de la fréquence sur 24h, de la température et du taux d’humidité sur 24h.
  • Historique : Tableau regroupant les données des 1000 dernières transmissions.

Pour ce premier prototype, nous avons choisi d’héberger cette interface sur un Raspberry Pi, en réseau local. Cela signifie qu’il est uniquement possible d’accéder à l’interface lorsque l’on est connecté sur le même réseau que le Raspberry Pi. Nous avons réalisé ce choix afin de ne pas être dépendants d’un service d’hébergement de serveur Web. Il est possible d’associer plusieurs balances à la même interface.

État des lieux du projet

Un grand nombre des fonctions définies par le cahier des charges ont pu être mises en œuvre. Premièrement, l’acquisition des données, que ce soit les données issues de la ruche, ou bien les données météorologiques récupérées sur Internet les fonctions attendues ont été mise en place. Ensuite, la transmission des données est bien autonome en utilisant le réseau Sigfox, et est régulier toutes les 20min. Néanmoins, nous n’avons pas encore mis en marche une transmission de données événementielles. L’interface utilisateur n’est pas sur un site Web et ne nécessite donc pas de système de connexion par mot de passe. De plus, les données sont actualisées à chaque nouvelle transmission, et il est possible de suivre l’évolution chronologique des différentes grandeurs. L’autonomie du système est inférieure à celle fixée par le cahier des charges, et nous n’avons pas encore pu tenter d’implanter des cellules photovoltaïques. Pour finir, l’objectif de coût du projet est respecté : le coût de tous les composants (support exclu) permettant de réaliser cette balance est d’environ 220€.

Conclusion

Pour conclure, ce projet nous a permis tout d’abord de découvrir ou d’approfondir nos connaissances en matière d’apiculture, notamment l’importance de la température et du taux d’humidité interne à la ruche, ainsi que la « signification » des signaux sonores d’une colonie d’abeilles. Ces informations permettent à l’apiculteur, amateur ou professionnel, de mieux suivre et soigner ses colonies.

Les principales fonctions du cahier des charges ont été mises en œuvre. La balance est placée sous une ruche depuis maintenant deux semaines. Les mesures effectuées sont toujours cohérentes avec l’environnement et les conditions météorologiques. Néanmoins, il est nécessaire d’effectuer des tests sur une plus longue période.

De nombreuses améliorations peuvent tout de même déjà être envisagées, en particulier au sujet de l’autonomie du système, et de son encombrement. Parvenir à rendre accessible l’interface utilisateur depuis le Web est aussi un point à travailler.

Simon RAPP

Loyna WALTER

Hugo KLEIN

Anthony LITTERST


Automatisation d’une Brasserie

SOMMAIRE

  • Introduction
  • Analyse fonctionnelle
  • Réalisation du projet
  • Réalisation de la bière
  • Conclusion

Introduction

La bière est une boisson alcoolisée millénaire obtenu par fermentation d’un moût végétal. Chaque pays revendique un savoir-faire unique.

Pour produire une bière, il faut 5 ingrédients :

  • De l’eau
  • Du malt
  • Du houblon
  • De la levure
  • Du sucre

Il y a ensuite plusieurs étapes de la production à respecter pour réussir sa bière :

  • Le concassage
  • L’empâtage
  • Le rinçage
  • L’houblonnage
  • Le refroidissement
  • La fermentation
  • L’embouteillage

Premièrement, dans la fabrication d’une bière, la température et le temps de cuissons sont très importants et à respecter. Ensuite, selon la recette de bière souhaitée, nous ajoutons différents ingrédients (houblon et malt), cela déterminera le goût, le degré d’alcool et la couleur de la bière.

De nos jours, de nombreux modèles de micro-brasseries pour la création de différentes bières sont disponibles sur le marché. Le prix de ces systèmes est assez élevé et ces modèles sont principalement destinés à des professionnels. Les étudiants des années précédentes ont débuté la réalisation d’une micro-brasserie à l’IUT. Nous avons décidé de reprendre leurs travaux en intégrant des améliorations.

Analyse fonctionnelle

Un projet de bière avait déjà été fait initialement en 2019. Nous avons donc pour objectif de partir de leur maquette de projet et de reprogrammer la brasserie. Ainsi que d’automatiser le rinçage afin de simplifier cette étape. 

Nous avons pas eu assez de temps pour réaliser la partie mécanique donc ni électrique et programmation. Le cahier des charges est de faire une bière blonde tout en respectant des paliers de températures. Nous avons alors régulé la température avec un automate Siemens S7-1200.

Le diagramme bête à cornes :
Paliers de températures à respecter :
Ingrédient Bière Blonde :

Réalisation du projet

Armoire Électrique :

L’armoire était déjà câblée. Seul l’automate était à remplacer par un nouveau. Il fallait donc optimiser les branchements, sertir des fils, et rendre l’armoire fonctionnelle pour le projet.

Les contacteurs utilisés ont les fonctions suivantes :

  • KVAR  =     Mise sous tension
    variateur
  • KA0     =    Relais de maintien du
    disjoncteur de la
    partie puissance
  • KA2     =    Fin de course bas
  • KA1     =    Fin de course haut
  • KAdef  =    Défauts
  • KADE   =    Descendre la pâle
  • KDET   =  Chauffage
  • KAMO =  Monter la pâle

Câblage de l’automate :

Les étapes que nous avons suivi :
  1. Placer le nouvel automate SIMENS S7-1200
  2. Câbler selon l’ancien schéma
  3. Noter les modifications effectuées

Programmation de l’automate :

Nous avons repris le Grafcet du mode de marche (GMA) déjà réalisé par les anciens élèves.

Par la suite, nous avons fait un Grafcet qui décrit les étapes du programme:

Pour respecter les différents paliers de température, nous avons utilisé des régulateurs PID (Proportionnel Intégral Dérivé)

Paliers de température :

Création de l’IHM :

L’IHM à trois vues principales ainsi que quatre vues des recettes existantes:

  • Blonde
  • Blanche
  • Rousse
  • Brune
Exemple d’une vue de l’IHM:

La page d’accueil possède un switch auto/manuel ainsi qu’un bouton de départ/arrêt cycle. Nous avons aussi une page de gestion avec des boutons qui valident les étapes que le brasseur doit effectuer (ex: grain, rinçage). Ainsi que des voyants/afficheurs sur la valeur de la température par rapport aux différents paliers. La dernière page est le regroupement des recettes des 4 bières proposées.

Réalisation de la bière

1. Le concassage

Concasser les grains permet de mieux faire infuser le malt dans l’eau durant le brassage.

Pour notre bière blonde, nous avons utilisé :

  • 2,7kg de malt Pale
  • 180g de malt Vienna
  • 180g de flocon d’avoine

2. L’empâtage

Cela consiste à mélanger et faire chauffer les grains de malt concassés à de l’eau, afin d’obtenir une pâte appelée la « drêche » et de faire chauffer le tout.

3. Le rinçage

La drêche contient des protéines dénaturées et des polyphénols qui sont responsables du trouble permanent et d’une mauvaise stabilité dans le temps de la bière. La quantité d’eau de rinçage doit être calculée au préalable et adaptée aux pertes liées à l’évaporation. Plus la drêche va être lavée, plus la composition du moût récupéré (sucres) sera diluée.

4. L’ houblonnage

Le houblonnage, également appelé aromatisation, est l’étape de la fabrication de la bière consistant à faire bouillir du houblon dans le moût afin de donner du goût à la bière. Les Houblons utilisés:

  • 55g de houblon Cascade
  • 13g de houblon Mosaïc

Recette: Faire cuire jusqu’à ébullition pendant 1h l’houblon Cascade puis 10 min avant la fin de l’heure, ajout de l’houblon Mosaïc.

5. Le refroidissement

Le refroidissement est réalisé en faisant passer le moût dans un serpentin de cuivre muni d’un système de refroidissement à eau. Instrument indispensable afin de descendre rapidement la température du moût après ébullition. On utilise souvent un échangeur à plaques ou bien un serpentin refroidisseur.

6. La fermentation

Cette étape consiste à ensemencer le moût avec une certaine quantité de levures afin que ces levures transforment les sucres présents en alcool et en CO2 (GAZ de fermentation). Puis laisser la cuve à température ambiante durant 3 semaines.

7. L’embouteillage

La dernière étape du brassage : l’embouteillage. La mise en bouteille est l’étape ultime, celle qui termine votre brassage et qui va permettre à votre bière d’évoluer en ajoutant du sucre. Ensuite, il va falloir attendre 3 semaines pour enfin pouvoir la déguster.

Conclusion

Ce projet nous a permis de mettre en pratique les notions de supervisions et d’automatismes que nous avions reçu durant l’année. Et nous à permis de mieux programmer des régulateurs PID, de nous familiariser avec des schémas électriques ainsi que d’apprendre à manager notre temps pour respecter la durée de fermentation de la bière.

Ce projet à été assez lucratif pour nous. Nous avons pu découvrir l’univers complexe de la fabrication de bière ainsi que d’avoir la chance de goûter notre propre bière.

Comme solution futur nous proposons :
  • Une automatisation de la phase de filtrage
  • Une intégration du capteur de température à la cuve
  • L’intégration d’un afficheur plus performant
  • Réaliser un système de refroidissement automatique

Groupe de projet :

Loyna WALTER

Anthony LITTERST

Hugo KLEIN

Silon RAPP


Banc de vision & convoyeur

Améliorer le projet du banc de vision déjà commencé, afin de le rendre plus ergonomique, facile d’utilisation et plus présentable lors de journées des carrières et journées portes ouvertes. Le Banc de vision s’inscrit dans le savoir-faire d’un apprenant en DUT Génie électrique et informatique industrielle. C’est une maquette miniaturisée d’une ligne de supervision, pour le traitement de matières d’œuvre, défilant sur le convoyeur.

Banc de vision & convoyeur

1. Étude du projet

Besoin du projet et objectifs : Pour ce projet il fallait modifier la partie hardware et software du banc ainsi que la structure même du banc.

Pour la partie hardware, nous voulions changer le câblage et la disposition de ce dernier.
Pour la partie software, nous voulions garder le corps principal du programme et ne modifier que la partie qui concerne l’avancement du tapis.
Enfin pour l’esthétique de la structure, il fallait la rendre plus portable et beaucoup plus sympathique à présenter.

2. Diagrammes Fonctionnels

Pour cette étude, nous avons réalisé deux diagrammes : Une bête à corne ainsi qu’un diagramme pieuvre.

3. Modification de la structure

Pour la modification de la structure, nous avons repris une ancienne maquette que nous avons entièrement refait. On a utilisé l’IUT Lab pour « reconstruire » notre structure.

Nous avons découper les barres en aluminium afin de les adapter à une largeur convenable pour notre banc, nous avons également découper les planches, recréer une vraie structure capable de pouvoir accueillir notre tapis roulant.

Pour ce qui est du câblage, nous sommes rester sur quelque chose de relativement simple, pour la partie commande, nous avons le driver qui va commander le moteur pas à pas pour l’avance du convoyeur, puis l’arduino qui va permettre de gérer ce driver, les leds et caméras.

Nous avons ensuite créer un synoptique pour nous aider dans le câblage, relativement simple comme il se compose de deux alimentations, un driver, un moteur pas à pas, un arduino, une caméra et deux bandeaux de leds.

Pour le câblage, nous avions anciennement tout regrouper sur une platine carrée placée sous la structure. Nous avons gardé la même approche sauf que nous avons adapter la platine pour notre structure. On est passé d’un carré à un rectangle et on a aussi enlevé quelques composants du câblage qui ne nous servaient plus.

Ancienne platine de câblage
Nouvelle platine de câblage

Comme on peut le voir ci dessus, nous avons grandement réduis ce câblage malgré le fait qu’il manque quelques éléments.

4. Modification du Programme

Pour ce qui est du programme, nous voulions garder le même étant donné qu’il fonctionne correctement. Seulement nous voulons changer la partie commande du moteur. Au lieu de gérer le moteur via des boucles on veut gérer ce dernier via les timers de l’arduino. C’est à dire à l’aide d’interruptions.

Malheureusement, ce programme ne suffisait pas et ne marchait pas pour gérer le moteur à l’aide d’interruptions.


Maquette didactique : Train épicycloïdal

Remerciements

Nous souhaitons dans un premier temps remercier l’IUT de Mulhouse, pour nous avoir permis de réaliser ce projet.

Nous remercions également tous nos professeurs pour les connaissances qu’ils nous ont transmis durant ces deux années de DUT GEII et GMP, M.Steger, M.Cudel, M.Tessier et M.Stoeffel pour l’accompagnement dont nous avons bénéficié tout au long du projet.

Les membres du projet sont les suivants :

  • LAEMLIN Maëlis ( élève de GMP )
  • FRITSCH Louise ( élève de GMP )
  • IERACI Hugo ( élève de GEII )
  • LATARD Nino ( élève de GEII )

Sommaire

  1. Visualisation du besoin
  2. Description/Constitution
  3. Choix du type de train épicycloïdal
  4. Choix du type de maquette
  5. Choix de l’orientation de la maquette
  6. Hypothèse : type de mesure
  7. Implantation des capteurs
  8. Présentation de la maquette complète
  9. Aperçu du programme
  10. Gantt prévisionnel
  11. Gantt final
  12. Conclusion
  13. Annexe : Vidéo

1 / Visualisation du besoin

2/ Description/Constitution

3/ Choix du type de train épicycloïdal

4/ Choix du type de maquette

5/ Choix de l’orientation de la maquette

6/ Hypothèse: type de mesure

7/ Implantation des capteurs

8/ Présentation de la maquette complète

9/ Aperçu du programme

10/ Gantt prévisionnel

11/ Gantt final

12/ Conclusion

13/ Annexe: Vidéo


Course en Cours Carrosserie

Sommaire

  1. Présentation du projet
  2. Cahier des charges
  3. Conception
  4. Coût financier
  5. Usinage
  6. Conclusion

I/ Présentation du projet :

Course en cours est une compétition annuelle dont le but est d’imaginer, concevoir, construire et faire courir un véhicule doté, d’une motorisation électrique. Il n’y a pas de direction car la voiture ne devra rouler qu’en ligne droite. Différentes épreuves seront proposées tels qu’une course de rapidité sur 15 mètres, le temps de réaction (déclencher le départ du véhicule le plus rapidement possible), ainsi qu’une épreuve d’arrêt au stand

Dans le cadre de notre projet différentes tâches sont demandées. La collaboration entre 2 étudiants GEII ET 6 étudiants GMP sera nécessaire afin de mener à bien le projet.

Le travail des étudiants GMP et GEII est répartie en 4 groupes :

-Conception et réalisation des roues (2étudiants GMP)

-Conception et réalisation du châssis (2étudiants GMP)

-Conception et réalisation de la carrosserie (2étudiants GMP)

-Connectique et liaisons des systèmes électronique du moteur (2étudiants GEII)

Notre partie consiste en la réalisation de la carrosserie, pour cela nous devons respecter un cahier des charges imposé par le règlement de course en cours

Dans ce projet nous allons tout d’abord étudier le sujet avec l’analyse du cahier des charges, puis concevoir notre coque à l’aide du logiciel inventor et enfin fabriquer notre carrosserie en utilisant le procédé de stratoconception et thermoformage ainsi que du prototypage rapide pour réaliser l’aileron

II/ Cahier des charges
1)Diagramme des prestations

2)Diagramme des interacteurs

3)Tableau de caractérisation

Description fonctionnelle : Diagramme FAST

Le diagramme FAST (Function Analysis System Technic) indique comment une fonction de service est réalisée à l’aide de fonctions techniques. Il met en évidence une hiérarchie entre les fonctions techniques.

III) Conception

Choix de l’échelle du modelé

Création des plans nécessaire à la conception

Modélisation de l’aileron en 4 pièces

IV) Coût financier

Pour la partie carrosserie les coûts seront assez faibles, ils correspondent uniquement à l’achat des matières premières comme les plaques de medium pour stratoconception ainsi qu’à la plaque de pvc pour thermoformage, et de la visserie.

Ce qui fait un total de 44,4 euros TTC

V) Usinage

Usinage du moule en stratoconception

La stratoconception est un procédé de prototypage rapide qui consiste à décomposer la pièce en un ensemble de couches élémentaires appelées strates de les usiner et ensuite les assembler afin d’obtenir la pièce entière.

Sur les photos ci contres vous pouvez voir notre modèle CAO que nous avons découpé en 10 couches de 9 mm. Que nous avons ensuite usiné puis assemblé en les collant   

Prototypage rapide de l’aileron

Prototypage rapide des logos

Assemblage coque et aileron

  1. En raison de la situation actuelle nous n’avons pas réussis à thermoformer notre coque qui aurait par la suie dû être peinte et assemblé à l’aide de 4 goupilles sur le châssis de la voiture.

Ce projet nous a tout de même permis de travailler en équipe tout en collaborant avec les autres groupes du projet course en cours afin que tout le monde puisse respecter son cahier des charges. Grace à ce projet nous avons également découvert la démarche à effectuer en passant du cahier des charges, le choix de solutions technique, la conception ainsi que la fabrication pour pouvoir mener un projet à bien.


Eolienne – 2019

 Remerciements


Nous souhaitons dans un premier temps remercier l’IUT de Mulhouse, pour nous avoir permis de réaliser ce projet.

Nous remercions également tous nos professeurs pour les connaissances qu’ils nous ont transmis durant ces deux années de DUT GEII et tout particulièrement M.Steger ainsi que M.Cudel pour l’accompagnement dont nous avons bénéficié tout au long de la réalisation de ce projet.

Enfin nous remercions nos camarades pour leur aide lors de la rédaction de ce rapport.

Membres du projet :

  • Guilhem LEMAIRE
  • Loïc SCHMITT
  • Louise RIEFFEL

Sommaire


  1. Présentation du projet
  2. Analyse fonctionnelle
  3. Éolienne HY-600
  4. Equipements sélectionnés
  5. Dimensionnement des câbles

1. Présentation du projet


Dans le cadre d’un projet GEII, nous devions remettre en fonctionnement une éolienne pour l’IUT de Mulhouse. L’éolienne sur laquelle nous devions travailler était destinée à la casse suite à la démolition du site sur laquelle elle était installée, mais a été récupérée par l’IUT pour pouvoir la réutiliser. Malheureusement des parties étaient manquantes. L’IUT a pu récupérer uniquement la structure de l’éolienne, il nous faut alors reconstituer toute la partie électrique allant de pair avec l’éolienne. Nous disposons donc des pales, du moteur de l’éolienne, ainsi que de son mat.

2. Analyse fonctionnelle


Problématique : Réhabiliter et installer une éolienne sur le site de l’IUT de Mulhouse.

Ce diagramme répond au besoin en 3 questions : A qui ? / Sur quoi ? / Dans quel but ?

L’intérêt d’une éolienne est de transformer l’énergie cinétique du vent en une énergie électrique :

Schéma explicatif des composants d’une éolienne :

Fonctionnement souhaité de l’éolienne : L’éolienne génère de l’énergie électrique, cette énergie est ensuite transmise au contrôleur qui (?), l’énergie est ensuite stockée dans la batterie. L’onduleur est lui raccordé à la batterie ainsi qu’au réseau électrique. Si il reste de l’électricité dans la batterie, l’onduleur transfert cette électricité au réseau électrique de l’IUT, sinon il transfert à l’IUT l’énergie provenant du réseau électrique général.

Il nous fallait alors trouver les équipements suivants :

  • Contrôleur -> Régulateur de charge
  • Batterie
  • Onduleur
  • Connecteur de charge (celui initialement présent dans l’éolienne était défectueux)

3. Éolienne HY-600



Avec la référence trouvée sur l’éolienne nous avons pu trouver les documentations suivantes :

  • Phaesun : Small ind Turbie User Manual HY-400, HY-600, HY-1000
  • Windmax : Wind Turbine Guidbook HY-400, HY-600, HY-1000, HY-2000, HY-3000

Nous ne pouvons pas être sûrs qu’une de ces documentation correspond parfaitement à l’éolienne que nous disposons mais elles apportent des informations intéressantes qui nous serons plus qu’utiles pour la suite du projet.

On relève alors les informations issues des diverses documentations :

  • Plus la vitesse moyenne du vent est élevée, plus l’éolienne sera génératrice d’énergie. La puissance disponible dans le vent augmente avec le cube de la vitesse du vent. Une turbulence plus faible entraîne également plus de puissance.
  • Les obstacles (arbres, bâtiments, etc.) réduiront la vitesse du vent et, par conséquent, dégraderont les performances de l’éolienne. Une tour immédiatement sous le vent d’un bâtiment doit avoir au moins deux fois sa hauteur.
  • Un dimensionnement correct des fils est important pour la sécurité et l’efficacité énergétique. Des câbles sous-dimensionnés entraîneront une perte d’énergie dans le système, créeront une surchauffe et augmenteront le risque d’incendie. Plus la taille du fil est grande, plus la perte d’énergie est faible. Cependant, les câbles de plus grande taille sont plus coûteux.

4. Equipements sélectionnés


Régulateur de charge

Nous avons choisi un régulateur de charge capable de charger des batteries 12/24V, qui fonctionne en mode standard (régulateur d’éolienne seule) ou en mode hybride (éolienne/solaire). La puissance de cet équipement est à 600w car c’est la puissance crête produite par notre éolienne.

 

 

Pour l’instant on souhaite utiliser cet équipement en mode standard, mais la perspective du mode hybride est une bonne chose pour permettre, dans le futur, la modification et/ou l’amélioration du système actuellement souhaité.

 

Batteries

Recherche de deux batteries  correspondant aux caractéristiques du régulateur de charge :

Fonctionnement des batteries selon leur assemblage:

On dispose les batteries en série pour  additionner les tensions et obtenir une tension de sortie de 24V.

On obtient alors les caractéristiques suivantes :

  • Une puissance de 600W
  • Une tension de 24V
  • Un courant de : 600/24 =25A
  • Une capacité de 75Ah ou de 50Ah, selon le modèle de batterie choisi

5. Dimensionnement des câbles


De l’éolienne au régulateur

Nous avons 40 mètres qui séparent l’éolienne du régulateur.

Ayant une puissance P = 600W et une tension U = 24V on en déduit la relation P = U*I*√3

D’où : I =P/(U∗√3) =600/(24∗√3)  ≈ 15A

Chute de tension pour : S = 10 mm² et L = 40m

Chute de tension pour : S = 16 mm² et L = 40m

Un câble d’une section de 16mm² garantissait une plus faible chute de tension, mais après réflexion, en fonction de nos besoin et pour des raisons budgétaires, on choisira un câble de section 10mm².

D’après les caractéristiques ci-dessus nous avons choisi le câble suivant :

 

 

Du régulateur à la batterie

10 mètres séparent le régulateur des batteries.

A la sortie du régulateur nous avons une puissance P = 600W et une tension U = 24V

D’où I = P/U =600/24  ≈ 25A

 

Chute de tension pour : S = 6 mm² et L = 10m

Sachant qu’en sortie du régulateur nous sommes en monophasé, nous avons choisi les deux câbles suivants :

Cosse batterie + Embout de câble 6mm²

Du côté du régulateur le câblage se fera à l’aide d’embouts, du coté de la batterie le câblage se fera à partir de cosses à  oeillet.

 

 

Du régulateur à l’onduleur

10 mètres séparent le régulateur de l’onduleur. A la sortie du régulateur nous avons une puissance P = 600W et une tension U = 24V

D’où I = P/U =600/24  ≈ 25A

Chute de tension pour : S = 6 mm² et L = 10m

Sachant qu’en sortie du régulateur nous sommes en monophasé, nous avons choisi les deux câbles suivants :

 

 

 

De l’onduleur au réseau IUT

Sachant qu’en sortie de l’onduleur nous sommes en triphasé, nous avons choisi le câble suivant :

 

 

Liaisons équipotentielles

30 mètres séparent l’éolienne du point de terre, on pourrait prendre une section similaire à celle du câble de l’éolienne jusqu’au régulateur mais pour question de sécurité on prendra du 16mm²

Ci dessous le câble choisi :

Choix de la cosse :

On a choisi de percer le mât afin de pouvoir y fixer le câble de mise à la terre à l’aide de cosses.

Conclusion


Fin mars/début avril nous avons eu la responsabilité de remettre en état une éolienne qui allait partir à la casse. La structure était conservée, mais la partie électrique de l’installation n’a pu être récupérée.Il nous fallait donc reconstituer cette partie.

Nous avons alors effectuer des recherches sur les différents équipements à intégrer afin de reconstituer l’installation.

Nous avons alors pu identifier et commander les équipements de base nécessaires au fonctionnement du système souhaité :

  • Contrôleur
  • Batterie
  • Câbles

Il ne reste plus qu’à trouver l’onduleur et connecteur de charge qui assurera la liaison entre le moteur et le régulateur ainsi que toute la partie concernant la protection de l’ouvrage.

Webographie




Image principale éolienne :https://www.amazon.fr/TOPQSC-R%C3%A9sidentiel-Imperm%C3%A9able-D%C3%A9marrage-Efficacit%C3%A9/dp/B071QWM9RX/ref=sr_1_28?keywords=Mini+eolienne&qid=1560246280&s=gateway&sr=8-28

Image éolienne schéma : <a href=https://fr.pngtree.com>Graphiques de pngtree.com</a>

Schéma explicatif composants éolienne : https://www.connaissancedesenergies.org/quels-sont-les-constituants-d-une-eolienne-130125

Régulateur de charge : https://www.future-tech.fr/regulateur-de-charge-solaire-eolienne-12v-24v-600w,fr,4,757.cfm

Batterie 75Ah : https://fr.rs-online.com/web/p/batteries-au-plomb/7270439/

Batterie 50Ah : https://fr.rs-online.com/web/p/batteries-au-plomb/8720096/


Banc de vision 2019


INTRODUCTION

Le projet « Banc de Vision » a été effectué en collaboration avec des étudiants GMP. Il a été nécessaire d’allier les compétences des uns et des autres afin de mener à bien ce projet.

Ce banc de vision à été étudié et conçu afin de répondre à différents besoins: il permet d’une part la numérisation d’une pièce de fonderie sous différents angles de vue et facilite d’autre part la détection des défauts de surface éventuels sur une pièce. La structure du banc est commune avec d’autres projets tels que le banc de vision à éclairage multi-spectral et permet donc d’augmenter les possibilités proposées à l’utilisateur.

 


SOMMAIRE

1. DIAGRAMMES
2. CAHIER DES CHARGES
3. LISTE DU MATÉRIEL
4. MOTEUR PAS À PAS
5. CLAVIER 16 TOUCHES
6. CAPTEUR DE FIN DE COURSE
7. PAN-TILT
8. CONCEPTION DES PIECES MECANIQUES
9. CONCLUSION
10. ANNEXES

1. DIAGRAMMES

1.1. DIAGRAMME PIEUVRE

Ce banc de vision s’adresse à quiconque souhaite avoir une première approche de la géométrie d’un pièce de fonderie, en la visionnnant sous différents angles afin de numériser par exemple cette pièce ou de détecter des défauts de surface.

1.2. FONCTIONS

FP1: capturer une pièce de fonderie

FC1: s’adapter aux dimensions des pièces de fonderie

FC2: respecter le budget

FC3: se fixer au châssis prédéfini avec le projet « éclairage multi-spectral »

FC4: assurer une prise de vue sous différents angles et à différentes hauteurs

FC5: Permettre le stockage et le transfert des photos


2. CAHIER DES CHARGES

 

Il est demandé aux élèves l’étude préalable et la conception d’un banc de vision permettant de numériser une pièce (de fonderie par exemple) sous différents angles.

Ce banc est constitué d’une glissière verticale sur laquelle une caméra peut se déplacer de haut en bas et s’incliner grâce à un support pan-tilt. Ce mécanisme doit s’intégrer au sein d’une structure aluminium multifonctions, commune à différents projets.

Le cahier des charges stipule que le banc peut accueillir des pièces de fonderie de 300 mm de longueur, 300 mm de largeur et 400 mm de hauteur. La caméra permettant la prise de clichés doit être située à 400 mm minimum de la pièce à analyser. La pièce peut être posée sur un plateau tournant (autre projet) afin de visualiser toutes ses faces. Si l’on souhaite une vue de la partie haute de la pièce, la caméra pourra être déplacée le long d’un axe afin d’augmenter son altitude de prise de vue. Un moteur pas à pas assure la translation verticale de la caméra.

La capture de la pièce pourra être effectuée soit manuellement, soit à l’aide de programmes préétablis à l’aide d’un clavier de commande.

Afin de ne pas forcer le mécanisme et endommager les différentes pièces, deux butées de fin de course assurent la pérennité de l’ensemble du système.

 

Le diagramme FAST ci-dessous permet de retrouver toutes les fonctions de services , les solutions constructives ainsi que les critères auxquels le banc de vision doit répondre.

 

 


3. LISTE DU MATÉRIEL

Notre première mission a été de sélectionner le matériel nécessaire à nos tests.

  • une carte Arduino Mega
  • un moteur pas à pas de 12V, 1.2A
  • un shielda vis pour faciliter les branchements
  • une alimentation de 230V en entrée et 12V + 5V en sortie est utilisée pour alimenter l’ensemble du banc de vision.
  • un servo-moteur pour le pan-tilt
  • un clavier 16 touches
  • 2 capteurs de fin de course

 


4. MOTEUR PAS À PAS

Qu’est-ce qu’un moteur pas à pas ?

Un moteur pas à pas est un moteur permettant de commander précisément le positionnement de son rotor quel que soit le nombre de tours qu’il a à exécuter. Chaque moteur a un nombre de pas définis par révolution, c’est-à-dire un nombre de secteurs bien déterminé. Dans notre cas chaque pas fait 1,8°,  soit 200 pas pour effectuer un tour de 360°.

Afin d’assurer l’entrainement permettant la translation verticale de la caméra, nous avons utilisé un moteur pas à pas de 12V, 1.2A, un microstep driver permettant l’alimentation en puissance ainsi que la gestion partielle de la rotation du moteur et un Arduino Mega en guise d’électronique de commande.

Voici le schéma simplifié de l’installation:

La carte Arduino transmet un signal carré au micro step driver (partie puissance) qui se charge en interne d’alimenter alternativement chaque bobine du moteur. Plus la durée entre deux impulsions consécutives est courte, plus la vitesse de rotation du moteur est importante.

La cadence de rotation est déterminée par le temps séparant deux impulsions. Plus le temps est court, plus le moteur est rapide, plus le temps est grand, plus le moteur sera lent.

PINs:

  • PUL+/-: vitesse de rotation du moteur en fonction de la cadence des impulsions de l’Arduino
  • DIR+/-: sens de rotation du moteur
  • ENA+/-: alimentation du moteur (désactiver l’alimentation quand le moteur n’est pas en rotation, sinon il surchauffe!)
  • A et B: bobines du moteur

 


5. CLAVIER 16 TOUCHES

Un clavier 16 touches est utilisé afin de permettre aux utilisateurs de contrôler facilement le banc. Il est possible de démarrer des programmes automatiques, mais aussi de commander le banc en mode manuel.

Description des touches:

  • Carré noir: entrer en mode automatique
  • Carré blanc: entrer en mode manuel
  • 0,1,2,3: programmes automatiques
  • 9: trigger photos
  • Flèches Haut/Bas: monter/descendre le banc en mode manuel
  • Flèches Gauche/ Droite: monter/descendre le pan-tilt par pas de 10°
  • Autres touches: non utilisées pour l’instant

 

 

Le clavier fonctionne de la manière suivante:

Il est constitué de lignes et de colonnes, le tout étant relié aux ports de l’Arduino. Les lignes sont connectées sur des sorties et les colonnes sur des entrées. Chaque ligne du clavier est alimentée tour à tour en 5V (balayage).

 

 

Lors d’un appui sur une des touches du clavier, un contact se crée entre une ligne et une colonne et la détection de la touche est effectuée par l’Arduino. L’Arduino n’a plus qu’à réaliser la correspondance entre la ligne alimentée et la colonne d’où vient le signal pour connaître le numéro de la touche enfoncée. Une librairie permet de réaliser ce traitement.

 


6. CAPTEUR DE FIN DE COURSE

Les capteurs de fin de course que nous avons utilisés sont des capteurs infrarouges (E18-DN80K). Ils sont équipés d’un émetteur et d’un récepteur. L’émetteur crée un faisceau lumineux de manière constante. Temps que le faisceau n’est pas réfléchi, cela signifie qu’aucun obstacle n’est présent devant le capteur. Si au contraire le faisceau est réfléchi vers la cellule réceptrice, c’est qu’un obstacle est dans la trajectoire du faisceau. Le capteur transmet alors un signal de 5V continu au port de l’Arduino.

Dans notre cas, nous avons placé deux de ces capteurs sur le banc, un en haut de la glissière et l’autre en bas.

Si le capteur haut détecte un obstacle, il envoie un signal à l’Arduino afin de stopper la montée du plateau. Même principe avec le capteur bas, lorsque le plateau descend.

 


7. PAN-TILT

Afin de permettre à la caméra se s’incliner, nous avons utilisé un support un pan-tilt.

Un servo-moteur de modélisme permet l’inclinaison de celui-ci. Les GMP ont réalisé un support de caméra sur mesure afin d’épouser les formes du servo-moteur.

 

Au niveau de la programmation, nous avons fait le choix de donner au servo-moteur une course maximale de 90° par pas de 10°. Il peut donc se déplacer de l’horizontale à la verticale et inversement.

 


 

 

8. CONCEPTION DES PIECES MECANIQUES

8.1   Choix de conception

 

Le cahier des charges demande d’assurer la prise de vue de clichés dans différents angles et surtout à différentes hauteurs. De ce fait un guidage en translation de la caméra est nécessaire. Plusieurs solutions pouvaient être utilisées :

Guidage en translation par galet                                        Guidage en translation par patin                                   Guidage en translation par profilés ronds

 

Peu importe la choix de conception l’entrainement du plateau s’effectue avec un système poulie cranté / courroie.

Après réflexions c’est le guidage en translation par profilés ronds qui va être utilisé pour des raisons de coût, de faisabilité et d’assemblage. Le chariot (partie qui translate sur les profilés ronds) sera lié sur un profilé rond par une liaison pivot et sur l’autre profilé par une liaison bi-ponctuelle.

 

8.2   Vue d’ensemble

 

Pour avoir un aperçu de l’ensemble, ci-dessous une vue du projet modélisé sur Créo :

 

Parmi tous ces composants certaines pièces ont été achetées soit :

  • Les profilés ronds
  • Les supports d’arbres
  • Les deux poulies
  • Le bâti

 

8.3   Usinage de la plaque support

 

Ci-dessous la plaque support où tout les éléments du banc de vision vont se fixer. L’objectif de cela est de pouvoir avoir une interface amovible qui peut se démonter par l’intermédiaire de 4 vis. Cette plaque à été réalisée sur la machine de découpe jet d’eau dans l’atelier GMP.

 

8.4   Fabrication additive 3D

8.4.1  Conception du chariot

 

Comme dit précédemment, le chariot va coulisser sur deux profilés ronds mais avec deux liaisons différentes :

  • Une liaison pivot glissant d’un côté assurée par une douille à billes
  • Une liaison bi-ponctuelle pour empêcher la rotation de la pivot glissant

Les deux liaisons permettent d’aboutir à une liaison glissière qui correspond bien au mouvement recherché.

 

Nous avons décidé de nous orienter vers la fabrication additive 3D pour faire cette pièce, ci-dessous la conception finale du chariot :

Face avant du chariot                                                                                 Face arrière du chariot

 

Sur la face avant il  y a un trou qui permet par l’intermédiaire d’un boulon de fixer le pantilt qui à été fait également en impression 3D.

 

8.4.2  Support moteur

 

Pour fixer le moteur (qui va entraîner une poulie crantée) à la plaque support, un support à du être réalisé.

Le support répond bien à sa fonction mais plusieurs axes d’améliorations seraient envisageables. En effet la pièce n’est pas rigide et fléchit, il serait nécessaire d’ajouter des renforts sur la pièce ou bien de la faire en métal (Découpe jet d’eau + Pliage).

 

8.4.3  Pan tilt

 

Pour permettre l’inclinaison de la caméra, nous avons utilisé un servomoteur mais aucune interface n’était fournie avec. De ce fait toujours en fabrication additive plastique nous avons réalisé cette interface qui permet d’obtenir des prises de vues dans différents angles.

 

L’ensemble est composé de deux pièces :

  • Une pièce en liaison avec le chariot
  • Une pièce en liaison avec la caméra

Bien que le plastique offre une légèreté incomparable par rapport au métal, des renforts ont été prévus pour éviter toute flexion.

 

Ci-dessous un court aperçu du résultat final, aboutissement du travail effectué par les GEII et les GMP :

 

 


9. CONCLUSION GEII

Nous avons trouvé ce projet très intéressant. Le fait de pouvoir travailler en équipe avec un groupe de GMP très investis dans leur travail était un réel plaisir et nous a permis de mener à bien ce projet.

Ce projet nous a permis de découvrir le fonctionnement d’un moteur pas à pas mais aussi celui d’un clavier et d’un capteur infrarouge. Nous avons aussi pu approfondir nos connaissances en programmation et voir le potentiel impressionnant des cartes Arduino, pourtant vendues à un prix raisonnable. Ces dernières permettent de réaliser des projets aboutis avec une grande liberté et de multiples fonctionnalités.

Nous sommes satisfaits du résultat final et espérons que ce projet pourra évoluer dès l’an prochain!

 


10. ANNEXES

DATASHEET:

LIEN CAPTEUR DE FIN DE COURSE

LIEN CLAVIER 16 TOUCHES

LIEN CODE ARDUINO

LIEN CODE PRÉSENTATION POWER POINT


Banc de Vision à éclairage multi-spectral

Sommaire :

  1. Introduction
  2. Etude du projet
  3. Partie GMP
    1. Les solutions adoptées
    2. La CAO
    3. La réalisation du projet
  4. Partie GEII
    1. L’éclairage
    2. La capture d’images
    3. La motorisation
    4. Les supports des LEDs et le boitier de commande
  5. Conclusion

Introduction :

Le projet de « Banc d’éclairage multi-spectral » fut un projet en collaboration entre le département Génie Mécanique et Productique et le département Génie Electrique et Informatique Industrielle. Il nous a été confié par Monsieur Christophe Cudel, professeur dans le département GEII et responsable des apprentis de ce département.

Ce projet a pour but de prendre des photos en noir et blanc, sous différents spectres sélectionnés, de plusieurs pièces défilant sur un plateau motorisé. Ces différentes vues nous permettrons ensuite de mettre en évidence les défauts de la pièce. Nous pourrons aussi, avec les images de certains spectres, reconstituer une image couleur à partir de ceux-ci.

Pour cela, un groupe de 5 personnes fut constitué, 3 élèves de GMP et 2 élèves de GEII.

Les étudiants de GMP se sont occupés de toute la partie mécanique et du bâti et les étudiants de GEII ont développé toute la partie éclairage, la capture de l’image et la commande du moteur.

Le bâti ci-dessus, situé dans le département GEII, sera notre modèle. Pour notre projet, un bâti similaire a été commandé avec les dimensions adéquats. Il a été décidé que le bâti sera commun avec le projet de « Banc de vision » d’un autre groupe.

Etude du projet :

Pour débuter le projet, nous fûmes, tous les 5, une étude de celui-ci. Nous avons donc commencé par une bête à cornes afin de répondre aux questions : pour qui ? Sur quoi ? Pour quoi ?

Une fois ces questions résolues, nous avons pu établir une analyse fonctionnel du projet.

Le principe découlant de cette analyse est simple. Depuis un boitier de commande, nous commandons l’exécution des tâches suivantes : la couleur de l’éclairage, le nombre de pièces à analyser et le départ du traitement.

Les commandes effectuées depuis la console sont envoyées à l’arduino qui contrôle toute la procédure. Ainsi, en fonction des couleurs et du nombre de pièces choisies,l’arduino va envoyer les informations aux différents actionneurs aux moments voulus.

 

Partie GMP :

Les solutions adoptées :

Pour ce projet, l’idée nous ayant semblé la plus simple à réaliser s’est rapidement avéré être la réalisation d’une plaque circulaire avec des emplacements pour les pièces à photographier, cette solution ne nécessitant qu’un unique moteur, la ou une table se déplaçant sur deux axes en aurait nécessité deux.

Par la même, ce projet devant s’adapter dans un bâti composé de profilés, il nous est rapidement venu à l’idée d’ajouter à ce bâti une barre verticale, au fond au centre de ce bâti, sur laquelle nous pourrions fixer notre caméra et notre éclairage, ce à la verticale du plateau tournant qui emmènerait les pièces sous la caméra.

 

La CAO :

(CAO initiale de notre projet)

(CAO suite à modifications : pignons et roue-dentée ont été inversés – la barre verticale a été décalée sur un des cotés afin de pouvoir modifier le support des LEDs ainsi que le support caméra)

[Transmission entre le moteur qui vient se fixer sous l’adaptateur rouge et le plateau tournant, guidé par l’axe vert fixe dans le bâti, par un système roue dentée (jaune) – pignon (bleu). Nous nécessitons un rapport important de par la faible puissance du moteur que nous avions à utiliser. Les engrenages sont ici inversés (erreur de notre part, corrigé dans la version finale)]

[L’entraxe de l’engrenage est géré à l’aide de trous oblongs dans la plaque maintenant le moteur (en bleu), le pignon étant fixé sur l’adaptateur qui est directement sur la sortie du moteur]

(Cette plaque vient supporter une caméra. Il y a de nombreux trous dans la zone à droite permettant d’accueillir divers modèles de caméra)

[Cette plaque sert à tenir les deux anneaux de LEDs (1 RGB, 1 IR/UV). Sous les anneaux de LEDs sera fixé un diffusant (plaque de plastique semi-transparente)].

 

[Ces deux plaques sont fixées au bâti par des équerres, permettant d’en régler la position en hauteur. On peut voir sur cette image le plus gros des modèles de caméra que nous avions à adapter sur le support, et le plus grand des anneaux de LEDs (en rouge). La caméra peut passer au travers du support de LEDs à l’aide du trou situé en son milieu]

[Le plateau tournant (jaune) peut accueillir deux plateaux différents, avec respectivement six et neuf cases, mis en position par les deux goujons gris]

La réalisation du projet :

Nous n’avons pas eu le temps de réaliser toutes les pièces de notre projet : seul ont été réalisés : le palier lisse venant sur l’axe du plateau tournant pour permettre la rotation de ce dernier, l’adaptateur sortie du moteur, et l’axe du plateau tournant.

 

La partie GEII :

L’éclairage :

Afin d’éclairer le banc de vision, 2 cercles de LEDs furent utilisés. Un premier, petit, composé de 24 LEDs et un second, plus grand, composé de 4 quart de cercle, pour un total de 60 LEDs.

Le premier cercle fut utilisé pour l’éclairage du banc dans les spectres visibles par l’œil humain. Le second cercle aurait dû être utilisé pour l’éclairage du banc dans les spectres invisibles par l’homme, l’infrarouge et l’ultraviolet. Malheureusement, les LEDs infrarouges et ultraviolettes étant relativement chère, le second cercle n’a pas pu être modifier. Il éclairera donc sous le même spectre que le premier.

Les cercles sont composés de LEDs adressables WS2812B. La spécificité de celles-ci est qu’elles sont transmetteuses. C’est à dire qu’une LED, connectée en série avec les autres, va recevoir une trame de n fois 24 bits. Cette trame constitue le paramétrage des LEDs. La première LED va être paramétrée par les premier 24 bit puis, va transmettre le reste de la trame à la LED suivante. Cette opération va se produire le nombre de fois, n, équivalent au nombre de LEDs que possède le cercle paramétré.

Afin de commander nos cercles, nous avons utilisé un arduino UNO, qui sera aussi utilisé pour la capture d’image et la commande du moteur, et la bibliothèque  de fonctions fourni par le constructeur.  Le programme de la gestion de l’éclairage peut être résumé par le diagramme suivant :

L’entièreté des programmes sont disponible en téléchargement ici.

La capture de l’image :

Pour la capture d’images nous avions comme obligation de pouvoir accepter une caméra standard ou une caméra intelligente, pour le projet un caméra cognex. Ces caméra ont la possibilité de prendre des photos grâce à un signal déclencheur, nous avons donc utilisé cela lors de ce projet.

Nous avons intégré le déclenchement de la capture dans le programme de la gestion des éclairages comme le diagramme ci-dessous peut vous le montrer.

Après l’allumage des LEDs dans la couleur souhaité nous envoyant une impulsion, par le biais d’un signal haut puis bas, sur l’entrée de déclenchement de la caméra.

Les caméra étant différentes, un soucis se posa. La caméra standard acceptant un signal de déclenchement de 5V n’a aucun soucis pour fonctionner en étant branchée sur l’arduino. En revanche, la caméra Cognex a un déclenchement plus élevé.

Nous avons donc utilisé un optocoupleur afin de le piloter. Pour cela l’optocoupleur a dû être modifié car le signal sortie était encore trop faible. En effet, l’optocoupleur possédait une résistance de 10kΩ  qui, couplé avec les 10kΩ déjà présent, était beaucoup trop élevé. Pour abaisser cette résistance, nous avons donc rajouté une résistance de 10kΩ  en parallèle à celle de l’optocoupleur.

Cela nous a permis de baisser suffisamment la résistance pour que le signal de déclenchement soit détecté par la caméra.

Le fonctionnement du moteur :

Pour le défilement des pièces nous avons utilisé un moteur pas à pas, contrôlé par l’arduino, via un shield moteur.Ce moteur est composé de deux bobines qui fonctionne de manière alterné afin de faire tourner l’axe. Cette gestion alternative est gérer par le shield moteur, il nous a permis de commander le sens du moteur, sa rotation ainsi que son alimentation.

Lors de l’exécution du programme, l’arduino envoie une demande de rotation au shield moteur via une impulsion en 5V. Celui-ci envoie ensuite la commande au moteur via un signal en 12V.

Cette impulsion faisant tourner le moteur que d’un seul pas, nous avons donc bouclé cette partie de code afin de l’exécuter le nombre de fois nécessaire. Notre programme possédant 2 modes de fonctionnement, le premier permet de traiter 6 pièces et le second 9 pièces, celui-ci devra donc boucler un nombre différent de fois.

Afin de calculer ce nombre nous savions que le moteur possédait 200 pas, nous avons donc divisé ce nombre par le nombre de pièce observées afin de connaitre le nombre de pas à effectuer entre chaque pièce. Lors ce ces calculs, nous avons remarqué un reste dans ces division. Ainsi pour supprimer le décalage qui sera créé, nous avons ajouté une rotation de 2 pas à la fin du programme.

Les supports des LEDs et le boitier de commande :

Les supports des cercles de LEDs n’ayant pas pu être usinés par le GMP par manque de temps, nous les avons donc fait à l’IUT LAB. Pour cela nous les avons dessinés sur le logiciel CorelDraw puis fait découper par une découpeuse/graveuse laser (CNC) sur une plaque de contreplaqué de 5mm. Nous avons aussi découpé les diffusants sur une plaque de plastique transparent de 3mm.

Une fois les pièces finalisées, nous avons vissé/collé les cercles de LEDs sur leur support et mis en  place leurs diffusants.

Nous en avons aussi profité pour créer notre boitier de commande. Pour cela nous avons réutilisé la CNC afin de découper notre boîte dans une planche de contreplaqué de 5mm. Sur la face avant nous avons ajouté des trous afin de pouvoir fixer les différentes commandes sur le boîtier. Nous y avons aussi fait graver la fonction de chaque commande afin que l’interface soit clair pour l’utilisateur et quelques éléments esthétiques pour finalement obtenir ce résultat :

Conclusion :

Lors de ce projet nous avons pu apprendre beaucoup de choses. Nous avons notamment pu découvrir ce qu’était un optocoupleur et comment cela fonctionnait, ou encore comment contrôler un moteur pas à pas grâce à un arduino. La plus grande découverte fut le fonctionnement des LEDs adressables ainsi que la manière de les programmer grâce à sa bibliothèque de fonctions.

Au final, ce projet a pu nous apporter beaucoup de chose, tant en apprentissage qu’en mise en oeuvre de connaissances. Nous avons aussi pu découvrir et utiliser des machines complexes à l’IUT LAB ainsi que leurs logiciel d’exploitation. Tout cela fut très instructif malgré certains points n’ayant pas pu êtres testé en conditions réelles, dû à certaines pièces manquantes.

Ce projet pourrait donc être amélioré de plusieurs façons :

Pour commencer, nous pourrions usiner les différents plateaux initialement pensés.

Ensuite, nous pourrions tester notre programme de commande du moteur et le corriger aux besoins.

Une fois ces éléments fait, nous pourrions installer notre système sur le bâti initial.

Ces étapes importantes faites, nous pourrions refaire le câblage des éléments du projet, afin que notre boîtier de commande ne s’ouvre plus sous la pression des câbles à l’intérieurs.

Nous pourrions aussi le modifier en y ajoutant un bornier. Cela nous facilitera le câblage, le branchement/débranchement et le changement de caméra. Cela isolerait aussi le câblage à l’intérieur du boitier, ce qui nous garantira l’intégrité du câblage de la boite.

 

Nous espérons que ce projet pourra être continué l’année prochaine et que les améliorations citées ci-dessus pourront être mise en oeuvre.


Bobineuse d’imprimante 3D


I.           Introduction

II.         Cahier des charges

     1)      « Bête à corne » : énoncé du besoin

     2)      Diagramme « pieuvre » : analyse des besoins

     3)      Contraintes

III.         Conception

     1)      Solution retenue : schéma cinématique

     2)      Calcul du rapport d’engrenages

     3)      Modélisation

     4)      Définition du nombre de tour de la bobine

IV.         Réalisation

V. Conclusion

 

I.                   Introduction

Le projet tuteuré de notre DUT a pour objectif de réaliser un système permettant de rembobiner le fil d’imprimante 3D d’une bobine achetée sur une bobine type de l’imprimante afin de faciliter la le transfert.

Nous sommes deux étudiants de GMP à réaliser ce projet :

VUILLEMIN Joffrey
CONSALVO Matteo

II.                Cahier des charges

 

1)     « Bête à corne » : énoncé du besoin

 

 

2)     Diagramme « pieuvre » : analyse des besoins

 

FP1 : Permettre à l’utilisateur de rembobiner un fil facilement et sans effort.

FP2 : Transmettre le fil d’une bobine achetée sur la bobine type de l’imprimante.

FC1 : S’adapter à la diversité de bobine achetée.

FC2 : Permettre à l’utilisateur une mise en place rapide du système.

FC3 : S’adapter à l’énergie du secteur.

FC4 : S’adapter à l’environnement : être maniable.

3)     Contraintes

Pour réaliser le système, nous sommes libres de sa conception mais avec quelques contraintes :

  • Enrouler une bobine de 1 kg de fil d’ABS de Ø 1,75mm
  • Temps pour l’enroulage : +/- 1h
  • Vitesse max de la bobine : 150tr/min
  • Variété de bobine achetée
  • Enrouler le fil de façon à faire des spires propres
  • Un seul moteur pour la rotation de la bobine et le guidage du fil
  • Budget de 500 €

III.              Conception

1)     Solution retenue : schéma cinématique

Nous avons décidé de réaliser ce système avec une liaison crémaillère et demi-pignon afin que ceux-ci, qui tournent dans le sens opposé, font faire des aller-retours à la crémaillère de la distance de la largeur de la bobine pour enrouler le fil de manière propre. Nous avons alors réalisé une suite d’engranges comme sur le schéma cinématique suivant :

2)     Calcul du rapport d’engrenages

Largeur de la bobine = 56mm

Diamètre du fil = 1,75mm

S=R*θ

Or on veut un angle d’entrainement pour chaque demi pignon de π rad.

On peut donc déterminer le rayon primitif : 56/π =17,825mm

La condition pour que la bobine enroule le fil de façon correcte : 1 tour bobine doit correspondre à une avance de 1,75mm

Il faut donc que le pignon tourne d’un angle de 1,75/17,825=0,09818 rad quand la bobine fait un tour.

On détermine donc le rapport de réduction qui est de 0,09818/2π= 0,01563

R=0,01563

R=(Z1*Z3) / (Z2*Z4) = 0,01563

En prenant Z1=Z3=17

Et Z2=Z4=136

On obtient un R=0,015625

3)     Modélisation

Pour commencer la conception, on a d’abord réalisé un squelette pour définir l’emplacement de chaque engrenage et chaque axe. On a donc pu ensuite réaliser le bâti.

Pour le concevoir, on a pris en compte les entraxes entre les différents engrenages pour ainsi créer les différents supports. Ensuite on a réalisé chaque axe en faisant son assemblage pour créer ainsi des chaines de côtes et avoir une cotation fonctionnelle des arbres. On a ensuite réalisé les plans de fabrications des différentes pièces à fabriquer.

Pour avoir un réglage possible des entraxes des pignons, on a décidé d’attacher les axes au bâti avec des vis et avec un trou de passage permettant du jeu.

Afin de pouvoir régler la position d’un des deux demi-pignon, on a ajouté une plaque réglable axialement permettant de contrôler la position du demi-pignon qui lui sera fixé dessus.

Pour régler la position de la crémaillère on a mis des trous oblongs sur celle-ci pour son réglage par rapport à un axe et sur le bâti pour son réglage par rapport à la crémaillère :

 

Pour la réalisation des plans, on a fait les chaînes de côtes afin de coté l’arbre fonctionnellement. En voici quelques exemples :

        

 

 

 

4)     Définition du nombre de tour de la bobine

Pour que le moteur s’arrête de tourner, on a prévu un capteur qui va compteur le nombre de tour et qui va s’arrêter à un certain nombre. Celui-ci va être défini de la manière suivante :

Il faut qu’on rembobine 1kg de fil ce qui correspond à 410 m de fil. La largeur de la bobine étant de 56 mm et le fil de diamètre 1.75 mm. On peut donc faire 32 tours par rangée de fil sur la largeur de la bobine. Le diamètre de la bobine vide est de 148mm. On a donc une suite arithmétique pour calculer le nombre de tour pour arriver à 410m : Un = (32*π*148) + 0.351n

On trouve r= 0.351 car à chaque tour on ajoute 1.75*2 au diamètre d’enroulement :

U1=32*π*(148+2*1.75) = 15,230 m

U0=32*π*148 = 14,879 m

Donc r = 15,230-14,879 = 0.351 m

On a donc la relation suivante : Un = 14.879 + 0.351n

Avec la formule de la somme des suites arithmétiques, on trouve que U0+U1+……+U21 = 408.42m

Il faut donc que la bobine fasse 21*32 = 672 tours pour qu’elle ait rembobiné 1 kg de fil.

IV.             Réalisation

Pour la réalisation des pièces, nous avons décidé d’usiner à la machine traditionnelle les axes et les supports. De plus, nous avons réalisé le bâti en aluminium en découpe jet d’eau. Nous voulions créer notre série d’engrenages avec cette machine découpe jet d’eau mais elle est tombée en panne. Nous avons donc changé de méthode et alors utilisé l’impression 3D en plastique pour les réaliser.

V.                Conclusion

 

Ce projet nous a permis de voir comment fonctionne le déroulement d’un projet, de la phase d’avant-projet, d’étude, de commande et enfin de réalisation. Manquant beaucoup de temps en atelier, nous n’avons pas pu finir la réalisation.


Course en cours 2019

LE PROJET COURSE EN COURS

Objet : Concevoir et réaliser un modèle réduit de voiture à moteur électrique dans le but de participer à la finale de course en cours se déroulant à Paris le 05 Juin 2019

 

Tout d’abord, nous devions respecter un certain nombre de contraintes comme les dimensions du véhicule, le poids, le moteur imposé…

Nous étions un groupe de 3 étudiants constitué de 2 GMP et un GEII :  – Delimata Thomas – Nambot Maxime  –  Meyer Robin

Notre équipe, composée de 3 passionnés d’automobile, plus ou moins ancienne sellons les affinités de chacun, s’est orienté vers la conception d’une voiture au style néo-rétro, inspiré d’un modèle mythique des années 70 et 80, championne d’Europe de rallycross en 1977. Fabriqué par une marque qui vient de renaître de ses cendre dernièrement,nous parlons évidement de l’Alpine A310.

Pour faire plaisir à Maxime, on peut également retrouver des air de Bx dans le design de la caisse, mais chuttt….

De la conception à la réalisation de la voiture puis la course

La conception du châssis

Nous sommes partis dans l’idée de réaliser un châssis en impression 3D

 

 

Nous avons prévus des supports pour la batterie ainsi que notre moteur

Ci dessous, un éclaté de la voiture complète:

projetsgeii.iutmulhouse.uha.fr/…/eclate.pdf

La conception des autres éléments

Sur ce châssis, nous avons du prévoir des fixations pour un support d’axe avant.

Ce support d’axe a été réalisé en fraisage sur commande numérique à partir d’un brut en aluminium.

Robin s’est occupé de réaliser la FAO de cette pièce, et Maxime s’est occupé des réglages sur machine.

 

Afin de réaliser la liaison entre le support d’axe et les roues, nous avons usine des axes en acier à partir de diamètres existants. Robin s’est occupé de l’usinage des gorges pour les anneaux élastiques sur tour traditionnel ainsi que des logements pour l’alésage des roues. Maxime, de son côté à commander des roulements pour afin d’assurer la liaison entre l’axe et le support d’axe.

 

 

 

 

Ensuite nous avons fabriqué les roues en impression 3D avec un surmoulage en silicone, réalisé à l’IUT Lab.

Sur ces roues nous avons dû ajouter des créneaux et modifier la section pour la bonne cohésion de la matière lors de l’impression et la bonne adhérence du silicone lors du moulage, suivi d’un passage sous cloche à vide afin de retirer les bulles d’air prises au piège dans le silicone.

 

Une fois tous les éléments conçus, fabriqués, et finalisés, nous avons pu assembler la voiture et la faire rouler.

Puis la caisse a été conçue à l’aide du logiciel Créo.

 

Une fois le design validé, nous avons imprimé la caisse en 3D, en 2 parties assemblées par la suite. L’impression ne voulant pas fonctionner sur les imprimantes de l’IUT, la caisse ci-dessous a été imprimée sur l’imprimante personnelle de Maxime, une Creality CR10-S.

Ensuite viennent les finitions réalisées par Maxime : ponçage, masticage, 2ème ponçage au papier de verre de carrossier, mise en après, peinture, finitions, poses des autocollants et vernis.
Pour obtenir le résultat final suivant : Le but étant de rester fidèles aux codes esthétiques d’une voiture de rallye des années 80’s.

 

Projet innovation GEII

 D

La course à Paris

 

 Une nouvelle Apline A110 à l’entrée de l’événement Notre stand Les pistes

La concurrence est rude!