Code de recherche

Code Arduino et vidéo pour le capteur de distance ultrasonique HC-SR04 avec écran OLED SSD1306

Code Arduino et vidéo pour le capteur de distance ultrasonique HC-SR04 avec écran OLED SSD1306

Dans ce tutoriel, nous démontrerons comment utiliser le capteur de distance ultrasonique HC-SR04 conjointement avec l'écran OLED SSD1306 pour visualiser les mesures de distance. Ce projet vous permet de mesurer des distances sans avoir besoin d'un ordinateur, ce qui le rend idéal pour diverses applications, notamment la robotique. À la fin de ce projet, vous disposerez d'un montage fonctionnel qui affiche les relevés de distance directement sur l'écran OLED.

How HC-SR04 ulrasonic sensor work
SSD1306 OLED display

Au fur et à mesure, j'expliquerai les branchements nécessaires pour les deux composants et proposerai une présentation pas à pas du code Arduino qui les intègre. Cela vous aidera à comprendre comment le capteur mesure la distance et comment afficher ces données sur l'écran OLED. Pour plus de précisions, vous pouvez consulter la vidéo associée à ce tutoriel (dans la vidéo à 00:00).

Le matériel expliqué

Les principaux composants de ce projet sont le capteur de distance ultrasonique HC-SR04 et l'écran OLED SSD1306. Le HC-SR04 fonctionne à l'aide d'ondes ultrasonores : il émet une impulsion sonore via la broche trigger et écoute l'écho sur la broche echo. En calculant le temps nécessaire au retour du son, il peut déterminer la distance à un objet. Ce capteur est très efficace pour les mesures à courte portée, généralement jusqu'à 400-500 cm.

L'écran OLED SSD1306 est un écran à interface I2C qui vous permet d'afficher du texte et des graphiques. Il communique via deux broches : SDA (ligne de données) et SCL (ligne d'horloge). Dans notre configuration, ces broches sont connectées à des broches spécifiques de l'Arduino, ce qui permet une intégration et un contrôle faciles.

Détails de la fiche technique

FabricantDivers
Numéro de pièceHC-SR04
Tension logique/E/S5 V
Tension d'alimentation5 V
Courant de sortie (par canal)15 mA
Courant de crête (par canal)20 mA
Directives sur la fréquence PWMSans objet
Seuils logiques d'entrée0.3*Vcc à 0.7*Vcc
Chute de tension / RDS(en conduction)/ saturationNon applicable
Limites thermiques0 à 70 °C
Paquetmodule à 4 broches
Notes / variantesModule standard

  • Assurez-vous d'une alimentation appropriée (5 V) pour les deux composants.
  • Utilisez des résistances pull-up si nécessaire pour la communication I2C.
  • Gardez les lignes trigger et echo courtes pour éviter les interférences.
  • Vérifiez l'orientation du capteur ultrasonique pour des mesures précises.
  • Utilisez une surface stable pour l'écran afin d'éviter les vibrations mécaniques.

Instructions de câblage

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

Pour connecter le capteur ultrasonique HC-SR04, commencez par relier la broche VCC (souvent rouge) à la broche 5V de l'Arduino. Ensuite, connectez la broche GND (généralement noire ou jaune) à l'une des broches GND de l'Arduino. La broche trigger (souvent bleue) doit être câblée sur la broche numérique 12 de l'Arduino, tandis que la broche echo (généralement verte) doit être reliée à la broche numérique 11.

Pour l'écran OLED SSD1306, connectez la broche VCC à la broche 5V de l'Arduino et la broche GND à la masse (GND). La broche SCL doit être reliée à la broche A5 et la broche SDA à la broche A4 de l'Arduino. Si vous utilisez un modèle d'Arduino différent qui possède des broches I2C dédiées, connectez plutôt l'écran directement à ces broches.

Exemples de code et tutoriel pas à pas

Dans la fonction setup(), nous initialisons l'écran et la communication série. L'extrait suivant montre comment l'écran est configuré :

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

Ici, l'afficheur est initialisé avec l'adresse I2C, ce qui lui permet de communiquer avec l'Arduino. Le moniteur série est également configuré pour afficher les valeurs de distance.

Dans la boucle principale, nous effaçons l'affichage, mesurons la distance et l'affichons. L'extrait de code suivant montre comment nous gérons la mesure de la distance :

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
}

Cette boucle mesure en continu la distance et met à jour l'affichage avec la mesure actuelle. La fonction robojaxText est utilisée pour afficher le texte sur l'écran OLED.

Démonstration / À quoi s'attendre

Lorsque la configuration est terminée et que le code est téléversé, vous devriez voir la distance affichée sur l'écran OLED en centimètres. Lorsque vous rapprochez ou éloignez un objet du capteur, la valeur affichée doit changer en conséquence. Assurez-vous que le capteur est correctement orienté et n'est pas obstrué (dans la vidéo à 02:30).

Horodatages vidéo

  • 00:00- Introduction au projet
  • 01:15- Instructions de câblage
  • 02:30- Explication du code
  • 04:00- Démonstration du capteur

Images

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.
Langue: 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();
  }

}

Ressources et références

Fichiers📁

Aucun fichier disponible.