شِفر (کود) آردوینو و ویدیو: حساس(حس کننده) فاصله اولتراسونیک HC-SR04 با نمایشگر TP1637
در این آموزش، بررسی خواهیم کرد که چگونه از حساس(حس کننده) فاصله اولتراسونیک HC-SR04 به همراه نمایشگر TP1637 برای نمایش بصری اندازهگیریهای فاصله استفاده کنیم. این پروژه برای کاربردهایی مانند خودروهای رباتیک و سایر کارهای حساس(حس کننده) فاصله عالی است. در پایان این راهنما، یک راهاندازی کارآمد خواهید داشت که فاصله را اندازهگیری کرده و آن را روی صفحه نمایش نشان میدهد و نظارت آسان بر خوانشهای حساس(حس کننده) را امکانپذیر میسازد.

ما از دو جزء اصلی استفاده خواهیم کرد: حساس(حس کننده) اولتراسونیک HC-SR04 و ماجیول نمایشگر TP1637. حساس(حس کننده) HC-SR04 امواج اولتراسونیک منتشر میکند و زمان بازگشت آنها را اندازهگیری میکند و بر اساس آن زمان، فاصله را محاسبه میکند. نمایشگر TP1637 از ارتباط I2C برای نمایش فاصله اندازهگیریشده در قالبی کاربرپسند استفاده میکند. برای وضوح بیشتر، میتوانید به ویدیو در زمان 1:30 برای توضیح بصری اجزا مراجعه کنید.
توضیح سختافزار
حساس(حس کننده) اولتراسونیک HC-SR04 دارای چهار پایه است: VCC، Trig، Echo و GND. پایه VCC به منبع تغذیه متصل میشود، در حالی که پایه GND به زمین متصل میشود. پایه Trig برای فعالسازی پالس اولتراسونیک استفاده میشود و پایه Echo پالس بازتابشده را دریافت میکند. این حساس(حس کننده) میتواند فاصلههایی از 2 سانتیمتر تا 400 سانتیمتر را اندازهگیری کند.
ماجیول نمایشگر TP1637 نیز از چهار پایه تشکیل شده است که برای ارتباط I2C استفاده میشوند. این پایهها شامل VCC، GND، Clock (CLK) و Data (DIO) هستند. در این پروژه، پایه CLK به پایه دیجیتال 2 آردوینو و پایه DIO به پایه دیجیتال 3 متصل میشود. این نمایشگر تجسم خوانشهای فاصله از حساس(حس کننده) اولتراسونیک را آسان میکند.
جزئیات دیتاشیت
| سازنده | TM1637 |
|---|---|
| شماره قطعه | TM1637 |
| ولتاژ منطق/ورودی/خروجی | 3.3 ولت تا 5.5 ولت |
| ولتاژ تغذیه | 5 ولت |
| جریان خروجی (به ازای هر کانال) | ~25 میلیآمپر |
| جریان پیک (به ازای هر کانال) | ~50 میلیآمپر |
| راهنمای فرکانس PWM | ناموجود |
| آستانههای منطق ورودی | حداکثر 0.3VCC |
| افت ولتاژ / RDS(on) / اشباع | ناموجود |
| محدودیتهای حرارتی | 85 درجه سانتیگراد |
| بسته | DIP-16 |
| یادداشتها / انواع | معمولاً در نمایشگرهای 7 قسمتی استفاده میشود |
- از اتصالات صحیح برای جلوگیری از آسیب اطمینان حاصل کنید.
- برای عملکرد ایمن، حداکثر ولتاژ تغذیه 5 ولت را حفظ کنید.
- در صورت نیاز، از مقاومتهای pull-up مناسب برای ارتباط I2C استفاده کنید.
- محدوده اندازهگیری فاصله را در محدوده مشخصشده (2 سانتیمتر - 400 سانتیمتر) نگه دارید.
- از اتصال کوتاه پایههای برق و زمین خودداری کنید.
- تنظیمات روشنایی نمایشگر را برای اطمینان از دید آزمایش کنید.
- ورودیهای شناور که ممکن است منجر به خوانشهای نادرست شوند را بررسی کنید.
CLK = کلاک، DIO = خروجی داده
دستورالعملهای سیمکشی

