Bincika Lambar

Lambar Arduino da Bidiyo don HC-SR04 Ultrasonic Distance Sensor tare da SSD1306 OLED Display

Lambar Arduino da Bidiyo don HC-SR04 Ultrasonic Distance Sensor tare da SSD1306 OLED Display

A cikin wannan koyawa, za mu nuna yadda ake amfani da na'urar auna nisa ta ultrasonic HC-SR04 tare da nunin OLED SSD1306 don ganin ma'aunin nisa. Wannan aikin yana ba ka damar auna nisa ba tare da buƙatar kwamfuta ba, yana da kyau ga aikace-aikace da yawa, ciki har da robotics. A ƙarshen wannan aikin, za ka sami tsarin aiki wanda ke nuna karatun nisa kai tsaye akan allon OLED.

How HC-SR04 ulrasonic sensor work
SSD1306 OLED display

Yayin da muke ci gaba, zan bayyana haɗin wayoyi da ake buƙata don abubuwan biyu kuma in ba da bayanin lambar Arduino da ke haɗa waɗannan abubuwan. Wannan zai taimaka maka fahimtar yadda na'urar ke auna nisa da kuma yadda ake fitar da wannan bayanan zuwa nunin OLED. Don ƙarin bayani, za ka iya koma ga bidiyon da ke tattare da wannan koyawa (a cikin bidiyo a 00:00).

Bayanin Kayan Aiki

Babban abubuwan wannan aikin sune na'urar auna nisa ta ultrasonic HC-SR04 da nunin OLED SSD1306. HC-SR04 yana aiki ta amfani da raƙuman sauti na ultrasonic; yana fitar da bugun sauti ta hanyar fil ɗin trigger kuma yana sauraron amsawa akan fil ɗin echo. Ta hanyar lissafin lokacin da sauti ya ɗauka don dawowa, zai iya tantance nisa zuwa abu. Wannan na'urar tana da inganci sosai don ma'aunin nisa na ɗan gajeren zango, yawanci har zuwa 400-500 cm.

Nunin OLED SSD1306 nunin I2C ne wanda ke ba ka damar nuna rubutu da zane-zane. Yana sadarwa ta hanyar filaye biyu: SDA (layin bayanai) da SCL (layin agogo). A cikin tsarinmu, waɗannan filaye suna haɗuwa da takamaiman filaye na Arduino, suna ba da sauƙin haɗawa da sarrafawa.

Cikakkun Bayanai na Datasheet

Mai ƙeraDaban-daban
Lambar sashiHC-SR04
Wutar Logic/IO5 V
Wutar samarwa5 V
Fitar wutar (kowane tashar)15 mA
Kololuwar wutar (kowane tashar)20 mA
Jagorar mitar PWMBabu
Matsakaicin shigar logic0.3*Vcc zuwa 0.7*Vcc
Faduwar wutar / RDS(on) / saturationBabu
Iyakokin zafi0-70 °C
KunshinModul mai filaye 4
Bayanan kula / bambance-bambanceModul na yau da kullun

  • Tabbatar da samar da wutar da ta dace (5 V) ga abubuwan biyu.
  • Yi amfani da resistors na pull-up idan ya cancanta don sadarwar I2C.
  • Ka kiyaye layukan trigger da echo gajere don guje wa tsangwama.
  • Duba yanayin na'urar ultrasonic don ingantaccen karatu.
  • Yi amfani da wuri mai tsayayye don nunin don guje wa girgizar injina.

Umarnin Haɗin Waya

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

Don haɗa na'urar auna nisa ta ultrasonic HC-SR04, fara da haɗa fil ɗin VCC (yawanci ja) zuwa fil ɗin 5V akan Arduino. Na gaba, haɗa fil ɗin GND (yawanci baƙi ko rawaya) zuwa ɗaya daga cikin filayen GND na Arduino. Fil ɗin trigger (yawanci shuɗi) ya kamata a haɗa shi zuwa fil ɗin dijital 12 akan Arduino, yayin da fil ɗin echo (yawanci kore) ya kamata a haɗa shi zuwa fil ɗin dijital 11.

Don nunin OLED SSD1306, haɗa fil ɗin VCC zuwa fil ɗin 5V akan Arduino da fil ɗin GND zuwa GND. Fil ɗin SCL ya kamata a haɗa shi zuwa fil A5 kuma fil ɗin SDA zuwa fil A4 akan Arduino. Idan kana amfani da wani nau'in Arduino daban wanda ke da filayen I2C na musamman, haɗa nunin kai tsaye zuwa waɗannan filayen maimakon.

Misalan Lamba da Bayani

A cikin aikin setup, muna fara nunin da sadarwar serial. Ɗan ƙaramin sashi mai zuwa yana nuna yadda ake saita nunin:

void setup() {
   Serial.begin(9600);// saita serial monitor tare da 9600 baud
   display.begin(SSD1306_SWITCHCAPVCC, 0x3C);  // fara tare da adireshin I2C 0x3D
}

Anan, an fara nunin tare da adireshin I2C, yana ba shi damar sadarwa da Arduino. An kuma saita serial monitor don buga ƙimar nisa.

A cikin babban loop, muna share nunin, auna nisa, kuma mu buga shi. Ɗan ƙaramin sashi na lamba mai zuwa yana nuna yadda muke sarrafa ma'aunin nisa:

void loop() {
   display.clearDisplay();
   String distance  = String(sonar.ping_cm());// samun nisa kuma canza shi zuwa string don nunawa
   robojaxText(distance +"cm", 3, 20, 3, false);
   display.display();
   delay(50); // Jira 50ms tsakanin pings
}

Wannan loop yana ci gaba da auna nisa kuma yana sabunta nunin tare da karatun na yanzu. Ana amfani da aikin `robojaxText` don nuna rubutu akan allon OLED.

Nuni / Abin da za Ka Yi Tsammani

Lokacin da aka gama saitin kuma aka ɗora lambar, ya kamata ka ga nisa da aka nuna akan allon OLED a cikin santimita. Yayin da kake matsar da abu kusa ko nesa da na'urar, ƙimar da aka nuna ya kamata ta canza daidai. Tabbatar cewa na'urar tana cikin yanayin da ya dace kuma ba ta da toshewa (a cikin bidiyo a 02:30).

Lokutan Bidiyo

  • 00:00 - Gabatarwa ga aikin
  • 01:15 - Umarnin haɗin waya
  • 02:30 - Bayanin lamba
  • 04:00 - Nuni na na'urar

Hotuna

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

}

Albarkatun da kuma shafukan da za a duba

Fayiloli📁

Takardar bayanai (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