Progetto del corso Microcontrollori
Il progetto del corso Microcontrollori ha appunto come obbiettivo comprendere il funzionamento di ... un microcontrollore, nel mio caso Arduino.
Per il progetto d'esame ho voluto rendere "digitale" un piccolo deumidificatore che funziona solamente con del granulato di calcio.
Le funzioni che si vogliono implementare sono, grazie ad un display che mostra le informazioni:
- Misurare la temperatura
- Misurare l'umidità
- Misurare il livello di acqua raccolta nel contenitore
- Segnalare attraverso un diodo led il "pericolo" del contenitore si sta riempiendo (led lampeggiante) oppure troppo pieno(led acceso fisso)
- Accedere la ventola se l'umidità raggiunge una certa soglia
- Salvare tutti i valori e inviarli tramite il pc, per creare un grafico riepilogativo di 2 giorni
Passo 1 - scrivere il programma per Arduino
Schermo LCD
Grazie ad un tool online (https://circuits.io/) che riescie a simulare contemporaneamente sia l'hardware che il software seguendo le specifiche ho cominciato a scrivere il programma per arduino. Così facendo sono riuscito a monitorare e a testare passo passo il l'andamento del progetto per ogni piccola aggiunta.
La prima funzione da svilippata è stata l'interazione con l'utente. Essa avviene attraverso un monitor lcd 16x2. La libreria è stata usata LiquidCrystal.h, la stessa usata nel programma "Hello World " nel sito di Arduino.
Per collegare il microcontrollore allo schermo ho semplicemnte seguito lo schema proposto dal costruttore. Dei 12 pin disponibili il collegamento con lo schermo ne utilizza 6 lasciandone altri 6 disponibili.
Menu'
La seconda funzione svilippata è stata l'aggiunta del menu con i relativi 3 pulsanti per potersi spostare e selezionare la funzione desiderata.
Una variabile booleana (mainMenu) ci indica se stiamo scorrendo nel menu principale oppure nei menu' secondario. In questo ultimo caso in base al valore della variabile int menu decidiamo come comportaci. Infatti questo primo "pezzo" di codice ci serve per catturare le interazioni con l'utente (quando premi i pulsanti), per visualizzare i messaggi richiamiamo la funzione DisplayMenu();
Sensori
Una volta impostati i vari menu leggere i valori dei sensori è stato abbastanza intuitivo. Infatti basterà collegare il piedino Vcc al 5V di arduino, il piedino GND al relativo pin ed il piendino del segnale ad un pin di arduino settato come INPUT.
- Per il sensore di temperatura e umidità (Sensore DHT11):
Basato sul sensore DHT11, questo modulo permette di misurare temperature comprese tra 0°C e +50°C e umidità relativa dal 20% al 90%. Dispone di interfaccia seriale a filo singolo che ne facilita l'utilizzo. Il sensore DHT11 viene calibrato in modo estremamente preciso, i coefficienti di calibrazione sono memorizzati nella memoria OTP e vengono richiamati durante il processo di rilevamento, in questo modo non vi è alcuna necessità di ricalibrare il sensore. È particolarmente adatto per prodotti di consumo, stazioni meteo, applicazioni HVAC Heating, Ventilation and Air Conditioning), ecc. Dimensioni (mm): 29x18x7, peso: 30 grammi.
- Per il sensore di livello dell'acqua:
Sensore di livello realizzato su PCB. È in grado di rilevare la presenza di un liquido fino ad una profondità di 48 mm, fornendo in uscita una tensione proporzionale al livello del liquido. Può essere utilizzato con Arduino o altri microcontrollori. Alimentazione: da 2 Vdc a 5 Vdc, dimensioni (mm): 19x63, profondità di rilevazione: 48 mm.
Orologio
Per salvare ogni 10 minuti i valori provenienti dai sensori e per mostrare l'ora corrente all'utente bisogna implementare anche un orologio (con tutte le relative funzioni per impostare l'ora). Arduino non implementa un orologio interno ma ha una funzione 'millis()' che ci restituisce da quanti millisecondi è acceso. Grazie a questo meccanismo si imposta una variabile che si incrementa di 1 secondo ogni volta che questa risulta minore della funzione 'millis'. Poi semplicemente ogni 60 secondi si aumenta di 1 minuto, ogni 60 minuti si aumenta di 1 ora e così via ...
Due giorni sono il tempo max che riusciamo a salvare tutti i valori dei 2 sensori (per motivi di spazio delle variabili).
Salvare ed inviare dati
Il programma ogni 10 min salva in un arrey temporaneo i valori dei sensori, poi a fine giornata ricopia l'arrey nello specifico spazio di memoria. Per inviare i dati una volta collegato arduino al pc si fa un ciclo sui valori salvati.
Passo 2 - Montare i componenti
Una volta che il programma "funziona" sul simulatore online ho ricreato sulla basetta lo schema elettrico.
Appurato che anche fisicamente non ci sono problemi il passo successivo è stato la creazione di una dima dove collocare i componenti elettrici: arduino, lo schermo lcd, una piccola basetta di appoggio, 3 pulsanti, il led e la ventolina.
Una volta caricato il programma sulla scheda siamo pronti a monitorare temperatura ed umidità e azionare la ventola nel caso di superamento di una soglia impostata.
Passo 3 - Gestire i dati raccolti
Completato il montaggio e la fase di test bisogna adesso elaborare graficamente i dati che il microcontrollore salva. Per far questo Arduino ci mette a disposione la funzione Serial.println(""); che ci permette di comunicare direttamente con il pc.
Se facciamo un ciclo su tutto l'arrey e per ogni valore richiamiamo la funzione println inviamo i valori raccolti al pc. Una volta che abbiamo tutti i valori ho creato una piccola pagina per l'elaborazione che ci restituisce il grafico dei 2 giorni monitorati con temperatura e umidità.
Questa è la parte invece per trasformare i dati salvati in un grafico:
Crea grafico
Un esempio di 2 grafici (fatti però con dati non reali)
Temperatura:
Umidità:
Tutto il codice
Breadboard
Scarica lo .zip del file per arduino
Download
Librerie sensori
Download