Cerca codice

Codice Arduino e video per sensore di distanza a ultrasuoni HC-SR04 con display OLED SSD1306

Codice Arduino e video per sensore di distanza a ultrasuoni HC-SR04 con display OLED SSD1306

In questo tutorial mostreremo come utilizzare il sensore di distanza a ultrasuoni HC-SR04 insieme al display OLED SSD1306 per visualizzare le misurazioni di distanza. Questo progetto ti permette di misurare distanze senza bisogno di un computer, rendendolo ideale per varie applicazioni, inclusa la robotica. Al termine di questo progetto avrai un sistema funzionante che mostra le letture di distanza direttamente sullo schermo OLED.

How HC-SR04 ulrasonic sensor work
SSD1306 OLED display

Man mano che procediamo, spiegherò il cablaggio necessario per entrambi i componenti e fornirò una guida passo passo del codice Arduino che integra questi componenti. Questo ti aiuterà a capire come il sensore misura la distanza e come visualizzare quei dati sul display OLED. Per ulteriori chiarimenti, puoi fare riferimento al video associato a questo tutorial (nel video a 00:00).

Hardware spiegato

Le componenti principali di questo progetto sono il sensore di distanza a ultrasuoni HC-SR04 e il display OLED SSD1306. L'HC-SR04 funziona utilizzando onde ultrasoniche; emette un impulso sonoro tramite il pin di trigger e rileva l'eco sul pin di echo. Calcolando il tempo impiegato dal suono per tornare, può determinare la distanza da un oggetto. Questo sensore è molto efficace per misurazioni a corto raggio, tipicamente fino a 400-500 cm.

Il display OLED SSD1306 è un display con interfaccia I2C che permette di visualizzare testo e grafica. Comunica tramite due pin: SDA (linea dati) e SCL (linea di clock). Nella nostra configurazione, questi pin sono collegati a pin specifici dell'Arduino, consentendo una facile integrazione e controllo.

Dettagli della scheda tecnica

ProduttoreVari
Numero di parteHC-SR04
Tensione logica/I/O5 V
Tensione di alimentazione5 V
Corrente di uscita (per canale)15 mA
Corrente di picco (per canale)20 mA
Linee guida sulla frequenza PWMNon applicabile
Soglie logiche di ingressoda 0.3*Vcc a 0.7*Vcc
Caduta di tensione / RDS(on) / saturazioneNon applicabile
Limiti termici0-70 °C
Pacchettomodulo a 4 pin
Note / variantiModulo standard

  • Assicurare un'alimentazione adeguata (5 V) per entrambi i componenti.
  • Usare resistenze di pull-up se necessario per la comunicazione I2C.
  • Mantieni corte le linee trigger ed echo per evitare interferenze.
  • Controllare l'orientamento del sensore a ultrasuoni per misurazioni accurate.
  • Utilizzare una superficie stabile per il display per evitare vibrazioni meccaniche.

Istruzioni di cablaggio

Arduino wiring for HC-SR04 ultrasonic SSD1306 128x64 OLED
Arduino wiring for HC-SR04 ultrasonic SSD1306 128x64 OLED

Per collegare il sensore ultrasonico HC-SR04, inizia collegando il pin VCC (di solito rosso) al pin 5V dell'Arduino. Successivamente, collega il pin GND (tipicamente nero o giallo) a uno dei pin GND dell'Arduino. Il pin trigger (spesso blu) dovrebbe essere collegato al pin digitale 12 dell'Arduino, mentre il pin echo (di solito verde) dovrebbe essere collegato al pin digitale 11.

Per il display OLED SSD1306, collega il pin VCC al pin 5V dell'Arduino e il pin GND a GND. Il pin SCL deve essere collegato al pin A5 e il pin SDA al pin A4 sull'Arduino. Se stai usando un modello di Arduino diverso che dispone di pin I2C dedicati, collega invece il display direttamente a quei pin.

Esempi di codice e guida passo passo

Nella funzione setup inizializziamo il display e la comunicazione seriale. L'estratto seguente mostra come viene configurato il display:

void setup() {
   Serial.begin(9600);// set serial monitor with 9600 baud
   display.begin(SSD1306_SWITCHCAPVCC, 0x3C);  // initialize with the I2C addr 0x3D
}

Qui il display viene inizializzato con l'indirizzo I2C, permettendogli di comunicare con l'Arduino. Il monitor seriale è inoltre configurato per stampare i valori di distanza.

Nel ciclo principale cancelliamo il display, misuriamo la distanza e la stampiamo. Il seguente frammento di codice mostra come gestiamo la misurazione della distanza:

void loop() {
   display.clearDisplay();
   String distance  = String(sonar.ping_cm());// get distance and convert it to string for display
   robojaxText(distance +"cm", 3, 20, 3, false);
   display.display();
   delay(50); // Wait 50ms between pings
}

Questo ciclo misura continuamente la distanza e aggiorna il display con la lettura corrente. La funzione robojaxText viene utilizzata per visualizzare il testo sullo schermo OLED.

Dimostrazione / Cosa aspettarsi

