Arduino Kodu ve HC-SR04 Ultrasonik Mesafe Sensörü ile SSD1306 OLED Ekran için Video
Bu eğitimde, HC-SR04 ultrasonik mesafe sensörünü SSD1306 OLED ekranla birlikte kullanarak mesafe ölçümlerini görselleştirmeyi göstereceğiz. Bu proje, bir bilgisayara ihtiyaç duymadan mesafe ölçmenizi sağlar ve robotik dahil çeşitli uygulamalar için idealdir. Bu projenin sonunda, mesafe okumalarını doğrudan OLED ekranda gösteren işlevsel bir kuruluma sahip olacaksınız.


Devam ederken, her iki bileşen için gereken bağlantıları açıklayacağım ve bu bileşenleri entegre eden Arduino kodunun adım adım açıklamasını yapacağım. Bu, sensörün mesafeyi nasıl ölçtüğünü ve bu veriyi OLED ekrana nasıl aktardığınızı anlamanıza yardımcı olacaktır. Daha fazla açıklama için bu eğitimle ilişkili videoya başvurabilirsiniz (videoda 00:00).
Donanım Açıklaması
Bu projenin ana bileşenleri HC-SR04 ultrasonik mesafe sensörü ve SSD1306 OLED ekrandır. HC-SR04, ultrasonik ses dalgaları kullanarak çalışır; tetik pini üzerinden bir ses darbesi gönderir ve yankı pininde yankıyı dinler. Sesin geri dönmesi için geçen süreyi hesaplayarak bir nesneye olan mesafeyi belirleyebilir. Bu sensör, tipik olarak 400-500 cm'ye kadar olan kısa mesafe ölçümleri için çok etkilidir.
SSD1306 OLED ekran, metin ve grafik görüntülemenizi sağlayan bir I2C arayüzlü ekrandır. İki pin üzerinden iletişim kurar: SDA (veri hattı) ve SCL (saat hattı). Kurulumumuzda bu pinler belirli Arduino pinlerine bağlanarak kolay entegrasyon ve kontrol sağlar.
Veri Sayfası Detayları
| Üretici | Çeşitli |
|---|---|
| Parça numarası | HC-SR04 |
| Mantık/IO voltajı | 5 V |
| Besleme voltajı | 5 V |
| Çıkış akımı (kanal başına) | 15 mA |
| Tepe akımı (kanal başına) | 20 mA |
| PWM frekans kılavuzu | Yok |
| Giriş mantık eşikleri | 0.3*Vcc ila 0.7*Vcc |
| Gerilim düşümü / RDS(on) / doyum | Yok |
| Termal sınırlar | 0-70 °C |
| Paket | 4 pinli modül |
| Notlar / varyantlar | Standart modül |
- Her iki bileşen için doğru güç kaynağını (5 V) sağlayın.
- I2C iletişimi için gerekirse pull-up dirençleri kullanın.
- Paraziti önlemek için tetik ve yankı hatlarını kısa tutun.
- Doğru okumalar için ultrasonik sensörün yönünü kontrol edin.
- Mekanik titreşimleri önlemek için ekran için sabit bir yüzey kullanın.
Bağlantı Talimatları

HC-SR04 ultrasonik sensörü bağlamak için, VCC pinini (genellikle kırmızı) Arduino'daki 5V pinine bağlayarak başlayın. Ardından, GND pinini (genellikle siyah veya sarı) Arduino'nun GND pinlerinden birine bağlayın. Tetik pini (genellikle mavi) Arduino'daki dijital pin 12'ye, yankı pini (genellikle yeşil) ise dijital pin 11'e bağlanmalıdır.
SSD1306 OLED ekran için, VCC pinini Arduino'daki 5V pinine ve GND pinini GND'ye bağlayın. SCL pini Arduino'daki A5 pinine, SDA pini ise A4 pinine bağlanmalıdır. Özel I2C pinlerine sahip farklı bir Arduino modeli kullanıyorsanız, ekranı doğrudan bu pinlere bağlayın.
Kod Örnekleri ve Açıklaması
Kurulum fonksiyonunda, ekranı ve seri iletişimi başlatıyoruz. Aşağıdaki alıntı, ekranın nasıl kurulduğunu gösterir:
void setup() {
Serial.begin(9600);// seri monitörü 9600 baud ile ayarla
display.begin(SSD1306_SWITCHCAPVCC, 0x3C); // I2C adresi 0x3D ile başlat
}
Burada, ekran I2C adresiyle başlatılır ve Arduino ile iletişim kurması sağlanır. Seri monitör de mesafe değerlerini yazdırmak için ayarlanır.
Ana döngüde, ekranı temizliyor, mesafeyi ölçüyor ve yazdırıyoruz. Aşağıdaki kod parçası, mesafe ölçümünü nasıl ele aldığımızı gösterir:
void loop() {
display.clearDisplay();
String distance = String(sonar.ping_cm());// mesafeyi al ve ekran için string'e dönüştür
robojaxText(distance +"cm", 3, 20, 3, false);
display.display();
delay(50); // Ping'ler arasında 50ms bekle
}
Bu döngü sürekli olarak mesafeyi ölçer ve ekranı mevcut okumayla günceller. `robojaxText` fonksiyonu, metni OLED ekranda görüntülemek için kullanılır.
Gösterim / Beklentiler
Kurulum tamamlandığında ve kod yüklendiğinde, mesafenin OLED ekranda santimetre cinsinden görüntülendiğini görmelisiniz. Bir nesneyi sensöre yaklaştırdıkça veya uzaklaştırdıkça, görüntülenen değer buna göre değişmelidir. Sensörün doğru yönlendirildiğinden ve engellenmediğinden emin olun (videoda 02:30).
Video Zaman Damgaları
- 00:00 - Projeye giriş
- 01:15 - Bağlantı talimatları
- 02:30 - Kod açıklaması
- 04:00 - Sensörün gösterimi
/*
* 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();
}
}
Kaynaklar ve referanslar
-
DışHC-SR04 Ultrasonic Library from the Arduino official websiteplayground.arduino.cc
Dosyalar📁
Veri Sayfası (pdf)
-
SSD1306 display datasheetSSD1306 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.pdf1.79 MB