.. meta:: :language: it :description language=it: Embedded Systems Architecture: Esercitazione Misuratore di distanza :description language=en: Embedded Systems Architecture: Practice Distance Meter :keywords: Embedded Systems Architecture, Distance Meter :author: Luciano De Falco Alfano Sheet Arduino n.15 (Distance Meter) ==================================== .. contents:: :local: [*Lezione del xx yyy 2019*] Premessa ------------------------- La `scheda della esercitazione n.15 `_, richiede di implementare un misuratore di distanza, utilizando un emettitore/sensore di ultrasuoni HC-SR04. Inoltre si richiede di utilizzare un display LCD 16x2 caratteri con interfaccia I2C. Come spiegato nell'esercitazione dello sheet 13 (AMMETER), non avendo un display LCD con questo bus di comando, ho utilizzato il display LCD fornito nello starter kit di Arduino. In questo ambito non riporto il dettaglio del collegamento di questo display avendolo già documentato nella esercitazione predetta, cui rimando. Un'ultimo dettaglio: ho implementato direttamente la seconda parte dell'esercizio, in cui si chiede di controllare anche la temperatura dell'aria per calcolare di conseguenza la velocità del suono. Progetto -------------- L'interfacciamento del HC-SR04 è semplice: alimentazione, ground e due fili ai pin digitali di Arduino: uno per comandare l'avvio del pacchetto di ultrasuoni, e il secondo per misurare il tempo necessario affinché il sensore percepisca l'echo di ritorno. Analogamente, per il sensore di temperatura (un T36GZ). Oltre l'alimentazione e il ground basta inviare il filo centrale al convertitore ADC di Arduino per leggere la relativa tensione in uscita e calcolare di conseguenza la temperatura. Per il dettaglio dei contatti del display si faccia riferimento alla esercitazione `dell'AMMETER (sheet 13) <./E13_sheet13.html#>`_. Il circuito si presenta come segue: .. image:: ./exercises/PIC_sh15.jpg :align: center Video ----------- Di seguito il video dell'esercizio. .. raw:: html Sketch ------------ Lo sketch è il seguente .. literalinclude:: ./exercises/sketch_sh15.ino :language: c :linenos: Non descrivo la gestione del display LCD. Per questo si faccia riferimento all'esercizio del AMMETER (sheet 13). In testa abbiamo le definizioni dei vari pin e della conversione da unità Arduino ADC a milli Volt (ln da 9 a 19). Le principali variabili globali (ln da 23 a 28) registrano il tempo di eco in microsecondi, la distanza in cm, la velocità del suono in aria in cm/micro sec. e la temperatura dell'aria in gradi celsius. Nel setup inizializzo i pin, il display e la seriale verso il PC per debug. Dopo di che scrivo un banner iniziale ed infine misuro la temperatura dell'aria (ln da 53 a 55) per calcolare la velocità del suono in aria (ln 56). Misuro la temperatura una sola volta, nel setup, in quanto essendo al chiuso, la ritengo costante per la durata dell'esercizio. Nel loop comando l'avvio dell'impulso di ultrasuoni di rilevazione, e dopo 15 micro secondi fermo il comando (ln da 60 a 62). Subito dopo parte il comando ad Arduino di misurare la durata del segnale di echo (ln 63). Questo comando aspetta che il segnale in questione vada HIGH [#]_, dopo di che lo misura in micro secondi finché non va LOW [#]_. Il calcolo della distanza, in cm è alla ln 70: velocità per il tempo [#]_. A questo punto si passano (ln 72) tutti i valori alla funzione ``prt`` che implementa la logica di output dei dati. Dopo di che, pausa, pulizia del display e ciclo. La funzione ``prt`` (ln 77 e successive) stampa inizialmente tutti i valori sicuramente di rilievo. Nella seriale per debug: la temperatura, la velocità e il tempo. Nel display, dove abbiamo solo 2 linee, stampiamo solo il tempo. Dopo di che (ln 88 e successive) verifico che la distanza calcolata sia positiva [#]_ e non superiore a 100 cm. In caso affermativo stampo la relativa distanza sia nella seriale che nella seconda riga del display. Altrimenti stampo un messaggio di errore. ----------- .. [#] Cosa che accade dopo la partenza dell'impulso di ultrasuoni per il rilevamento. .. [#] Cosa che accade quando arriva l'impulso di ultrasuoni di ritorno. .. [#] Il tempo è dimezzato perchè il suono va e torna dopo essere rimbalzato sul bersaglio. .. [#] Il sensore ritorna zero come tempo di echo se c'è qualcosa che non va.