Quando la configurazione è completa e il codice è stato caricato, dovresti vedere la distanza visualizzata sullo schermo OLED in centimetri. Man mano che avvicini o allontani un oggetto dal sensore, il valore visualizzato dovrebbe cambiare di conseguenza. Assicurati che il sensore sia orientato correttamente e non sia ostruito (nel video a 02:30).

Timestamp del video

  • 00:00- Introduzione al progetto
  • 01:15- Istruzioni di cablaggio
  • 02:30- Spiegazione del codice
  • 04:00- Dimostrazione del sensore

Immagini

HC-SR04 ulrasonic sensor
HC-SR04 ulrasonic sensor
How HC-SR04 ulrasonic sensor work
How HC-SR04 ulrasonic sensor work
Arduino wiring for HC-SR04 ultrasonic SSD1306 128x64 OLED
Arduino wiring for HC-SR04 ultrasonic SSD1306 128x64 OLED
SSD1306 OLED display
SSD1306 OLED display
SSD1306 OLED display-dimensions
SSD1306 OLED display-dimensions
SSD1306_128x64_OLDE-4
SSD1306_128x64_OLDE-4
SSD1306 OLED display-back
SSD1306 OLED display-back
44-This is the Arduino code for an HC-SR04 ultrasonic distance sensor with an SSD1306 display.
Lingua: C++
/*
 * This is the Arduino code for the HC-SR04 Ultrasonic Distance Sensor with SSD1306 Display
 * to measure the distance using Arduino for a robotic car and other applications
 * Watch the video https://youtu.be/Pgx5fNF4Q6M
 * 
 * Written by Ahmad Shamshiri for Robojax Video
 * Date: December 21, 2017, in Ajax, Ontario, Canada
 * Permission granted to share this code given that this
 * note is kept with the code.
 * Disclaimer: this code is "AS IS" and for educational purposes only.
 * 
 */

/* Original Code 
   from https://github.com/adafruit/Adafruit_SSD1306
// https://playground.arduino.cc/Code/NewPing
 * Modified for Robojax video on December 21, 2017
// ---------------------------------------------------------------------------
// Example NewPing library sketch that does a ping about 20 times per second.
// ---------------------------------------------------------------------------
*/
//// start of SSD1306 display 
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>

#define OLED_RESET 4
Adafruit_SSD1306 display(OLED_RESET);

#define NUMFLAKES 10
#define XPOS 0
#define YPOS 1
#define DELTAY 2


#define LOGO16_GLCD_HEIGHT 64 
#define LOGO16_GLCD_WIDTH  128 
static const unsigned char PROGMEM logo16_glcd_bmp[] =
{ B00000000, B11000000,
  B00000001, B11000000,
  B00000001, B11000000,
  B00000011, B11100000,
  B11110011, B11100000,
  B11111110, B11111000,
  B01111110, B11111111,
  B00110011, B10011111,
  B00011111, B11111100,
  B00001101, B01110000,
  B00011011, B10100000,
  B00111111, B11100000,
  B00111111, B11110000,
  B01111100, B11110000,
  B01110000, B01110000,
  B00000000, B00110000 };

#if (SSD1306_LCDHEIGHT != 64)
#error("Height incorrect, please fix Adafruit_SSD1306.h!");
#endif
//// end of SSD1306 display 

// ---------------------------------------------------------------------------
// Example NewPing library sketch that does a ping about 20 times per second.
// ---------------------------------------------------------------------------

#include <NewPing.h>

#define TRIGGER_PIN  12  // Arduino pin tied to trigger pin on the ultrasonic sensor.
#define ECHO_PIN     11  // Arduino pin tied to echo pin on the ultrasonic sensor.
#define MAX_DISTANCE 200 // Maximum distance we want to ping for (in centimeters). Maximum sensor distance is rated at 400-500cm.

NewPing sonar(TRIGGER_PIN, ECHO_PIN, MAX_DISTANCE); // NewPing setup of pins and maximum distance.



void setup() {
   Serial.begin(9600);// set serial monitor with 9600 baud
  display.begin(SSD1306_SWITCHCAPVCC, 0x3C);  // initialize with the I2C addr 0x3D (for the 128x64)
  
}// setup end


void loop() {
   display.clearDisplay();
  robojaxText("Distance", 3, 0, 2, false);
  String distance  = String(sonar.ping_cm());// get distance and convert it to string for display
  robojaxText(distance +"cm", 3, 20, 3, false);
    display.display();

  delay(50);                     // Wait 50ms between pings (about 20 pings/sec). 29ms should be the shortest delay between pings.
  Serial.print("Ping: ");
  Serial.print(sonar.ping_cm()); // Send ping, get distance in cm and print result (0 = outside set distance range)
  Serial.println("cm");

}// loop end


/*
 * robojaxText(String text, int x, int y,int size, boolean d)
 * text is the text string to be printed
 * x is the integer x position of text
 * y is the integer y position of text
 * size is the text size, 1, 2, 3 etc
 * d is either true or false.  Use true to display.
 */
void robojaxText(String text, int x, int y,int size, boolean d) {

  display.setTextSize(size);
  display.setTextColor(WHITE);
  display.setCursor(x,y);
  display.println(text);
  if(d){
    display.display();
  }

}

Risorse e riferimenti

File📁

Nessun file disponibile.