Serduino - SERRA CON ARDUINO



Documenti analoghi
IRSplit. Istruzioni d uso 07/10-01 PC

Per scrivere una procedura che non deve restituire nessun valore e deve solo contenere le informazioni per le modalità delle porte e controlli

DL8 config REVISIONE DATA

SOLUZIONI PER IL CONTROLLO DELLA QUALITA DELL ARIA NEGLI AMBIENTI CHIUSI

SISTEMA DI TELETTURA CONTATORI

In anticipo sul futuro. Tutorial d installazione per testo Saveris

Come usare P-touch Transfer Manager

Guida alla registrazione on-line di un DataLogger

Istruzioni per l installazione del software per gli esami ICoNExam (Aggiornate al 15/01/2014)

Procedura aggiornamento firmware H02

INFO TECNICA SATO Italia

UTILIZZO DEL MODULO DATA ENTRY PER L IMPORTAZIONE DEI DOCUMENTI (CICLO PASSIVO)

RIPETITORE DI SEGNALE WIRELESS PER SISTEMA VIA RADIO ART. 45RPT000

LASER NAVIGATION SRL

Progetto di Domotica

Registratori di Cassa

Il SOFTWARE DI BASE (o SOFTWARE DI SISTEMA)

Arduino UNO. Single board microcontroller

automazione impianti produzione calcestruzzo per alimentazione vibropresse e tubiere

GUIDA RAPIDA. MICRO TELECAMERA PENNA DVR SU MEMORIE MICRO SD (nuovo modello con sovraimpressione di data e ora) (versione manuale 17/05/2010)

Procedura aggiornamento firmware

Argo Palm Manuale utente Versione del

CORSO ARDUINO. Giulio Fieramosca Stefano Panichi. Corsi GOLEM 2014

Procedura aggiornamento firmware. Prestige

Programmatore Bootloader

CONVERTITORE SERIALE ASINCRONO RS485 / USB

Procedura aggiornamento firmware

INDICE. A.E.B. S.r.l. - Cavriago (RE) Italy

Automobile Bluetooth

CHIUSURE di MAGAZZINO di FINE ANNO

INTERFACCIA PER PC MEDIANTE PORTA SERIALE

Con SIGLA Green Pack vengono esaltate le caratteristiche di gestionale paperless

Procedura aggiornamento firmware

EW1051 Lettore di schede USB

Microtech Srl. GPS TRACKER v3.0

FLEET MONITORING SCHEMA DI FUNZIONAMENTO

CONVERTITORE SERIALE ASINCRONO RS232/USB, TTL/USB e RS485/USB CONFIG BOX PLUS

Programmatore scenari

Procedura aggiornamento firmware

Distributori DPI DESCRIZIONE SERVIZIO. Informazioni Generali

RICHIESTE INTERVENTO

Classe 5I2 AS. 2013/14 Niccolò Bulla Giorgia Novelli

Guida alla registrazione on-line di un NovaSun Log

EM Camera Web con microfono

Domande frequenti su Phoenix FailSafe

Fast Track Pro. Guida rapida della

Dino-Lite TrichoScope

N150 WiFi Router (N150R)

introduzione I MICROCONTROLLORI

Come modificare la propria Home Page e gli elementi correlati

Gestione delle informazioni necessarie all attività di validazione degli studi di settore. Trasmissione degli esempi da valutare.

Procedura aggiornamento firmware

RoboTESTER Wall-E, ATE a letto d aghi per Test In-Circuit e Funzionale. 1/6

Indruduzione... 1 Il modulo Bluetooth HC Il firmware... 3 Collegamento della scheda... 4 Software PC e l applicazione Android...

Gestione dei segnali analogici nei sistemi di automazione industriale con PLC.

BROCHURE - Short Form Ver. 1.3 BLUE DIMMER LT

2 Gli elementi del sistema di Gestione dei Flussi di Utenza

Printer Driver. Questa guida descrive l installazione dei driver stampante per Windows Vista e Windows XP.

Manuale Terminal Manager 2.0

TERM TALK. software per la raccolta dati

Manuale di programmazione BerMar_Drive_Software

CORSO SERALE ( TDP ) DEMOBOARD FN1Z PER PIC 16F877/16F877A

Note di rilascio. Le principali implementazioni riguardano: Comunicazione Sistema Tessera Sanitaria: invio telematico

