Esame di Stato • Elettronica • 21 giugno 2018

Seconda Prova Elettronica 2018: Traccia e Soluzione Completa

Svolgimento ragionato della seconda prova di Elettronica ed Elettrotecnica, articolazione Elettronica: acquisizione di deformazioni su un solaio, sensori estensimetrici, campionamento, interfacce analogiche, pompa idraulica, elettrovalvola e algoritmo di controllo.

Frequenza massima 15 Hz
Sensori 5 estensimetrici
Campionamento scelto 200 Hz
Intervallo 5 ms

📄 Traccia della seconda prova

La prova riguarda la caratterizzazione dinamica di un solaio in cemento armato sottoposto a una deformazione iniziale mediante un pistone idraulico. Dopo il rilascio devono essere misurate le vibrazioni della struttura.

Seconda prova elettronica 2018 traccia pagina 1 Seconda prova elettronica 2018 traccia pagina 2 Seconda prova elettronica 2018 traccia pagina 3

🧠 1. Analisi della traccia

Il sistema deve eseguire automaticamente una prova dinamica sul solaio. Sono presenti:

  • un pulsante di START;
  • un pistone idraulico;
  • una pompa elettrica;
  • un’elettrovalvola di rilascio;
  • un avvisatore luminoso;
  • un avvisatore acustico;
  • cinque sensori di deformazione.

Un sensore è collocato vicino al pistone e viene utilizzato anche durante la fase di caricamento. Gli altri quattro sono posizionati agli angoli del solaio.

Sequenza richiesta

  1. Premendo START inizia un preallarme ottico e acustico della durata di 2 minuti.
  2. Durante il preallarme viene generato un impulso ogni 1 secondo.
  3. Terminato il preallarme viene attivata la pompa.
  4. Durante la salita del pistone la frequenza delle segnalazioni raddoppia: 2 Hz.
  5. La deformazione centrale viene continuamente misurata.
  6. Quando viene raggiunta la deformazione massima impostata, la pompa viene fermata.
  7. L’elettrovalvola viene aperta e il solaio viene liberato istantaneamente.
  8. Inizia l’acquisizione simultanea delle deformazioni dei cinque punti.
  9. La prova termina quando l’ampiezza della vibrazione centrale è inferiore all’1% della deformazione iniziale.
💡 Concetto fondamentale
Il sistema non deve semplicemente comandare una pompa: deve anche acquisire correttamente un fenomeno dinamico, quindi la scelta del campionamento e del condizionamento analogico è parte essenziale del progetto.

🔗 2. Schema a blocchi

START ───────────────────────────► SISTEMA PROGRAMMABILE SENSORE CENTRALE ─► CONDIZIONAMENTO ─► FILTRO ─► S/H ─► A0 SENSORE ANGOLO 1 ─► CONDIZIONAMENTO ─► FILTRO ─► S/H ─► A1 SENSORE ANGOLO 2 ─► CONDIZIONAMENTO ─► FILTRO ─► S/H ─► A2 SENSORE ANGOLO 3 ─► CONDIZIONAMENTO ─► FILTRO ─► S/H ─► A3 SENSORE ANGOLO 4 ─► CONDIZIONAMENTO ─► FILTRO ─► S/H ─► A4 │ ▼ MICROCONTROLLORE │ ┌─────────────────────────┼────────────────────────┐ ▼ ▼ ▼ AVVISATORE RELÈ/CONTATTORE RELÈ OTTICO + ACUSTICO POMPA ELETTROVALVOLA

Sistema programmabile scelto

Per una soluzione didattica possiamo utilizzare una scheda Arduino Mega, che dispone di un numero sufficiente di ingressi analogici e digitali.

⚠️ Applicazione reale
Per una misura strutturale professionale sarebbe preferibile utilizzare hardware di acquisizione industriale, ADC ad alta risoluzione e ingressi isolati. Arduino viene utilizzato qui come piattaforma didattica per descrivere il funzionamento del sistema.

⏱️ 3. Scelta della frequenza di campionamento

La traccia specifica che la massima frequenza di vibrazione significativa del solaio è:

fMAX = 15 Hz

Per il teorema di Nyquist-Shannon la frequenza di campionamento deve essere almeno doppia:

fS ≥ 2 × fMAX
fS ≥ 30 Hz

30 Hz rappresenta però soltanto il limite teorico minimo. Per ottenere una descrizione temporale migliore scegliamo:

fS = 200 Hz