برای سیمکشی حساس(حس کننده) اولتراسونیک HC-SR04، پایه VCC (سیم قرمز) را به پایه 5 ولت آردوینو و پایه GND (سیم زرد) را به زمین متصل کنید. پایه Trigger (سیم آبی) باید به پایه دیجیتال 12 و پایه Echo (سیم سبز) باید به پایه دیجیتال 11 متصل شود. مطمئن شوید که این اتصالات محکم هستند تا عملکرد صحیح تضمین شود.
برای نمایشگر TP1637، پایه VCC (سیم قرمز) را به پایه 5 ولت آردوینو و پایه GND (سیم زرد) را به زمین متصل کنید. پایه Clock (سیم آبی) باید به پایه دیجیتال 2 و پایه Data (سیم سفید) باید به پایه دیجیتال 3 متصل شود. این راهاندازی به آردوینو اجازه میدهد تا با نمایشگر ارتباط برقرار کرده و دادههای فاصله را برای تجسم ارسال کند.
مثالهای شِفر (کود) و راهنمای گامبهگام
بخش شِفر (کود) زیر حساس(حس کننده) اولتراسونیک و نمایشگر را مقداردهی اولیه میکند:
#define TRIGGER_PIN 12
#define ECHO_PIN 11
#define MAX_DISTANCE 200
NewPing sonar(TRIGGER_PIN, ECHO_PIN, MAX_DISTANCE);
TM1637Display display(CLK, DIO);
در اینجا، پایههای trigger و echo حساس(حس کننده) اولتراسونیک را تعریف کرده و حداکثر فاصله را روی 200 سانتیمتر تنظیم میکنیم. کتابخانه NewPing برای مدیریت حساس(حس کننده) استفاده میشود، در حالی که شیء TM1637Display نمایشگر را مدیریت میکند.
در حلقه اصلی، به طور مداوم فاصله را خوانده و آن را نمایش میدهیم:
int distance = sonar.ping_cm(); // دریافت فاصله
display.showNumberDec(distance, false, 3, 1);
این بخش از شِفر (کود) اندازهگیری فاصله را از حساس(حس کننده) دریافت کرده و آن را روی نمایشگر TP1637 نشان میدهد. تابع showNumberDec فاصله را برای نمایش به عنوان یک عدد اعشاری قالببندی میکند.
برای شِفر (کود) کامل، لطفاً به بخش زیر مقاله مراجعه کنید.
نمایش / انتظار چه چیزی را داشته باشیم
پس از راهاندازی همه چیز و بارگذاری شِفر (کود)، باید خوانشهای فاصله را روی نمایشگر TP1637 مشاهده کنید. خوانشها تقریباً هر 50 میلیثانیه بهروزرسانی میشوند و بازخورد تقریباً بلادرنگ از فاصله اندازهگیریشده توسط حساس(حس کننده) اولتراسونیک ارائه میدهند. اگر مقادیر غیرمنتظرهای مشاهده کردید، مطمئن شوید که حساس(حس کننده) به درستی جهتگیری شده و هیچ مانعی در مسیر آن وجود ندارد (در ویدیو در زمان 6:15).
زمانبندی ویدیو
- 00:00 - مقدمه
- 01:30 - مرور اجزا
- 02:45 - دستورالعملهای سیمکشی
- 04:00 - توضیح شِفر (کود)
- 06:15 - نمایش
/*
* This is the Arduino code for the HC-SR04 Ultrasonic Distance Sensor with TP1637 Display
* to measure the distance using Arduino for a robotic car and other applications
* Watch the video https://youtu.be/SlgLj_T5GaY
*
* 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/avishorp/TM1637
// 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.
// ---------------------------------------------------------------------------
*/
#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.
////////////////////////////
#include <Arduino.h>
#include <TM1637Display.h>
// Module connection pins (Digital Pins)
#define CLK 2
#define DIO 3
// The amount of time (in milliseconds) between tests
#define TEST_DELAY 500
TM1637Display display(CLK, DIO);
/////////////////////////
void setup() {
Serial.begin(115200); // Open serial monitor at 115200 baud to see ping results.
}
void loop() {
display.setBrightness(0x0f);
uint8_t data[] = { 0x0, 0x0, 0x0, 0x0 };
display.setSegments(data);
int distance = sonar.ping_cm();// get the distance and store it in "distance" variable
// 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");
display.showNumberDec(distance, false, 3,1);
delay(50);
}
مواردی که ممکن است به آنها نیاز داشته باشید
-
ایبی
منابع و مراجع
-
خارجیکتابخانه اولتراسونیک HC-SR04 از وبسایت رسمی آردوینوplayground.arduino.cc
فایلها📁
سایر فایلها
-
کتابخانه آردوینو حساس(حس کننده) اولتراسونیک HC-SR04
robojax-HC-SR04-ultrasonic-Library.zip0.02 MB