Il sensore ad ultrasuoni HC-SR04
qui mostrato è prodotto dalla ELECROW codice
SOD00201S, ma può essere trovato di altri modelli e fornitori.
Il sensore ha un campo di misura che si estende da due
centimetri a quatto metri e la precisione arriva a 1 cm.
Il modulo comprende il trasmettitore a ultrasuoni, il ricevitore e il
circuito di controllo.
Questi sensori ad ultrasuoni non misurano direttamente la
distanza, ma forniscono il tempo impiegato da un segnale sonoro
per raggiungere un ostacolo e ritornare di nuovo al sensore.
Quando Arduino setta a 1 il Pin Trigger,
il sensore invia 8 impulsi ad ultrasuoni. Quando questi poi sono
ricevuti, il sensore setta a 1 il pin Echo, viene quindi
misurato il tempo che passa tra l’attivazione del pin Trigger
ed il settaggio del pin Echo. Infine, nota la
velocità del suono, converte il tempo misurato in una lunghezza
e ricava quindi la distanza dell’ostacolo.
Per il collegamento del sensore HC-SR04 è sufficiente
collegare il modulo come illustrato in figura alla scheda
Arduino UNO, i valori della distanza saranno mostrati attivando il
Monitor Seriale dell' IDE.
Per testare il modulo HC-SR04, per prima
cosa è necessario importare la libreria in modo che l'IDE la riconosca. Il modo
più semplice è l'importazione tramite l'IDE stesso:
Clicca in Sketch > #Includi
Libraria > Gestione libraria...;
Nel campo di ricerca digitare "ultrasonic";
Nell'elenco, cercare Ultrasonic
by Erick Simões;
Clicca su Installa.
A questo punto sotto File Esempi apparirà la Libreria Ultrasonic, e si potrà
caricare il demo UltrasonicSimple.
Una volta caricato il programma in memoria, sarà necessario aprire il monitor
seriale per vedere la misura della distanza dell'ostacolo dal sensore.
Oppure potete caricarla con il metodo classico utilizzando
il file zip
/*
HC-SR04_OLED.ino
Lo sketch legge il valore della distanza dell'oggetto posto di fronte
al sensore e mostra il valore misurato su un display OLED collegato
tramite I2C.
Sono utilizzati i seguenti pin
Pin +5V -> Alimentazione Sonar e display
Pin GND -> GND Sonar e display
GPIO4 -> D2 -> SDA modulo I2C LCD
GPIO5 -> D1 -> SCL modulo I2C LCD
Pin Digitale D8 -> echoPin
Pin Digitale D3 -> trigPin
Creato il 30/04/2018 da Adriano Gandolfo
Sito web http://www.adrirobot.it
Blog http://it.emcelettronica.com/author/adrirobot
Pagina Facebook https://www.facebook.com/Adrirobot-318949048122955
Istagram https://www.instagram.com/adrirobot/
This example code is in the public domain.
*/
#include <SPI.h>
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#define OLED_RESET 0 // GPIO0
Adafruit_SSD1306 display(OLED_RESET);
//Definizione pin a cui è collegato il sonar
#define echoPin D8 // Echo Pin
#define trigPin D3 // Trigger Pin
long duration, distance; // Duration used to calculate distance
void setup()
{
Serial.begin (9600);
//Impostazione HC-SR04
pinMode(trigPin, OUTPUT);
pinMode(echoPin, INPUT);
// Impostazione modulo display con indirizzo I2C addr 0x3C
display.begin(SSD1306_SWITCHCAPVCC, 0x3C);
// Cancellazione schermo e buffer
display.clearDisplay();
// Messaggio iniziale
display.setTextSize(1);
display.setTextColor(WHITE);
display.setCursor(0, 0);
display.println(" ADRIROBOT");
display.setTextColor(BLACK, WHITE); // Inverte il colore del testo
display.println(" LETTURA ");
display.println(" HC-SR04 ");
display.display();
delay(2000);
}
void loop()
{
/* The following trigPin/echoPin cycle is used to determine the
distance of the nearest object by bouncing soundwaves off of it. */
digitalWrite(trigPin, LOW);
delayMicroseconds(2);
digitalWrite(trigPin, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin, LOW);
duration = pulseIn(echoPin, HIGH);
//Calculate the distance (in cm) based on the speed of sound.
distance = duration / 58.2;
Serial.println(distance);
display.clearDisplay(); // clears the screen and buffer
display.setTextSize(2);
display.setTextColor(WHITE);
display.setCursor(0, 0);
display.print(distance); display.println(" cm");
display.display();
//Delay 50ms before next reading.
delay(500);
}
/*
HC-SR04_NANO_OLED.ino
Lo sketch legge il valore della distanza dell'oggetto posto di fronte
al sensore e mostra il valore misurato su un display OLED collegato
tramite I2C, la scheda di controllo è un Arduino Nano.
Sono utilizzati i seguenti pin
Pin +5V -> Alimentazione Sonar e display
Pin GND -> GND Sonar e display
Pin A4 -> SDA modulo I2C LCD
Pin A5 -> SCL modulo I2C LCD
Pin D3 -> trigPin
Pin D8 -> echoPin
Creato il 01/05/2018 da Adriano Gandolfo
Sito web http://www.adrirobot.it
Blog http://it.emcelettronica.com/author/adrirobot
Pagina Facebook https://www.facebook.com/Adrirobot-318949048122955
Istagram https://www.instagram.com/adrirobot/
This example code is in the public domain.
*/
#include <SPI.h>
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#define OLED_RESET 0 // GPIO0
Adafruit_SSD1306 display(OLED_RESET);
//Definizione pin a cui è collegato il sonar
#define echoPin 8 // Echo Pin
#define trigPin 3 // Trigger Pin
long duration, distance; // Duration used to calculate distance
void setup()
{
Serial.begin (9600);
//Impostazione HC-SR04
pinMode(trigPin, OUTPUT);
pinMode(echoPin, INPUT);
// Impostazione modulo display con indirizzo I2C addr 0x3C
display.begin(SSD1306_SWITCHCAPVCC, 0x3C);
// Cancellazione schermo e buffer
display.clearDisplay();
// Messaggio iniziale
display.setTextSize(1);
display.setTextColor(WHITE);
display.setCursor(0, 0);
display.println(" ADRIROBOT");
display.setTextColor(BLACK, WHITE); // Inverte il colore del testo
display.println(" LETTURA ");
display.println(" HC-SR04 ");
display.display();
delay(2000);
}
void loop()
{
/* The following trigPin/echoPin cycle is used to determine the
distance of the nearest object by bouncing soundwaves off of it. */
digitalWrite(trigPin, LOW);
delayMicroseconds(2);
digitalWrite(trigPin, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin, LOW);
duration = pulseIn(echoPin, HIGH);
//Calculate the distance (in cm) based on the speed of sound.
distance = duration / 58.2;
Serial.println(distance);
display.clearDisplay(); // clears the screen and buffer
display.setTextSize(2);
display.setTextColor(WHITE);
display.setCursor(0, 0);
display.print(distance); display.println(" cm");
display.display();
//Delay 50ms before next reading.
delay(500);
}
/*####################################################################
FILE: Wemos D1 mini meter shield.ino
VERSION: 1.0
Descrizione: Programma per gestione metro sonar con Wemos D1 mini
Creato il 29/7/2018 da Adriano Gandolfo
Sito web http://www.adrirobot.it
Blog http://it.emcelettronica.com/author/adrirobot
Pagina Facebook https://www.facebook.com/Adrirobot-318949048122955
Istagram https://www.instagram.com/adrirobot/
This example code is in the public domain.
#################################################################### */
#define echoPin D8 // Echo Pin
#define trigPin D3 // Trigger Pin
long duration, distance; // Duration used to calculate distance
#include <SPI.h>
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#define OLED_RESET 0 // GPIO0
Adafruit_SSD1306 display(OLED_RESET);
//Definizione pin acui è collegato il sonar
#define echoPin D8 // Echo Pin
#define trigPin D3 // Trigger Pin
void setup()
{
Serial.begin (9600);
pinMode(trigPin, OUTPUT);
pinMode(echoPin, INPUT);
// Impostazione modulo display con indirizzo I2C addr 0x3C
display.begin(SSD1306_SWITCHCAPVCC, 0x3C);
// Cancellazione schermo e buffer
display.clearDisplay();
// Messaggio iniziale
display.setTextSize(1);
display.setTextColor(WHITE);
display.setCursor(0, 0);
display.println(" ADRIROBOT");
display.setTextColor(BLACK, WHITE); // Inverte il colore del testo
display.println(" SONAR ");
display.println(" METER ");
display.display();
delay(2000);
display.clearDisplay();
display.setTextSize(2);
display.setTextColor(WHITE);
display.setCursor(0, 0);
display.print("Value");
display.display();
}
void loop()
{
/* The following trigPin/echoPin cycle is used to determine the
distance of the nearest object by bouncing soundwaves off of it. */
digitalWrite(trigPin, LOW);
delayMicroseconds(2);
digitalWrite(trigPin, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin, LOW);
duration = pulseIn(echoPin, HIGH);
//Calculate the distance (in cm) based on the speed of sound.
distance = duration / 58.2;
Serial.println(distance);
display.fillRect(0, 18, 64, 15, BLACK);
display.setCursor(0, 18);
display.print(distance); display.println(" cm");
display.display();
//Delay 50ms before next reading.
delay(50);
}
Elenco revisioni
29/07/2018
Inserito riferimento a Wemos D1 mini
meter shield
01/05/2018
Inserito programma
lettura distanza su display OLED tramite Arduino Nano
30/04/2018
Aggiornato pagina, inserito programma
lettura distanza su display OLED