L’intervallo tra due campionamenti diventa:

TS = 1 / 200 = 0,005 s = 5 ms
✅ Scelta progettuale
Il sistema acquisirà quindi un set completo dei cinque sensori ogni 5 millisecondi.

Filtro anti-aliasing

Prima della conversione A/D inseriamo su ciascun canale un filtro passa-basso.

Poiché il segnale utile arriva fino a circa 15 Hz, possiamo scegliere una frequenza di taglio nell’ordine di:

fc ≈ 25–30 Hz

In questo modo vengono attenuate le componenti ad alta frequenza che potrebbero produrre aliasing.

Campionamento simultaneo

I cinque punti del solaio devono essere confrontati nello stesso istante. Leggere A0, A1, A2, A3 e A4 uno dopo l’altro introduce inevitabilmente un piccolo ritardo temporale.

Una soluzione didattica consiste nell’utilizzare cinque circuiti Sample & Hold pilotati contemporaneamente.

Sensore 1 ─► S/H ─► A0 Sensore 2 ─► S/H ─► A1 Sensore 3 ─► S/H ─► A2 Sensore 4 ─► S/H ─► A3 Sensore 5 ─► S/H ─► A4 ▲ │ comando HOLD comune

Tutti i Sample & Hold congelano contemporaneamente il valore. Arduino può quindi convertire i cinque canali in sequenza senza perdere l’informazione relativa allo stesso istante fisico.

📏 4. Interfaccia dei sensori estensimetrici

La traccia indica un segnale differenziale proporzionale alla deformazione con escursione massima di 24 V.

Arduino non può ricevere direttamente questa tensione, quindi è necessario un circuito di condizionamento.

Amplificatore differenziale

Possiamo utilizzare un amplificatore differenziale dimensionato in modo che:

0 – 24 V → 0 – 5 V

Il rapporto richiesto è:

Av = 5 / 24 ≈ 0,208

Per un amplificatore differenziale vale:

Vout = (R2 / R1) × (V+ − V−)

Una possibile scelta teorica è:

R1 = 24 kΩ     R2 = 5 kΩ

ottenendo:

R2 / R1 ≈ 0,208

Protezione ingresso ADC

A valle del condizionamento è opportuno prevedere:

  • resistenza serie;
  • limitazione della tensione;
  • protezione contro sovratensioni;
  • filtro anti-aliasing;
  • Sample & Hold.
❌ Collegamento da evitare
Un segnale da 24 V non deve mai essere applicato direttamente a un ingresso analogico Arduino.

⚡ 5. Interfaccia di pompa, elettrovalvola e avvisatori

Pompa

La pompa è un carico di potenza e non può essere comandata direttamente dal microcontrollore.

Arduino pilota quindi:

Arduino │ ▼ Optoisolatore / transistor │ ▼ Relè o contattore │ ▼ Pompa

Per un motore di potenza reale è preferibile che il relè piloti la bobina di un contattore, dimensionato in funzione della corrente della pompa.

Elettrovalvola

Anche l’elettrovalvola viene gestita come dispositivo ON/OFF:

Arduino → driver isolato → relè → elettrovalvola

Avvisatori

Il sistema utilizza:

  • un segnalatore luminoso;
  • una sirena o avvisatore acustico.

Durante la fase iniziale gli impulsi vengono generati a 1 Hz, mentre durante la prova passano a 2 Hz.

Fase Segnalazione
Preallarme 1 impulso ogni secondo
Caricamento e prova 2 impulsi al secondo
Fine prova Segnalazioni OFF

🔄 6. Algoritmo di gestione

ATTESA START │ ▼ PREALLARME 120 s segnali 1 Hz │ ▼ POMPA ON segnali 2 Hz │ ▼ LEGGI DEFORMAZIONE CENTRALE │ ▼ deformazione ≥ valore massimo ? │ ├── NO ──► continua pompaggio │ ▼ SI POMPA OFF │ ▼ ELETTROVALVOLA ON │ ▼ RILASCIO SOLAIO │ ▼ ACQUISISCI 5 SENSORI @ 200 Hz │ ▼ ampiezza vibrazione < 1% ? │ ├── NO ──► continua acquisizione │ ▼ SI ELETTROVALVOLA OFF SEGNALAZIONI OFF │ ▼ FINE PROVA
Nota importante sulla soglia dell’1%
La vibrazione attraversa naturalmente lo zero molte volte. Per questo non conviene terminare la prova appena un singolo campione scende sotto l’1%. È meglio controllare l’inviluppo o il massimo della deformazione all’interno di una finestra temporale.

