Soek Kode

Arduino-kode en video vir HC-SR04 Ultrasoniese Afstandssensor met SSD1306 OLED-skerm

Arduino-kode en video vir HC-SR04 Ultrasoniese Afstandssensor met SSD1306 OLED-skerm

In hierdie tutoriaal sal ons demonstreer hoe om die HC-SR04 ultrasoniese afstandsensor saam met die SSD1306 OLED-skerm te gebruik om afstandsmetings te visualiseer. Hierdie projek laat jou toe om afstande te meet sonder om 'n rekenaar nodig te hê, wat dit ideaal maak vir verskeie toepassings, insluitend robotika. Teen die einde van hierdie projek sal jy 'n funksionele opstelling hê wat afstandslesings direk op die OLED-skerm vertoon.

How HC-SR04 ulrasonic sensor work
SSD1306 OLED display

Soos ons voortgaan, sal ek die bedradingsverbindings wat vir beide komponente benodig word, verduidelik en 'n deurloop van die Arduino-kode verskaf wat hierdie komponente integreer. Dit sal jou help om te verstaan hoe die sensor afstand meet en hoe om daardie data na die OLED-skerm uit te voer. Vir verdere verduideliking kan jy na die video wat met hierdie tutoriaal geassosieer word, verwys (in video by 00:00).

Hardeware Verduidelik

Die hoofkomponente van hierdie projek is die HC-SR04 ultrasoniese afstandsensor en die SSD1306 OLED-skerm. Die HC-SR04 werk met behulp van ultrasoniese klankgolwe; dit stuur 'n klankpuls via die trigger-pen uit en luister na die eggo op die echo-pen. Deur die tyd wat dit neem vir die klank om terug te keer, te bereken, kan dit die afstand na 'n voorwerp bepaal. Hierdie sensor is baie effektief vir kortafstandmetings, tipies tot 400-500 cm.

Die SSD1306 OLED-skerm is 'n I2C-koppelvlakskerm wat jou toelaat om teks en grafika te vertoon. Dit kommunikeer via twee penne: SDA (datakanaal) en SCL (klokkanaal). In ons opstelling verbind hierdie penne aan spesifieke Arduino-penne, wat maklike integrasie en beheer moontlik maak.

Datablad Besonderhede

VervaardigerVerskeie
DeelnommerHC-SR04
Logika/IO-spanning5 V
Toevoerspanning5 V
Uitgangstroom (per kanaal)15 mA
Piekstroom (per kanaal)20 mA
PWM-frekwensie riglynN/A
Inset logika drempels0.3*Vcc tot 0.7*Vcc
Spanningval / RDS(on) / versadigingN/A
Termiese limiete0-70 °C
Pakket4-pen module
Notas / varianteStandaard module

  • Verseker behoorlike kragtoevoer (5 V) vir beide komponente.
  • Gebruik optrekweerstande indien nodig vir I2C-kommunikasie.
  • Hou trigger- en echo-lyne kort om steuring te vermy.
  • Kontroleer die oriëntasie van die ultrasoniese sensor vir akkurate lesings.
  • Gebruik 'n stabiele oppervlak vir die skerm om meganiese vibrasies te vermy.

Bedradingsinstruksies

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

Om die HC-SR04 ultrasoniese sensor te verbind, begin deur die VCC-pen (gewoonlik rooi) aan die 5V-pen op die Arduino te bedraad. Verbind volgende die GND-pen (tipies swart of geel) aan een van die Arduino se GND-penne. Die trigger-pen (dikwels blou) moet aan digitale pen 12 op die Arduino bedraad word, terwyl die echo-pen (gewoonlik groen) aan digitale pen 11 verbind moet word.

Vir die SSD1306 OLED-skerm, verbind die VCC-pen aan die 5V-pen op die Arduino en die GND-pen aan GND. Die SCL-pen moet aan pen A5 verbind word en die SDA-pen aan pen A4 op die Arduino. As jy 'n ander Arduino-model gebruik wat toegewyde I2C-penne het, verbind die skerm direk aan daardie penne in plaas daarvan.

Kode Voorbeelde & Deurloop

In die setup-funksie initialiseer ons die skerm en die seriekommunikasie. Die volgende uittreksel demonstreer hoe die skerm opgestel word:

void setup() {
   Serial.begin(9600);// stel serie monitor met 9600 baud
   display.begin(SSD1306_SWITCHCAPVCC, 0x3C);  // initialiseer met die I2C addr 0x3D
}

Hier word die skerm met die I2C-adres geïnisialiseer, wat dit toelaat om met die Arduino te kommunikeer. Die serie monitor word ook opgestel om afstandwaardes te druk.

In die hoof lus, maak ons die skerm skoon, meet die afstand, en druk dit. Die volgende kode-gedeelte wys hoe ons die afstandsmeting hanteer:

void loop() {
   display.clearDisplay();
   String distance  = String(sonar.ping_cm());// kry afstand en skakel dit om na string vir vertoning
   robojaxText(distance +"cm", 3, 20, 3, false);
   display.display();
   delay(50); // Wag 50ms tussen pingse
}

Hierdie lus meet voortdurend die afstand en werk die skerm by met die huidige lesing. Die `robojaxText`-funksie word gebruik om die teks op die OLED-skerm te vertoon.

Demonstrasie / Wat om te VerwAg

Wanneer die opstelling voltooi is en die kode opgelaai is, behoort jy die afstand op die OLED-skerm in sentimeters vertoon te sien. Soos jy 'n voorwerp nader of verder van die sensor beweeg, behoort die vertoonde waarde dienooreenkomstig te verander. Verseker dat die sensor korrek georiënteer is en nie belemmer word nie (in video by 02:30).

Video Tydstempels

  • 00:00 - Inleiding tot die projek
  • 01:15 - Bedradingsinstruksies
  • 02:30 - Kode verduideliking
  • 04:00 - Demonstrasie van die sensor

Beelde

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

}

Hulpbronne en verwysings

Lêers📁

Datasheet (pdf)

  • SSD1306 display datasheet
    SSD1306 is a single-chip CMOS OLED/PLED driver with controller for organic / polymer light emitting diode dot-matrix graphic display system. It consists of 128 segments and 64commons. This IC is designed for Common Cathode type OLED panel. The SSD1306 embeds with contrast control, display RAM and oscillator, which reduces the number of external components and power consumption. It has 256-step brightness control. Data/Commands are sent from general MCU through the hardware selectable 6800/8000 series compatible Parallel Interface, I2C interface or Serial Peripheral Interface. It is suitable for many compact portable applications, such as mobile phone sub-display, MP3 player and calculator, etc.
    SSD1306_display_datasheet.pdf 1.79 MB