domenica 27 gennaio 2013

Controllo delle bottiglie di plastica


Una bottiglia viene posta sotto un pistone che combacia con il collo della bottiglia sigillandola.
Un flusso di aria compressa viene in essa iniettata finchè la pressione è uguale a 1023, l'iniettore d'aria si chiude.
Dopo un paio di secondi si misura la pressione interna della bottiglia.
Se è inferiore a quella di riferimento di 500 ( o impostabile tramite TRIMMER) c'è stata una perdita quindi la bottiglia ha qualche foro mentre se non c'è stato calo di pressione la bottiglia è integra.
Nota sull'uso del delay: il loop si blocca ma durante questo tempo di blocco Arduino non deve svolgere altri operazioni per cui è inutile complicarsi la vita usando la funzione millis con laboriose righe di codice.

  
   # define PRESSOMETRO     A0
  // # define TRIMMER         A1
   # define START           3
   # define INIETTORE       4
   # define SCARTA          5
   # define PISTONE         6

   long ValPressione = 0;
   long ValRif= 500;


   void setup() 
   {  pinMode(PRESSOMETRO,   INPUT);    
      //pinMode(TRIMMER,       INPUT);
      pinMode(START,         INPUT);
      pinMode(INIETTORE,    OUTPUT); 
      pinMode(SCARTA,       OUTPUT);
      pinMode(PISTONE,      OUTPUT);
      Serial.begin(9600); 
    Serial.println("   Premi START per simulare la presenza della bottiglia"); } 
 
   void loop() {
 
  
   int valoreSTART = digitalRead(START);

        if (valoreSTART == HIGH)
           { Serial.println("   BOTTIGLIA IN POSIZIONE");
             digitalWrite (PISTONE,HIGH);
             Serial.println("   ");
             Serial.println("   PISTONE GIU'");
             Serial.println("   Il Pistone combacia con il collo della bottiglia");
             delay(5000);
             
             digitalWrite(INIETTORE, HIGH); 
             Serial.println("   ");
             Serial.println("   INIETTORE ON");
             Serial.println("   Elettrovalvola compressore d'aria aperto.");
             Serial.println("   Portare A0 al max per simulare la pressione di prova.");
             delay (5000);
                                    
             ValPressione = analogRead(PRESSOMETRO); 
             Serial.println("   ");
             Serial.print("   PRESSIONE INIETTATA       ");
             Serial.println(ValPressione);
            // ValRif = analogRead(TRIMMER);            
             Serial.print("   PRESSIONE RIFERIMENTO     ");
             Serial.println(ValRif);
             delay(5000);
             
             if (ValPressione >= ValRif)              
                { Serial.println("   ");
                  digitalWrite(INIETTORE,LOW);
                  Serial.println("   INIETTORE OFF");
                  Serial.println("   Portare A0 al Min. per simulare perdita di pressione.");
                  Serial.println("   A0 rimane al MAX. per simulare la NON perdita di pressione. ");
                  delay(5000);                       
                
                  ValPressione = analogRead(PRESSOMETRO);
                  Serial.println("   ");
                  Serial.print("   PRESSIONE MISURATA        ");
                  Serial.println(ValPressione);
                 //ValRif = analogRead(TRIMMER); 
                  Serial.print("   PRESSIONE RIFERIMENTO     ");
                  Serial.println(ValRif);
                  delay(5000);
                 
                  if (ValPressione < ValRif)
                     { digitalWrite(SCARTA,HIGH);
                       Serial.println("   ");
                       Serial.println("   BOTTIGLIA SCARTATA");
                       Serial.println("   PISTONE SU"); } 
                    
                  
                  if (ValPressione >=ValRif)
                     { digitalWrite(PISTONE ,LOW);
                       Serial.println("   ");
                       Serial.println("   BOTTIGLIA OK");
                       Serial.println("   PISTONE SU");
                       delay (5000); }}}
                      


  }
 

2 commenti:

  1. Salve, volevo chiedervi una mano per il codice, praticamente io devo fare un programma dove su un nastro vengono trasportate delle bottiglie e io devo vedere quali sono quelle da scartare e quali no, come arduino uso arduino/genuino uno shuffle, grazie.

    RispondiElimina
  2. Non sono molto bravo con Arduino,lo conosco in maniera superficiale, infatti ho erroneamente usato il comando delay invece dell'apposita funzione mills().
    Le bottiglie di plastica vengono controllate nel modo sopra descritto: vengono pozionate sotto un elettropistole, viene iniettata dell'aria a 10 bar (è un esempio), se dopo 3 secondi (valore di esempio) la pressione non è diminuita la bottiglia è buona altrimento un soffio di aria la butta fuori dal percorso.

    Sostituisca quindo il delay con l'apposta funzione di temporizzazione e faccia le prove con dei diodi led con sotto la scritta della funzione che il loro acceso/spento rappresentano.

    RispondiElimina