一、引言
在军用、民用领域中的许多设备,如无人机、汽车、机器人等通常会出现雷达的身影,但是一般使用的都是毫米波雷达、亚米波雷达、激光雷达等,这些雷达一般结构复杂或驱动难度大,对于新手来说一般使用难度大、不方便开发导致新手失去信心,这时候就需要一款简单易使用和开发的雷达了,就比如超声波雷达。超声波雷达是指通过超声波(即一种听不见频率高的声波)来实现探测物体的雷达。
二、所需材料
1、超声波模块
它是整个设计的重要组成部分,它的作用是测量周围物体的距离。我这里使用的是5针的HY-SRF05超声波模块,它和4针的HY-SRF04驱动方法相同,当然也可以用别的。这个传感器接收到主控板的信号就会,发射超声波(即一种听不见频率高的声波),然后等待超声波返回来接收到后返回给主控板信号,这样主控板就能计算中间的时间差来计算距离了。
2、舵机(伺服电机)
它是用来旋转超声波传感器的,这样就可以测不同方位物体的距离了。我这里用的是SG90舵机的旋转范围180°版本,它可以通过脉冲信号进行控制,具体控制方法我就不多说了,一般都有现成的库了。
3、显示屏
它是用来显示超声波雷达所获取的信息的,这样就可以方便地看到周围的物体了。我这里使用的是ST7735S它是一款彩色的显示屏,分辨率是128*160,看起来十分舒适,具体驱动方法我就不多说了,一般都有现成的库了而且比较复杂。
4、主控板
它是整个设计的核心部分,它可以采集传感器传输过来的信息,可以进行计算,也可以控制执行器进行输出信息。我这里使用的是Arduino uno主控板,它的USB转串口芯片是CH340,它的主控芯片是ATMEGA328P,有20个数字IO口(其中6个可做PWM口,图中带“~”的就是),模拟输入口有6个(带“A”的就是),Flash存储器容量32KB,EEPROM容量1KB,时钟频率16MHZ,它的性能可以满足一般的需求了。
5、面包板
它的作用是方便快速地连接电路,搭配杜邦线进行使用,当然不要也可以。
三、程序
//超声波雷达程序
//导入库
#include <Adafruit_GFX.h>
#include <Adafruit_ST7735.h>
#include <SPI.h>
#include <U8g2_for_Adafruit_GFX.h>
#include <Servo.h>
#include "SCoop.h"
//定义变量
volatile int jl;
//初始化外部模块
Adafruit_ST7735 tft = Adafruit_ST7735(9, 10, 8);
U8G2_FOR_ADAFRUIT_GFX u8g2_for_adafruit_gfx;
//定义数组
int jdfw[9][2] = {
{0, 20},
{20, 40},
{40, 60},
{60, 80},
{80, 100},
{100, 120},
{120, 140},
{140, 160},
{160, 180}
};
Servo servo_2;
float checkdistance_3_4() {
digitalWrite(3, LOW);
delayMicroseconds(2);
digitalWrite(3, HIGH);
delayMicroseconds(10);
digitalWrite(3, LOW);
float distance = pulseIn(4, HIGH) / 58.00;
delay(10);
return distance;
}
//显示红色半圆
void xianshi(int c) {
u8g2_for_adafruit_gfx.setFont(u8g2_font_timR18_tf);
pianjing(80, 128, 80, c, 31);
jl = checkdistance_3_4();
pianjing(80, 128, constrain(jl, 0, 80), c, 14310);
tft.fillRect(0,0,160,48,(0));
u8g2_for_adafruit_gfx.setCursor(10,25);
u8g2_for_adafruit_gfx.setForegroundColor((65126));
u8g2_for_adafruit_gfx.print(String(servo_2.read()) + String("°"));
u8g2_for_adafruit_gfx.setCursor(80,25);
u8g2_for_adafruit_gfx.setForegroundColor((65126));
u8g2_for_adafruit_gfx.print(String(String(jl)) + String("cm"));
}
//多线程
defineTask(scoopTask1)
void scoopTask1::setup()
{
}
void scoopTask1::loop()
{
Serial.println(jl);
delay(500);
}
// 显示圆
void hojing(int x, int y, int r) {
//显示背景圆
//画圆每个扇形
for (int i = 0; i <= 8; i = i + (1)) {
pianjing(x, y, r, i, 31);
}
}
// 显示圆
void pianjing(int x, int y, int r, int c, int l) {
//显示障碍物
//画扇形
double x1 = x + r * cos(jdfw[c][0] / 180.0 * 3.14159);
double y1 = y - r * sin(jdfw[c][0] / 180.0 * 3.14159);
double x2 = x + r * cos(jdfw[c][1] / 180.0 * 3.14159);
double y2 = y - r * sin(jdfw[c][1] / 180.0 * 3.14159);
tft.fillTriangle(x,y,x1,y1,x2,y2,l);
}
void setup(){
jl = 0;
tft.initR(INITR_GREENTAB);
tft.fillScreen(0x0000);
u8g2_for_adafruit_gfx.begin(tft);
tft.setRotation(1);
tft.fillScreen((0));
// 显示圆
hojing(80, 128, 80);
pinMode(3, OUTPUT);
pinMode(4, INPUT);
servo_2.attach(2);
Serial.begin(9600);
mySCoop.start();
}
void loop(){
yield();
for (int a = 0; a <= 8; a = a + (1)) {
servo_2.write((a * 20 + 10));
delay(120);
//显示
xianshi(a);
}
for (int a = 8; a >= 0; a = a + (-1)) {
servo_2.write((a * 20 + 10));
delay(120);
//显示
xianshi(a);
}
}
程序有点复杂大家可以放AI里解析一下。
四、制作说明
1、电路连接
Arduino uno主控板 | HY-SRF05超声波模块 |
3 | Trig |
4 | Echo |
ST7735S显示屏 | |
13 | SCL |
11 | SDA |
9 | CS |
10 | DC |
8 | RST |
SG90舵机 | |
2 | 信号线(黄色的) |
注意舵机的三根线一般红色为正极(即VCC),棕色为负极(即GND),黄色为信号线
2、使用软件
建议使用Mixly(米思奇)软件,简单易懂而且程序已经准备好了在下面,不过也可以使用Arduino IED软件,或其他支持Arduino uno的软件。使用Mixly软件一般不需要导入任何库,不过其他的建议导入Mixly2.0中的库。
五、结束语
怎么样这款超声波雷达是不是非常简单易懂,造价也十分便宜,感兴趣的快快行动起来吧!最后感谢大家的观看,如果有错误请指出。
全部评论