Introduzione. Classificazione di Flynn... 2 Macchine a pipeline... 3 Macchine vettoriali e Array Processor... 4 Macchine MIMD... 6

Che cos'è un modulo? pulsanti di opzione caselle di controllo caselle di riepilogo

SEDA S.p.A. Divisione Emergenza. ZOLL Data Review

BMSO1001. Virtual Configurator. Istruzioni d uso 02/10-01 PC

AGGIORNAMENTO DEL SOFTWARE MYNAV ALLA VERSIONE ,

12 - timer da cucina display a 4 cifre

Caratteristiche HW. Clock Speed 16 MHz

Si compone di: SI-Prog supporta: Le tre principali famiglie di..

GUIDA UTENTE MONEY TRANSFER MANAGER

VISUALFLEET Software Overview

OSCILLOSCOPIO SOFTWARE

BARCODE. Gestione Codici a Barre. Release 4.90 Manuale Operativo

Controller multicanale FT-200/MP

MANUALE UTENTE Fiscali Free

GUIDA SOFTWARE GESTIONE DEL PERSONALE ENTI NON SOGGETTI AL PATTO DI STABILITA

SISTEMI INDUSTRIALI LASER NAVIGATION

DENUNCE EDILCONNECT GUIDA COMPILAZIONE

Giornale di Cassa e regolarizzazione dei sospesi

CONTROLLO IN TENSIONE DI LED

PRODUZIONE PAGELLE IN FORMATO PDF

PANNELLO REMOTO PER BARRIERE 48BFC000 E 48BFC001

Client - Server. Client Web: il BROWSER

Il sistema di rilevazione dati per il controllo globale delle macchine di produzione

Modulo 4 Il pannello amministrativo dell'hosting e il database per Wordpress

NTC E MISURA DELLA TEMPERATURA CON ARDUINO

10. Funzionamento dell inverter

Presentazione della pratica online

Guida rapida Vodafone Internet Box

MONITORAGGIO ACQUEDOTTO MANUALE UTENTE

Manuale Utente SIRECO

Gui Gu d i a d ra r p a i p d i a V d o a d f a one Int fone In e t r e net rnet Box Key Mini

Porta seriale Classe 4E Febbraio Form 1

Replica con TeraStation 3000/4000/5000/7000. Buffalo Technology

SOFTWARE PER LA RILEVAZIONE DEI TEMPI PER CENTRI DI COSTO

Transcript:

Serduino - SERRA CON ARDUINO 1 Componenti Facchini Riccardo (responsabile parte hardware) Guglielmetti Andrea (responsabile parte software) Laurenti Lorenzo (progettazione hardware) Rigolli Andrea (reparto botanica) Obiettivo generale Il nostro scopo è stato quello di realizzare un piccolo ambiente serra controllato automaticamente da un sistema a microcontrollore. In tal senso si è deciso di intervenire nei seguenti ambiti: Rilevazione temperatura, umidità e luminosità, Controllo umidità (irrigazione) e ventilazione. E prevista inoltre la memorizzazione dei valori rilevati in modo da poterne effettuare un analisi in tempi differenti. E prevista l integrazione del progetto con il lavoro svolto da un altro gruppo di compagni di classe, in modo da dotarlo di una piattaforma mobile (controllabile tramite joystick) in grado di garantirne la movimentazione servo-assistita. Analisi del progetto Per realizzare la serra abbiamo pensato di utilizzare un vecchio gioco a scopo scientifico. Si tratta di una cupola di plastica con la base suddivisa in 7 scompartimenti, quello centrale destinato a contenere l acqua e i 6 intorno per le coltivazioni. Gli scompartimenti sono separati da un canaletto per l irrigazione. Per la rilevazione di temperatura, di umidità utilizziamo un sensore in grado di rilevarli entrambi, il KY015, il cui sketch di funzionamento è spiegato più avanti; mentre per la luminosità si utilizza un fotoresistenza. L irrigazione è demandata a una pompetta da 12 V che preleva da una bottiglietta da ½ litro e la deposita nel deposito centrale. Per la regolazione dell umidità usiamo un dissipatore da 8 cm collegato a un tubo di platica che aspira dalla serra. Il controllore è un Arduino Uno con uno shield Ethernet, lo shield viene utilizzato in quanto possiede il connettore per la scheda SD. L alimentazione verrà fornita da un battery pack in grado di fornire 12 V.

