Digital meter di Matteo Naldoni

Matteo Naldoni è un ragazzo appassionato Makers ed Arduino che ha realizzato un bellissimo progetto: Digital meter

Digital meter

Il metro digitale è un interessante esperimento con Arduino in cui Matteo ha usato un sensore ad ultrasuoni HC-SR04 ed un display LCD per visualizzare la distanza.

Ho voluto dedicare a Matteo questo articolo in quanto oltre ad essere un progetto sicuramente interessante il video che l’autore ha realizzato è davvero benfatto e molto divertente.

Componenti del Digital meter

Un buon progetto inizia sempre dalla lista della spesa:

  • n.1 Arduino
  • n.1 breadboard
  • alcuni fili per breadboard
  • n.1 proto shied
  • n.1 potenziometro
  • n.1 sensore HC-SR04

Nel video vedrai che la prima parte è dedicata alla presentazione del materiale.

Lo schema elettrico

Matteo mi ha chiesto di realizzare per lui lo schema in Fritzing, richiesta a cui ho acconsentito:

schema elettrico del digital meter

Se trovi delle inesattezze o delle correzioni rispetto a quanto vedi nel video non è colpa dell’autore ma mia 🙂

Lo sketch del digital meter

Lo sketch usato per questo progetto è tutta opera di Matteo a cui riconosco la buona qualità del codice e la chiarezza dei commenti:

/*
 Digital Meter by Matteo Naldoni
 Configurazione PIN Sensore:
 Trig  - 8
 Echo  - 9
 Configurazione PIN Display:
 VDD - +5V
 V0  - Potenziometro
 RS  - 12
 RW  - GND
 E   - 6
 D4  - 5
 D5  - 4
 D6  - 3
 D7  - 2
 A   - +5V
 K   - GND
 */

#include <LiquidCrystal.h>
LiquidCrystal lcd(12, 6, 5, 4, 3, 2);
byte newChar[8] = {
  B00000,
  B00100,
  B00100,
  B11111,
  B00100,
  B00100,
  B11111,
  B00000
};
void setup() {
  lcd.createChar(8, newChar);

  pinMode (9,INPUT);
  pinMode (8,OUTPUT);
  Serial.begin(9600);

  lcd.begin(16, 2);
  lcd.print(" Digital Meter");
  lcd.setCursor(0, 1);
  lcd.print("|--------------|");
  delay(3500);
  lcd.clear();
  lcd.setCursor(3, 0);
  lcd.print("Powered by");
  delay(3000);
  lcd.setCursor(0, 1);
  lcd.print(" Matteo Naldoni");
  delay(3000);
  lcd.clear();
  lcd.setCursor(1, 0);
  lcd.print("Misurazione");

} 

void loop() {

  //MISURAZIONE
  digitalWrite (8,LOW);
  delayMicroseconds (1);
  digitalWrite (8,HIGH);
  delayMicroseconds (1);
  digitalWrite (8,LOW);
  long ping= pulseIn (9,HIGH);
  long distanza = ping/58.0;
  lcd.setCursor(0, 1);
  lcd.print(distanza);
  lcd.print("cm");
  lcd.setCursor(5, 1);
  lcd.write(8);
   lcd.setCursor(7, 1);
   lcd.print("1cm");

  // ANIMAZIONE (...)
  lcd.setCursor(12, 0);
  lcd.print("   ");
  delay (100);
  lcd.setCursor(12, 0);
  lcd.print(".  ");
  delay (100);
  lcd.setCursor(12, 0);
  lcd.print(".. ");
  delay (100);
  lcd.setCursor(12, 0);
  lcd.print("...");
  delay (100);
}

sai che mi piace commentare tutti gli sketch e questo non fa eccezione.

Nelle linee 01-18: trovi i commenti inseriti dall’autore per il progetto digital meter e sopratutto i pin a cui collegare il sensore, il potenziometro e l’LCD;

linea 20: includi la libreria LiquidCrystal.h usata per scrivere sul Display LCD;

linea 21: inizializza la classe LCD impostando i pin a ci hai collegato lo stesso LCD16x2;

linee 22-31: definisci il carattere +/_, impilati, che userai in seguito;

linea 33: definisci il carattere speciale appena creato con il metodo createChar() della classe Lcd;

linee 35-36: imposta il pin 8 come OUTPUT ed il pin 9 come INPUT, sono impostazioni richieste dal sensore HC-SR04;

linea 37: imposta un canale di comunicazione Seriale;

linee 39-42: imposta il display a 16×2 e scrivi sulla prima riga “Digital Meter” e sulla seconda una line di trattini;

linea 43: aspetta 3,5 secondi prima di procedere oltre, serve a darti il tempo di leggere il messaggio appena scritto;

linee 44-53: pulisci il display e visualizza nella sequenza i messaggi “Powered By”, “Matteo Naldoni”,”Misurazione” intervallati da 3 secondi ciascuno;

linee 60-64: esegui una sequenza di inizializzazione del sensore HC-SR04 portando il pin 8 ( Trig ) a LOW,HIGH,LOW con un intervallo di 100 microsecondi, tale sequanza la trovi anche nel datasheet del sensore;

linea 65: al termine della sequenza di inizializzazione leggi gli impulsi presenti sul pin 9 di Arduino con il comando pulseIn();

linea 66: calcola il valore di distanza in cm dividendo per la costante di conversione 58,0;

linee 67-73: scrivi sul display LCd il valore della distanza letta e l’unità di misura, in particolare la linea 71 scrive il simbolo creato nelle prime linee dello sketch;

linee 75-87: scrivi sul display l’animazione dei tre puntini, ad ogni ciclo di loop() del digital meter esegui sia la misurazione sia la sequenza dei puntini, puoi eliminare queste linee per diminuire il tempo tra una misurazione e la successiva.

