Questo progetto vi consentirà di cosruire una sorta di metro ad ultrasuoni,
Potrete infatti visualizzare su display la distanza misurata con sensore ultrasonico HC-SR04.
ecco lo schema di collegamento:
Qui lo sketch:
- #include <LiquidCrystal.h>
- int triggerPort = 7;
- int echoPort = 8;
- LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
- // connessione display (pin)
- void setup() {
- pinMode( triggerPort, OUTPUT );
- pinMode( echoPort, INPUT );
- Serial.begin( 9600 );
- Serial.println( "Sensore ultrasuoni: ");
- lcd.begin(16, 2);
- // imposto il tipo di display (colonne, righe)
- lcd.print("Distanza:");
- }
- void loop() {
- //porta bassa l'uscita del trigger
- digitalWrite( triggerPort, LOW );
- //invia un impulso di 10microsec su trigger
- digitalWrite( triggerPort, HIGH );
- delayMicroseconds( 10 );
- digitalWrite( triggerPort, LOW );
- long duration = pulseIn( echoPort, HIGH );
- long r = 0.034 * duration / 2;
- Serial.print( "durata: " );
- Serial.print( duration );
- Serial.print( " , " );
- Serial.print( "distanza: " );
- if( duration > 38000 ) Serial.println( "fuori portata");
- else { Serial.print( r ); Serial.println( "cm" );}
- // posiziono il cursore alla colonna 12 e riga 0
- if(r > 99){
- lcd.setCursor(13, 0);
- lcd.print(r);}
- if(r <= 99 && r > 9){
- lcd.setCursor(13, 0);
- lcd.print(r);
- lcd.setCursor(15, 0);
- lcd.print(" ");}
- if(r <= 9){
- lcd.setCursor(13, 0);
- lcd.print(r);
- lcd.setCursor(14, 0);
- lcd.print(" ");}
- delay(300);
- }
Daniele, ho assemblato i componenti del progetto (leggere su display la distanza da un oggetto ), ho caricato lo sketch.
RispondiEliminaSul monitor durata e distanza compaiono regolarmente, su LCD nulla.
Ho controllato e ricontrollato il cablaggio e Il contenuto dello sketch paragonandolo ad altro tuo progetto funzionate ( Termostato / Igrostato regolabile con display) sia nella configurazione del LCD e suoi parametri, ma nulla.
Nota: LCD funziona con altro progetto e la regolazione del contrastoè stata effettuata.
Sono alle prime armi con Arduino ma come assemblatore e conoscitore di elettronica me la cavo.
Se hai qualche consiglio da fornirmi te ne sarei molto grato.
In attesa gradisci distinti saluti e un grande apprezzamento per l'opera che svolgi.
Antonio
Prova a scollegare Il modulo ad ultrasuoni e a caricare lo sketch del termostato, si vede qualcosa sull'lcd?
EliminaCome prima, la prova l'avevo già effettuala sarebbe dovuto apparire come da riga 14 --lcd.print("Distanza:")--; la stringa inviata al LCD.
EliminaAgendo sul controllo del contrasto passo da un azzurro uniforme ai 16 display dellla prima riga uniformemente illuminat in griglia 5x8
Ho anche provato a sostituire Arduino pensando ad un suo problema.
EliminaNiente
Scusa ma non ho capito con l'altro sketch, senza modificare niente, si vede qualcosa?
EliminaHo provato ad estrapolare il codice seguente
RispondiElimina#include
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
void setup(){
lcd.begin(16, 2);
lcd.setCursor(3, 0);
lcd.print("Distanza:");
}
Il caricamento non aviene e mi restituisce
core.a(main.cpp.o): In function `main':
C:\Program Files\Arduino\hardware\arduino\cores\arduino/main.cpp:43: undefined reference to `loop'
Dove sbaglio?
Mi si è cancella to nella prima riga del commento parte della dichiarazione
RispondiElimina#include
ma nello sketh era oresente
Scusa
Si ho capito,
EliminaComunque devi per forza mettere anche il loop sennò non funziona.
Lascialo anche vuoto così.
void loop (){}
Inserito il loop.
EliminaNulla, come prima.
Sto utilizzando la versione del compilatore 1.0.6
Quasi ci rinuncio mi spiace per l'impegno che ti ho recato.
Ma no dai.. Prova questo
Eliminahttp://www.danielealberti.it/2014/10/collegare-un-display-lcd-ad-arduino.html?m=1
Questo commento è stato eliminato dall'autore.
RispondiEliminaRisolto !!!
RispondiEliminaLa breadboard non collegava il GND ad un pin dell'LCD.
grazie di tutto
Salve, innanzitutto complimenti per come delucidi tutti i progetti, premesso che sono alle prime armi ho sviluppato questo progettino della "misura della distanza con display", e grazie a tutte le spiegazioni sono riuscito a farlo senza difficoltà; ora avrei intenzione di implementarlo con 2 sostanziali modifiche visto che a me serve più per misurare il livello di una cisterna e la sua quantità di acqua al suo interno;le modifiche che avrei intenzione di fare sono le seguenti:
RispondiElimina1- tramite la formula dei cilindri inserire all'interno dello sketch la stessa per conoscere momento per momento la quantità di acqua al suo interno, (comunque ho letto che le onde sull'acqua si propagano ad una velocità diversa da quella dell'aria, (1480 ms) però ho già fatto delle prove con la formula inserita nello sketch e la misura è abbastanza precisa, quindi lascerei quella)e inserire nella seconda riga del display i litri rimanenti.
2- se c'è la possibilità di avere un'uscita analogica proporzionale alla lettura del sensore, cioè 0V/0cm e 5V/1,2mt.
Spero di essere stato chiaro, capisco che il tempo manca sempre ma se è possibile gliene sarei grato, grazie Lorenzo Vita
Buongiorno, grazie mille per i complimenti.
EliminaTenga conto che la variabile "r" contiene il valore in centimetri. quindi può creare una nuova variabile che conterrà il valore del calcolo che le serve. Per l'uscita analogica Arduino non ne dispone, è presente però il PWM su alcuni pin (quelli con la tilde disegnata a fianco del numero). Il pwm genera un treno di impulsi che simula un'uscita analogica tra 0 e 5v. Il comando è "analogWrite(x,y)" dove x e y sono il pin e il valore di uscita proporzionale tra 0 e 255.
se ci sono problemi lasci pure un altro commento.
Saluti, Daniele
Buongiorno, grazie mille per i complimenti.
EliminaTenga conto che la variabile "r" contiene il valore in centimetri. quindi può creare una nuova variabile che conterrà il valore del calcolo che le serve. Per l'uscita analogica Arduino non ne dispone, è presente però il PWM su alcuni pin (quelli con la tilde disegnata a fianco del numero). Il pwm genera un treno di impulsi che simula un'uscita analogica tra 0 e 5v. Il comando è "analogWrite(x,y)" dove x e y sono il pin e il valore di uscita proporzionale tra 0 e 255.
se ci sono problemi lasci pure un altro commento.
Saluti, Daniele
Questo commento è stato eliminato dall'autore.
RispondiEliminaQuesto commento è stato eliminato dall'autore.
RispondiEliminaGrazie per le dritte, ho provato a inserire all'interno del progetto le dovute modifiche, per adesso sto cercando di modificare solo la parte analogica;
RispondiEliminala mia difficoltà stà nel far interpretare a "analogWrite(x,y)" a quale riferimento deve attenersi, cioè sul sito di arduino ho trovato la funzione
"{
int val = analogRead(0);
val = map(val, 0, 1023, 0, 255);
analogWrite(9, val);
}
ma capisco che fa riferimento ad un ingresso analogico, mentre a me serve fargli interpretare i valori del sensore che per l'esattezza leggendoli sul monitor seriale sono 800min e 5900max (cioè circa 16 cm come valore minimo e 100cm come valore max), quindi non saprei proprio come fare.
Saluti e grazie per l'interessamento Lorenzo
Questo commento è stato eliminato dall'autore.
RispondiEliminaint x=500; //numero tra 0 e 1000
RispondiEliminar = map(x, 0, 1000, 0, 255);
analogWrite(6, r);
questo è il codice che ho inserito, considerando che "r" è il valore del sensore e x il comparatore, non so se riesco a spiegarmi, in questo modo non mi varia la tensione in uscita rimane sempre la stessa, invece ho provato così:
r = map(r, 800, 5900, 0, 5000);
analogWrite(6, r);
qualcosa succede però mi spegne dopo un pò il display, grazie ancora
Salve, primo quesito risolto, ora mi accingo all'altro, in caso mi faccio vivo, grazie ancora
RispondiEliminaCiao volevo chiederti anche se il post è vecchio quindi spero che mi rispondi... avrei bisogno di misurare distanze oltre i 4 metri esiste 1 sensore che misura più di 4 metri e soprattutto riusciamo a includere 1 sensore di temperatura per aggiustare la variabile della temperatura per il suono? Grazie mille
RispondiElimina