Riassumendo vengono utilizzati: Componente Quantità Arduino Uno 1 Shield Ethernet 1 Sensore Umidità-Temperatura KY015 1 Fotoresistore 1 Pompetta 5000rpm 12V 1 Dissipatore 8cm 1 Morsetti 3 Breadboard 1 Scheda di memoria SD da 8GB 1 Relay 1 2 Analisi in dettaglio degli strumenti Serra Si tratta di una vecchia serra giocattolo.

3 Arduino Uno Arduino Uno è un dispositivo basato su microcontrollore che permette di realizzare diversi tipi di circuiti elettronici. Possiede 14 pin digitali programmabili come ingressi o uscite ( i quali hanno anche la capacità di essere utilizzati per funzione dedicate come la generazione di segnale PWM o la comunicazione UART ) e 6 ingressi per l acquisizione ed elaborazione di segnali analogici. Il microcontrollore è l ATmega328 prodotto da Atmel e ha una velocità di 16MHz, una memoria flash da 32 KB, una SRAM da 3KB e una memoria EEPROM da 1KB. L alimentazione della scheda avviene tramite porta USB o tramite l apposito connettore. In caso siano collegati sia il cavo USB sia il connettore di alimentazione, la scheda è capace di scegliere automaticamente la fonte di alimentazione esterna. Il progetto del dispositivo è open source, sono infatti disponibili schermi elettrici per la realizzazione del circuito e i sorgenti di tutto il software della piattaforma. Il costo della scheda è di circa 30 euro. Sensore umidità-temperatura KY015 Il sensore KY015 è in grado di rilevare l umidità e la temperatura ambientale. Specifiche: Intervallo rilevazione umidità: 20% - 90%, con tolleranza ±5%; Intervallo rilevazione temperatura: 0 C - 50 C con tolleranza ±2 C; Risoluzione: umidità 1% RH, temperatura: 1 C; Voltaggio operativo tra 3.3V e 5V; Misure: 3,2cm * 1,4cm, peso: 8g; 3 pin: segnale, +5V e GND. Dal momento che il KY015 utilizza un particolare metodo per rilevare le due misure, il Two Module Interface Description (3 Wire), viene utilizzato un particolare sketch, facilmente reperibile su Internet.

Fotoresistenza La fotoresistenza è un componente elettronico la cui resistenza è inversamente proporzionale alla quantità di luce che lo colpisce. Si tratta quindi di un potenziometro attuabile tramite la luce. Per misurate la quantità di luce lo abbiamo messo in serie con una resistenza da 1kΩ e misurato la tensione ai capi della fotoresistenza. 4 Pompetta 5V La pompetta che abbiamo in dotazione funziona a 12V. Dato che l Arduino fornisce al massimo 5V, la pompetta viene alimentata tramite un pacco batterie a parte; la pilotiamo tramite un relay pilotato da un segnale digitale. Per misurare la portata abbiamo eseguito una prova svuotando un bicchiere contenente una prefissata quantità d acqua e valutando il tempo richiesto per lo svuotamento. Abbiamo eseguito le prove con quantità d acqua pari a 10ml e 100ml ed abbiamo ripetuto le misurazioni con due valori di tensione di alimentazione della pompetta: 5V e successivamente con 8V. Seguono i grafici che illustrano le misurazioni effettuate. Grafici:

5 Come si può osservare dai grafici, con alimentazione a 5V la pompetta ha una portata inferiore; questo tuttavia non ci avrebbe creato problemi non avendo la necessità di riempire costantemente il serbatoio. Dissipatore Per l impianto di aerazione abbiamo utilizzato un dissipatore da computer con la ventola da 8cm. Per consentire l aspirazione abbiamo costruito una sacca costituita dalla ventola, un quadrato di cartoncino, adattato alla misura della ventola, un cono preso da un case, un secondo quadrato di cartoncino forato in modo da consentire il passaggio di 2 tubi in plastica che si immettono nella serra.

Implementazione Lato Hardware 6 Volendo ridurre al massimo i costi di realizzazione del progetto, il tutto è stato assemblato usando principalmente oggetti recuperati, a partire dalla serra stessa (un gioco educativo per bambini), fino al sistema di ventilazione, costituito da una ventola ed un cilindro di plastica recuperati da un vecchio computer. I tubi invece sono stati presi da un impianto d irrigazione in disuso. L unico componente che è stato acquistato appositamente (oltre ad Arduino e sensori ovviamente) è la pompa per irrigare, pompa che trasporta l acqua da una comune bottiglia opportunamente bucata per consentirne il riempimento senza rimuoverla dalla sede. Schema Circuitale

