[LinuxFocus-icon]
LinuxFocus article number 236
http://linuxfocus.org

[Foto dell'autore]
Guido Socher (homepage)

L'autore:

Guido adora Linux non solo per il fatto che sia divertente scoprire le grandi possibilità di questo sistema, ma anche per le persone che sono coinvolte nel suo sviluppo.



Tradotto in Italiano da:
Toni Tiveron <toni/at/amicidelprosecco.com>

Un pannello di controllo LCD per il Vostro server Linux

[Illustrazione del progetto]

Premessa:

In questo aricolo tratteremo della costruzione di un display LCD utilizzato come pannello di controllo basato sul display Hitachi HD44780 ed il microntrollore, AVR ad 8bit in tecnologia RISC, AT90S4433 della Atmel. Entrambi i componenti sono di facile reperibilità e non molto costosi. Il pannello di controllo comprende la funzionalità di watchdog per supervisionare il computer medesimo ed ha due pulsanti che permettono all'utente di interagire con il sistema. Così potete settare l'IP, la maschera di sottorete, l'indirizzo del gateway, spegnere il computer, leggere delle statistiche, insomma più o meno quello che desiderate fare in quanto la logica è implementata per mezzo di uno script in perl che può facilmente esser modificato. Questo pannello sarà collegato al vostro server Linux per mezzo di una porta seriale (una RS232).

Per poter procedere con questo articolo dovete prima aver installato il software come descritto nell'articolo intitolato Programmare il microcontrollore AVR con GCC.

_________________ _________________ _________________

 

Introduzione

Questo progetto unisce assieme le funzionalità di hardware che abbiamo già visto in alcuni articoli precedenti: Questo nostro nuovo progetto tuttavia è un ulteriore passo avanti rispetto alla semplice unione di questi componenti. Difatti aggiungeremo dei tasti che permettono all'utente di interagire ed aggiunge la funzionalità di watchdog hardware per supervisionare il nostro server Linux. In aggiunta a tutto ciò il nostro pannello fornisce una linea di ingresso analogica, che noi ora non utilizzeremo. La si potrebbe usare, per esempio, per collegare un sensore di temperatura....

Per realizzare il tutto è bene che abbiate delle conoscenze basilari di elettronica, è sufficiente a livello hobby. I componenti che utilizzeremo sono economici ed il costo complessivo dovrebbe aggirarsi sui 40 Euro.

Il concetto alla base di questo pannello è di dare all'utente la possibilità di controllore il Vostro server senza l'ausilio nè di tastiera nè di monitor. Linux è un sistema operativo molto stabile ed affidabile e può facilmente esser controllato da remoto. Tuttavia la prima volte che lo collegate alla rete avete la necessità di configurare un indirizzo IP, il relativo gateway e la sottomaschera di rete. Il nostro pannello vi permette di configurare questi indirizzi. Vi dà anche la possibilità di spegnere il server mentre siete nella stanza dei server.

Il design per questo pannello è generico. Tutte le parti inetenti il Server sono implementate per mezzo di uno script in perl. Tutto l'hardware, i pulsanti di stato, il testo sul display, i LED... insomma il complesso viene controllato attraverso una serie di comandi ASCII. Potete tranquillamente utilizzare il progetto per costruire un lettore mp3 o un controllo per vostro tostapane... insomma qualsiasi cosa la vostra fantasia possa suggerire.  

Il materiale necessario

Per assemblare il progetto vi serve il seguente materiale elettronico:

1 x Miconcotrollore Atmel At90S4433
1 x zoccolo 28pin 7.25 mm
1 x zoccolo 16pin
1 x CI MAX232
1 x relay da 5V di piccole dimensioni (meglio se formato ISO DIL)
1 x cristallo di quarzo da 4MHz
2 x LED (rosso e verde)
1 x transistor BC547 NPN
1 x transistor BC557 PNP
4 x condensatore da 1uF (va bene sia comune che polarizzato)
2 x condensatore ceramico da 27pF
1 x condensatore da 10nF
1 x condensatore da 100nF
3 x resistenze da 4k7
2 x resistenze da 2k2
1 x resistenza da 10K
1 x resistenza da 3k3
2 x resistenze da 100 Ohm
3 x resistenze da 470 Ohm
3 x resistenze da 1k
1 x resistenza da 220 Ohm
1 x trimmer (potenziometro) da 4K7
1 x diodo zenerer da 4.3V
1 x basetta fotosonsibile monofaccia
2 x tasti di piccole dimensioni
1 x diodo al silicio comune (per esempio un 1N4148, o altro diodo economico)
1 x display LCD da 2 righe e 20 caratteri compatibile con HD44780.

Tutti i display LCD che io ho sperimentato come compatibili con l' HD44780 hanno o 14 o 16 pin. Potete, se volete, utilizzare display a 3 o 4 righe, nel qual caso dovrete modificare un poco il software.

In aggiunta a tutto questo vi serviranno alcuni fili e dei connettori di alimentazione e per interfacciarsi alla porta seriale RS232. Se utilizzerete un display a due righe potrete fissarlo in un piccolo telaietto di alluminio delle dimensioni di una periferica da 5.25".  

Lo schema.

Io ho utilizzato eagle per linux per disegnare la basetta. Si tratta di un ottimo software, ma necessita di prendere un poca di confidenza con esso. Potete scaricarne una versione free, solo per uso privato, dal sito della cadsoftusa.com.

Lo schema elettrico (click per accedere ad una immagine più grande):
[Schema elettrico]

Il circuito stampato (click per accedere una immagine più grande):
[Basetta]


La basetta contenente sia le piste che la disposizione dei componenti, su sfondo neutro , per stamparla più agilmente: (Nota: questo non è il file che vi serve per creare il layout delle piste.)

I file in formato eagle (compressi con gzip; vi ricordo che alcuni browser la decomprimono autmaticamente durante il download):  

Lo schema elettrico

Vi spiegherò brevemente lo schema elettrico. L'AT90S4433 ha 3 porte: PB, PC e PD. PC può essere utilizzata come ingresso sia analogico che digitale. Tutte le altre porte possono essere utilizzate sia come ingresso che uscita sia in digitale che in analogico. Queste caratteristiche sono cotrollate per mezzo del software per mezzo della DRR (Data Direction Register = registro della direzione dei dati). Noi utilizzeremo tutti i pin tranne il 23 che è solo per linee non digitali (0/ 5Volt - TTL). Il chip MAX232 è un adattatore di livello. La porta RS232 utilizza segnali +-10V ed il MAX232 li converte in 0/5V. Sul pin 1 (pin di reset) dell'AT90S4433 trovate il circuito Brownout. Questo circuito mantiene lo stato del reset a livello logico 0 (attivo) per prevenire che, nel caso di alimentazione insufficiente, induca la CPU ad eseguire erronee istruzioni o indurre ad un malfunzionamento generalizzato. Questo potrebbe avvenire per alcuni millisecondi durante la fase di accensione o di spegnimento. Potremmo riassumere dicendo che questo circuito ci garantisce un avvio del programma in situazione pulita.

Qualcuno di voi potrebbe chiedersi perchè quel diodio sia in parallelo alla bobina del relè e sia collegato in quello strano modo - con la polarità invertita -. Questo diodo ha una funzione essenziale! Allorquando si rilascia il relè, la bobina di quest'ultimo genera una elevata extratensione che danneggerebbe di sicuro il nostro micontrollore. Questa alta tensione ha polarità inversa rispetto a quella applicata alla bobina. Il diodo non è un modello particolare ma un comune economico diodo, ma di importanza vitale per il nostro cicuito.  

Creiamo il circuito stampato

Per incidere il circuito stampato avete bisogno di stampare questo file postscript (linuxlcdpanel.ps.gz) su di un lucido. Lo potete trovare nelle eliografie. Di norma viene chiamato Sinolit. Questo prodotto è della Regulus ed è comunemente usato per la stampa offset. Un'altra ottima alternativa è quella di ricorrere ad un foglio di carta da 60gr/mq ed uno spray trasparente (per esempio il pausklar 21 della Kontakt Chemie). Il vantaggio nell'utilizzo di una di queste due soluzioni è che il toner di una stampante laser si fissa bene e crea una ottima opacità nella stampa favorendo un ottima impressione della basetta.
Ho convertito il file postscript in uno PDF per coloro che non hanno un sistema di stampa postscript. Tuttavia la qualità ne risente.
Il tempo di esposizione della basetta fotosensibile dipende dalla tipo di luce che si utilizza. Per una comune lampada solare, di uso casalingo, il tempo è circa di 1-2 minuti. Potete utilizzare anche la luce solare ma cercate di evitare una esposizione diretta alla luce (i raggi solari sono troppo forti). Vi consiglio di effetture delle prove su dei ritagli di basetta prima di esporre alla luce tutta la basetta col circuito.
[Dopo lo sviluppo]
La basetta esposta


La basetta esposta deve esser sviluppata per alcuni minuti. Dovrà quindi esser immersa in NaOH (idrossido di sodio). Dopo questa operazione dovrete controllore attentamente il risultato ed eventualmente apportare delle correzioni. Nel caso alcune tracce non siano buone potete correggerle per mezzo di pennarelli appositi come l' Eddin 780 (non si deve usare pennarelli permanenti ma pennarelli a vernice). Di norma creo delle basette leggermente più grandi di quanto Edge non consigli. Le ritengo un poco troppo piccole per un uso hobbistico.
[dopo l'immersione in acido]
La basetta finita, dopo l'immersione in acido, pronta per la foratura


Nota: Dato che non sembra esservi uno standard per la piedinatura dei relè potebbe esser necessario modificare leggerlmente il layout dello stampato. Io ho utilizzato un relè della Matsushita a 5V.

Allorquando sarete soddisfatti del layout del vostro circuito stampato, potrete procede all'acidazione del medesimo con del FeCl3 (Cloruro Ferrico). FeCl3 ha una buoan cacapacità erosiva a temperatura ambiente. Si tratta di un acido semplice da utilizzare anche in ambito casalingo. Otterrete risutlati migliori immergendo la basetta in verticale in un contenitore lungo e stretto. Dato che gli ioni di rame (Cu+) sono più pesanti degli ioni di ferro (Fe+) alla fine del processo troveremo nel fondo del contenitore gli ioni di rame.

Quando la basetta è pronta; ripulitela con della trementina per rimuovere le correzzioni effettuate con il pennarello. Potete lasciare la pellicola fotosensibile sulle piste. Essa evaporerà naturalmente quando andrete a saldare, offrendo così una protezione per le piste di rame.  

Il software per il microcontrollore

Il software per il microcontrollore è composto dai seguenti file: Per comprendere appieno il software vi consiglio di leggere bene il datasheet del microcontrollore. È disponibile nella sezione riferimenti alla temine di questo articolo. (o dal sito www.atmel.com)
Sebbene per usare questo pannello non sia necessario che comprendiate il suo software, vi serve solo decomprimere ed estrarre il codice sorgente dell'archivio (scaricate linuxlcdpanel-0.7.tar.gz from dalla pagina dei download) e digitate :

make
make load

oppure utilizzare la versione del software precompilata e caricatela nel microcontrollore con il comando
make loadprebuild

Molto semplice, no? Potete trovare una descrizione inerente la programmazione del microcontrollore nel primo articolo di questa serie: Programmare il microcontrollore AVR con GCC.  

Verifica di funzionalità del pannello LCD

Il pannello LCD è studiato per funzionare con i 5V dell'alimentatore interno del PC (cavo rosso=5V, cavo nero=massa). Tuttavia è bene che la prova non la facciate collegando il display a questa fonte di alimentazione, in quanto il vostro alimentatore è assai robusto, ma la piastra madre ed il resto della componentistica, potrebbero fare una fumata a causa di un errore, fatto o nell'assemblaggio o durante la fase di saldatura. Verificatene la funzionalità dapprima con un alimentatore elettronico stabilizzato e limitato in corrente! Ora eseguite il download nella EEPROM come precentemente descritto. Dopo questa operazione noterete un banner nel display che recita "linuxfocus.org". Ora collegate il cavo seriale all'interfaccia RS232:

pin 14 del MAX232 al sengale CTS (DB-9: pin 8)
pin 7 del MAX232 al segnale RXD (DB-9: pin 2)
pin 13 MAX232 al segnale TXD (DB-9: pin 3)
Dovete anche collegare il segnale DTR,DSR e CD tra di loro (DB-9: pin 4, 6 ed 1)

Questo è ben documentato nello schema elettrico precedente.

[dialogare con il display LCD per mezzo della linea seriale] Per utlizzare una linea seriale, prima la si deve inizializzare. il file linuxlcdpanel-0.7.tar.gz, contenente il codice sorgente, include un programma che ha per nome ttydevinit che, per l' appunto, inizializza questa linea. Per esempio, poniamo, che voi abbiate collegato il pannello alla porta COM2 (ttyS1), dovrete dare il seguente comando una sola volta:

./ttydevinit /dev/ttyS1

Ora il driver per la linea seriale in questione è inizializzato a 9600 Baud e voi potrete iniziare a "dialogare" con il vostro pannello LCD. Aprite due xterm in X-Windows. In una digitate "cat /dev/ttyS1", e nell' altra "cat > /dev/ttyS1". Ora potete, per esempio digitare il comando l=11 (accendi il LED nr. 1) o l=10 (spegni il LED nr. 1). Potete vedere nella prima, delle due console xterm, l'acknowledge (ovvero la risposta) al vostro comando ("ok").
Tutti i comandi sono spiegati nel fileREADME.commands (in lingua inglese).

L'archivio contentente il codice sorgente include uno script in perl (ttytest.pl) la cui funzione è null'altro tranne che far lampeggiare il led rosso. L'idea di base è di fornire un semplice esempio per far vedere come si possa gestire un pannello LCD. Potete usare questo codice come base per i vostri programmi. Date liberamente una occhiata al codice in questione. È bene avere un poca di conoscenza del linguaggio perl anche se questo programma è breve.  

Colleghiamo il watchdog

Il sistema di supervisione è normalmente spento. Per attivarlo dovete usare il comando w=1 e definire il suo timeout con s=x, dove x è un valore compreso tra 1 e 255. - per esempio s=10 permetterà al watchdog di avere un tempo di timeout pari a 10*16sec, ovvero 160 secondi.- È essenziale definire il tempo di timeout o il sistema potrebbe esser indotto a forzare un reboot della macchina. Difatti se il server si dovesse bloccare, il programma non ri-definirebbe più il corretto timeout inducendo il watchdog ad attivarsi. So che un server Linux non si ferma mai. Tuttavia, nei rari casi in cui si ferma, non trovate mai nessuno che possa premere il tasto di reset o nessuno ricorda più dove esso sia in quanto sono anni che lo usano ma che non vi sono stati problemi.

Il watchdog è stato studiato dimodochè possa intervenire solo una volta. La ragione di questo è da ricercarsi nel fatto che, al riavvio del sistema, quest'ultimo potrebbe impiegare molto tempo per efettuare il check del file system. Quando, alla fine, il server sarà nuovamente online. Il software a quel punto riattiverà il driver per effettuare il pool.

Per collegare fisicamente il Vostro watchdog divete trovare quali siano i fili che fanno capo al pulsante di reset del vostro server. In parallelo a questo colleghere i cavi che vanno al nostro relè.  

Come utlizzare il watchdog

Il watchdog ha la funzione di garantire la capacità del sistema (inteso come Sistema Operativo) di eseguire operazioni, non che il server web o il database sia online. Per verificare la permanente funzionalità di questi programmi dovrete ricorrere alle funzionalità del cron. Posiamo considerare sufficientemente affidabile la crontab, in quanto il watchdog assicura che, in generale, sia in esecuzione.

Potete, per esempio, creare uno script, per mezzo della crontab, che ogni 15 minuti effettui il download di una pagina. Dovrete però prestare attenzione a che, questo download, potrebbe anche portare ad un responso negativo se si tratta di un server ad elevato traffico. Dovrete quindi valutare le risposte. Per esempio se risponde una sola volta nelle ultime 10 richieste è bene che forziate un restart del web server, o un normale reboot, piuttosto che ricorrere ad reset fisico (non quindi un reset harwdware indotto dal watchdog).

Oltre a supervisionare lo stato delle applicazioni, è essenziale monitorare lo stato d'occupazione dei dischi. Il seguente set di comandi daranno una responso allorquando uno dei filesystem superi l'80% di occupazione:

df | egrep ' (8.%|9.%|100%) '

Anche questa serie di comandi può essere inserita come voce nella crontab per avere una costante supervisione dell'uso dei dischi.  

Gli script del server

La maggior parte della logica di controllo del nostro pannello LCD è implementata per mezzo di uno script in perl: llp.pl. Copiate questo script nella cartella /usr/sbin. Copiate successivamente il programma ttydevinit nella cartella /usr/bin ed il file ifconfig_llp.txt (contenuto nella cartella etc ove si trovano i file sorgenti) in /etc. Modificate ora il file ifconfig_llp.txt ed apportate le modifiche di indirizzo IP secondo le vostre esigenze (qui trovate un esempio):

NETMASK=255.255.255.0
IPADDR=10.0.0.4
GATEWAY=10.0.0.2

Fate ora una copia di backup del seguente script: /etc/rc.d/init.d/network e sostituitelo con lo script etc/network preso dalla cartella dei sorgenti. Questo script ed i nomi delle cartelle sono validi solo per le ditribuzione RedHat e Mandrake di Linux. Lo script etc/network_all_distributions è basilare e dovrebbe funzionare con tutte le distribuzioni di Linux, ma dovete capire dove la vostra distribuzione abbia gli script di init/rc. Questi parametri cambiano leggermente da distribuzione a distribuzione.

Modificate il file /etc/rc.d/init.d/network e cambiate la riga

/usr/sbin/llp.pl /dev/ttyS1&

Se il watchdog non è collegato alla COM2.

Ora potete eseguire il seguente comando.

/etc/rc.d/init.d/network start

e vedere il nostro pannello LCD in azione. Nota: il nostro pannello salva e modifica l'indirizzo IP. I cambiamenti hanno effetto solo dopo il reboot seguente. Potete fare delle prove cambiandolo e poi ripristinando i valori di prima. È bene che facciate in ogni caso una prova riavviando poi il server. Alla fine potete o ripristinare la copia di backup o editare a mano il file /etc/ifconfig_llp.txt per ripristinare i valori.  

I file di log

Lo script llp.pl genera un file di registro (/var/log/llp.log). Questo file crescerà molto lentamente. Non vi dovrebbe quindi esser la necessità di farne il rotate (ovvero quella procedura che crea un copia del file attuale e ne crea uno nuovo di dimensione 0). Potete effettuare il rotate di questo file con il programma logtate, se lo desiderate. Non vi è la ncessità di fare operazioni dopo il rotate. La riga di configurazione del rotate (all'interno dello script logrotate) potebbe essere:

/var/log/llp.log {
nocompress
monthly
}

Il file di registro contiene le voci inerenti lo spegnimneto manuale ed il cambio delle configurazioni di rete (cambio di indirizzo IP, di gateway o sottomaschera di rete) o quando il watchdog ha forzato un riavvio. Ovviamente sarà impossibile avere delle voci inerente il timeout del watchdog (difatti il sistema era bloccato!), ma troveremo un voce per questo tipo di problematica aggiunta al riavvio del sistema.  

Il pannello al lavoro.

Qui trovate alcune immagini del pannello LCD in uso. Queste non sono tutte le funzioni offerte dal pannello. Ve ne sono molte altre che potrete aggiunere voi stessi.

La finestra principale. Mostra alcuni nomi (in questo caso linuxfocus), il tempo di uptime ed il carico medio del server. Queste informazini sono aggiornate periodicamente.
[menu: generale]

Il menu di impostazione della rete
[menu: cambio IP]

Esempio del cambio di indirizzo IP
[change IP]

Come variare l'indirizzo del gateawy (la route predefinita)
[menu: cambio Gateway]  

Conclusioni

[A lavoro ultimato] Per assemblare questo pannello LCD è necessaria una conoscenza basialre dell' elettronica. Il nostro Pannello LCD per Linux offre moltissime funzionalità, molte di più di quelle che io abbia visto su altri prodotti simili, e, soprattutto, ha un costo modesto.

Buon lavoro :-)
 

Bibliografia



Webpages maintained by the LinuxFocus Editor team
© Guido Socher
"some rights reserved" see linuxfocus.org/license/
http://www.LinuxFocus.org
Translation information:
en --> -- : Guido Socher (homepage)
en --> it: Toni Tiveron <toni/at/amicidelprosecco.com>

2005-01-14, generated by lfparser_pdf version 2.51