Rione Colosseo, la rivolta adesso cova sotto la cenere - L'Inchiesta 11/01/2011
Sinonimo di incubatrice = cova uova -...
Transcript of Sinonimo di incubatrice = cova uova -...
Progettazione e realizzazione di un’incubatrice programmabile per volatili
INDICE1 L’idea1.1 Il problema1.2 Cenni sull’incubazione1.3 Comprarla o auto costruirla?2 Sistema di acquisizione dati (S.A.D)2.1 Trasduttore2.2 Il circuito di condizionamento2.3 ADC: Analog to Digital Converter2.4 Il dispositivo di acquisizione ed elaborazione dati2.5 DAC: Digital to Analog Converter2.6 L’Attuatore3 Autocostruzione: il primo prototipo4 Autocostruzione: il progetto finale4.1 Obiettivi del progetto4.2 Analisi degli obiettivi e idee risolutive di massima4.3 Possibili metodi risolutivi4.3.1 Soluzione per via analogica4.3.1.1 Il trigger di Schmitt4.3.2 Soluzione per via digitale5 Soluzione scelta: quella digitale6 Realizzazione del progetto6.1 Strumenti e componenti utilizzati6.2 Schema elettrico6.3 Tabella dei componenti6.4 Fasi svolte6.4.1 Il disegno del circuito6.4.2 Il software6.4.3 Il dimensionamento delle piste6.4.4 Disegno del PCB6.4.5 Realizzazione della scheda stampata6.4.5.1 La fotoincisione6.4.5.2 Lo Sviluppo6.4.5.3 Incisione chimica6.4.5.4 Foratura delle piazzole e saldatura dei componenti7 Conclusioni7.1 Conclusioni finali7.2 Costi di realizzazione7.3 Software utilizzati8 Zoom8.1 Il girauova8.2 Gli alimentatori8.3 Le ventole8.4 La resistenza8.5 Architettura del microcontrollore PIC16F876A8.5.1 Porte di I/O8.5.2 Memoria dati (RAM) e memoria programmi8.5.3 Registri di memoria8.6 Programma per il PIC 16F876A8.7 Approfondimento sugli ADC
Pagina 1 di 38 Francesco Cencioni 5°B Informatica A.S. 2009/2010
Progettazione e realizzazione di un’incubatrice programmabile per volatili
In questo testo descriverò i procedimenti svolti per la realizzazione dell’incubatrice illustrata di seguito.
Pagina 2 di 38 Francesco Cencioni 5°B Informatica A.S. 2009/2010
Progettazione e realizzazione di un’incubatrice programmabile per volatili
1 L’IDEA
1.1 IL PROBLEMA
L’idea di realizzare un’incubatrice è nata dal problema pratico rappresentato dal fatto che, non potendo allevare un gallo per motivi di vicinato (fa troppi schiamazzi), le mie galline non fanno mai la chioccia. In quella condizione ero costretto ad allevare esclusivamente galline ovaiole. Grazie all’incubatrice da me realizzata potrò finalmente far nascere tutti i pulcini di cui ho bisogno per ottenere un produzione propria anche di polli da carne.
1.2 INCUBAZIONE
Nell’uovo deposto bisogna distinguere: la cellula uovo, o tuorlo, o rosso d’uovo; l’albume o bianco d’uovo; il guscio, che comprende anche le membrane testacee.
All’interno della cellula uovo si trova il disco germinativo, che nell’uovo fecondato prende il nome
di disco blastula o blastoderma, ed appare come un dischetto di colore grigio chiaro del diametro di circa 4 mm.Per quanto riguarda le uova di gallina, l’incubazione dura ventuno giorni (le uova covate dalla gallinachioccia possono schiudersi uno o due giorni prima o dopo a seconda della temperatura nel periodo di cova).L’incubatrice deve essere munita di vaschetta per l’acqua e di un sistema di ventilazione che servono a fornire l’umidità e l’ossigeno richiesto dalle uova e a rimuovere la CO2 e il calore prodotto dalle uova stesse.L’umidità deve rimanere costante per tutto il periodo di incubazione (circa il 60%), tranne negli ultimi tre giorni quando deve essere portata al 75%, altrimenti possono nascere pulcini con malformazioni (ad es. zampe divaricate).Dopo sette – otto giorni dall’inizio dell’incubazione si può già vedere se la cellula si è sviluppata. Questo è possibile grazie ad un piccolo strumento detto sperauova che emettendo un fascio di luce
concentrata sull’uovo, permette di vedere l’embrione.Dal diciottesimo giorno le uova non vanno più girate, in quanto il pulcino si è già sviluppato e riesce da solo a posizionarsi con il becco rivolto verso l’alto in modo da rompere il guscio e nascere.I pulcini vanno tenuti ancora per circa 24 ore nell’incubatrice in modo da ripararli dal freddo, affinché le piume si asciughino completamente; dopo si possono togliere e cominciare ad alimentarli con gli appositi mangimi.
Pagina 3 di 38 Francesco Cencioni 5°B Informatica A.S. 2009/2010
Progettazione e realizzazione di un’incubatrice programmabile per volatili
1.3 COMPRARLA O AUTOCOSTRUIRLA?
Convinto della necessità di un’incubatrice, mi sono trovato davanti ad un bivio: comprarla oppure autocostruirla? Mi sono quindi informato presso un consorzio agrario e su internet sul valore commerciale di una cova uova industriale. Ho potuto constatare che sono necessari circa 150/200€ per un’incubatrice con capacità di 20 uova. Con il girauova automatico si arriva a 250/300€. A questi prezzi, seppur elevati, si possono comprare solo i modelli base.Non essendo rimasto entusiasta dei modelli commerciali, mi sono indirizzato verso l’autocostruzione.
2 SISTEMA DI ACQUISIZIONE DATI (SAD)
Per acquisire dei dati è necessari oche le grandezze fisiche vengano trasformate in grandezze elettroniche. Un sistema di acquisizione dati lega la variazione della grandezza fisica con la variazione di una grandezza elettrica.2.1) Per effettuare questa conversione è necessario un trasduttore. Esistono vari tipi di trasduttori,
che si dividono in primari (temperatura, fotoelettrici, estensi metrici, magnetici) e secondari (velocità, forza, accelerazione, pressione, posizione). Il trasduttore di temperatura utilizzato è l’LM35. Questa sonda termica ha una caratteristica lineare (la relazione che lega la grandezza fisica a quella elettrica è di proporzionalità diretta). Esistono anche sensori con una curva di risposta esponenziale o logaritmica. 2.2) Il circuito di condizionamento è un circuito analogico che ha la funzione di adattare il
segnale informativo alle caratteristiche del sistema, come convertire il segnale elettrico contente l’informazione di una temperatura in gradi Kelvin in Centigradi, oppure, espandere all’interno del range misurabile il segnale informativo. Con la larga diffusione di sistemi digitali molto potenti, in
Pagina 4 di 38 Francesco Cencioni 5°B Informatica A.S. 2009/2010
Progettazione e realizzazione di un’incubatrice programmabile per volatili
grado anche di eseguire la FFT (Fast Fourier Transform), il circuito di condizionamento non viene più utilizzato per eseguire le varie trasformazioni, che vengono effettuate via software.2.3) ADC (Analog to Digital Converter = convertitore da analogico a digitale): è un dispositivo in
grado di convertire una grandezza analogica (tensione) in una digitale, espressa tramite una combinazione binaria. Il numero dei bit con la quale esegue la conversione dipende dal convertitore. Ogni ADC per funzionare necessita di una tensione di riferimento con la quale confrontare quella da convertire. La minima tensione in ingresso rilevabile è detta Quanto. Si ricava quindi la formula:
Q=V FS
2n
Dove n è il numero di bit con cui opera il convertitore e VFS è la tensione di fondo scala (la tensione di riferimento).La conversione consiste nel confrontare quante volte il quanto è contenuto nel segnale da convertire. Quindi il risultato della conversione R è dato da:
R=ViQ
L’ errore di quantizzazione è definito come l’ errore massimo che si può compiere nellaε conversione A/D, ed è dato da:
=εQ2
Per un approfondimento riguardo gli ADC rimando alla sezione “ZOOM” punto 8.72.4) Il dispositivo di acquisizione ed elaborazione dati è un apparecchio che, ricevuto come input
il segnale di un ADC, lo elabora e in base ai risultati ottenuti è in grado di prendere delle “decisioni”, che serviranno a modificare la grandezza fisica e riportarla entro i valori desiderati. Spesso è un Microcontrollore. Quest’ultimo può inglobare le funzioni di condizionamento del segnale, di ADC e di DAC. 2.5) DAC: Il segnale elaborato dal microcontrollore giunge al DAC (Digital ti Analog Converter),
che contrariamente a quanto faceva l’ADC, trasforma un segnale digitale in uno analogico.2.6) L'attuatore è un dispositivo in grado di effettuare un passaggio di energia per poter agire sulla
grandezza fisica (scaldare l'ambiente). La resistenza può essere considerata un'attuatore perchè, ricevuta un'energia elettrica, la trasforma in energia termica. Anche le ventole sono degli attuatori.
3 AUTOCOSTRUZIONE: IL PRIMO PROTOTIPO
Un primo prototipo di incubatrice risale all’anno passato (marzo 2009). Come involucro avevo utilizzato delle tavole di truciolato ricavate da un mobilino riciclato. La parte elettrica era molto approssimativa. Per controllare la temperatura avevo utilizzato un termostato da caldaia, collegato ad una comunissima lampadina ad incandescenza da 60W che forniva calore. La ventilazione avveniva mediante una ventola da PC collegata direttamente ad un alimentatore con quest’ultimo collegato ad una presa di corrente con timer. Avevo riposto le uova all’interno di un cassetto di legno, che ruotava su un asse che proseguiva all’esterno dell’incubatrice. Il cassetto veniva perciò
Pagina 5 di 38 Francesco Cencioni 5°B Informatica A.S. 2009/2010
Progettazione e realizzazione di un’incubatrice programmabile per volatili
ruotato manualmente per 3 volte al giorno dall’esterno dell’incubatrice. I risultati furono deludenti. Di 20 uova se ne schiusero solo 7. Sfortunatamente dei 7 pulcini nati solo uno riuscì a sopravvivere e a crescere sano. Gli altri 6 avevano le zampe troppo fragili e, non riuscendo a camminare, morirono dopo pochi giorni.Avevo seguito tutto il ciclo dell’incubazione (avevo addirittura portato l’incubatrice in camera mia). Mediante una sonda igrometrica e una di temperatura controllavo le condizioni ambientali all’interno del dispositivo. L’umidità era sempre rimasta costante (intorno al 60%), come da programma. Artefice della sfortunata fine fu il termostato, che era troppo poco sensibile e causava sbalzi di temperatura di anche 5°C. Già in partenza avevo dei dubbi sull’applicabilità di quel tipo di termostato, ma non ero riuscito a trovarne di migliori in commercio (per sensibilità dell’ordine di 0.5/1°C si doveva spendere intorno agli 80€). Capii che per costruire qualcosa di serio e funzionante non potevo utilizzare strumenti “arrangiati” perché la precisione doveva essere molta.Da qui la necessità di ricominciare tutto da capo, con l’intenzione di realizzare tutto, dalla “scatola” al circuito di condizionamento su misura.
4 AUTOCOSTRUZIONE: IL PROGETTO FINALE
4.1 OBIETTIVI
Per realizzare un progetto abbastanza complesso, è indispensabile effettuare un’ottima analisi prima di ogni altra cosa.Ho deciso di dividere il progetto in più parti, in modo tale da poterne affrontare solo una alla volta così da isolare eventuali problemi.Per prima cosa è stato necessario stilare una lista degli obiettivi da raggiungere, in modo tale da poter scegliere, fra i vari metodi risolutivi, quello migliore.L’incubatrice doveva infatti soddisfare queste specifiche:
1. Ospitare almeno 15/20 uova per ogni ciclo di incubazione;2. Ridurre al minimo gli sprechi di energia;3. Garantire una buona ventilazione interna per favorire la distribuzione del calore;4. Garantire un buon ricambio dell’aria con l’esterno (non dimentichiamoci che le uova
respirano e come ogni essere vivente hanno bisogno di aria ricca di ossigeno);5. Mantenere l’umidità costante;6. La temperatura deve essere stabile (può scostarsi dalla temperatura ideale di max ±0,75°C) e
regolabile;7. È preferibile un girauova automatico per ridurre la manutenzione durante l’incubazione.8. Sarebbe utile predisporre il circuito per l’utilizzo di un display LCD che visualizzi varie
informazioni (temperatura istantanea, umidità, temperatura massima raggiunta…..)
Pagina 6 di 38 Francesco Cencioni 5°B Informatica A.S. 2009/2010
Progettazione e realizzazione di un’incubatrice programmabile per volatili
4.2 ANALISI
Per i punti 1 e 2 la soluzione ideale non poteva che essere l’utilizzo di un vecchio frigorifero (rigorosamente recuperato da una stazione ecologica) di dimensioni 35x45x53. Un frigorifero offre infatti un’ottima coibentazione.La ventilazione (punto 3) verrà garantita da due ventole da PC, che assorbono poca corrente (circa 0.12A) e sono alimentabili a 12VDC.Per il ricambio dell’aria (punto 4) dovrebbe essere sufficiente praticare 2/3 fori di circa un centimetro di diametro nel frigorifero. Se ciò non dovesse bastare, sarà necessario aprire ogni 2/3 giorni lo sportello dell’incubatrice. Un’altra soluzione, sebbene più complessa, potrebbe essere quella di forzare lo scambio dell’aria con l’esterno mediante l’utilizzo di ventole molto piccole (es. quelle da processore) applicate direttamente sulla parete dell’incubatrice in prossimità dei fori.Per mantenere l’umidità costante (le uova di gallina necessitano di un’umidità di circa il 65%) (punto 5) è sufficiente tenere una vaschetta piena d’acqua sul fondo dell’incubatrice (variando la dimensione della vaschetta e la mole d’acqua in modo empirico fino a raggiungere la condizione desiderata).La questione del controllo della temperatura (punto 6) è sicuramente quella da considerare con la maggiore attenzione. Il sistema di acquisizione dati deve prevenire i bruschi sbalzi di temperatura. Par fare ciò, sarà sufficiente utilizzare più sonde di temperatura (userò 4 trasduttori di temperatura LM35 con sensibilità a 25°C di ±0,5°C con variazioni di 10mV/°C). I trasduttori di temperatura verranno situati nei punti critici (accanto alla resistenza, in alto, in basso, vicino alle uova…). Per quanto riguarda l’elemento riscaldante, verrà utilizzata la resistenza a filo ricavata da un vecchio un copri sedile riscaldante da auto, che ha una potenza di 60W. La potenza non è molta, ci vorrà quindi tanto tempo per arrivare a regime. Il vantaggio sarà però quello di poterla controllare più facilmente (si prevengono meglio gli sbalzi di temperatura).Per quanto riguarda il girauova (punto 7), la soluzione più immediata sarebbe quella di utilizzare un semplicissimo ripiano su cui posizionare le uova per poi girarle manualmente una ad una per almeno tre volte al giorno. La realizzazione di un modello motorizzato sarebbe da preferirsi per aumentare la praticità d’uso (ma non è affatto facile realizzarne uno automatizzato). Un giusto compromesso potrebbe essere quello di costruire un modello a in cui le uova vengono girate manualmente ma tutte insieme, magari dall’esterno, senza dover aprire lo sportello dell’incubatrice.Esistono vari tipi di display LCD (punto 8). In prima analisi di dividono in Display a segmenti e Display grafici. Dal momento che devo rappresentare solo dei caratteri, è intelligente orientarsi verso un Display a segmenti. Un modello 4x20 (20 caratteri per ognuna delle 4 righe) permetterà di visualizzare molte informazioni utili.
Pagina 7 di 38 Francesco Cencioni 5°B Informatica A.S. 2009/2010
Progettazione e realizzazione di un’incubatrice programmabile per volatili
4.3 POSSIBILI SOLUZIONI
Rimanendo in un contesto generale, il progetto può essere realizzato per via analogica o digitale.
4.3.1 SOLUZIONE ANALOGICA
Utilizzare componenti analogici ha il grande vantaggio di semplificare notevolmente la progettazione e l’implementazione del circuito elettrico. Per la gestione della temperatura è sufficiente fare la media delle tensioni di uscita dei sensori di temperatura utilizzando un amplificatore operazionale TL081 o TL082 in configurazione non invertente o invertente + buffer. La temperatura di utilizzo è sicuramente compresa fra 10 e 50 gradi centigradi. L’amplificatore permette di rapportare l’uscita dei sensori in nel dato range di temperatura in modo tale da ottenere un segnale di (0;5)VDC da comparare con le due tensioni di soglia di un comparatore a finestra (= a doppia soglia). Per esempio sarebbe possibile utilizzare un Trigger di Schmitt [figura in basso]. Con due trimmer si agisce sulle tensioni di soglia per regolare così le temperature alle quale accendere/spegnere la resistenza (ovviamente verrà utilizzata un’interfaccia di potenza=relè).Con un amplificatore in configurazione differenziale si può trovare la differenza fra la tensione di uscita della sonda situata più in alto (dove si presume ci sarà più calore) con quella della sonda situata più in basso (dove la temperatura sarà minore). Il risultato può essere confrontato con una tensione di riferimento mediante un comparatore a singola soglia. Quando la differenza fra le due suddette sonde supera il valore massimo stabilito, le ventole si accenderanno.Il problema di questo tipo di circuito è quello di non poter gestire il motore per il girauova, che dovrebbe venire azionato ogni un certo intervallo di tempo. Il tempo non può essere contato per vie analogiche (si parla di ore). Il girauova dovrebbe quindi essere forzatamente manuale.Per lo stesso motivo del girauova, lo scambio d’aria con l’esterno non potrà essere forzato con le ventole da processore. Non sarei in grado di gestire un Display LCD.
Pagina 8 di 38 Francesco Cencioni 5°B Informatica A.S. 2009/2010
Progettazione e realizzazione di un’incubatrice programmabile per volatili
4.3.1.1 Trigger di Schmitt
Riassumendo, i vantaggi della soluzione analogica sono:• Economico• Progetto relativamente semplice da realizzare
Gli svantaggi sono:• Alcuni degli obiettivi non possono essere implementati, o sarebbe comunque molto difficile
farlo (ventole per il ricambio dell’aria, girauova automatico);• Il Display LCD non potrà essere installato• È poco preciso regolare le tensioni di soglia analogicamente con i trimmer (una volta saldati
sulla scheda risulterà difficoltoso misurare il loro valore ed ottenere una proiezione attendibile della temperatura);
• La regolazione delle tensioni di soglia con i trimmer sarebbe anche poco pratica qualora si volesse cambiare la specie da incubare (galline, faraone, fagiani...)
• Difficoltà nell’apportare modifiche al sistema
Pagina 9 di 38 Francesco Cencioni 5°B Informatica A.S. 2009/2010
Progettazione e realizzazione di un’incubatrice programmabile per volatili
4.3.2 Soluzione digitale
L’utilizzo di un microcontrollore della famiglia PIC permette di perfezionare il modo in cui l’attuatore (la resistenza, le ventole) agisce sulla grandezza fisica. La gestione del microcontrollore richiede tuttavia una certa esperienza nel campo della programmazione. Un microcontrollore è un dispositivo elettronico integrato su un singolo chip. È dotato di un centro di elaborazione dati (CPU), una memoria di programma flash, una memoria dati (per l’esecuzione=ram), e di un numero variabile di PIN che fungono da porte di I/O programmabili. L’utilizzo di un PIC permette di gestire, oltre alla resistenza e alle ventole, anche un eventuale girauova. L’incubatrice potrà ospitare qualunque tipo di uovo, poiché la temperatura di utilizzo, la frequenza di accensione delle ventole e del girauova saranno gestite direttamente dal microcontrollore. Questi parametri potranno essere modificati via software. Anche il taraggio della cova uova potrà avvenire con maggiore cura, poiché le regolazioni vengono fatte via software e non tramite i trimmer.Vantaggi:
• Possibilità di soddisfare tutti gli obiettivi preposti• Facilità nel modificare la temperatura di utilizzo• Precisione nelle regolazioni• Possibilità di apportare modifiche al programma in modo tale da correggere eventuali
problemi non previsti• Possibilità di visualizzare la temperatura su un Display LCD
Svantaggi:• Costo più elevato• Necessità di conoscenze anche in ambito informatico (nel mio caso non è un problema).
5 SOLUZIONE SCELTA: DIGITALE
Ho deciso di affidare la gestione del mio sistema di acquisizione dati ad un microcontrollore PIC.Il PIC scelto è della famiglia 16F ed in particolare è il modello 16F876A. Il PIC da me scelto ha 28 pin. Le sue 22 porte di I/O permettono una completa versatilità.È molto utile la presenza di 5 porte in grado da rilevare in ingresso segnali analogici (fungono da ADC). Grazie a questa funzione sarà sufficiente collegare ognuna delle ad una porta ADC del PIC (ovvero alle PortA). Il PIC rileverà la tensione del segnale emesso dalle sonde di temperatura e la trasformerà in un segnale digitale utilizzabile dal microcontrollore. In pratica la tensione in ingresso su ogni porta ADC verrà trasformata in un numero fra 0 e 255 (nel caso di un convertitore a 8bit). Come ho già detto, è obbligatorio utilizzare le PortA del PIC per poter accedere alla funzione di ADC.L’elemento riscaldante verrà pilotato da una porta del PIC attraverso un’interfaccia di potenza. Quest’ultima servirà a proteggere il microcontrollore da correnti troppo elevate.
Pagina 10 di 38 Francesco Cencioni 5°B Informatica A.S. 2009/2010
Progettazione e realizzazione di un’incubatrice programmabile per volatili
Il display LCD diventa facilmente gestibile. Se pilotato a 4bit, il display richiede che gli vengano dedicate 7 porte di I/O del PIC (4 porte per i bus dati + Enable + R/W + RS). La ventilazione interna verrà garantita da due ventole. Entrambe verranno azionate quando la porta del PIC alla quale sono collegate attraverso un’interfaccia di potenza (Mosfet IRF540) passerà allo stato logico alto (5V).Per le eventuali ventole adibite al ricambio forzato dell’aria vale lo stesso discorso per quelle adibite alla ventilazione.La questione del girauova è più complicata, soprattutto sotto il punto di vista meccanico. Dal punto di vista elettronico, il motore del girauova verrà controllato da una porta del PIC attraverso un relè. Per approfondimenti dal punto di vista meccanico rimando a zoom.
Sarà necessario un alimentatore molto potente, dal momento che la resistenza assorbe 5A (60W a 12V). Verrà utilizzato un alimentatore da PC.
Pagina 11 di 38 Francesco Cencioni 5°B Informatica A.S. 2009/2010
Progettazione e realizzazione di un’incubatrice programmabile per volatili
6 REALIZZAZIONE DEL PROGETTO
6.1 STRUMENTI E COMPONENTI UTILIZZATI
Strumenti/Dispositivi Casa Costruttrice
Modello
Alimentatore stabilizzato da computerAlimentatore +15VAC Stech ATX 12V P4 SWITCHING
POWER SUPPLYDMM (Digital Multi Meter) METRIX MX45Una scheda PCB // Double layerUn Saldatore a stagnoTrapano a colonna per forare il PCB // //Cavi di collegamento // Diametro 0,75cm e 2,50 cm
e cavi flatBromografo // Singola facciaSoda caustica diluita al 7% Cloruro ferrico
Componenti utilizzati
Quarzo 4MhzStabilizzatore tensione LM7805CTMicrocontrollore PIC 16f876ADisplay LCD 4X20 segmenti4 x Transduttori di temperatura LM35DZ2 X Mosfet IRF540Relays 12V 16ARelays 12V 5ADue condensatori ceramici da 22 pFUn condensatore elettrolitico da 470 nFUn condensatore elettrolitico da 220nFun trimmer da 100 K Ω Electron 1/4W 10%
3 X diodo 1N40072 x Diodo led2 resistenze da 470 Ω2 resistenze da 3,9KΩ5 morsettiere a 2 pin
Pagina 12 di 38 Francesco Cencioni 5°B Informatica A.S. 2009/2010
Progettazione e realizzazione di un’incubatrice programmabile per volatili
6.2 SCHEMA ELETTRICO
RA0/AN02
RA1/AN13
RA2/AN2/VREF/CVREF4
RA4/T0CKI/C1OUT6
RA5/AN4/SS/C2OUT7
OSC1/CLKIN9
OSC2/CLKOUT10
RC1/T1OSI/CCP2 12
RC2/CCP1 13
RC3/SCK/SCL 14
RB7/PGD 28RB6/PGC 27
RB5 26RB4 25
RB3/PGM 24RB2 23RB1 22
RB0/INT 21
RC7/RX/DT 18RC6/TX/CK 17
RC5/SDO 16RC4/SDI/SDA 15
RA3/AN3/VREF+5
RC0/T1OSO/T1CKI 11
MCLR/Vpp/THV1
U1
PIC16F876AVDD=+5VVSS=GND
27.0
3
1
VOUT 2
AS
LM35
27.0
3
1
VOUT 2
AD
LM35
27.0
3
1
VOUT 2
BS
LM35
27.0
3
1
VOUT 2
BD
LM35
Q2IRF540
Q1IRF540
D1
1N4007
D3
1N4007
D7
14D
613
D5
12D
411
D3
10D
29
D1
8D
07
E6
RW5
RS
4
VS
S1
VD
D2
VE
E3
LCD1LM044L
R/W è a massa (zero) perchè va usato in modalità scrittura
Q3BC548
Q4BC548
RESISTENZA
GIRAUOVA
VENTOLA
VI1 VO 3
GN
D2
U27805
D51N4007
RICIRCOLO
D4
LED
D2
LED
X1CRYSTAL
ResisOUTResisIN
GiraOUTGiraIN
Aria
Aria+
Ventola
Ventola+
R2
470Ohm
R1
470Ohm
R4
3.9k
R3
3.9k
C422p
C322p
C1
470n
C2
220n
GND
+12V
+5V
12
J1
VENTOLA
12
J2
RICIRCOLO
12
J3
GIRAUOVA
12
J4
RESISTENZA
12
J5
ALIMENTAZIONE
RL1G2R1EDC12
RL2G2R1EDC12
RV1
1K
R510k
C5100n
R6
470R
Pagina 13 di 38 Francesco Cencioni 5°B Informatica A.S. 2009/2010
Progettazione e realizzazione di un’incubatrice programmabile per volatili
6.3 TABELLA DEI COMPONENTI
J1 Morsettiera per collegamento ventole di movimento ariaJ2 Morsettiera per collegamento ventole del ricambio ariaJ3 Morsettiera per collegamento dell’elemento scaldante e relativa
alimentazioneJ4 Morsettiera per collegamento del motore girauova e relativa alimentazioneJ5 Morsettiera per alimentazione +12V per la schedaRV1 Trimmer per regolazione del contrasto del display LCDU2 Stabilizzatore tensione a 5V LM7805CTC1 Condensatore per stabilizzatore di tensioneC2 Condensatore per stabilizzatore di tensioneX1 Quarzo per oscillatoreC3 Condensatore per oscillatoreC4 Condensatore per oscillatoreAS Trasduttore di temperatura LM335DZ 10mv/°CAD Trasduttore di temperatura LM335DZ 10mv/°CBS Trasduttore di temperatura LM335DZ 10mv/°CBD Trasduttore di temperatura LM335DZ 10mv/°CQ1 Mosfet IFR540 per interfacciamento di potenzaQ2 Mosfet IFR540 per interfacciamento di potenzaQ3 Transistor BC548Q4 Transistor BC548RL1 Relè per interfacciamento di potenzaRL2 Relè per interfacciamento di potenzaU1 Microcontrollore PIC 16F876ALCD1 Display LCD 4X20 segmenti
Componente Valore Componente
Valore
R1 = 470Ω C1 = 470 nFR2 = 470Ω C2 = 220 nFR3 = 3,9KΩ C3 = 22 pFR4 = 3,9KΩ C4 = 22 pF
RV1 = 1KΩ
Pagina 14 di 38 Francesco Cencioni 5°B Informatica A.S. 2009/2010
Progettazione e realizzazione di un’incubatrice programmabile per volatili
6.4 FASI SVOLTE
Mi limiterò a descrivere le operazioni svolte per realizzare il circuito stampato e il programma per il microcontrollore, tralasciando la parte relativa alla realizzazione dell’involucro e al fissaggio meccanico di componenti quali elemento scaldante, ventole e girauova.
6.4.1 DISEGNO DEL CIRCUITO
Prima di concentrarmi alla realizzazione del circuito PCB mi sono voluto accertare del funzionamento e della corretta progettazione dello schema elettrico e del programma di controllo.Per prima cosa ho disegnato lo schema elettrico di principio utilizzando il programma ISIS Proteus.Questo software permette di testare il funzionamento del circuito grazie ad una particolare funzione di simulazione che consente di emulare un qualunque microcontrollore caricandoci un programma in formato .hex.È possibile effettuare una simulazione in real time e modificare i parametri dei sensori di temperatura per verificare la risposta del sistema. Il fatto che in fase di simulazione il programma e il circuito abbiano risposto a dovere, garantisce una buona possibilità di riuscita all’atto pratico.
6.4.2 IL SOFTWARE
Per stilare il programma ho utilizzato il software MikroBasic, che si è rivelato semplice e intuitivo. Ho riscontrato alcuni problemi nell'implementazione delle condizioni IF, poiché inizialmente avevo utilizzato i connettivi logici AND e OR per legare più condizioni insieme con una sintassi simile alla seguente:
if ((condizione1=x)and(condizione2=y)) then
....codice....
end ifDurante la compilazione non si verificava alcun errore, ma nel simulare il programma con l'applicativo ISIS Proteus, tali istruzioni venivano saltate.Il problema è stato risolto creando un annidamento di IF, anche se in questo modo non è stato possibile raggiungere il massimo dell’ottimizzazione. L’esempio di prima è stato trasformato così:
if (condizione1=x) then
if (condizione2=y) then
...codice....
end if
end if
Il listato può essere consultato nella sezione “ZOOM” al punto 8.6.
Pagina 15 di 38 Francesco Cencioni 5°B Informatica A.S. 2009/2010
Progettazione e realizzazione di un’incubatrice programmabile per volatili
6.4.3 IL DIMENSIONAMENTO DELLE PISTE
Quando si realizzano circuiti stampati per alte correnti e/o alte tensioni è necessario usare maggiori larghezze delle piste e maggiori distanze di isolamento rispetto al minimo tecnicamente possibile. Per quanto riguarda la massima corrente il parametro fondamentale da considerare è legato al surriscaldamento delle piste.Avendo utilizzato una basetta ordinaria (cioè con uno spessore di rame pari a 35 micron), ho potuto utilizzare il seguente grafico per poter scegliere la larghezza adeguata in funzione della temperatura raggiunta dalla pista stessa; per ottenere la temperatura superficiale occorre sommare a quella indicata sul grafico la temperatura dell'ambiente in cui il circuito stampato è posto. Si noti che la corrente indicata è quella media efficace (RMS) e non quella di picco che spesso è molto superiore.
6.4.4 Disegno del PCB
Per realizzare il PCB ho utilizzato l'applicativo ARES. Quest'ultimo crea automaticamente le netlist partendo dal progetto disegnato con ISIS. Dispone inoltre della caratteristica di autoroute, che permette di creare automaticamente tutte le piste fra i vari componenti. Questa funzione si è rivelata utile solo in parte, dal momento che le tracce proposte dal software non erano molto funzionali. Per fare un esempio pratico, le piste tracciate con l'autoroute avevano spesso angoli a 90°. Occorre ricordare che in un circuito stampato non ci dovrebbero mai essere curve a 90°, poiché in prossimità di queste ultime si creerebbe una maggiore presenza di capacità parassite che danno luogo a fenomeni di ringing (Scampanellata) che disturbano il segnale convogliato dalle stesse, pertanto si preferisce utilizzare piste con angoli di curvatura a 45° o inferiori. In buona sostanza il ringing è un campo elettromagnetico generato dalla conformazione della pista che si va ad aggiungere al segnale trasportato dalla stessa.. Tutte gli angoli retti sono quindi stati sostituiti da due angoli a 45°.
Pagina 16 di 38 Francesco Cencioni 5°B Informatica A.S. 2009/2010
Progettazione e realizzazione di un’incubatrice programmabile per volatili
È stato necessario ingrandire tutte le piste e impostarle a 60th. Le piste che collegano i piedini dei relè con le relative morsettiere sono state dimensionate a 100th, dal momento che in quella parte della scheda dovrà passare molta corrente (l'elemento scaldante ha una potenza di 60W).Per facilitare le operazioni di foratura e di saldatura, ho leggermente ingrandito le dimensioni di ogni piazzola. Ho inoltre cercato di disegnare più piste possibile nel lato bottom, dove è più facile saldare i componenti.Quella di realizzare il circuito su una scheda double layer è stata una scelta obbligata, dal momento che la presenza di componenti con un alto numero di PIN (come il microcontrollore che ne ha 28 o il display LCD che ne ha 14) rendeva impossibile lo sbroglio su un'unica faccia.Non avendo particolari esigenze di spazio, non mi sono soffermato molto nel “compattare” i componenti sulla scheda; piuttosto sono stato attento a disporre tutte le morsettiere, le quattro sonde di temperatura e il connettore per il Display nei bordi della basetta per facilitare il cablaggio. È stato necessario creare una nuova libreria poiché il tipo di morsettiera da me posseduta non era presente nell’elenco del Proteus.
Pagina 17 di 38 Francesco Cencioni 5°B Informatica A.S. 2009/2010
Progettazione e realizzazione di un’incubatrice programmabile per volatili
Pagina 18 di 38 Francesco Cencioni 5°B Informatica A.S. 2009/2010
Progettazione e realizzazione di un’incubatrice programmabile per volatili
6.4.5 REALIZZAZIONE DELLA SCHEDA STAMPATA
Questa fase di divide in cinque parti:1) fotoincisione2) sviluppo3) incisione chimica4) Foratura delle piazzole5) Saldatura dei componenti
6.4.5.1 Fotoincisione
La basetta utilizzata è di tipo fotoincisibile. Lo spessore delle due lamine di rame è 35 micron ciascuna. Lo spessore totale della basetta è circa 1,6mm.Per la stampa ho utilizzato la comune tecnica detta sottrattiva: partendo da una superficie completamente ricoperta di rame viene tolto tutto quello in eccesso per lasciare solo quello necessario per creare i collegamenti elettrici. Per fare questa operazione ho proceduto per via chimica. Per fare ciò si deve innanzi tutto proteggere la parte del rame che deve rimanere sulla basetta con una pellicola resistente alle sostanze chimiche, con le quali verrà poi aggredito il restante rame.La tecnica più pratica per “disegnare” le piste sul rame è quella della fotoincisione. Il materiale di base per utilizzare questo metodo è una semplice basetta presensibilizzata (nota anche come photoresist coated board), ovvero ricoperta da una vernice resistente alle sostanze chimiche. Se esposto alla luce ultravioletta, il polimero di base di tale vernice diventa solubile in una soluzione basica e quindi risulta facilmente rimovibile. Proprio perché sensibili alla luce, le basette vengono vendute con una pellicola di alluminio protettiva da rimuovere subito prima della fotoincisione.Per disegnare le piste sulla basetta è necessario evitare che queste vengano esposte alla luce ultravioletta. A tale scopo deve essere stampato su carta lucida un disegno in scala 1:1 del circuito da realizzare.
Pagina 19 di 38 Francesco Cencioni 5°B Informatica A.S. 2009/2010
Progettazione e realizzazione di un’incubatrice programmabile per volatili
Nella stampa del master (ovvero del suddetto foglio lucido) è necessario utilizzare un inchiostro assolutamente non trasparente ai raggi ultravioletti. Il colore è irrilevante anche se spesso si utilizza l’inchiostro nero, poiché ciò che appare nero ai nostri occhi risulta spesso opaco ai raggi UV. Nel mio caso, avendo scelto di realizzare una scheda double layer, è stato necessario stampare due master distinti: uno relativo alle piste del lato Top e uno per le piste del lato Bottom. I due master andranno fatti combaciare tra di loro e nel mezzo verrà sistemata la basetta presensibilizzata. L’inchiostro opaco del master farà si che nel momento dell’esposizione, i raggi ultravioletti non alterino la parte della pellicola immediatamente sottostante alle piste.L’esposizione ai raggi UV viene effettuata con un particolare strumento chiamato bromografo.
Quest’ultimo è appunto una sorgente di luce ultravioletta che illumina la basetta attraverso il master, inducendo le modificazioni chimiche solo alla parte di vernice effettivamente illuminata. Ovviamente la luce può passare solo dove il master è trasparente (ovvero dove non c’è l’inchiostro). È necessario che il master sia ben aderente alla basetta. Per questo motivo sopra a master e basetta viene adagiata una lastra di vetro.È buona norma rivolgere il lato stampato della carta lucida verso la scheda. Per questo motivo, nel caso di basetta double layer, al lato top va eseguita un’operazione di mirror via software, per evitare lo spiacevole inconveniente di stampare la basetta al contrario di non far tornare la numerazione dei pin.L’esposizione al bromografo deve durare circa 4 minuti per lato.
6.4.5.2 Lo sviluppo
Una volta eseguita l’operazione di fotoincisione, si deve provvedere ad asportare la vernice precedentemente illuminata dai raggi UV. Questa operazione viene svolta utilizzando una comunissima sostanza basica come la soda caustica (diluita al 7%). Si deve immergere la basetta nella soluzione di sviluppo (ovvero nella soda) per il tempo necessario a rimuovere il photoresist (circa 2/3 minuti).Per accelerare questo processo si può strofinare delicatamente la basetta con un dito (con i guanti!) o con un pennello. A questo punto le piste inizieranno ad affiorare.
Pagina 20 di 38 Francesco Cencioni 5°B Informatica A.S. 2009/2010
Progettazione e realizzazione di un’incubatrice programmabile per volatili
6.4.5.3 Incisione chimica
La scheda è stata poi trasferita in un contenitore plastico contenente cloruro ferrico (FeCl3) diluito in acqua al 40% per l’operazione di incisione, che permette di togliere chimicamente il rame in eccesso. Per velocizzare il processo, all’interno della vasca il cloruro ferrico, riscaldato a 30°C, è stato agitato da una pompa. Dal momento che la parte inferiore risente maggiormente della corrosione dell’acido, la basetta è stata capovolta dopo dieci minuti. L’incisione è terminata dopo venti minuti, quando tutto il rame non protetto dalla vernice è stato asportato. Ricordo che i tempi a me citati sono indicativi e possono variare in base ai macchinari e alle sostanza utilizzate.
Per finire, la scheda è stata sciacquata con alcool etilico per rimuovere la pellicola protettiva dalle piste. Questa operazione è utile per facilitare la saldatura. Lo stagno, infatti, non attacca sulla vernice fotosensibile.
6.4.5.4 Foratura e saldatura dei componenti
A questo punto la basetta è stata forata in prossimità delle piazzole con un trapano a colonna. La maggior parte dei fori è stata praticata con una punta di 0,8mm di diametro. Per i componenti con reofori (piedini) più grandi sono state utilizzate punte da 1mm e 1,2mm di diametro.La saldatura è l’operazione che permette il fissaggio dei componenti al circuito stampato. Consiste nella fusione nel punto di contatto tra rame e componente di una lega metallica che, raffreddandosi, permette sia la connessione elettrica che il fissaggio meccanico dei componenti. La lega utilizzata è
Pagina 21 di 38 Francesco Cencioni 5°B Informatica A.S. 2009/2010
Progettazione e realizzazione di un’incubatrice programmabile per volatili
lo stagno, che può essere mischiato con parti di piombo, rame e argento. La temperatura di fusione è leggermente inferiore ai 200°C per le leghe a base di stagno e piombo. Per le leghe a base di stagno e rame o argento la temperatura di fusione si aggira intorno ai 230°C.Questi valori sono indicativi e dipendono dalla percentuale con la quale questi metalli compaiono. L’operazione di saldatura non è particolarmente difficile. Le difficoltà maggiori sono state riscontrate nella saldatura dei piedini nel lato Top, poiché la presenza dei componenti ostacola la libertà di movimento di saldatore e stagno.Per un risultato ottimale, la quantità di stagno dovrebbe essere appena sufficiente per coprire interamente la piazzola e la saldatura dovrebbe assumere la forma di un cono.
Di seguito ho riportato il risultato finale:
Pagina 22 di 38 Francesco Cencioni 5°B Informatica A.S. 2009/2010
Progettazione e realizzazione di un’incubatrice programmabile per volatili
7 CONCLUSIONI
7.1) L’incubatrice da me realizzata è completamente automatizzata: gestisce la temperatura e i
flussi dell’aria; la temperatura può essere costantemente monitorata grazie ad un apposito display LCD; ruota le uova in modo autonomo; è completamente programmabile. Nella maggior parte delle incubatrici commerciali l’utente non può impostare manualmente la temperatura di incubazione. Ne segue che con una certa cova uova è possibile incubare soltanto una predeterminata razza di ovipari (es gallina, quaglia, fagiano, colombo, tacchino…). Ogni razza ha infatti la propria temperatura di incubazione (es le uova di gallina devono essere incubate ad una temperatura di 37.7°C). Il primo vantaggio dell’utilizzo di un’incubatrice programmabile è proprio quello di poterla adattare alla covata. Con un solo dispositivo si possono incubare svariate specie animali, cambiando semplicemente due parametri nel programma che controlla il PIC. Il girauova automatico consente una manutenzione davvero minima durante il periodo di incubazione. Ricordo infatti che le uova devono essere ruotate almeno tre volte al giorno al fine di evitare che il feto si attacchi alla parete dell’uovo portando a deformazioni e, nella maggior parte dei casi, alla morte dell’embrione.
Pagina 23 di 38 Francesco Cencioni 5°B Informatica A.S. 2009/2010
Progettazione e realizzazione di un’incubatrice programmabile per volatili
7.2) COSTI DI REALIZZAZIONEOGGETTO COSTO DESCRIZIONEContenitore (frigorifero) € 0,00 RecuperatoVentole € 0,00 RecuperateElemento riascaldante (resistenza) € 0,00 RecuperatoMotore del girauova € 0,00 RecuperatoAlimentatore da PC € 0,00 RecuperatoAlimentatore a 16V alternati € 0,00 RecuperatoBasetta fotoincisibile doppio strato € 0,00 Laboratorio scolasticoQuarzo 4Mhz € 0,57 acquistatoStabilizzatore tensione LM7805CT € 2,67 acquistatoMicrocontrollore PIC 16f876A € 4,10 acquistatoDisplay LCD 4X20 segmenti € 6,89 acquistato4 x Transduttori di temperatura LM35DZ € 3,60 acquistato2 X Mosfet IRF540 € 3,50 acquistatoRelays 12V 16A € 3,00 acquistatoRelays 12V 5A € 2,50 acquistatoAltri componenti (condensatori, diodi...) € 0,00 Laboratorio scolasticoSpedizioni € 9,00 acquistatoTOT= € 35,83 IVA 20%= € 7,17 TOT= € 43,00
7.3 SOFTTWARE UTILIZZATI
ISIS proteus v7.6 build 8741 ARES Proteus v7.6 build 8745 Paint v6.1 build 7600 Gimp 2 Microsoft word, EXCEL 2003 OpenOffice v3.0 Adobe reader v9.0 DoPDF v7 Mikrobasic 2009 v3.2 Microchip MPLAB IDEv8.10 PICC
Pagina 24 di 38 Francesco Cencioni 5°B Informatica A.S. 2009/2010
Progettazione e realizzazione di un’incubatrice programmabile per volatili
8 ZOOM
8.1 IL GIRAUOVA
Tra le incubatrici commerciali, alcune ruotano le uova facendole ruzzolare e facendogli compiere dei giri completi, altre si limitano ad inclinare le uova rispetto al terreno ponendo come fulcro la punta dell’uovo. Contrariamente a quanto si possa pensare, il secondo tipo è quello più funzionale e viene applicato nei sistemi semiprofessionali. Ho scelto di realizzare un girauova del secondo tipo.È stato realizzato con un semplice sottovaso a base rettangolare. Sono stati praticati due fori al centro dei bordi più corti, i quali sono stati rinforzati con delle tavolette di legno. I fori sono la sede dei due assi sul quale il sottovaso dovrà ruotare. La forza motrice proviene dal motore del grill di un forno a microonde. Ho scelto questo tipo di motore perché la sua potenza piuttosto elevata (5W) può permettere di far ruotare 20 e più uova. Non necessita di un riduttore, dal momento che il rotore ha una velocità di rotazione di 5/6 rpm. L’unico inconveniente è la sua tensione di alimentazione: lavora infatti a 16V AC. Questo problema può essere risolto separando questa parte dal resto del circuito e prelevando l’alimentazione da un alimentatore dedicato. Sul rotore è stata applicato un disco ligneo. Uno spigolo del sottovaso è stato collegato al disco di legno una biella. Viene così trasformato il moto rotatorio del motore in un moto oscillatorio che permette di inclinare le uova di ±45° rispetto alla situazione di normalità. Intendiamo con normalità la situazione in cui lasse dell’uovo, passante per la punta, è
Pagina 25 di 38 Francesco Cencioni 5°B Informatica A.S. 2009/2010
Progettazione e realizzazione di un’incubatrice programmabile per volatili
perpendicolare a terra. L’uovo deve essere sistemato nel sottovaso con la punta rivolta verso il basso, per far traspirare la camera d’aria interna (che è situata nella base dell’uovo).Cambiando frequentemente l’inclinazione, si evita che il pulcino in fase di sviluppo rimanga attaccato al guscio dell’uovo. Le uova devono infatti essere mosse almeno tre volte al giorno. Il motore viene pilotato dal PIC mediante un relè.
8.2 GLI ALIMENTATORI
Per la realizzazione dell’incubatrice sono serviti due alimentatori:1. Un alimentatore per il girauova che fornisce in uscita una tensione di 16V alternati;2. Un alimentatore da PC per alimentare il resto del circuito.
L’alimentatore da PC, in grado di erogare una potenza di 500w, è stato recuperato da una stazione ecologica.Dal momento che l’alimentatore dispone di due uscite distinte a +12V, una linea verrà utilizzata per l’alimentazione principale, l’altro canale verrà dedicato all’elemento scaldante.È stato necessario apportare una piccola modifica all’alimentatore per permetterne il funzionamento al di fuori del case del PC (ovvero per utilizzarlo senza dover premere il pulsante di accensione del computer). Si tratta di cortocircuitare il pin relativo al filo verde (pin 14) con un qualunque filo nero (massa).
Pagina 26 di 38 Francesco Cencioni 5°B Informatica A.S. 2009/2010
Progettazione e realizzazione di un’incubatrice programmabile per volatili
8.3 LE VENTOLE
A garanzia di un’ottima ventilazione sono state impiegate due ventole da PC, una da 8cm e una da 12cm di diametro. Quella più piccola è montata nella parte inferiore dell’incubatrice e soffia da destra verso sinistra. L’altra, posta nel lato superiore, soffia da sinistra verso destra, creando un flusso circolare di aria e permettendo quindi una veloce ridistribuzione del calore.
8.4 LA RESISTENZA
Per riscaldare l'ambiente di incubazione ho utilizzato la una resistenza a filo recuperata da un vecchio scalda sedile per auto. Utilizzata a 12V, eroga una potenza di 60W.L'elemento scaldante è stato montato in modo tale da ricoprire sia la parete superiore che quella inferiore dell'incubatrice. In questo modo si cerca di migliorare la distribuzione del calore.
Pagina 27 di 38 Francesco Cencioni 5°B Informatica A.S. 2009/2010
Progettazione e realizzazione di un’incubatrice programmabile per volatili
8.5 ARCHITETTURA DEL MICROCONTROLLORE PIC16F876A
Lo schema funzionale dell’architettura interna è presentato nella seguente figura:
8.5.1 PORTE DI I/O
Il microcontrollore PIC16F876A dispone di 22 linee di I/O (alla destra dello schema) raggruppate in tre gruppi: uno da sei e gli altri da otto, chiamati PORT. Queste linee possono essere impostate per l'input o per l'output utilizzando i registri TRIS. Ponendo TRISx=0 tutte le porte del gruppo x vengono designate come output, al contrario con PORTx=1 potremo sfruttare tutte le porte di x
Pagina 28 di 38 Francesco Cencioni 5°B Informatica A.S. 2009/2010
Progettazione e realizzazione di un’incubatrice programmabile per volatili
come input. Le porte di I/O digitali (sia input che output) funzionano con la logica binaria: stato logico 1 +5V; stato logico 0 0V.Viene fatta un’eccezione per le porte di tipo analogico, che possono svolgere funzioni di ADC (nel caso del PIC16f876A sono le porte A0, A1, A2, A3, A4) o di DAC (caratteristica non presente nel microcontrollore trattato).
8.5.2 MEMORIA DATI (RAM) E MEMORIA PROGRAMMILa RAM è la memoria dati ed è organizzata a 8 bit infatti il Data Bus è a 8 bit) e al suo interno si
trovano anche i registri di controllo del miroprocessore, che la Microchip chiama File Registers.La memoria programmi è di tipo Flash ed è quindi riscrivibile elettricamente in tempi brevi. La
memoria programmi è costituita da 8000 blocchi da 14 bit (che quindi rappresenta il limite dimensionale ai programmi che possono essere memorizzati sul dispositivo. Gli 8k di memoria sono organizzati in quattro sezioni da 2k ciascuna chiamate pagine (page).
Memoria programma e memoria dati (RAM) sono separate fisicamente e dotate ciascuna di un proprio bus (architettura Harward). In questo modo le prestazioni aumentano. IL Program Bus a 14 bit può caricare un'istruzione in un singolo ciclo: 8 bit servono per l’istruzione vera e propria, mentre gli altri 5 servono per indirizzamento. Il processore è di tipo RISC.
Pagina 29 di 38 Francesco Cencioni 5°B Informatica A.S. 2009/2010
Progettazione e realizzazione di un’incubatrice programmabile per volatili
8.5.3 REGISTRI DI MEMORIA
Pagina 30 di 38 Francesco Cencioni 5°B Informatica A.S. 2009/2010
Progettazione e realizzazione di un’incubatrice programmabile per volatili
8.6 PROGRAMMA PER IL PIC 16F876A
Per l’interfacciamento con il display ho utilizzato le PortB del PIC.Alle portA, le uniche con funzione di ADC, sono collegati i quattro sensori di temperaturaLe PortC servono per gestire gli attuatori.
Di seguito riporto il listato completo:
program Incubatrice' PIC 16f876A Fck=4MHz' Declarations sectiondim MAX_REGISTRATA as float ' ci salvo la temperatura massima mai raggiunta da visualizzare poi nell'eventuale displaydim MIN_REGISTRATA as float 'ci salvo la temperatura minima mai raggiunta da visualizzare poi nell'eventuale displaydim CICLI as word ' mi serve a contare il numero dei "giri" del programmadim ALTO_SINISTRA as float 'ci salvo la temperatura letta con il sensore LM35 posizionato in ALTO SINISTRAdim ALTO_DESTRA as floatdim BASSO_SINISTRA as floatdim BASSO_DESTRA as floatdim MEDIA_TOT as float ' ci salvo la media delle temperature rilevate dagli N sensoridim MEDIA_ALTO as floatdim MEDIA_BASSO as floatdim MINUTI as word' Lcd module connectionsdim LCD_RS as sbit at RB0_bit LCD_EN as sbit at RB2_bit LCD_D7 as sbit at RB7_bit LCD_D6 as sbit at RB6_bit LCD_D5 as sbit at RB5_bit LCD_D4 as sbit at RB4_bitdim LCD_RS_Direction as sbit at TRISB0_bit LCD_EN_Direction as sbit at TRISB2_bit LCD_D7_Direction as sbit at TRISB7_bit LCD_D6_Direction as sbit at TRISB6_bit LCD_D5_Direction as sbit at TRISB5_bit LCD_D4_Direction as sbit at TRISB4_bit' End Lcd module connections dim txt1 as char[16] 'servono per scrivere nel display dim txt2 as char[16] dim txt3 as char[16] dim txt4 as char[16] dim txt5 as char[16]
Pagina 31 di 38 Francesco Cencioni 5°B Informatica A.S. 2009/2010
Progettazione e realizzazione di un’incubatrice programmabile per volatili
dim txt6 as char[23] dim txt7 as char[4] const CONVERTI_IN_GRADI = 1.953 'il valore che va moltiplicato alla misura letta sull'LM35 per convertirla in gradi°C 5/256*100 5 Vfs 256N°livelli const MINUTI_GIRAUOVA = 300 'ogni quanti MINUTI si deve azionare il girauovamain:' Main program 'AN0;AN1; AN2 AN3> PORTE PER INGRESSI ANALOGICI' porte A7 A6 A5 A4 A3 A2 A1 A0'trisa 0 0 0 0 1 1 1 1'(A3,A2,A1,A0 sono a 1 e quindi sono input)ADCON1 = %00000010 'uso AN0 AN1 AN2 AN3 come porte analogichetrisa = %00011111 'uso AN0 AN1 AN2 AN3 per leggere la temperatura (le imposto come input)PortB = 0 'spengo tutte le porte BTrisb = %00000000 'imposto tutte le RB come uscita(output)PortA = 0 'spengo tutte le porte Atrisc = %00000000 'imposto tutte le porte C come outputPortC = 0
' LE porte A servono per l'acquisizione dei dati 'RA0 > sensore di temperatura in ALTO A SINISTRA 'RA1 > sensore di temperatura in ALTO A DESTRA 'RA2 > sensore di temperatura in BASSO A SINISTRA 'RA3 > sensore di temperatura in BASSO A DESTRA' Le porte B servono pe pilorare il Display LCD 'RB0 > RS (dell'LCD) 'RB1 > RW (dell'LCD) va lasciato sempre spento 'RB2 > E (dell'LCD) 'RB4 > D4 (bus dati dell'LCD) 'RB5 > D5 (bus dati dell'LCD) 'RB6 > D6 (bus dati dell'LCD) 'RB7 > D7 (bus dati dell'LCD)'Le porte C servono per azionare i sistemi di condizionamento 'RC3 > Ventola (per muovere l'aria) 'RC4 > Ventolina (per forzare il ricircolo dell'aria con l'esterno 'RC5 > Girauova 'RC6 > Resistenza'INIZIALIZZAZIONE VARIABILIMAX_REGISTRATA = 25.5 'inizializzo MAX alla temperatura ambienteMIN_REGISTRATA = 38 'inizializzo MIN con una temperatura alta (una volta raggiunta la temperatura di utilizzo andrà A "scalare")CICLI=0MINUTI=0'SEGNALO L'AVVENUTA ACCENZIONE NEL DISPLAYtxt1 = "Buongiorno"txt2="Incubazione"txt3= "iniziata."txt4="Buona fortuna"Lcd_Init() ' Initialize LcdLcd_Cmd(_LCD_CLEAR) ' Clear display
Pagina 32 di 38 Francesco Cencioni 5°B Informatica A.S. 2009/2010
Progettazione e realizzazione di un’incubatrice programmabile per volatili
Lcd_Cmd(_LCD_CURSOR_OFF) ' Cursor offLcd_Out(1,1,txt1) ' Write text in first rowLcd_Out(2,1,txt2) ' Write text in first rowLcd_Out(3,1,txt3) ' Write text in first rowLcd_Out(4,1,txt4) ' Write text in first rowdelay_ms(10000)Lcd_Cmd(_LCD_CLEAR)'TESTO IL FUNZIONAMENTO DEL GIRAUOVAPortC.5=1Delay_ms(8000)PortC.5=0' DA QUI INIZIARà UN CICLO INFINITOwhile true 'LEGGO LA TEMPERATURA 'Alto ALTO_SINISTRA = Adc_Read(0) * CONVERTI_IN_GRADI ' metto il ALTO_SINISTRA i gradi letti dal sensore di temperatura che nell'incubatrice si troverà appunto in alto a sinistra (o al limite in alto a destra) delay_ms(250) ALTO_DESTRA = Adc_Read(1) * CONVERTI_IN_GRADI delay_ms(250) 'basso BASSO_SINISTRA = Adc_Read(2) * CONVERTI_IN_GRADI delay_ms(250) BASSO_DESTRA = Adc_Read(3) * CONVERTI_IN_GRADI delay_ms(250) FACCIO LE MEDIE MEDIA_TOT = (ALTO_SINISTRA + ALTO_DESTRA + BASSO_SINISTRA + BASSO_DESTRA)/4 MEDIA_ALTO = (ALTO_SINISTRA + ALTO_DESTRA)/2 MEDIA_BASSO = (BASSO_SINISTRA + BASSO_DESTRA)/2
'AGGIORNAMENTO DI TEMPERATURA MASSIMA E MINIMA REGISTRATA if(MEDIA_TOT > MAX_REGISTRATA) then MAX_REGISTRATA = MEDIA_TOT 'se la temperatura corrente è quella + alta di sempre, allora aggiorno MAX end if if(MEDIA_TOT < MIN_REGISTRATA) then 'MAX > 37 serve a far aggiornare MIN solo dopo che l'incubatrice è arrivata a regime (sennò min sarebbe sempre la temperatura alla quale l'accendo) if(MAX_REGISTRATA>37) then MIN_REGISTRATA = MEDIA_TOT 'se la temperatura corrente è quella + bassa di sempre e sono già arrivato a regime, allora aggiorno MIN end if end if delay_ms(250) 'ROUTINE PER LA VENTOLA if ((MEDIA_BASSO MEDIA_ALTO)>1.0) then if (PortC.3 = 0) then
Pagina 33 di 38 Francesco Cencioni 5°B Informatica A.S. 2009/2010
Progettazione e realizzazione di un’incubatrice programmabile per volatili
PortC.3 = 1 ' se fra alto e basso c'è una differenza di temperatura di oltre un grado, accende la ventola che muove l'aria end if else if ((MEDIA_ALTO MEDIA_BASSO)>1.0)then if (PortC.3 = 0) then PortC.3 = 1 ' se fra alto e basso c'è una differenza di temperatura di oltre un grado, accende la ventola che muove l'aria end if else if (PortC.3 = 1) then PortC.3 = 0 'se la temperatura all'interno dell'incubatrice è omogenea, allora spenge (o, se è già spenta, non accende) la ventola end if end if end if delay_ms(125) 'ROUTINE PER LA RESISTENZA if (MEDIA_TOT < 37.2)then if (MEDIA_ALTO < 38.2)then if(MEDIA_BASSO < 38.2)then 'se la media totale è minore di 37.2, media alto è minore di 38.2 e media basso è minore di 38.2 allora if (PortC.6 = 0) then PortC.6 = 1 'se è spenta, accendo la resistenza end if end if end if else if (MEDIA_TOT > 38.3)then 'se la temperatura media è superiore di x if (PortC.6 = 1) then PortC.6 = 0 'se è accesa, spengo la resistenza end if else if(MEDIA_ALTO > 38.6)then 'se la temperatura media fra le due sonde in alto è minore di 38.6, allora if (PortC.6 = 1) then PortC.6 = 0 'se è accesa, spengo la resistenza end if else if(MEDIA_BASSO >38.6)then 'se la temperatura madia è elevata o se uno fra basso e alto è molto più alto dell'altro allora spenge la resistenza if (PortC.6 = 1) then PortC.6 = 0 'se è accesa, spengo la resistenza end if end if end if end if end if
Pagina 34 di 38 Francesco Cencioni 5°B Informatica A.S. 2009/2010
Progettazione e realizzazione di un’incubatrice programmabile per volatili
delay_ms(125) 'ROUTINE PER IL GIRAUOVA CICLI = CICLI + 1 if (CICLI = 6) then MINUTI = MINUTI + 1 CICLI= 0 end if if (MINUTI = MINUTI_GIRAUOVA) then PortC.5 = 1 Delay_Ms(8000) PortC.5 = 0 MINUTI = 0 end if 'AGGIORNO IL DISPLAY > MEDIA_TOT, ALTO_SINISTRA, ALTO_DESTRA, BASSO_SINISTRA, BASSO_DESTRA, MIN_REGISTRATA, MAX_REGISTRATA Lcd_Cmd(_LCD_CLEAR) ' Clear display Lcd_Cmd(_LCD_CURSOR_OFF) ' Cursor off floattostr(MEDIA_TOT,txt6) 'in txt1 ci scrivo la temperatura media istantanea txt7[0]=txt6[0] ‘tronco il valore di Media_ToT al quarto carattere txt7[1]=txt6[1] txt7[2]=txt6[2] txt7[3]=txt6[3] Lcd_Out(1,1,"TEMPERATURA=") ' Write text in first row Lcd_Out(1,13,txt7) floattostr(ALTO_SINISTRA,txt6) ' in txt2 ci scrivo la temperatura rilevata dalla sonda in ALTO A SINISTRA txt7[0]=txt6[0] txt7[1]=txt6[1] txt7[2]=txt6[2] txt7[3]=txt6[3] Lcd_Out(2,1,"AS=") 'nella seconda riga ci scrivo le temperature dei sensori in alto Lcd_Out(2,4,txt7) floattostr(ALTO_DESTRA,txt6) ' in txt2 ci scrivo la temperatura rilevata dalla sonda in ALTO A SINISTRA txt7[0]=txt6[0] txt7[1]=txt6[1] txt7[2]=txt6[2] txt7[3]=txt6[3] Lcd_Out(2,9,"AD=") Lcd_Out(2,12,txt7) floattostr(BASSO_SINISTRA,txt6) txt7[0]=txt6[0] txt7[1]=txt6[1] txt7[2]=txt6[2] txt7[3]=txt6[3] Lcd_Out(3,1,"BS=") 'nella terza riga ci scrivo le temperature dei sensori in alto Lcd_Out(3,4,txt7) floattostr(BASSO_DESTRA,txt6) txt7[0]=txt6[0]
Pagina 35 di 38 Francesco Cencioni 5°B Informatica A.S. 2009/2010
Progettazione e realizzazione di un’incubatrice programmabile per volatili
txt7[1]=txt6[1] txt7[2]=txt6[2] txt7[3]=txt6[3] Lcd_Out(3,9,"BD=") Lcd_Out(3,12,txt7) floattostr(MIN_REGISTRATA,txt6) txt7[0]=txt6[0] txt7[1]=txt6[1] txt7[2]=txt6[2] txt7[3]=txt6[3] Lcd_Out(4,1,"MIN") 'nella quarta riga ci vanno TMAX e TMIN registrate if (MIN_REGISTRATA<38) then ' se l'incubatrice è a regime, visualizza la Tmin. Prima di arrivarci non la visualizza Lcd_Out(4,4,txt7) end if floattostr(MAX_REGISTRATA,txt6) txt7[0]=txt6[0] txt7[1]=txt6[1] txt7[2]=txt6[2] txt7[3]=txt6[3] Lcd_Out(4,9,"MAX") Lcd_Out(4,12,txt7) delay_ms(500) 'PER VISUALIZZARE MEDIA_TOT, MEDIA_ALTO E MEDIA_BASSO ' Lcd_CMD(_Lcd_CLEAR) ' floattostr(MEDIA_TOT,txt6) ' txt7[0]=txt6[0] ' txt7[1]=txt6[1] ' txt7[2]=txt6[2] 'txt7[3]=txt6[3] 'Lcd_Out(1,1,"TOT=") 'Lcd_Out(1,6, txt7) 'floattostr(MEDIA_ALTO,txt6) 'txt7[0]=txt6[0] 'txt7[1]=txt6[1] ' txt7[2]=txt6[2] ' txt7[3]=txt6[3] ' Lcd_Out(2,1,"ALTO=") ' Lcd_Out(2,7, txt7) ' floattostr(MEDIA_BASSO,txt6) ' txt7[0]=txt6[0] ' txt7[1]=txt6[1] ' txt7[2]=txt6[2] ' txt7[3]=txt6[3] ' Lcd_Out(3,1,"BASSO=") ' Lcd_Out(3,8, txt7) Delay_Ms(8000) ' aspetta 8 secondi ' Fra un ciclo e l'altro passano quindi 8 + 2 = 10 secondiwendend.
Pagina 36 di 38 Francesco Cencioni 5°B Informatica A.S. 2009/2010
Progettazione e realizzazione di un’incubatrice programmabile per volatili
8.7 CONVERSIONE ANALOGICO – DIGITALE (ADC)
La conversione da analogico a digitale rappresenta il duale della conversione digitale – analogico ed è la tecnica che permette di associare ad una grandezza analogica la sua rappresentazione mediante un codice numerico, normalmente binario.Il convertitore analogico – digitale, in sigla ADC (Analog to Digital Converter) svolge, quindi, questa funzione: a partire da un ingresso analogico Vi produce in uscita una stringa di n bit, cui corrisponde, in codice binario, un valore proporzionale al livello del segnale d’ingresso. In formule:
Bn−1
2
Bn−2
22 . . .. ..B0
2n = V i
V FS
Come nel caso dei DAC, anche per i convertitori A/D viene definito un passo di conversione P, corrispondente alla minima variazione della tensione d’ingresso necessario a produrre un incremento o decremento unitario del numero binario di uscita. Supponendo che quest’ultimo valga inizialmente zero, il passaggio da zero a uno avviene quando tutti i bit Bi sono nulli, ad eccezione di B0:
V i=P=V FS
2n
Il valore massimo della tensione di ingresso si ha quando tutti i bit sono a uno:
V iMAX=2n−1
2n ×V FS=V FS−P
Nel processo di conversione A/D è intrinseco un certo errore (errore di quantizzazione = P), derivante dal fatto che i possibili valori della grandezza analogica d’ingresso sono infiniti, mentre i possibili codici digitali di uscita sono in numero finito e pari a 2n.Nella figura seguente è riportata la caratteristica ingressouscita di un ADC con tre bit di uscita, funzionante con una tensione di riferimento di 8V:
Se l’ADC fosse dotato di un numero infinito di bit di uscita la sua caratteristica sarebbe la retta indicata in figura e la conversione sarebbe priva di errori.
Pagina 37 di 38 Francesco Cencioni 5°B Informatica A.S. 2009/2010
Progettazione e realizzazione di un’incubatrice programmabile per volatili
Per ridurre l’errore di quantizzazione, tutti i valori d’ingresso vengono traslati di 1/2 LSB. Questo significa che le commutazioni non avverranno più a 1V, 2V, ecc., ma a 0.5V, 1.5V e così via fino all’ultimo valore corrispondente a 6.5V, come mostrato in figura:
Dalle due figure si osserva che i valori d’ingresso multipli del passo sono convertiti con errore nullo, mentre l’errore massimo è stato ridotto, nella seconda figura, alla metà del passo di conversione.
Oltre alla specifica sull’errore di quantizzazione, esistono altre tre specifiche:• Accuratezza: esprime la differenza tra il valore applicato in ingresso al convertitore e
quello corrispondente al codice digitale presente in uscita;• Errore di isteresi: si verifica quando il valore della grandezza d’ingresso, che produce una
modifica del codice digitale in uscita, è diverso a seconda della direzione con cui ci si avvicina al livello in esame;
• Velocità di conversione: esprime il numero di conversioni complete che possono essere effettuate nell’unità di tempo, usualmente in un secondo. Al posto delle conversioni al secondo, molti costruttori specificano invece la durata in microsecondi di una singola conversione.
Pagina 38 di 38 Francesco Cencioni 5°B Informatica A.S. 2009/2010