Lato Software 7 Il software consiste in due programmi: lo sketch di controllo dell Arduino programma di rilevazione dati da parte del computer Seguono i listati. Sketch Variabili utilizzate dal KY015, un byte per l errore e un array per i valori rilevati. Memorizza la luminosità. Oggetto che gestisce la scheda SD. Variabili per la conta del tempo passato. Richiama il metodo InitDHT() Inizializzo l oggetto Serial per l invio di dati al PC a 1200 baud. Dichiaro che i pin digitali 7 e 8 sono usati per l output. Inizializzo l oggetto SD con il pin di default 4 e cancello il file Dati.txt presente. Inizializzo le variabili a 0.

d Nel metodo loop() si procede al richiamo del metodo che gestisce la lettura del sensore KY015 e del fotoresistore. Si inviano i dati ricevuti sia al computer, che verranno gestiti dall apposito programma, e scritti su SD. Se l umidità supera un certo valore, in questo caso è stato tenuto 5% come prova, si accende la ventola tramite un segnale digitale. 8 Il metodo loop() viene eseguito circa una volta al secondo. Una volta al giorno per 30 secondi viene attivata la pompetta. I dati vengono inviati sulla porta seriale e verranno ricevuti dal computer. Sono inviati nel formato: H##.#T##.#L####_ I dati vengono salvati sul file Dati.txt presente su scheda SD.

9

Programma C# 10 Il programma rileva i dati dalla porta tramite l oggetto SerialPort, decifra la stringa inviatagli e visualizza i valori nelle relative TextBox in tempo reale, inoltre, per un confronto visivo con il massimo valore misurabile, sono mostrati anche dalle ProgressBar. Per visualizzare i dati misurati precedentemente è presente una TextBox di log che visualizza le misurazioni e la relativa data/ora. Per leggere il file Dati.txt presente sulla scheda SD è presente l apposito tasto che apre un Esplora Risorse, permettendo la selezione del file. Interfaccia grafica

11 Programma C# int umidita, temperatura, luminosita; StringBuilder datirilevati; string dati; Contengono i valori rilevati. Contiene i dati grezzi rilevati dall Arduino. Contiene i dati filtrati nella forma: H##.#T##.#L#### public frmmain() InitializeComponent(); umidita = 0; temperatura = 0; luminosita = 0; dati = ""; datirilevati = new StringBuilder(); private void frmmain_load(object sender, EventArgs e) sparduino.portname = "COM9"; sparduino.baudrate = 1200; sparduino.databits = 8; sparduino.parity = Parity.None; sparduino.stopbits = StopBits.One; prgluminosita.maximum = 1024; prgluminosita.minimum = 0; prgtemperatura.maximum = 50; prgtemperatura.minimum = 0; prgumidita.maximum = 100; prgumidita.minimum = 0; Inizializzo le variabili e istanzio l oggetto datirilevati. Imposto i parametri della comunicazione della porta seriale. Imposto i valori minimi e massimi delle Progress Bar. txtluminosita.readonly = true; txtumidita.readonly = true; txttemperatura.readonly = true; txtlog.readonly = true; tmrrilevazione.interval = 50; Imposto le TextBox a sola lettura. Imposto l intervallo del timer a 50 millisecondi. private void tmrrilevazione_tick(object sender, EventArgs e) //rilevo i dati dall'arduino e li memorizzo nello StringBuilder datirilevati.append(sparduino.readexisting()); if (datirilevati.tostring().contains("h") && datirilevati.tostring().contains("_")) EstraiDatiDaArduino(out umidita, out temperatura, out luminosita); //Aggiorno le TextBox e le ProgressBar txttemperatura.text = temperatura.tostring(); txtumidita.text = umidita.tostring(); txtluminosita.text = luminosita.tostring(); txtlog.appendtext(datetime.now + "\t" + string.format("umidità: 0%\t", umidita) + string.format("temperatura: 0 C\t\t", temperatura) + string.format("luminosità: 0/1024\r\n", luminosita)); prgluminosita.value = luminosita; prgumidita.value = umidita; prgtemperatura.value = temperatura; //richiamo i metodi per colorare le ProgressBar ColoraLuminosita(); ColoraUmidita(); ColoraTemperatura(); Continuo a leggere dall Arduino finché datirilevati non contiene sia il carattere H che il carattere _ (indicano che la stringa è completa). Dopodiché richiamo il metodo EstraiDatiDaArduino()

