Presentiamo la candidatura del Sig. Michele Mancini che si propone per la realizzazione del firmware del progetto TiDiGino e che ci presenta una sua recente applicazione con Arduino: Monitor real-time per contatori


Lasciamo la parola a Michele:

Nel corso degli anni dopo la scuola di istituto tecnico professionale in ambito elettronico ho avuto molte esperienze in elettronica digitale a microcontrollore.
Nei primi anni ’90 ho implementato controlli semplici per la gestione di motori passo-passo con z80.
Poi nel ’96 ho iniziato ad orientarmi sui microcontrollori PIC iniziando dal famoso 18f84 utilizzato per piccoli progetti dimmer per ventilatori con controllo a telecomando infrarossi. Poi passando a pic superiori della famiglia 18F per vari progetti, dal monitoraggio punteggio per chi fa sport, a controlli per macchinette di distributori a controlli più sofisticati come implementare con un dspic controllo per orientamento pannelli fotovoltaici a esperienze con controlli più complessi come balancing robot ecc.

Ora sto facendo diverse esperienze con arduino una delle quali sto facendo un controllo che direziona i raggi solari durante la giornata sempre in uno stesso punto per riscaldare l’acqua tramite uno specchio, arduino calcola in tempo reale “altitude” e “azimuth” e con la legge fisica sulla riflessione , riflette i raggi sullo specchio nel punto desiderato, arduino deve anche calcolare l’angolo della piattaforma tramite sensori IMU. Purtroppo questo sistema è ancora in fase di sviluppo per questo ho deciso di inviarvi un progetto fatto in precedenza con arduino per il monitoraggio istantaneo dei consumi di corrente utilizzando il contatore enel.
Invio il link di youtube dove ci sono vari miei progetti:
http://www.youtube.com/user/mancio92M

Ed ecco il progetto del Monitor real-time per contatori:
Leggendo sulla rivista di elettronicain nella sezione “Elettronica Insieme”, una persona presentò un semplice progetto con un microcontrollore pic per poter leggere il consumo istantaneo in tempo reale dal contatore enel senza utilizzare sensori a induzione o vari titpi, ma sfruttando la luce “rossa” lampeggiante del nuovo contatore enel.

Ho voluto replicare il sistema utilizzando arduino abbinato ad un sistema potente per l’acquisizione dati per pc Labview. Il sistema si compone in due parti la scheda arduino che rileva gli impulsi e tramite il modulo xbee li invia al PC. E il PC che tramite un interfaccia creata con labview rileva per mezzo di un xbee collegato via usb di rilevare i dati che arduino ha inviato , in modo da poter elaborare e studiare i consumi in maniera del tutto istantanea.

Arduino invia due letture al PC:
1-Lettura in tempo reale cioè istantanea.
2-Lettura di media consumo rilevata in un tempo di 5 minuti

Dalla foto si vede che il led che indica il consumo istantaneo è il led rosso che sta di fianco al display, il led preso in considerazione è il led superiore.

Modulo Arduino
Per rilevare l’accessione e lo spegnimento del led ho applicato una semplice foto resistenza sopra al led e coperta con del nastro adesivo nero. Per leggere il valore analogico di tensione tramite la scheda Arduino ho utilizzato un partitore resistivo come da schema:

 


Per il modulo xbee ho utilizzato UartSbee V3.1 dalla futura elettronica e un modulo xbee classico.

L’accessione e lo spegnimento del  led del contatore fa si che la caduta di tensione della foto resistenza varia,  con arduino acquisisco questa tensione e la confronto con la tensione acquisita dal potenziometro collegato nel canale A0.
Questo potenziometro ha il compito ti tarare  la soglia di sensibilità in cui rilevo ON/OFF del led.

