Partage
  • Partager sur Facebook
  • Partager sur Twitter

M-duino projet

compteur des produits d'une ligne de production

    23 novembre 2019 à 10:22:49

    Good morning
    I am working on a production line tracking project with all or nothing sensors (E18-D80NK) and an M-DUINO PLC Arduino Ethernet 21 I/Os Analog/Digital PLUS. The project involves counting the number of bottles produced by the production line. You should know that I use 7 sensors placed at different places of the product line (under after a machine of the production line, the purpose being to locate and calculate where there is more loss). I’m uploading his data to google data studio and thingspeak.
    My problem is that my sensors do not give me the true values (each machine on the line has a reliable counter).
    Also I can not use my sensors in all or nothing but instead I use them in analog (when I try to read the value in digital I receive only 0 ).
    I’m sending you my code so you can help me.
    Thank you in advance
    Bonjour 
    Je travaille sur un projet de suivie de ligne de production avec des capteurs tout ou rien (E18-D80NK) et un M-DUINO PLC Arduino Ethernet 21 I/Os Analog/Digital PLUS. Le projet consiste à compter le nombre de bouteilles produites par la ligne de production. Il faut savoir que j'utilise 7 capteurs placés à différents endroits de la ligne de produit (sous après une machine de la ligne de production, le but étant de localiser et de calculer là où il y'a plus de perte). J'envoie ses données sur google data studio et thingspeak.
    Mon problème est que mes capteurs ne me donnent pas les vraies valeurs (chaque machine de la ligne a un compteur fiable). 
    Aussi je n'arrive pas à utiliser mes capteurs en tout ou rien mais par contre je les utilise en analogique (quand j'essaie de lire la valeur en numérique je reçois que des 0 ).
    Je vous envoie mon code pour que vous m'aider.
    Merci d'avance
    #include <ThingSpeak.h>
    #include <SPI.h>
    #include <Ethernet2.h>
    #include <EthernetClient.h>
    /*
    Brown: 5V DC
    Blue:  GND
    Black: Signal, to PIN 2 PWM
    */
    const char WEBSITE[] = "api.pushingbox.com"; //pushingbox API server
    const String devid = "vC0529F1CD7A8HGT"; //device ID from Pushingbox 
    //Variables
    //minute
    int SqzBocaux=0,  Doseuse=0,Bouchonneuse=0,Dateuse=0,ApresFour=0;
    int Etiquetteuse=0, Encartonneuse=0; 
    float TRS=0;
    // chaque 10 minutes
    int compt10SqzBocaux=0, compt10Doseuse=0,compt10Dateuse=0,compt10Bouchonneuse=0,compt10ApresFour=0,compt10Etiquetteuse=0, compt10Encartonneuse;
    float compt10TRS=0;
    //Heure
    int comptHeureSqzBocaux=0, comptHeureDoseuse=0,comptHeureBouchonneuse=0,comptHeureDateuse=0,comptHeureApresFour=0,comptHeureEtiquetteuse=0,comptHeureEncartonneuse,perteMinute,perteHeure;
    float TRSHeure=0, rendementHeure=0,rendementMinute=0;
    //Journalier
    int comptJourSqzBocaux=0, comptJourDoseuse=0,comptJourBouchonneuse=0,comptJourDateuse=0,comptJourApresFour=0,comptJourEtiquetteuse=0,comptJourEncartonneuse;
    float TRSJour=0, rendementJour=0;
    //FMT
    // Parametrages ThingSpeak et ethernet
     //production
    unsigned long channelID =  823933;
    const char * writeAPIKey = "1CZSOAYNNHBJ8YM14"; // API key pour le canal ThingSpeak quantité produite
     //TRS
     unsigned long channeLive =  833763;
    const char * writeAPIKeyLive = "TDVWPOKJ65YRTSJG"; // API key pour le canal ThingSpeak TRS
    const char* server = "api.thingspeak.com"; // Adresse du serveur ThingSpeak
    EthernetClient client;
    EthernetClient clientG;
    byte mac[]={0xDE,0xAC,0xDA,0xCF,0xCD, 0xAD};
    // capteurs
    #define capteurSqzBocaux        54
    #define capteurDoseuse           55
    #define capteurDateuse           57
    #define capteurApresFour        58
    #define capteurEtiquetteuse     59
    #define capteurEncartonneuse  56
    //initialisation des valeurs des capteurs
    int IA=0, IB=0,IC=0,ID=0,IE=0,IF=0;
    //temps d'envoie
    unsigned long previousHeure=0;
    unsigned long previousMinute=0;
    unsigned long previous10Minute=0;
    //Intervalle entre chaque envoie
    const long intervalHeure= 28000000;
    const long intervalMinute = 60000;
    const long interval10Minute =600000;
    void setup() {
      // put your setup code here, to run once:
     // put your setup code here, to run once:
    Serial.begin (9600L);
         char erreur =0;
        erreur = Ethernet.begin(mac);
        if (erreur==0)
        {
          Serial.println("Echec de la configuration DHCP");
          delay (200);
          Ethernet.begin(mac);
         Serial.println("initialisation");
         delay (100);
        }
        else 
        {
          Serial.println("Reussite de la configuration DHCP Ethernet");
        }
        delay(500); // on se laisse le temps de souffler
    // entrées des signaux 
        pinMode(capteurSqzBocaux, INPUT); 
        pinMode(capteurDoseuse, INPUT); 
        pinMode(capteurEncartonneuse, INPUT);
        pinMode(capteurDateuse, INPUT); 
        pinMode(capteurApresFour, INPUT); 
        pinMode(capteurEtiquetteuse, INPUT); 
        delay(10); 
    }
    void loop() {
    if(analogRead(capteurDoseuse)==0 && IA==0)
    {
        IA=1;
      //comptage
      Doseuse++;
      comptHeureDoseuse++;
      compt10Doseuse++;
      comptJourDoseuse++;
        Serial.println("\n Production doseuse FMT : \n");  // pour debogage
        // pour debogage
      Serial.println(Doseuse);
      Serial.println(comptHeureDoseuse);
    Serial.println(compt10Doseuse);
    Serial.println(comptJourDoseuse);
    delay(10);
    }
     if(analogRead(capteurDoseuse)!=0)
    {
        IA=0;
    }
    if(analogRead(capteurDateuse)==0 && IB==0)
    {
    IB=1;
      //comptage
      Dateuse++;
      comptHeureDateuse++;
      compt10Dateuse++;  
      comptJourDateuse++;     
        Serial.println("\n Production Sortie Dateuse : \n");  // pour debogage
        // pour debogage
      Serial.println(Dateuse);
      Serial.println(comptHeureDateuse);
        Serial.println(compt10Dateuse);
        Serial.println(comptJourDateuse);
     delay(10);
    }
     if(analogRead(capteurDateuse)!=0)
    {
    IB=0;  
    }
     if(analogRead(capteurEtiquetteuse)==0 && IC==0)
    {
     IC=1;
      //comptage
        Etiquetteuse++;
        comptHeureEtiquetteuse++;
        compt10Etiquetteuse++;
        comptJourEtiquetteuse++;
        Serial.println("\n Production Sortie Etiquetteuse : \n");  // pour debogage
        // pour debogage
      Serial.println(Etiquetteuse);
      Serial.println(comptHeureEtiquetteuse);
     Serial.println(compt10Etiquetteuse);
       Serial.println(comptJourEtiquetteuse);
        TRS= float ((Etiquetteuse/850)*100); // en %
        TRSHeure= float ((comptHeureEtiquetteuse/5100)*100); // en %
        TRSJour= float ((comptHeureEtiquetteuse/30600)*100); // en %
      rendementMinute= float (((compt10Doseuse-(compt10Etiquetteuse-compt10Dateuse))/compt10Doseuse)*100);
      rendementHeure= float (((comptHeureDoseuse-(comptHeureEtiquetteuse-comptHeureDateuse))/comptHeureDoseuse)*100);
      rendementJour= float (((comptJourEtiquetteuse/comptJourDoseuse))*100);
      compt10TRS= float ((compt10Etiquetteuse/85)*100); // en %
        Serial.println("\n TRS PRODUCTION  par minute : \n");
        Serial.println(TRS); 
        Serial.println("\n TRS PRODUCTION  par heuure : \n");
        Serial.println(TRSJour); 
     delay(10);
    }
     if (analogRead(capteurEtiquetteuse)!=0)
    {
    IC=0;
    }
    if(analogRead(capteurApresFour)==0 && IF==0)
    {
       IF=1;
      //comptage
      ApresFour++;
      compt10ApresFour++;
      comptHeureApresFour++;    
      comptJourApresFour++; 
        Serial.println("\n Production APRES FOUR : \n");  // pour debogage
        // pour debogage
      Serial.println(ApresFour);
      Serial.println(comptHeureApresFour);
      Serial.println(compt10ApresFour);
      Serial.println(comptJourApresFour);
      delay(10);
    }
    if (analogRead(capteurApresFour)!=0)
    {
      IF=0;
    }
    if(analogRead(capteurSqzBocaux)==0 && ID==0)
    {
    ID=1;
      //comptage
         SqzBocaux++;
         comptHeureSqzBocaux++;
         compt10SqzBocaux++;
         comptJourSqzBocaux++;
        Serial.println("\n Production ENTREE : \n");  // pour debogage
        // pour debogage
      Serial.println(SqzBocaux);
      Serial.println(comptHeureSqzBocaux);
    Serial.println(compt10SqzBocaux);
      Serial.println(comptJourSqzBocaux);
     delay(10);
    }
    if(analogRead(capteurSqzBocaux)!=0)
    {
    ID=0;
    }
    if(analogRead(capteurEncartonneuse)==0 && IE==0)
    {
        IE=1;
      //comptage
      Encartonneuse++;
      comptHeureEncartonneuse++;
      compt10Encartonneuse++;
      comptJourEncartonneuse++;
        Serial.println("\n Production encartonneuse : \n");  // pour debogage
        // pour debogage
      Serial.println(Encartonneuse);
      Serial.println(comptHeureEncartonneuse);
    Serial.println(compt10Encartonneuse);
    Serial.println(comptJourEncartonneuse);
    delay(10);
    }
     if(analogRead(capteurEncartonneuse)!=0)
    {
        IE=0;
    }
      // put your main code here, to run repeatedly:
     ThingSpeak.begin(client);  //initialisation de thingspeak
     // put your main code here, to run repeatedly:
    unsigned long currentHeure= millis();
    unsigned long currentMinute= millis();
    unsigned long current10Minute= millis();
    Serial.println("previous minute : " + String(previousMinute));
    Serial.println("current minute : " + String(currentMinute));
    Serial.println("previous heure : " + String(previousHeure));
    Serial.println("current heure : " + String(currentHeure));
    //Envoie quantité produite minute par minute
    if (currentMinute - previousMinute >= intervalMinute)
    {
      previousMinute=currentMinute;
      ThingSpeak.setField(1, compt10Doseuse);
      ThingSpeak.setField(2, compt10Encartonneuse);
      ThingSpeak.setField(3, compt10Etiquetteuse);
      ThingSpeak.setField(4, compt10TRS);
      ThingSpeak.writeFields(channelID, writeAPIKey);
      Serial.println("connected thingspeak minute");
     //reset des variables touTES les minutes
      compt10SqzBocaux=0;
       compt10Doseuse=0;
       compt10Bouchonneuse=0;
        compt10Dateuse=0;
       compt10Etiquetteuse=0;
       compt10Encartonneuse=0;
        compt10ApresFour=0;
       compt10TRS=0;
       rendementMinute=0;
     ThingSpeak.setField(1, comptJourDoseuse);
      ThingSpeak.setField(2, comptJourEtiquetteuse);
      ThingSpeak.setField(3, comptJourEncartonneuse);
      ThingSpeak.setField(4, TRSJour);
      ThingSpeak.writeFields(channeLive, writeAPIKeyLive);
      Serial.println("connected thingspeak LIVE");
    }
    //Envoie quantité produite chaqque HEURE
    if (current10Minute - previous10Minute >= interval10Minute)
    {
      previous10Minute=current10Minute;
    sendToPushingBox();
       //RESET TOUTES LES 10 MINUTES
       SqzBocaux=0;
       Doseuse=0;
       Bouchonneuse=0;
       Dateuse=0;
       Etiquetteuse=0;
       ApresFour=0;
        Encartonneuse=0;
       TRS=0;
    }
    //Envoie quantité produite CHAQUE 8H
    if (currentHeure - previousHeure >= intervalHeure)
    {
      previousHeure=currentHeure;
        ThingSpeak.setField(5, comptJourDoseuse);
        ThingSpeak.setField(6, TRSJour);
        ThingSpeak.setField(7, comptJourEtiquetteuse);
        ThingSpeak.setField(8, comptJourEncartonneuse);
        ThingSpeak.writeFields(channelID, writeAPIKey);
        Serial.println("connected thingspeak heure");
        comptJourDoseuse =0;
        comptJourDateuse=0;
        comptJourBouchonneuse=0;
        comptJourEtiquetteuse=0;
        comptJourApresFour=0;
        comptJourEncartonneuse=0;
        TRSJour=0;
        comptJourSqzBocaux=0;
    }
    }
    void sendToPushingBox()
    {
     clientG.stop();
    //Start or API service using our WiFi Client through PushingBox
        if (clientG.connect(WEBSITE, 80))
          { 
            Serial.println("connected google");
             clientG.print("GET /pushingbox?devid=" + devid
           + "&SqzBocaux=" + (String) SqzBocaux
           + "&Doseuse="      + (String) Doseuse
           + "&Bouchonneuse="     + (String) Bouchonneuse
           + "&Dateuse="      + (String) Dateuse
           + "&ApresFour="      + (String) ApresFour
           + "&Etiquetteuse="      + (String) Etiquetteuse
           + "&Encartonneuse="      + (String) Encartonneuse);
          clientG.println(" HTTP/1.1"); 
          clientG.print("Host: ");
          clientG.println(WEBSITE);
          clientG.println("User-Agent: test_Service/1.0");
          clientG.println("Connection: close");
          clientG.println();
          }
          else 
          {
          Serial.println ("pas de connexion");  
          }
    }
    • Partager sur Facebook
    • Partager sur Twitter

    M-duino projet

    × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
    • Editeur
    • Markdown