< All Topics
Print

【感測】HCSR04超音波 | DUAL22-2s

簡介

超音波是一項經常使用的距離偵測方式。DUAL22-2s開發板有三組超音波的接口位置,分別對應前、左、右,三個方向。我們提供快速應用的函數庫。

準備

材料與工具

本文範例使用【DUAL22-2s開發板】為示範。另外可準備支持3.3V供電之HCSR04超音波模組,3組。DUAL22-2s開發板採用4P母排接口,請留意接口電氣定義與順序,以及避免發生插拔時錯位等錯誤操作。

GPIO與電路

DUAL22-2s開發板可以處理3組HCSR04超音波模組,每組TRIG、ECHO之對應GPIO腳位號碼,如下表與圖所示。

函數與補充

我們依據DUAL22-2s的電路規劃特性,提供專用的函數庫以方便【快速應用與學習】的用途。當然,你也可以選擇不使用此函數庫,一樣可以完整地控制DUAL22-2s硬體功能。我們的函數庫完全開放、使用簡明的C/C++語法撰寫,你也可以據此修改更加適合你使用需求的函數庫。

函數使用方式,請參照本文、韌體範例。

函數庫控制元件內建數類別方法
dual2s.hHCSR04超音波3HCSR04+ bool HCSR04::ObjSeeking(thresh);
+ float HCSR04::ObjDistance();
+ unsigned long HCSR04::probing();
+ typedef enum{ USC_FRONT, USC_LEFT,
USC_RIGHT} USC_DIR;

韌體範例

Arduino C語言

【dual2s函數庫是小幫手,功用在快速上手】

dual2s函數庫開放,有需要者,你可以修改成所需的功能。

  • 行數 4-26:DUAL22-2s開發板GPIO腳位定義。依據需求開啟相對腳位即可。
  • 行數30-38:PWM通道使用定義。
#include <dual2s.h>

//DC電機GPIO
#define PIN_MOTO_1A  14
#define PIN_MOTO_1B  32
#define PIN_MOTO_2A  12
#define PIN_MOTO_2B  33
#define PIN_MOTO_3A  25
#define PIN_MOTO_3B  26
#define PIN_MOTO_4A  23
#define PIN_MOTO_4B  22
//蜂鳴器GPIO
#define PIN_BUZZER   15
//超音波GPIO
#define PIN_USC_FRONT_ECHO 13
#define PIN_USC_FRONT_TRIG 27
#define PIN_USC_RIGHT_ECHO 5
#define PIN_USC_RIGHT_TRIG 4
#define PIN_USC_LEFT_ECHO 19
#define PIN_USC_LEFT_TRIG 18
//短距紅外線GPIO
#define PIN_IR_LEFT    34
#define PIN_IR_MIDDLE  35
#define PIN_IR_RIGHT   39
//供電偵測GPIO
#define PIN_BATTERY    36

//esp32 has 16 PWM channel
//Reserve 0-6 Channel for Servo, LED ... 
#define PWM_CH_BUZZER 7 
#define PWM_CH_M1A    8
#define PWM_CH_M1B    9
#define PWM_CH_M2A    10
#define PWM_CH_M2B    11
#define PWM_CH_M3A    12
#define PWM_CH_M3B    13
#define PWM_CH_M4A    14
#define PWM_CH_M4B    15

//取得HCSR04物件
HCSR04 us_F(PIN_USC_FRONT_ECHO, PIN_USC_FRONT_TRIG); //前側
HCSR04 us_R(PIN_USC_RIGHT_ECHO, PIN_USC_RIGHT_TRIG); //右側
HCSR04 us_L(PIN_USC_LEFT_ECHO, PIN_USC_LEFT_TRIG);   //左側


void setup() { 
  Serial.begin(115200);
}

void loop() {
  //回傳前、右、左,三方向感測的距離結果,單位公分。
  Serial.print(us_F.ObjDistance());   
  Serial.print(", ");  
  Serial.print(us_R.ObjDistance()); 
  Serial.print(", ");  
  Serial.println(us_L.ObjDistance());  
  delay(10);

  //回傳前、右、左,三方向感測的距離結果,單位公分。
  int _distance = 20; //設定物體是否進入偵測範圍,單位公分。
  Serial.print(us_F.ObjSeeking(_distance));
  Serial.print(", ");
  Serial.print(us_R.ObjSeeking(_distance));
  Serial.print(", ");
  Serial.println(us_L.ObjSeeking(_distance));  
  Serial.println("-------");
  delay(1000);
}

yesioBlockly積木語言

Tags:
Table of Contents