Il codice di acquisizione in arduino è il seguente:

 

  //Acquisisco

   delay(10); //10ms

   val_pot = analogRead(POT);    // leggo la tensione del potenziometro

   delay(10); //10ms

   val_sensore = analogRead(SENSORE);    // leggo la caduta di tensione della fotoresistenza

 

  if((val_sensore > val_pot)&(flag_acquire == 0)){ 

      flag_acquire = 1;

      digitalWrite(LED, LOW); 

Con questo codice acquisisco i due valori di tensione , il valore di tensione della foto resistenza la confronto con il valore di tensione del potenziometro che come ripeto serve solo da riferimento, se il valore è maggiore  attivo un flag “flag_acquire = 1”, poi leggo quanto tempo è trascorso da un intervallo all’altro cioè da quanto tempo il led del contatore passa da ON a ON cioè un intero ciclo.
Per far questo utilizzo un istruzione in arduino per leggere un contatore interno che restituisce  i millisecondi  trascorsi da quando è alimentato. L’istruzione è “millis()”, qui il codice:

 

pre_tmS = cur_tmS;

      cur_tmS = millis();

      if( cur_tmS > pre_tmS ) {

        tm_diffS = cur_tmS – pre_tmS;

      }

Ci sono 2 variabili pre_tmS  e cur_tmS con “cur_tmS” leggo il valore attuale del contatore interno, cur_tmS = millis(); Poi se la condizione if( cur_tmS > pre_tmS ) è vera , rilevo il tempo trascorso tra un ciclo e l’altro, cioè tra il led acceso del contatore e il prossimo ciclo del led acceso e lo scrivo sulla variabile “pre_tmS “ . Ora non resta che inviare al PC tramite xbee per mezzo della porta seriale con queste istruzioni:

   

      Serial.print(“S”); 

      Serial.println(tm_diffS); 

 

      delay(10); //10ms

Per prima cosa invio un marcatore “S” che serve a labview per riconoscere che questo valore fa parte della lettura realtime cioè istantanea, poi invio il valore trascorso in millisecondi.

Ora devo resettare il flag quando il led del contatore si spegne cioè va in modalità OFF utilizzo questa istruzione:

  if((val_sensore < val_pot)&(flag_acquire == 1)){ 

      flag_acquire = 0;

      digitalWrite(LED, HIGH);

      impulsi++;          //Incrementa impulsi

      delay(10); //10ms 

  }

Verifico la tensione acquisita dal sensore, se scende sotto la soglia letta dal potenziometroe il flag è attivo “flag_acquire == 1” resetto il flag.
Da notare che l’istruzione “impulsi++; “ non è altro che un contatore che conta i cicli di accensione del led contatore, questo serve per fare una media dell’energia consumata ogni 5 minuti.

Il terzo task è simile al primo task , aspetta 1secondo e incrementa il contatore “time_flag++;” che serve al quarto task per conteggiare 300secondi cioè 5 minuti. Inoltre questo task fa lampeggiare il led collegato al pin 12 ad una cadenza di 1 secondo.

Il quarto task come detto sopra aspetta 5 minuti e poi invia tramite seriale un marcatore “L” che serve al programma labview per riconoscere che il dato inviato è il dato relativo alla media rilevata in 5 minuti.

Interfaccia LABVIEW
Il Pc tramite USB comunica con il modulo xbee grazie all’adattatore UartSbee V3.1 che al suo interno ha un convertitore USB/seriale.
L’interfaccia creata in labview è semplice da utilizzare :

Come si vede dalla figura sopra, il grafico in alto visualizza la media dei consumi ogni 5 minuti, mentre il grafico in basso visualizza il consumo istantaneo. E’ possibile salvare i dati utilizzando il dispositivo come datalogger.

Il programma per Arduino è scaricabili qui in formato zip.
Lo schema elettrico in formato .sch è anch’esso disponibile.
L’interfaccia in LabVIEW può essere scaricata qui.

VOTA PER IL SIG. MICHELE!  GUARDA I PROGETTI DI TUTTI GLI ALTRI CANDIDATI.

0 votes, average: 0,00 out of 50 votes, average: 0,00 out of 50 votes, average: 0,00 out of 50 votes, average: 0,00 out of 50 votes, average: 0,00 out of 5 (0 voti, media: 0,00 su 5)
Per poter esprimere il tuo giudizio devi essere registrato. Accedi o registrati.
Loading...