💻 7. Codice Arduino completo

Il seguente programma implementa una possibile soluzione didattica. La soglia di deformazione massima deve essere determinata dopo la calibrazione del sistema.

// =========================================================
// SECONDA PROVA ELETTRONICA 2018
// Prova dinamica impulsiva su solaio
// Soluzione didattica con Arduino Mega
// =========================================================

// -------------------------
// PIN DIGITALI
// -------------------------

const byte PIN_START   = 2;
const byte PIN_HOLD    = 3;

const byte PIN_LUCE    = 6;
const byte PIN_SIRENA  = 7;

const byte PIN_POMPA   = 8;
const byte PIN_VALVOLA = 9;


// -------------------------
// SENSORI
// -------------------------

const byte SENSORI[5] = {
  A0, A1, A2, A3, A4
};

// sensore centrale = A0
const byte SENSORE_CENTRALE = 0;


// -------------------------
// PARAMETRI
// -------------------------

// 200 Hz
const unsigned long PERIODO_CAMPIONE_US = 5000;

// 2 minuti
const unsigned long PREALLARME_MS = 120000UL;

// soglia massima da calibrare
const int SOGLIA_DEFORMAZIONE = 800;

// valori acquisiti
int valori[5];

// riferimento del solaio a riposo
int zeroSensore[5];

// deformazione massima effettivamente raggiunta
int deformazioneIniziale = 0;


// =========================================================
// SETUP
// =========================================================

void setup() {

  Serial.begin(115200);

  pinMode(PIN_START, INPUT_PULLUP);

  pinMode(PIN_HOLD, OUTPUT);

  pinMode(PIN_LUCE, OUTPUT);
  pinMode(PIN_SIRENA, OUTPUT);

  pinMode(PIN_POMPA, OUTPUT);
  pinMode(PIN_VALVOLA, OUTPUT);

  digitalWrite(PIN_POMPA, LOW);
  digitalWrite(PIN_VALVOLA, LOW);

  digitalWrite(PIN_LUCE, LOW);
  digitalWrite(PIN_SIRENA, LOW);

  Serial.println("Sistema pronto");

  calibraZero();
}


// =========================================================
// LOOP
// =========================================================

void loop() {

  // INPUT_PULLUP:
  // pulsante premuto = LOW

  if (digitalRead(PIN_START) == LOW) {

    delay(30);

    if (digitalRead(PIN_START) == LOW) {

      eseguiProva();

      while (digitalRead(PIN_START) == LOW) {
        delay(10);
      }
    }
  }
}


// =========================================================
// CALIBRAZIONE ZERO
// =========================================================

void calibraZero() {

  long somma[5] = {0,0,0,0,0};

  const int campioni = 100;

  for (int n = 0; n < campioni; n++) {

    acquisisciSensori();

    for (byte i = 0; i < 5; i++) {
      somma[i] += valori[i];
    }

    delay(5);
  }

  for (byte i = 0; i < 5; i++) {

    zeroSensore[i] =
      somma[i] / campioni;
  }

  Serial.println("Calibrazione completata");
}


// =========================================================
// ESECUZIONE PROVA
// =========================================================