Il video del digital Meter

Guardare il capolavoro fatto da Matteo, il video:

Buon divertimento !!!

Cortesemente, prima di inserire i commenti leggi il regolamento

Permanent link to this article: http://www.mauroalfieri.it/elettronica/digital-meter-di-matteo-naldoni.html

18 comments

Skip to comment form

    • Luca on 29 luglio 2013 at 13:42
    • Reply

    Mauro ho un problema,io ho un Sharp Distance Sensor 2Y0A21 comprato da robotitaly,come faccio a fare i collegamenti e la programmazione???

    1. Ciao Luca,
      hai provato a cercare nel Blog, ci dovrebbero essere alcuni articoli dedicati proprio a quel sensore.

      Mauro

    • Luca on 28 maggio 2014 at 16:19
    • Reply

    Buongiorno mauro,
    sto usando un sensore hc-sr04 per accendere e spegnere un led in base alla distanza. Purtroppo la variabile duration(quella captata dal pin echo) continua ad essere pari a 0 quindi pare che non funzioni. Come faccio a verificare che il sensore funzioni? Grazie

    — Codice rimosso in automatico —

    1. Ciao Luca,
      come avrai letto il codice non può essere postato nei commenti, vedi avviso in fondo ad ogni articolo.
      Se rilevi sempre 0 probabilmente non sono corretti i tempi di interrogazione e puoi procedere consultando la documentazione che chi ti ha venduto il componente ti ha rilasciato per sapere i tempi di risposta da impostare.

    • Riccardo on 18 marzo 2015 at 17:05
    • Reply

    il programma per disegnare lo schema elettrico è fritzing? Non riesco a trovare il componente degli ultrasuoni, sapresti indicarmi dove posso scaricarlo?

    1. Ciao Riccardo,
      si è Fritzing.
      Cercalo come HC-SR04 o SR04 come indicato nella lista dei componenti, ricordo esserci.

    • Matteo on 8 maggio 2015 at 12:42
    • Reply

    Ciao Mauro,
    io e un mio compagno di scuola stiamo cercando di realizzare una macchina con i sensori ad ultrasuoni hc-sr04, noi ne vorremmo utilizzare due uno per far girare a destra e uno per far girare a sinistra solo che non riusciamo a dichiararli nell’ ambiente di sviluppo
    Grazie

    1. Ciao Matteo,
      lascio il tuo commento on-line perché l’autore del progetto o qualche altro appassionato che ha già usato questi sensori possa darvi un aiuto.
      Io non possiedo degli SR04 e di conseguenza non potrei provare a farli convivere.
      Mauro

    • Marco on 6 ottobre 2015 at 17:51
    • Reply

    Ciao Mauro, tanti complimenti per tutti i progetti che pubblichi. Ho riprodotto questo progetto, però volevo sapere se è possibile visualizzare il risultato del sensore ad ultrasuoni tramite Bluetooth hc-06 e magari visualizzarlo su uno smartphone Android. Mi puoi aiutare? Grazie

    1. Ciao Marco,
      si, puoi farlo, considera che il Bluetooth HC-06 usa comunicazione di tipo seriale per cui ti è sufficiente inviare con dei Serial.print il valore al componente e questo te lo invia allo smartphone.

    • leonardo on 30 dicembre 2015 at 19:30
    • Reply

    Ciao Mauro
    con un sensore SR04, un buzzer e Arduino ho realizzato un ” segnalatore di parcheggio” portatile che volevo regalare ad un mio amico non vedente per aiutarlo aevitare gli ostacoli. Il problema che riscontro è il seguente: in casa il tutto funziona perfettamente (ho tarato il sensore a 100 cm), all’aperto il buzzer emette un suono continuo, però leggermente diverso da quello emesso in presenza di un’ostacolo.
    Sarà lo smog?(io vivo a Torino) o perché il sensore all’aperto capta segnali o suoni non udibili dal nostro orecchio?
    Ringrazio fin d’ora chi può aiutarmi a risolvere questo problema

    1. Ciao Leonardo,
      bella iniziativa.
      Non ho mai provato quel tipo di sensore, tanto meno all’aperto.
      Ti suggerisco di eseguire una analisi con monitor seriale per verificare cosa capta il sensore ed eventualmente correggere via codice il problema.

    • Istituto Superiore on 1 febbraio 2016 at 13:03
    • Reply

    Salve,
    Vorrei sapere che tipo di proto-shield ha utilizzato nel progetto e dove è possibile acqustarlo.
    Grazie e cortesi saluti.

    1. Ciao Istituto Superiore,
      penso tu possa usare una comune breadboard in vendita c/o i negozi di elettronica od on-line da robotics-3d.com

    • Mauro on 12 dicembre 2017 at 19:34
    • Reply

    Buona sera,
    ho provato a scrivere il codice che è identico al tuo ma da un’errore sulla funzione delay(100); ho provato altre funzioni di pausa ma con scarsi risultati.
    quali sono le alternative a questo problema?

    1. Ciao Mauro,
      che errore ricevi? Non ho mai ricevuto errori sulla delay() è una funzione talmente consolidata e semplice che non da errore, solitamente gli errori sono nelle linee precedenti.

    • Antonio on 17 agosto 2018 at 12:51
    • Reply

    Salve e possibile farlo anche in millimetri o in centripeti con 2 decimali?

    1. Ciao Antonio,
      lascio il tuo commento on-line perché Matteo, autore del progetto, possa aiutarti.

Lascia un commento

Your email address will not be published.

Questo sito usa Akismet per ridurre lo spam. Scopri come i tuoi dati vengono elaborati.