Centralina per apertura automatizzata persiane con PIC16F88

L’idea  per questo progetto e’ nata quando mi sono ritrovato tra le mani dei piccoli motori elettrici da 12 volt CC. Questi montano a bordo un motoriduttore con un pignone dentato conico. Il motore risulta particolarmente lento: compie circa 8 giri al minuto il che lo rende perfetto per muovere delle ante senza che queste possano sbattere. Ho effettuato delle misurazioni elettriche per rilevare la corrente d’assorbimento a vuoto e sotto sforzo e quindi valutare il tipo di driver da utilizzare. Con grande sorpresa ho scoperto che a vuoto il loro assorbimento e’ piuttosto basso (circa 190 mA) e sotto sforzo non superavano mai i 500 mA. La coppia non e’ notevole, ma per il mio scopo va più’ che bene: aprire e chiudere delle ante non necessita un forza esagerata.

A questo punto ho messo giù dei punti base sul quale lavorare:

  • La centralina deve stare all’interno delle comuni scatole 503, quelle che ospitano le comuni prese o interruttori di casa: non mi va di vedere scatole in giro.
  • Dato il basso assorbimento dei motori utilizzerò il driver L293D che permette di pilotare ,in configurazione H, fino a due motori con un assorbimento massimo per motore di 1,2A.
  • L’alimentazione sarà del tipo a spina ultracompatta, tipo quelli dei caricabatterie dei cellulari, a 12volt /1000 mA. L’intenzione e’ quella di nascondere anche l’alimentatore all’interno della 503 con un piccolo accorgimento: le persiane sono montate sui muri confinanti, questi hanno uno spessore che solitamente e’ di 20/30 cm, è quindi sufficiente sfondare il fondo della scatola 503 per scoprire che c’è molto spazio a disposizione !!!
  • Le ante verranno aperte una alla volta. Il motivo che mi portato a  fare questa scelta, sta nel fatto che in questo modo posso utilizzare un alimentatore a bassa potenza, non complicare la logica del programma e risparmiare così memoria del PIC, che mi servirà per sviluppare la centralina per altre funzioni che vedremo in un prossimo articolo.
  • Il motoriduttore e’ del tipo irreversibile, questo mi permetterà di non montare serrature e risparmiare il tutto in termini di consumo. Inoltre questo permetterà anche di tenere le ante aperte in caso di vento.
  • Non avendo un encoder da gestire (ahimè), ho studiato un modo per bloccare il motore in caso in cui questo vada sotto sforzo, situazione che può presentarsi nel caso ci sia un ostacolo davanti all’anta. Controllerò l’assorbimento totale del circuito driver dei motori e, grazie ad un integratore e un comparatore ottenuti con due operazionali, gestirò  l’informazione con il PIC (amperostop).
  • Le ante devono rallentare in chiusura ed in apertura per non sentirle sbattere. Ho utilizzato per questo la funzione i moduli CCP del PIC in configurazione PWM.
  • Nella fase di partenza dei motori una routine del programma ignorerà, per qualche secondo, il segnale proveniente dal circuito che gestisce l’amperostop. In questo modo si eviterà il blocco delle ante solo in quell’occasione.

Analizziamo ora la logica di funzionamento della prima anta (il discorso per la seconda anta non cambia).

Fig. 1 – Tempi per le fasi di apertura/chiusura

Come si può osservare nella figura 1 , il PIC conterà un tempo in fase di apertura denominato Time1, finito il quale passerà a conteggiare un tempo (Tral) in cui il motore lavorerà a metà velocità (motore pilotato in PWM con duty cycle del 50%).

Nella fase di chiusura, la procedura sarà analoga: Time4 sarà il tempo di chiusura a piena velocità e ancora Tral il tempo a velocità ridotta.

Dal punto di vista elettronico tutto e’ abbastanza chiaro, rimane da risolvere le questioni meccaniche.

Per questo mi ha dato una mano mio zio ( grazie Agostino !!) che in officina e’ senz’altro più abile di me.

Dopo aver preso le misure degli spazi disponibili per montare il motore, è stata preparata una base in ferro e dei supporti in alluminio per il motore:

Foto 1 – I pezzi singoli che compongono il motore.

Il movimento del motore viene ulteriormente ridotto da un perno con ruota dentata conica da 30 denti montata su un supporto in bronzo: qualsiasi amico tornitore lo realizza in pochi minuti. Per chi lo richiederà, posso fornire un PDF con le misure di ogni singolo pezzo.

Un’altra piastra terrà il tutto in posizione. Per il braccetto occorre fare delle prove in base alla larghezza del montante della finestra. Con qualche tentativo si trova la giusta misura e la giusta curvatura. Io l’ho simulato con il CAD, ma si può fare anche senza.

Per l’ingranaggio occorre affidarsi a qualche officina meccanica (magari qualche lettore ci può aiutare) mentre per i motori ci sono diverse aziende su internet in grado di fornirli.

Montando il tutto si ottiene un motoriduttore piuttosto compatto che mi permette di farlo stare tra la finestra e la persiana.

Foto 2 – Gruppo motoriduttore assemblato con i supporti
Foto 3 – Motoriduttore posizionato sul telaio in legno

Passiamo ora al nostro PICmicro. Ho scelto il PIC16fF88 in quanto ha una buona quantità di memoria, oscillatore interno per ridurre il più possibile le misure del circuito stampato, una USART che mi servirà più avanti, ed e’ di facile reperibilità con un costo contenuto (circa 3 euro).