void eseguiProva() {

  Serial.println("INIZIO PROVA");

  // -----------------------------------------
  // 1. PREALLARME - 2 minuti - 1 Hz
  // -----------------------------------------

  unsigned long inizio = millis();

  while (millis() - inizio < PREALLARME_MS) {

    digitalWrite(PIN_LUCE, HIGH);
    digitalWrite(PIN_SIRENA, HIGH);

    delay(200);

    digitalWrite(PIN_LUCE, LOW);
    digitalWrite(PIN_SIRENA, LOW);

    delay(800);
  }


  // -----------------------------------------
  // 2. AZIONAMENTO POMPA
  // -----------------------------------------

  digitalWrite(PIN_POMPA, HIGH);

  Serial.println("Pompa ON");

  int deformazione = 0;

  unsigned long ultimoLampeggio = 0;
  bool statoAllarme = false;


  // -----------------------------------------
  // 3. CARICAMENTO SOLAIO
  // -----------------------------------------

  while (deformazione < SOGLIA_DEFORMAZIONE) {

    acquisisciSensori();

    deformazione =
      abs(valori[SENSORE_CENTRALE] -
          zeroSensore[SENSORE_CENTRALE]);


    // segnalazione 2 Hz
    if (millis() - ultimoLampeggio >= 250) {

      ultimoLampeggio = millis();

      statoAllarme = !statoAllarme;

      digitalWrite(PIN_LUCE, statoAllarme);
      digitalWrite(PIN_SIRENA, statoAllarme);
    }
  }


  // memorizza deformazione iniziale
  deformazioneIniziale = deformazione;


  // -----------------------------------------
  // 4. DEFORMAZIONE MASSIMA
  // -----------------------------------------

  digitalWrite(PIN_POMPA, LOW);

  Serial.println("Pompa OFF");


  // -----------------------------------------
  // 5. RILASCIO ISTANTANEO
  // -----------------------------------------

  digitalWrite(PIN_VALVOLA, HIGH);

  Serial.println("Elettrovalvola ON");
  Serial.println("Rilascio solaio");


  // -----------------------------------------
  // 6. ACQUISIZIONE VIBRAZIONI
  // -----------------------------------------

  acquisizioneVibrazioni();


  // -----------------------------------------
  // 7. FINE PROVA
  // -----------------------------------------

  digitalWrite(PIN_VALVOLA, LOW);

  digitalWrite(PIN_LUCE, LOW);
  digitalWrite(PIN_SIRENA, LOW);

  Serial.println("FINE PROVA");
}


// =========================================================
// ACQUISIZIONE VIBRAZIONI
// =========================================================

void acquisizioneVibrazioni() {

  unsigned long prossimoCampione = micros();

  unsigned long inizioFinestra = millis();

  unsigned long ultimoLampeggio = millis();

  bool statoAllarme = false;

  // soglia 1%
  int sogliaFine =
    max(1, deformazioneIniziale / 100);

  // massimo rilevato in una finestra
  // di 1 secondo
  int massimoFinestra = 0;

  while (true) {

    // ---------------------------------
    // campionamento ogni 5 ms
    // ---------------------------------

    if ((long)(micros() - prossimoCampione) >= 0) {

      prossimoCampione +=
        PERIODO_CAMPIONE_US;

      acquisisciSensori();

      int deformazioneCentro =
        abs(valori[0] - zeroSensore[0]);

      if (deformazioneCentro > massimoFinestra) {
        massimoFinestra = deformazioneCentro;
      }


      // ---------------------------------
      // invio dati CSV
      // ---------------------------------

      Serial.print(millis());

      for (byte i = 0; i < 5; i++) {

        Serial.print(",");
        Serial.print(valori[i]);
      }

      Serial.println();
    }


    // ---------------------------------
    // segnalazione 2 Hz
    // ---------------------------------

    if (millis() - ultimoLampeggio >= 250) {

      ultimoLampeggio = millis();

      statoAllarme = !statoAllarme;

      digitalWrite(PIN_LUCE, statoAllarme);
      digitalWrite(PIN_SIRENA, statoAllarme);
    }


    // ---------------------------------
    // controllo inviluppo ogni secondo
    // ---------------------------------

    if (millis() - inizioFinestra >= 1000) {

      Serial.print("Ampiezza finestra: ");
      Serial.println(massimoFinestra);

      if (massimoFinestra < sogliaFine) {

        break;
      }

      massimoFinestra = 0;
      inizioFinestra = millis();
    }
  }
}


// =========================================================
// ACQUISIZIONE DEI CINQUE SENSORI
// =========================================================

void acquisisciSensori() {

  // -----------------------------------------
  // Comando comune dei Sample & Hold
  // -----------------------------------------

  digitalWrite(PIN_HOLD, HIGH);

  delayMicroseconds(10);

  digitalWrite(PIN_HOLD, LOW);


  // -----------------------------------------
  // Lettura dei valori memorizzati
  // -----------------------------------------

  for (byte i = 0; i < 5; i++) {

    valori[i] =
      analogRead(SENSORI[i]);
  }
}
Perché questa versione è migliore del vecchio codice?

• utilizza nomi di variabili validi;
• non ridefinisce cinque volte la stessa variabile;
• gestisce realmente pompa ed elettrovalvola;
• campiona a 200 Hz;
• acquisisce tutti e cinque i sensori;
• calibra il punto zero;
• gestisce correttamente la soglia dell’1%;
• genera segnali a 1 Hz e 2 Hz;
• produce dati CSV utilizzabili per l’analisi della vibrazione.

📝 8. Seconda parte – Quesiti

