Sensore ad ultrasuoni
PING

ultimo aggiornamento 21 settembre 2018


 

Indice

Descrizione

Il sensore utilizzato è prodotto dalla SEEED e ha come codice SEN136B5, il suo principio di funzionamento è quello tipico di questa tipologia di sensori radar.
La misura inizia inviando un breve impulso ultrasonico, questo è riflesso dall'oggetto.
Il sensore riceve il segnale di ritorno e lo converte in un segnale elettrico.
La misura della distanza  dall'oggetto è proporzionale alla larghezza di impulso di eco e può essere calcolato con la formula

Distanza in cm = Larghezza dell'impulso (μS) / 58
Distanza in pollici = Larghezza dell'impulso (μS) / 148

Se nessun ostacolo viene rilevato, il pin di uscita emetterà un segnale di livello alto di 38ms.

homotix

PCBA

Per la prova, ho utilizzato una scheda Arduino UNO, collegata ad un modulo LCD, utilizzando un apposito programma

Caratteristiche

Tensione di alimentazione

5V

Consumo di corrente

15 mA

Frequenza ultrasuoni

40 kHz

Distanza massima di lettura

4 m

Distanza minima di lettura

3 cm

Risoluzione

1 cm

Durata dell'impulso

10 ms

Dimensioni

43x20x15 millimetri

 

Vista frontale del sensore

Vista posteriore del sensore

Collegamento ad Arduino

Per il collegamento sono necessari come minimo questi componenti:

  Scheda Arduino UNO
  Display LCD 16x2 LCM1602A-NSW-BBW
  Sensore sonar SEN136B5
POT1 Trimmer 10KΏ
R1 Resistenza 10 Ώ 1/4W
JP1 Connettore maschio 16 pin
SV1 Connettore  femmina 3 pin
  Batteria 9V

Il trimmer POT1, regola il contrasto, l'alimentazione della retroilluminazione potrà essere eliminata se il display non la prevede.
Nell'inserimento del sensore sonar, prestare attenzione al suo orientamento.

Pin della scheda Arduino utilizzati

Pin +5V Alimentazione
 Pin GND Alimentazione
 Pin Digital 4 Bus D4 dati LCD
 Pin Digital 5 Bus D5 dati LCD
 Pin Digital 6 Bus D6 dati LCD
 Pin Digital 7 Bus D7 dati LCD
 Pin Digital 8 Terminale RS display LCD
 Pin Digital 9 Terminale EN display LCD
 Pin Digital 11 Attivazione sensore SONAR

 

Display LCD 16 x 2 con retroilluminazione Blu tipo LCM1602A-NSW-BBW
Piedinatura Datasheet display LCM1602A-NSW-BBW Foto

Foto del prototipo utilizzato per la prova

Per la prova è stato utilizzato un Arduino UNO su cui era montato un Proto Shield V.4 su cui è montato il connettore per i sensore, alla scheda è collegato il display LCD Keypad

LCD Keypad per Arduino Proto shield

Programma di prova sensore PING

Il programma legge il telemetro ad ultrasuoni PING))) e restituisce la distanza dall'oggetto.
Per fare ciò, invia un impulso al sensore per iniziare una lettura, quindi attende l'impulso di ritorno. La lunghezza dell'impulso di ritorno è proporzionale alla distanza.
La lettura viene fornita su un display LCD, per il suo utilizzo si utilizza la libreria LiquidCrystal.
Nella prima parte del programma creiamo un'istanza dell'oggetto LiquidCrystal che si chiama lcd e specifichiamo a quali linee digitali di Arduino sono collegati i pin di controllo e i pin dati del display.
Il PING))) viene attivato da un impulso di 2 microsecondi. Viene quindi inviato un breve impulso LOW in anticipo per garantire un impulso pulito HIGH: Lo stesso pin viene utilizzato per leggere il segnale dal sensore.
Un impulso HIGH la cui durata è il tempo (in microsecondi) dall'invio del ping alla ricezione dell'eco in ritorno dall'oggetto
La velocità del suono è circa 340 m/s o 29 microsecondi per centimetro. Il segnale ping viaggia in andata e ritorno, per cui per ricavare la distanza dell'oggetto prendiamo la metà della distanza percorsa.


ping_lcd.ino

Listato sketch di prova

// includiamo nel programma la libreria
#include  <LiquidCrystal.h>

LiquidCrystal lcd(8, 9, 4, 5, 6, 7);
const int pingPin = 11; //pin a cui è collegato il sensore

void setup()
{
  //imposto il numero di colonne ed il numero di righe di lcd
  //usando il metodo lcd
  lcd.begin(16, 2);
  // Scrive il messaggio sul display.
  lcd.setCursor(0, 0); 
  lcd.print("Misuratore SONAR");
  lcd.setCursor(0, 1); 
  lcd.print("Distanza[cm]:");
}
void loop()
{
  // Variabili per stabilire la durata del ping,
  // il risultato della distanza in centimetri::
  long duration, cm;
  pinMode(pingPin, OUTPUT);
  digitalWrite(pingPin, LOW);
  delayMicroseconds(2);
  digitalWrite(pingPin, HIGH);
  delayMicroseconds(5);
  digitalWrite(pingPin, LOW);
  pinMode(pingPin, INPUT);
  duration = pulseIn(pingPin, HIGH);
  // converte il tempo in distanza
  cm = microsecondsToCentimeters(duration);
  // Scrive sul display LCD il valore della distanza
  lcd.setCursor(13, 1);
  lcd.print("    ");
  lcd.setCursor(13, 1);
  lcd.print(cm);
  delay(100);
}

long microsecondsToCentimeters(long microseconds)
{
    return microseconds / 29 / 2;
}

Elenco revisioni
21/09/2018 Aggiornato pagina
07/01/2013 Inserito schema di collegamento, e aggiornato pagina
25/04/2012 Emissione preliminare
Private Policy Cookie Policy