Sul PCB troveremo i morsetti per l’alimentazione, quelli per il pulsante di comando , per i due motori e quelli per poter programmare il PIC on board con il programmatore PICKIT e compatibili.

Fig. 2 – Schema elettrico

La tensione dei 12 volt, come detto in precedenza, viene fornita da un alimentatore esterno. Questa la useremo unicamente per pilotare i motori (uno alla volta) con il driver L293D, mentre uno stabilizzatore 7805 fornirà la tensione al PIC e ai due operazionali. Uno di questi è usato per controllare l’assorbimento del driver. La tensione misurata ai capi della resistenza R7 da 1 ohm 1 watt, e’ proporzionale alla corrente assorbita dal motore in funzione in quel momento e verrà confrontata con quella del trimmer multigiri R8 il quale verrà tarato in modo tale da vedere spegnersi il LED1 quando fermeremo il motore con una mano. Il fatto di vedere spegnersi il LED con con il motore in sovraccarico, piuttosto che il contrario come sarebbe più logico, e’ una scelta voluta, dettata dal fatto di poter avere anche la segnalazione di presenza tensione nel circuito.

Il segnale sarà applicato ad uno stadio integratore realizzato dal primo operazionale e squadrato in modo preciso dal secondo operazionale che e’ in configurazione trigger di Schmitt: in questo modo il PIC avrà un bel livello logico da processare.

 

Fig. 3 – Particolare del comparatore a Trigger di Schmitt

Il programma e’ piuttosto semplice e ricco di commenti. Troviamo, per iniziare, una routine per il controllo della pressione del pulsante di comando. Questa attende il rilascio dello stesso,  evitando così di passare, se non rilasciato velocemente, alle sequenze successive.

 

Ricevuto il comando in modo corretto, portiamo a 1 l’uscita RA0 del PIC denominata Out1: la prima anta inizierà ad aprirsi. Azzeriamo il conteggio del tempo (Sec=0) ed impostiamo a 1 (vero) un flag Brk per la gestione di un ciclo while.

A questo punto controlliamo se il tempo di apertura e’ scaduto o se viene premuto il tasto di comando o se l’anta trova un ostacolo lungo la sua corsa. Se una di queste condizioni si avvera riportiamo a zero l’uscita che controlla la prima anta (Out1) e si passa così alla sequenza successiva.

Se la fase di apertura si completa nei tempi impostati senza nessun altro evento, andremo a far rallentare l’anta prima che questa possa sbattere. Per ottenere questo risultato e’ stata utilizzata la funzione PWM del PIC. Il processore rende disponibili su una delle due porte RB0 o RB3, selezionabili nella stringa di configurazione visibile all’inizio del programma, un’onda quadra con duty cycle programmabile (PWM). Nel mio caso ho selezionato la porta RB3 come risulta visibile nel CONFIG con il mnemonico CCPMX_RB3. Per capire meglio il funzionamento del PWM, su questo sito si possono trovare diversi articoli con esempi di programma nonché vari esempi (es.: pilotaggio CENT4UR con PIC16F877APWM sul PIC10F322). Basti sapere che nella fase a piena velocità il duty cycle deve essere al 100% (valore duty=255) mentre al 50% la variabile duty assumerà il valore di 200. E’ chiaro che questo sarà un valore che potrà cambiare in base al tipo di motore che utilizziamo.

Il rallentamento ha una durata determinata dal Tral modificabile nel file setting.h.

Oltre questa variabile possiamo modificare, a seconda delle proprie necessità:

  • Time1 tempo apertura anta 1
  • Time2 tempo apertura anta 2
  • Time3 tempo chiusura anta 2
  • Time4 tempo chiusura anta 1
  • Tamp tempo oltre il quale il motore sotto sforzo verrà fermato.

 

I  valori che trovate sono quelli che hanno dato il miglior risultato per automatizzare le mie persiane, ma e’ chiaro che ognuno dovrà trovare i propri con qualche tentativo. Solo nella fase di chiusura, visto che le ante rallentano e quindi non hanno una grande forza, ho fatto in modo che ci fosse una una spinta in chiusura per una frazione di secondo, in modo d’accostare bene l’anta in battuta.

In fine troviamo, la routine d’interrupt del TMR0 che mi permette di avere un conteggio del tempo utile per gestire le varie fasi di apertura e chiusura delle ante.

Foto 4 – Centralina assemblata

Il risultato finale del circuito e quello visibile nella foto 4. Il tutto resta comodamente nella scatola da incasso tipo 503 dove ho fatto arrivare i cavi dei due motori. Resta da spiegare la presenza delle due strip femmina al fianco del PIC. Queste serviranno per connettere ad una scheda d’espansione che permetterà il controllo della centralina tramite BUS 485 (qui l’articolo).

Downloads

Il file zip contiene il sorgente scritto per Hitech C Compiler, il progetto per MPLAB, lo schema elettrico in formato PDF e gli schemi in formato Eagle 6.

Progetto persiana motorizzata a 2 ante by Ferdinando Longhi (659 download)

vai alla seconda parte

Se questo articolo ti è piaciuto, condividilo su un social:
Se l'articolo ti è piaciuto o ti è stato utile, potresti dedicare un minuto a leggere questa pagina, dove ho elencato alcune cose che potrebbero farmi contento? Grazie :)