La prova richiede lo svolgimento di due quesiti tra i quattro proposti. Per completezza li analizziamo tutti.

Quesito 1 – Degrado dei segnali su grandi distanze

Quando i sensori si trovano lontano dal sistema di acquisizione, la trasmissione analogica diventa più critica.

I principali problemi sono:

  • attenuazione del segnale;
  • rumore elettromagnetico captato dai cavi;
  • accoppiamento con la rete elettrica a 50 Hz;
  • capacità e induttanza parassita del collegamento;
  • differenze di potenziale tra masse lontane;
  • peggioramento del rapporto segnale/rumore.

Per ridurre questi problemi è opportuno utilizzare collegamenti differenziali e cavi schermati a coppie twistate.

In applicazioni industriali una soluzione ancora migliore consiste nel convertire il segnale in prossimità del sensore e trasmettere i dati digitalmente mediante interfacce robuste come RS-485 o CAN.

Soluzione consigliata
Mantenere quanto più corto possibile il tratto analogico tra sensore e condizionatore; dopo la conversione utilizzare una trasmissione digitale differenziale.

Quesito 2 – Segnalazioni ottiche e acustiche

Gli avvisatori devono essere chiaramente percepibili nell’area della prova. Si possono utilizzare:

  • lampeggiante industriale a LED;
  • sirena piezoelettrica o elettromeccanica;
  • dispositivi con adeguato grado di protezione per uso esterno.

Il microcontrollore non alimenta direttamente questi dispositivi. Le sue uscite comandano un transistor, un modulo relè oppure un’uscita optoisolata.

Arduino │ ▼ Optoisolatore │ ▼ Driver / relè │ ├────► Lampeggiante │ └────► Sirena

La logica temporale richiesta è:

  • preallarme: impulsi a 1 Hz per 120 secondi;
  • fase successiva: segnalazioni a 2 Hz;
  • fine prova: spegnimento degli avvisatori.

Quesito 3 – RAEE

RAEE significa Rifiuti di Apparecchiature Elettriche ed Elettroniche.

Sono apparecchiature giunte a fine vita che devono essere raccolte e trattate separatamente dai normali rifiuti urbani.

Il ciclo comprende generalmente:

  1. raccolta;
  2. trasporto verso centri autorizzati;
  3. messa in sicurezza;
  4. rimozione dei componenti pericolosi;
  5. smontaggio;
  6. separazione dei materiali;
  7. recupero e riciclaggio;
  8. smaltimento delle frazioni non recuperabili.

Tra i RAEE possiamo trovare elettrodomestici, apparecchi informatici, strumenti elettronici, apparecchiature di illuminazione, dispositivi di monitoraggio e numerose altre categorie di prodotti elettrici.

Quesito 4 – Piano Operativo di Sicurezza (POS)

Il Piano Operativo di Sicurezza è il documento con cui l’impresa esecutrice descrive le modalità con cui vengono affrontati i rischi relativi allo specifico cantiere.

Tra le informazioni principali troviamo:

  • dati dell’impresa;
  • attività svolte;
  • organizzazione del cantiere;
  • valutazione dei rischi;
  • misure preventive e protettive;
  • dispositivi di protezione individuale;
  • procedure di emergenza;
  • attrezzature impiegate.

Tra le figure coinvolte nella sicurezza troviamo:

  • datore di lavoro;
  • RSPP;
  • medico competente, quando previsto;
  • RLS;
  • addetti antincendio;
  • addetti al primo soccorso;
  • preposto;
  • coordinatori per la sicurezza quando previsti.

🎓 Conclusioni

Questa prova mette insieme molti degli argomenti fondamentali dell’elettronica applicata:

  • trasduttori estensimetrici;
  • condizionamento analogico;
  • campionamento;
  • conversione A/D;
  • filtri anti-aliasing;
  • controllo degli attuatori;
  • programmazione di sistemi automatici.

La parte più importante non è il singolo sketch Arduino, ma il corretto dimensionamento dell’intera catena:

FENOMENO FISICO ↓ TRASDUTTORE ↓ CONDIZIONAMENTO ↓ FILTRO ↓ CAMPIONAMENTO ↓ ADC ↓ ELABORAZIONE ↓ COMANDO ATTUATORI
📚 Concetto chiave
Una buona soluzione d’esame deve spiegare non soltanto “quale Arduino usare” o “quale codice scrivere”, ma come il segnale fisico viene acquisito, condizionato, convertito e utilizzato per controllare correttamente il processo.