Meteo Italia v. 3.0 Programma di monitoraggio meteorologico Piani Ivan Rosafio Alessandro
←
→
Trascrizione del contenuto della pagina
Se il tuo browser non visualizza correttamente la pagina, ti preghiamo di leggere il contenuto della pagina quaggiù
ITIS Enea Mattei Esame di stato 2010/2011 Tesina Meteo Italia v. 3.0 Programma di monitoraggio meteorologico Piani Ivan Rosafio Alessandro Classe 5^ E
Indice Introduzione_____________________________________1 Caricamento del programma________________________1 Presentazione dell’ interfaccia grafica_________________2 Menu a scomparsa________________________________2 Home__________________________________________3 Gestione della connessione_________________________4 Immagini nel pannello Home_______________________5 Bollettino meteo nel pannello Home__________________5 TG Meteo_______________________________________7 Webcam________________________________________9 Earth_________________________________________11 Sms / Mail_____________________________________11 Approfondimento sulla tecnologia GSM _____________12 E-mail________________________________________14 Rilevazione locale_______________________________16 Dispositivo di rilevazione della temperatura___________17 Stampa della tabella______________________________20 Fonti e documentazioni___________________________23 1
Introduzione Meteo Italia è nato dopo vari tentativi ed idee che hanno contribuito a farne un progetto sempre più ampio ed evoluto. Il programma raggruppa il maggior numero di informazioni possibili per offrire all’ utente un vasto margine di valutazione per il meteo in Italia e nella propria zona di residenza. L’ intero progetto è stato scritto in linguaggio di programmazione .NET C# utilizzando il noto ambiente di sviluppo Microsoft Visual Studio 2010. Sono state sviluppate quattro versioni del programma: 1.0, 2.0, 2.1 e l’ ultima versione 3.0, la più completa, efficiente e affidabile. Ogni versione, eccetto la 2.1, è stata completamente riscritta partendo da un nuovo progetto risparmiando circa 300 righe di codice ogni volta, ciò contribuisce ad una notevole leggerezza dell’ intero programma. Questo lavoro intende valorizzare le conoscenze acquisite durante i tre anni di studio all’ interno della scuola e i notevoli stimoli, interessi nati e sviluppati studiando in modo individuale nel tempo libero. Sono state utilizzate conoscenze in ambito informatico per la maggior parte, tramite linguaggio C#, S.Q.L. ed HTML, oltre a conoscenze di elettronica digitale e trasmissione di dati in GSM riguardante la materia di sistemi. Caricamento del programma Il programma verrà caricato dal sistema operativo tramite la seguente parte di codice: “isloading” è un oggetto timer che è stato precedentemente aggiunto al progetto e provvederà a far apparire l’ immagine iniziale del programma, una volta che il parametro opacity sarà al valore massimo (1) l’ immagine di caricamento scomparirà lasciando spazio all’ interfaccia grafica di Meteo Italia v3.0. 2
Presentazione dell’ interfaccia grafica Una volta eseguito il caricamento apparirà la seguente finestra, contenente una barra nella parte alta con due pulsanti per la chiusura del programma e la riduzione ad icona, un menu a scomparsa nella parte sinistra, il titolo della sezione visualizzata e nella restante parte le informazioni utili all’utente finale per prevedere il meteo dei successivi giorni. Scorrendo i pulsanti del menu potremo ottenere informazioni quali immagini da satellite della situazione italiana ed europea, video con la funzione di presentare il meteo per il giorno corrente e successivo, webcam dell’ intera Lombardia, Earth , il pulsante “Sms / Mail” che ci consente di inviare il meteo ad amici oppure a clienti nel caso di un’ azienda, ed infine “Locale” con il quale potremo monitorare la temperatura dell’ ambiente nel quale ci troviamo attraverso il dispositivo USB realizzato. Menu a scomparsa Il menu a scomparsa è stato realizzato ingrandendo un pannello laterale alla pressione del pulsante sul lato sinistro, attivando la seguente parte di codice: Una volta premuto il pulsante verrà attivato il timer “menu” che a seconda dello stato del menu (stato_menu=0 se chiuso e stato_menu=1 se aperto) aprirà o chiuderà il menu. 3
Il pannello verrà ingrandito ad ogni “Tick” del timer, e di conseguenza verrà spostato anche il bottone necessario per aprire il menu. Una volta che il menu ha raggiunto la dimensione prestabilita il timer sarà disattivato tramite il comando: “menu.enabled=false;” Home Nel primo pannello visualizzato, Home, dopo aver premuto il tasto “connetti” visualizzeremo la velocità della nostra connessione verso l’ esterno, troveremo due immagini della situazione attuale o al massimo di un’ ora precedente, e un bollettino meteo che ci descriverà accuratamente il tempo e i principali futuri cambiamenti. 4
Gestione della connessione Una volta premuto il tasto “connetti” il programma eseguirà la seguente parte di codice: Una volta premuto il pulsante (macButton1) verrà eseguita la funzione “testa_connessione”. Tramite questa funzione verrà generato un tentativo di connessione verso i server Google.it, e in caso positivo verrà determinata la velocità di connessione ed il programma sarà pronto per essere utilizzato, in caso negativo il programma non visualizzerà nulla. *Per poter utilizzare le classi Ping, PingReply ed IPStatus è necessario aggiungere la reference: “using System.Net”. 5
Immagini nel pannello Home Le due immagini di presentazione vengono scaricate ed inserite nel seguente modo: Nel caso in cui si presentasse un errore di connessione o le immagini non fossero momentaneamente disponibili verrà visualizzato un messaggio di errore all’ interno di esse “Impossibile contattare il server per la ricezione dell’ immagine da satellite”. Bollettino meteo nel pannello Home Il bollettino meteo è invece frutto di una procedura molto più complessa, la quale connettendosi ad una pagina web del sito internet www.meteo.it scaricherà il relativo codice HTML all’ interno e tramite una ricerca dovrà trovare il bollettino meteo giornaliero. Una volta rintracciato il bollettino all’ interno del codice html della pagina verrà inserito all’ interno di un oggetto webbrowser nel form principale. 6
Il codice per eseguire la ricerca è il seguente: Vengono dichiarate e inizializzate due stringhe, inizio e fine, le quali contengono le parole sempre iniziali e finali del bollettino, l’ algoritmo ricercherà queste due stringhe all’ interno del codice HTML, una volta individuate sarà in grado di rilevare l’ intero bollettino per inserirlo nella stringa tempString ed infine nel codice HTML dell’ oggetto webbrowser1. In caso ci fossero problemi di connessione o eventuali problemi di ricerca, il programma visualizzerà un errore tramite il seguente codice: 7
TG Meteo Premendo il secondo pulsante all’ interno del menu si aprirà la scheda TG Meteo, attraverso la quale potremo visualizzare i video relativi al meteo per il giorno successivo e per il weekend. Le previsioni sono disponibili sia per l’ Italia che per l’ Europa. Per prima cosa è necessario scaricare le quattro immagini relative ai video e posizionarle correttamente all’ interno delle quattro picture-box che sono state inizializzate. Esempio relativo all’ immagine del video “Italia”: In caso di errore o di immagini momentaneamente non disponibili verrà inserita un’ immagine di errore (Proprieties.Resources.error). 8
Quando verrà cliccata l’ immagine “video_italia” verrà attivato un timer che aprirà in modo graduale una finestra per poter visualizzare il video: Nella stringa “video” verrà inserito un file di testo contenente il relativo codice necessario per visualizzare il video, il link al lettore multimediale “Mediaplayer” di Microsoft e il link al video in formato MP4. La funzione “apertura_video_tick” che viene eseguita con un intervallo di 1 millisecondo da parte del timer esegue le linee di codice al suo interno. Ogni millisecondo viene cosi ingrandito di 10 pixels il pannello che dovrà contenere il video. Inoltre viene aggiunto un bottone (chiudi_web) in modo che l’ utente possa chiudere il video in un qualsiasi momento desiderato. Terminata la procedura inizierà la riproduzione del video, la velocità di esso potrebbe dipendere dalla connessione ad internet. 9
Webcam Tramite questa opzione sarà possibile per l’ utente visualizzare alcune webcam della Lombardia. Inizialmente, come per i video, verranno scaricate tutte le immagini, successivamente, nel momento in cui un utente desiderasse una webcam in particolare, alla pressione dell’ immagine verrà visualizzata la webcam ingrandita. Esempio di caricamento immagine relativa alla webcam in Aprica: 10
Per esempio, cliccando sull’ immagine collegata alla webcam in Aprica verrà aperta l’ immagine ingrandita sfruttando il seguente codice: All’ evento “click” viene richiamata la funzione “apri_box_webcam()” la quale posiziona e formatta il pannello contenente l’ immagine, inoltre aggiunge ad esso il bottone “chiudi_cam” che permette all’ utente di chiudere l’ immagine. Bottone “chiudi_cam” necessario per la chiusura 11
Earth In questa sezione l’ utente avrà la possibilità di sfruttare il servizio “earth” offerto da Google e implementato in Meteo Italia. Per poter utilizzare il servizio è necessario aver installato nel pc il plugin di Google earth, scaricabile gratuitamente del sito Google. Earth è viene caricato nel seguente modo: Così viene inserito in un oggetto webbrowser il codice html che permette ad esso di collegarsi a Google e visualizzare il servizio earth. Sms / Mail 12
Sono stati implementati i servizi di sms e mail per poter inviare il meteo giornaliero. I dati relativi a chi voglia ricevere il servizio vengono salvati in file, recuperati ed inseriti in due datagridview ogni volta che il programma viene aperto. Sms Per l’ invio di sms, Meteo Italia utilizza un generico modem telefonico GSM. Per questioni economiche abbiamo scelto di utilizzare il modem implementato in un telefono cellulare, ma funzionerebbe con qualsiasi modem collegato via USB con gli appositi driver installati. Approfondimento sulla tecnologia GSM Il GSM è uno standard europeo per la comunicazione in telefonia mobile di seconda generazione (2G), ormai non è più molto utilizzato poiché sono stati introdotti nuovi standard come GPRS (che consente la commutazione di pacchetto), EDGE, UMTS (il quale aggiunge la possibilità di effettuare videochiamate e incrementa la velocità di comunicazione). Tuttavia per l’ invio di semplici SMS lo standard GSM offre tutto il necessario ed è di più facile implementazione. La velocità che raggiunge un modem GSM è di 9,6 Kbit/s, questo stabilisce una connessione permanente con il punto di arrivo finché questa connessione non viene terminata. Il GSM sfrutta canali da 200KHz con 8 time slot per canale, per la trasmissione voce sfrutta le tecnologie: TDMA: Time Division Multiple Access, codifica e comprime la voce per consentire più conversazioni contemporanee utilizzando la stessa frequenza ma in un tempo diverso. CDMA: Code Division Multiple Access, tecnica digitale che permette di condividere lo stesso canale di frequenza in quanto ogni voce è distinta tramite uno pseudo-codice casuale. Il GSM si basa interamente sul sistema cellulare, un insieme di antenne che coprono una determinata area disposte secondo uno schema ad esagoni, e tutti confinanti l'uno con l'altro. Questo sistema comporta una serie di vantaggi, primo tra tutti, la possibilità di ridurre la potenza dei terminali. I costruttori hanno così cominciato a ridurre le dimensioni dei terminali mobili, perché meno potenza in uscita significa meno fabbisogno energetico e quindi batterie più piccole. 13
A conferma di questi vantaggi è sufficiente considerare che se i primi terminali avevano potenze in uscita nell'ordine dei 25 watt, oggi i terminali mobili hanno potenze oscillanti tra gli 0.6 ed i 3 watt. Le reti cellulari hanno anche consentito di aumentare il numero delle conversazioni disponibili contemporaneamente. Con il vecchio sistema se ne poteva svolgere non più di una, adesso sono molte di più. I gestori telefonici, al fine di evitare interferenze tra le conversazioni, assegnano frequenze leggermente differenti alle varie celle confinanti. Accendendo un semplice telefono cellulare ci connettiamo alla cella dedicata all'area dove ci troviamo in quel momento, la quale è collegata al "Mobile Telephone Switching Office" (MTSO), che poi a sua volta è collegato al sistema telefonico della compagnia di telefonia mobile. Per inviare un singolo sms viene utilizzata la seguente funzione “invio_s(string numero, string messaggio)” che, ricevendo in ingresso il numero del destinatario e il messaggio, provvederà ad inviare l’ sms: Per iniziare viene assegnata all’ oggetto serialport “thePort” il numero di porta che l’ utente ha selezionato nella comboBox2. 14
Una volta che la porta è stata aperta correttamente senza generare eccezioni vengono modificati alcuni parametri: • thePort.NewLine stabilisce quali caratteri verranno utilizzati per iniziare una nuova riga; • thePort.WriteTimeout stabilisce il tempo in millisecondi entro il quale la porta deve rispondere, altrimenti verrà interrotta la comunicazione; • thePort.DtrEnable = true stabilisce che la porta può utilizzare il comando per segnalare al pc la fine della comunicazione, è utilizzato quasi esclusivamente per i modem. • thePort.Handshake= Handshake.RequestToSend stabilisce quale dei protocolli verrà utilizzato per comunicare tra porta e pc; • thePort.ReceivedBytesThreshold stabilisce la dimensione del buffer di input in bytes; • thePort.DiscardInBuffer() pulisce il buffer di input in caso fossero rimasti dei dati; • thePort.DiscardOutBuffer() pulisce il buffer di output in caso fossero rimasti dei dati; • thePort.WriteLine("AT+CMGF=1") invia un comando AT al modem, settando il modem in modalità di text; *Il linguaggio di comunicazione AT è utilizzato per inviare istruzioni ai modem. • thePort.WriteLine("AT+CMGS=\"" + ind_numero.Text + "\"") Comunica al modem il numero di telefono del destinatario dell’ sms; • thePort.WriteLine(messaggio + " \x1A ") Comunica al modem l’ intero testo del messaggio e con la stringa “\x1A” termina le operazioni, inviando il messaggio; • thePort.Write("\r\n") Termina la riga precedente e inizializza una nuova riga; • thePort.BaseStream.Flush() Pulisce i buffer usati per il flusso di dati precedente e invia i dati che erano nei buffer al dispositivo collegato; • sms_close() richiama una funzione creata che chiude la porta e rilascia tutte le risorse utilizzate per la comunicazione. E-Mail Oltre all’ invio di sms è possibile inviare anche le e-mail, che vengono processate e inviate più velocemente degli sms. Si pensi che un modem GSM impiega circa 6/7 secondi per l’ invio di un sms mentre una e-mail se la connessione ad internet è ottimale viene inviata in 2 secondi. Sarebbe inoltre possibile inviare oltre al meteo giornaliero anche immagini della situazione meteorologica e immagini dal satellite. 15
La funzione sfruttata per l’ invio delle e-mail è la seguente: Vengono dichiarati due oggetti di tipo “MailAddress” che si riferiranno agli indirizzi del mittente e del destinatario, e inizializzati. Nella stringa “oggetto” viene inserito l’ oggetto/argomento della mail che sarà poi visualizzato dal destinatario. Nella stringa “msg” viene inserito il testo del messaggio, variabile a seconda del meteo selezionato (nord ovest, nord est, centro o sud). Le variabili nord_ovest, nord_est, centro e sud vengono inizializzate quando si effettua la connessione e contengono il meteo. Successivamente viene creato un oggetto “MailMessage” chiamato MyMail, al quale vengono assegnati gli oggetti di tipo MailAddress precedentemente creati. Vengono poi attribuite le stringhe oggetto e msg all’ oggetto MyMail. Con il comando SmtpClient s = new SmtpClient(“out.virgilio.it”) viene definito quale server verrà utilizzato per inviare le e-mail, qualsiasi altro gestore di posta sarebbe stato valido alla condizione di aver precedentemente creato un account sul server. Infine s.Send(MyMail) invia la mail, nel caso in cui, per un qualsiasi motivo non fosse possibile inviarlo, verrebbe generata un’ eccezione gestita poi dalla “catch” che mostrerebbe il messaggio di errore “Errore nell’ invio del messaggio”. Sia per l’ invio di sms che di e-mail verso più persone vengono semplicemente richiamate le funzioni di invio tante volte quante sono le persone. 16
Rilevazione locale L’ interfaccia di rilevazione locale ha varie funzionalità, prima di rilevare la temperatura l’ utente dovrà selezionare la porta alla quale è connesso il termometro digitale. Dopo aver selezionato la porta, cliccando il bottone rileva temperatura e aspettando alcuni secondi, verrà visualizzata la temperatura. Avendo avviato il termometro e la rilevazione della temperatura sarà poi possibile rilevare la singola temperatura oppure avviare una scansione ogni n secondi desiderati. Tutte le temperature raccolte dal programma verranno memorizzate nella dataGridView che riporterà la data e l’ ora di acquisizione e il rispettivo valore. Quando i dati saranno sufficienti avremo la possibilità di salvare la tabella in due formati, come tabella in formato Microsoft Excel oppure come una tabella SQL, importabile poi su programmi di gestione di database o su programmi mysql per mettere a disposizione le rilevazioni online. È possibile anche stampare l’ intera tabella tramite il tasto “stampa” oppure cancellare la tabella con il tasto “reset”. Selezione della porta COM Le porte COM all’ interno di Meteo Italia vengono utilizzate nel collegamento con il modem GSM e nel collegamento con il termometro, per ricercare le porte disponibili viene utilizzata la seguente funzione: 17
Quando il programma viene aperto, esso ricerca tutte le porte COM disponibili, inoltre ad ogni click sulla comboBox viene eseguita nuovamente la funzione trovaporte() poiché un dispositivo potrebbe essere stato collegato al pc successivamente all’ avvio del programma. Viene creato un vettore di stringhe tramite la funzione SerialPort.GetPortNames() e tramite due cicli for viene ordinato. Per ultima cosa vengono copiati i valori nelle stringhe all’ interno della items collection. Dispositivo di rilevazione della temperatura Per la realizzazione del termometro digitale è stato utilizzato un modulo DLP-IO8 con 8 canali di comunicazione input / output collegato tramite porta USB al pc. Ad un canale del modulo è a sua volta collegato un sensore di temperatura Dallas DS18B20 che rileva la temperatura e la comunica tramite comunicazione “1-wire” al modulo USB, questo Modulo USB DLP-IO8 by DLP DESIGN a sua volta trasmetterà al pc i caratteri ASCII della temperatura attuale. Sensore di temperature Dallas DS18B20 18
Il sensore è stato collegato al modulo USB con il seguente schema: La resistenza di pull-up R ha un valore di 4,7KΩ, il connettore n°1 del modulo porta una tensione di 5V ed è collegato al pin 3 del dallas, il connettore n°10 corrisponde alla massa ed è collegato al pin 1 del sensore, mentre il connettore n°8 verrà usato per trasferire i dati. Rilevazione della temperatura tramite termometro Alla pressione del bottone “Rileva temperatura” viene eseguita la funzione che si connette al termometro e lo interroga per ricevere la temperatura attuale. La funzione è la seguente: La funzione rilevatemp() apre la porta serialPort1 alla quale è collegato il termometro, poi scrivendo sulla porta i caratteri ‘ ; ’ e ‘ ` ’ , rispettivamente 59 e 96 in codice ASCII, viene settato il termometro in modo che restituisca la temperatura in gradi centigradi e sotto forma di caratteri ASCII. Successivamente scrivendo il carattere ‘ [ ‘ sulla porta richiediamo al termometro di comunicarci la temperatura, opportunamente letta tramite la riga “temp=serialPort1.ReatTo(“?C”)” che inserisce poi la temperatura rilevata nella stringa temp. Dopo aver letto la temperatura viene visualizzata nella label15 e viene chiusa la porta. 19
Aggiornamento della dataGridView ad ogni rilevazione Viene salvata la data attuale nella stringa “data” poi viene aggiunta una riga alla dataGridView con la data e la temperatura attuale. Salvataggio della tabella in formato Microsoft Excel Attraverso la funzione crea_file() vengono presi tutti i record della dataGridView e inseriti in un foglio excel all’ interno di un file excel denominato con l’ orario della creazione. Vengono stabilite sia la path (root del programma) che la data, dopodiché vengono creati tre oggetti, un oggetto Excel application, un oggetto cartella di Excel e un oggetto foglio di lavoro di Excel, al quale viene poi assegnato il primo foglio della cartella Excel. 20
Con un ciclo for ripetuto tante volte quanto il numero di righe nella dataGridView inserisce tutti i dati nel foglio Excel, al termine salva il documento, chiude l’ applicazione ed esegue la funzione releaseObject() su tutti gli oggetti prima creati, richiamando il garbage collector che pulirà la memoria RAM dai dati non più riconducibili a processi attualmente attivi. Salvataggio della tabella in formato SQL Il salvataggio di un file *.SQL, che servirà poi per importare le tabelle delle rilevazioni in programmi che utilizzano dati SQL, viene eseguito così: Con un semplice StreamWriter viene creato un file salvato con la data e ora attuale all’ interno del quale scrive l’ intero comando SQL per la creazione di una tabella e con le “INSERT INTO” necessarie alla compilazione della tabella. Al termine della scrittura viene chiuso lo StreamWriter. Stampa della tabella Per stampare la tabella viene utilizzato un oggetto di tipo “printDocument” e di tipo “printPreviewDialog” con il seguente codice: La funzione intestazione(Graphics g, ref int y) crea due nuovi Font (bold e titolo) e scrive il titolo all’ inizio del documento in colore rosso, dopodiché disegna l’ intestazione della tabella con i nomi delle colonne “data” e “temperatura”. 21
Dopo aver disegnato l’ intestazione è necessario disegnare l’ intera tabella sfruttando la funzione contenuto(Graphics g, int y), la quale disegna all’ interno del foglio una riga alla volta sfruttando il ciclo for che si ripete tante volte quanto il numero delle righe nella dataGridView: Tutti i numeri contenuti nella funzione intestazione e contenuto sono numeri necessari alla formattazione della pagina per far si che la tabella disegnata in fase di stampa sia il più possibile centrata all’ interno del foglio. Alla pressione del bottone relativo alla stampa verrà aperta l’ anteprima di stampa da cui l’ utente poi potrà avviare la stampa. L’oggetto printPreviewDialog1 è direttamente collegato tramite le proprietà impostabili dalla finestra grafica con l’oggetto printDocument1 dal quale vengono richiamate le due funzioni descritte in precedenza. 22
Controllo continuo della connessione È stato implementato un controllo continuo della connessione che inizia non appena l’ utente effettua la connessione. Questo controllo, implementato in un thread per non rallentare le funzionalità del programma esegue un comando di ping verso un sito web, è stato scelto Google per comodità e perché sempre online e raggiungibile se vi è una connessione ad internet. Il thread, chiamato anche “backgroundWorker” nell’ ambiente di sviluppo Microsoft Visual Studio viene avviato nel form_load del programma Meteo Italia con la seguente riga: *L’ oggetto “Controlla_connessione” è un oggetto della classe backgroundWorker. La funzione continuamente eseguita dal thread che è stato creato è Controlla_connessione_DoWork: Questa funzione esegue il codice contenuto nel ciclo “while” finché non rileva che la connessione al sito web “www.google.it” è fallita, quindi imposta la variabile stato = 0 (questa variabile è una variabile visibile nell’ intero programma che indica se la connessione è attiva oppure no) ed esegue la funzione blocca_tutto(true) la quale blocca tutti i comandi e/o bottoni che non possono essere premuti in caso di connessione assente. Quando l’ utente si accorgerà che la connessione non è più attiva provvederà a rendere nuovamente la connessione disponibile e premerà il pulsante connetti nella home del programma. 23
Fonti e documentazioni L’ intero programma e il suo intero codice sono stati sviluppati autonomamente limitando il più possibile aiuti e fonti esterne per poter sollecitare e incrementare le nostre potenzialità, tuttavia sono stati utilizzati alcuni siti web riguardo a campi e/o funzioni a noi completamente sconosciute. • http://msdn.microsoft.com : descrizione e guide per specifici aspetti della programmazione .NET C# • http://www.control.com.sg : guida verso i comandi AT con i quali gestire i modem GSM • http://freedatalogging.wordpress.com : documentazione sul sensore di temperatura DS18B20 • http://www.digikey.it/ : negozio americano online attraverso il quale abbiamo potuto acquistare il modulo USB • Libro scolastico “Sistemi di elaborazione e trasmissione delle informazioni” : alcuni concetti riguardanti il GSM 24
Puoi anche leggere