OMC1 Fantini Cosmi


 

 

Questo è un driver per tende motorizzate. Vedi manuale istruzioni qui.

Il suo funzionamento  molto semplice utilizza una pulsantiera per pilotare la tenda. Bisogna collegare una pulsantiera del tipo sali-scendi (tre capi) ai morsetti del modulo marrone (apri), nero (chiudi) comune.

Funziona così:

  • Pulsante apri - la tenda si apre
  • Pulsande chiudi - la tenda si chiude
  • Se durante l'apertura si preme chiudi (controcomando) la tenda si ferma
  • Se durante la chiusura si preme apri (controcomando) la tenda si ferma

La pulsantiera funziona dando un impulso breve che sia entro il mezzo secondo. 

E' possibile pilotarla tramite Arduino mediante invio di impulsi. Per fare questo si può utilizzare un relè a due canali.

 

Collegamenti:

Arduino Pulsantiera Ingresso Relè Uscita Relè OMC1
D4 Apri      
D5 Chiudi      
D6   IN1    
D7   IN2    
      NO1 Chiudi
      COM1 Comune
      NO2 Apri
      COM2 Comune
GND Comune      

 

D4 e D5 sono in Imput pullup, percui se non premuti sono su HIGH quando premuti vanno a LOW

D6 e D7 sono in OUTPUT

 

  • Se premiamo l'Apri sulla pulsantiera Arduino invia un impulso di 400 millisecondi:
    • Porta D6 a LOW, il relè di apertura si attiva
    • Avvia un intervatto di 400 ms
    • A fine intervallo porta D6 a HIGH, il relè di apertura si disattiva

  • Se premiamo Chiudii sulla pulsantiera Arduino invia un impulso di 400 millisecondi:
    • Porta D7 a LOW, il relè di Chiusura si attiva
    • Avvia un intervatto di 400 ms
    • A fine intervallo porta D7 a HIGH, il relè di Chiusura si disattiva

Questi impulsi simulano la pressione dei corrispettivi tasti di una pulsantiera direttamente collegata all'OMC1. In pratica pigiando la pulsantiera (collegata ad Arduino) è come se pigiassi una pulsantiera direttamente collegata all'OMC1. Chi sono alcune particolarità da tenere presente nel gestire gli impulsi simulati. Come si simua aun impulso che assomii ala prsione che esrciteremo sea pulantra diretta. Il Cosmi (l'OMC1) riconosce come comando una pressione che abbia una durata entro il 1/2 sec si preme e si rilascia dopo 500ms, questa è la pressione giusta. Come visto sopra ho schelto un tempo di 400ms per rimanere meglio nel range.

Probema delle sovrapposizioni di impulsi

Per monitorare se il pulsante è stato premuto bisogna inserire nel loop il codice di controllo, tipicamente si inserisce nel metodo tick della classe che si occupa di gestire la pulsantiera nel mio caso pulsan.h e pulsan.cpp. Se ad es si preme il pulsante di apertura Arduino invia un impulso di apertura  poi esce e fa un'altro ciclo dove va a verificare se sono trascorsi i 400ms e se si chiude l'impulso. I cicli del loop e quindi di tick possono avere durate veramente brevi quamche ms quindi inqui 400ms vrranno eseguiti centinaia di cicli, se per caso o per automatismi dovesse scattare un'altro impulso questo verrebbe avviato prima che il precedente sia ancora terminato e questo provocherebbe una sovrapposizione che creerebbe  problemi. E' quindi molto importante che un impulso possa essere avviato solo quando il precedente si è concluso.

Problemi della coincidenza fine ed inizio di due impulsi

Se al Cosmi diamo un impulso al termine del quale ne segue un'altro. Primo impulso termina a 400ms a 401 e fino a 800ms segue l'altro Cosmi non li distingue, probabilmente percepisce il rilascio dell'ultimo. Non è chiaro di quanto debbano essere separati tra loro per essere percepiti entrambe. Nei casi in cui bisogna far seguire un'impulso ad un'altro caso tipico è quando ad esempio essendo in apertura un segnale di allarme chiede una chiusura forzata, è il causo di aggiungere una pausa tra l'uno e l'altro. Nel caso ho inserito una pausa di 1.5 sec tra lo stop dell'apertura e la chiusura forzata e l'ho chiamata pausa tecnica. Questo olre a risolvere il riconoscimento da parte di Cosmi degli impusi tutela anche il motore perchè si evita che avvenga un brusco cambiamento di direzione che non farebbe di certo bene al motore.

Problema di millis:
E cobsigliabile utilizzare direttamente millis(); nelle condizioni if che non come uica variabile in tick es now;