12

public void EstraiDatiDaArduino(out int umidita, out int temperatura, out int luminosita) temperatura = 0; umidita = 0; ; luminosita = 0; //fermo il timer per impedire la lettura di dati dall Arduino. tmrrilevazione.stop(); //continuo a filtrare i dati finché datirilevati ne contiene. while (datirilevati.tostring().contains("h") && datirilevati.tostring().contains("_")) //se la stringa contiene il carattere _ prima del carattere H elimino la parte precedente ad H. if (datirilevati.tostring().indexof("h") > datirilevati.tostring().indexof("_")) datirilevati.remove(0, datirilevati.tostring().indexof("_")); //prelevo la stringa minima, cioè da H fino a _, e la memorizzo in dati. dati = datirilevati.tostring().substring(datirilevati.tostring().indexof("h"), datirilevati.tostring().indexof("_")); 13 datirilevati.remove(0, datirilevati.tostring().indexof("_") + 1); //estrapolo i valori e li memorizzo nelle relative variabili. umidita = int.parse(dati.substring(dati.indexof("h") + 1, dati.indexof("t") - 1)); dati = dati.remove(dati.indexof("h"), dati.indexof("t")); temperatura = int.parse(dati.substring(dati.indexof("t") + 1, dati.indexof("l") - 1)); luminosita = int.parse(dati.substring(dati.indexof("l") + 1)); //riprendo con la lettura dei dati. tmrrilevazione.start(); public void ColoraLuminosita() if (prgluminosita.value < 150) prgluminosita.forecolor = Color.Black; else if (prgluminosita.value < 600) prgluminosita.forecolor = Color.OrangeRed; else if (prgluminosita.value < 900) prgluminosita.forecolor = Color.Orange; else prgluminosita.forecolor = Color.Yellow; In base al valore rilevato vario il colore della ProgressBar; in questo caso la quella della luminosità. Il codice è simile anche per le altre. private void btnapri_click(object sender, EventArgs e) if (sparduino.isopen == false) sparduino.open(); sparduino.discardinbuffer(); tmrrilevazione.start(); Se la porta COM non è già aperta, la apro, svuoto il buffer di input per eliminare eventuali impurità e avvio il timer di rilevazione. private void btnchiudi_click(object sender, EventArgs e) sparduino.close(); Chiudo la porta COM

14 private void btnletturasd_click(object sender, EventArgs e) ofdsd.initialdirectory = "C:\\"; ofdsd.filter = "Text Files (.txt) *.txt All Files (*.*) *.*"; if (ofdsd.showdialog() == DialogResult.OK) StreamReader sr = new StreamReader(ofdSD.FileName); while (sr.endofstream == false) datirilevati.append(sr.readline().tostring()); EstraiDatiDaArduino(out umidita, out temperatura, out luminosita); txtlog.appendtext("umidità= " + umidita + " " + "temperatura= " + temperatura + " " + "luminosità= " + luminosita); sr.close(); Indico di posizionarsi in C: e di visualizzare solo i file di testo. Visualizzo nella TextBox di log i dati letti dalla scheda. Conclusioni Il Serduino è stato terminato il 26/03/2014,dopo dieci settimane di lavoro (40 ore complessive di laboratorio). Ci sono state difficoltà di utilizzo dell Arduino nelle prime due settimane, in quanto si era pensato di utilizzare un Arduino Yun, ma il driver per la gestione della porta COM era ancora in beta e causava problemi di stabilità di connessione con il PC e dunque di monitoraggio dei valori trasmessi da Arduino. Si è quindi adottato un Arduino Uno. La costruzione del prototipo è quindi proseguita senza particolari problemi. Rimane da contenere il consumo di corrente elettrica dell intero dispositivo che causa un rapido esaurimento delle pile con conseguenti improvvisi malfunzionamenti. Sviluppi futuri Si è pensato di dotare Arduino dello shield WI-FI in modo da sfruttare la connettività wireless per permettere la continua lettura dei dati dal PC remoto. Sarebbe opportuno inoltre implementare un database contenente i dati relativi a varie colture per consentire al sistema la gestione diversificata di prodotti da serra.