Il tachimetro più semplice del mondo!
Ho realizzato questo semplice circuito perché avevo la necessità di visualizzare con una discreta approssimazione la velocità di produzione di una macchina riempitrice e i progetti che ho trovato in rete erano tutti troppo complessi o poco adattabili alle mie esigenze.
Per effettuare la misurazione, ho montato un encoder ottico incrementale su uno degli assi di rotazione della macchina, quindi ad ogni giro dell'encoder la macchina produce X bottiglie, a questo punto basta contare il numero di impulsi in un secondo, per risalire alla velocità della macchina.
Data la conformazione della macchina, il posto più semplice dove potevo montare l'encoder, era sul pignoncino di uno dei ruotismi della macchina accoppiato mediante una catena alla stella di ingresso delle bottiglie, ma questo particolare è poco importante ai fini dell'articolo.
Quello che è importante invece è lo schema di calcolo per determinare il numero di impulsi per bottiglia.
Dati:
La stella di ingresso produce in un giro completo 10 bottiglie.
Il pignone della stella ha 76 denti.
Il pignone dell'encoder ha 15 denti.
l'encoder produce in un giro completo 100 impulsi.
Il rapporto tra i due pignoni è 76/15=5,067, ciò vuol dire che per ogni giro della stella, l'encoder effettua 5,067 giri.
Il numero di impulsi per bottiglia è 5,067*100/10= 50.67.
Quindi per ciascun impulso dell'encoder la macchina produce 1/50,67= 0,0197 bottiglie.
la velocità oraria della macchina è pari a: n. impulsi al secondo * 0,0197*3.600.
Essendo 0,0197 e 3.600 due costanti, anche il loro prodotto è una costante ed è pari a: 0,0197*3.600 = 71,04.
Quindi la velocità della macchina è uguale al numero di impulsi al secondo * la costante 71,04 che ho approssimato a 71.
Se viene contato un solo impulso in un secondo, la velocità oraria è pari a 71 bottiglie orarie, e questa è la risoluzione del sistema, quindi la velocità sarà misurata in multipli di 71.
Naturalmente per adattare il progetto alle vostre esigenze bisogna determinare il valore della costante.
Schema elettrico:
Sullo schema elettrico, vista la sua semplicità, c'è veramente poco da dire, un PIC 16F84A, un display LCD, il quarzo e una mezza dozzina di componenti.
Sulla macchina è presente la tensione di 24Vcc filtrata e stabilizzata che, vista l'esuguità delle correnti in gioco viene convertita a 5V da DC1.
L'encoder, collegato a J1 manda i suo impulsi al pin a RA1, mentre l'LCD è collegato nella configurazione a 4 bit a portB. Essendo l'encoder un prodotto industriale di buona qualità, i suoi impulsi sono sufficientemente puliti per essere letti correttamente dal PIC, quindi non c'è stato bisogno di alcun circuito di condizionamento.
R1 mantiene alto il pin di reset e R2 tiene basso RA1 per evitare di avere incertezza sull'ingresso in assenza di impulsi.
LISTA COMPONENTI:
R1 10K
R2 10K
C1 22 pF
C2 22pF
C3 100.000 pF
C4 100.000 pF
Q1 Quarzo da 4 Mhz DC1 7805
DIS1 display tipo HITACHI 2 X 16
IC1 PIC 16F84A
J1 Connettore a vite 3 poli
J2 Connettore a vite 2 poli
FIRMWARE:
Per il firmware ho utilizzato il compiatore BASIC di PIC SIMULATOR IDE, e queste sono le poche righe del codice debitamente commentate:
Define LCD_BITS = 4 'pilotaggio a 4 bit
Define LCD_DREG = PORTB 'PORTB per il pilotaggio
Define LCD_DBIT = 4 'pilotaggio mediante RB4, RB5, RB6, RB7
Define LCD_RSREG = PORTB 'RS su RB1
Define LCD_RSBIT = 1 'RS su PORTB
Define LCD_EREG = PORTB 'E su RB3
Define LCD_EBIT = 3 'E su PORTB
Dim impulsi As Word 'impulsi dell'encoder
Dim bottiglie As Word 'variabile da visualizzare sul display
Const za = 71 'costante per la conversione impulsi - bottiglie/ora (vedi articolo)
TRISA = 0xff 'PORTA tutti output
Lcdinit 'inizializzo display
Lcdcmdout LcdClear 'pulisco lo schermo e vado accapo
Lcdout " PROD. ORARIA" 'scrivo stringa
loop:
Count RA1, 1000, impulsi 'conto quanti impulsi entrano in RA1 in un secondo e li memorizzo nella variabile impulsi
bottiglie = impulsi * za 'converto impulsi in bott./ora
Lcdcmdout LcdLine2Home 'vado alla linea 2
Lcdout " " 'mi sposto di 4 caratteri a dx
Lcdout #bottiglie 'scrivo la variabile
Lcdout " " 'sovrascrivo con spazi eventuali cifre rimaste dal ciclo precedente
Goto loop 'ciclo infinito
Non allego l'HEX, perché va bene soltanto in questa specifica applicazione.
Queste sono alcune foto della realizzazione:
Montaggio di prova su breadboard
Prova di funzionamento