0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

基于SRF05和ATtiny85实现的超声波测距仪设计

科技观察员 来源:Hesam Moshiri, Anson Bao 作者:Hesam Moshiri, Anson 2022-04-11 17:02 次阅读

超声波测距仪是各种现实生活和机器人应用中的有用工具,例如避障和距离测量系统。超声波测距仪通过发射一个 40KHz 的超声波脉冲来测量距离,该脉冲在空气中传播直到它击中一个物体,然后它测量反射信号的延迟并向其他单元发送适当的命令。

我使用了一个 SRF05 超声波传感器和一个 ATtiny85 微控制器。距离数据显示在 128*64 OLED 屏幕上,以厘米和英寸为单位。此外,水平条形图提供了距离的视觉估计。MCU 代码是使用 Arduino IDE 开发的。

为了设计原理图和 PCB,我使用了 Altium Designer 22 和 SamacSys 组件库(Altium 插件)。为了获得高质量的 PCB 板,我将 Gerber 发送到 PCBWay,并使用 componentsearchengine.com 购买了原始组件。为了检查电路的电流消耗,我使用了 Sigilent SDM3045X 万用表

规格

输入电压:6-24VDC

电流消耗:24mA

检测范围:2-400cm(见正文)

距离数据:厘米、英寸、条形图

显示:128*64-黄蓝OLED

下载 Gerbers

电路分析

图1为超声波测距仪装置示意图。很明显,该电路由四个主要部分组成:传感器、电源、MCU和显示器。我分别解释每个部分。

pYYBAGJT7pGAdOeHAAXXRSptXB8246.png

图1-超声波测距仪(Altium)示意图

SRF05超声波传感器

我在电路中使用了 SRF05 超声波模块。市面上的 SRF05 模块有很多种,我用的是图 2 所示的那个。

模块的质量可能会有所不同,因此无法保证最大检测范围。其中一些有蓝色阻焊层,一些是绿色的,不同的制造商也提供这样的模块。

根据 SRF05 模块数据表:“SRF05 是 SRF04 的进化步骤,旨在提高灵活性、扩大范围并进一步降低成本。因此,SRF05 与 SRF04 完全兼容。射程从 3 米增加到 4 米。一种新的操作模式(将模式引脚接地)允许 SRF05 使用单个引脚来触发和回波,从而节省控制器上宝贵的引脚。当模式引脚未连接时,SRF05 使用单独的触发和回波引脚运行,如 SRF04。SRF05 在回波脉冲之前包含一个小延迟,以便为较慢的控制器(例如 Basic Stamp 和 Picaxe)提供时间来执行它们的脉冲命令。”

poYBAGJT7o2AT4rHAAZCEelAxXo045.png

图 2-SRF05 超声波模块(蓝色阻焊层)

电源供应

电源的主要元件是TS2937CW50[1]稳压器(REG1)。它是一个 +5V SOT-223 LDO 稳压器。根据 TS2937 数据表:“TS2937 固定电压单片微功率稳压器专为广泛的应用而设计。该器件是电池供电应用的绝佳选择。此外,静态电流在压降时略有增加,从而延长了电池寿命。该系列固定电压稳压器具有极低的接地电流(典型值 200uA)和极低的压降输出电压(典型值在轻负载时为 60mV,在 500mA 时为 600mV)。这包括 2% 的严格初始容差、0.05% 典型值的极好线路调节以及非常低的输出温度系数。”

FB1 和 C5 降低输入电压噪声。D1 是蓝色 0805 LED,用于指示电源连接正确,R2 限制 D1 的电流。C4 和 C6 用于降低 +5V 电源轨的噪声。P1 是一个 XH-2P 母连接器,用于将电源线连接到电路板。

微控制器

IC1 是一个 ATtiny85 MCU [2],它是电路的核心。我选择了这款芯片的贴片封装。根据 Tiny85 数据表:“ATtiny25/45/85 提供以下特性:2/4/8K 字节系统内可编程闪存、128/256/512 字节 EEPROM、128/256/256 字节 SRAM、6 个通用专用 I/O 线、32 个通用工作寄存器、一个 8 位定时器/计数器(带比较模式)、一个 8 位高速定时器/计数器、通用串行接口、内部和外部中断、一个 4 通道、10-位 ADC、带内部振荡器的可编程看门狗定时器和三种软件可选的省电模式。空闲模式停止 CPU,同时允许 SRAM、定时器/计数器、ADC、模拟比较器和中断系统继续工作。掉电模式保存寄存器内容,禁用所有芯片功能,直到下一次中断或硬件复位。ADC 降噪模式会停止 CPU 和除 ADC 之外的所有 I/O 模块,以最大限度地减少 ADC 转换期间的开关噪声。该器件采用 Atmel 的高密度非易失性存储器技术制造。片上 ISP 闪存允许程序存储器通过 SPI 串行接口、传统的非易失性存储器编程器或运行在 AVR 内核上的片上引导代码在系统内重新编程。”

C1、C2 和 C3 是去耦电容,用于降低噪声。R1 是一个上拉电阻,用于避免不必要地触发 MCU 的 RESET 引脚。

OLED显示器

该显示器由一个 0.96” 128*64 OLED 模块和一个 SSD1306 控制器芯片组成。模块的数据/命令接口为 I2C。图 3 显示了该模块的图片。I2C 由需要使用两个电阻上拉的 SDA 和 SCL 线组成。该模块已经实现了上拉,因此无需在线路上添加更多电阻。

poYBAGJT7oeARf4CAAX4aNJ-NT0616.png

图 3-设备OLED显示屏(0.96”, 128*64, I2C)

PCB布局

图 4 显示了电路的 PCB 布局。它是一个两层 PCB 板,所有组件都是 SMD。显示器应位于 PCB 上方几毫米处,以保持组件与显示器背面之间的距离,以避免短路等。PCB 设计紧凑且易于使用。

pYYBAGJT7oOAEsTZAAXn04v_TNo582.png

图 4-超声波测距仪(Altium)的PCB布局

当我决定为这个项目设计原理图和 PCB 时,我意识到我的组件库存储中没有 REG1 [3] 和 IC2 [4] 的组件库。因此,像往常一样,我选择了 IPC 级 SamacSys 组件库,并使用免费的 SamacSys 工具和服务安装了缺少的库(原理图符号、PCB 封装、3D 模型)。导入库有两种方法:您可以访问 componentsearchengine.com 并手动下载和导入库,或者您可以使用 SamacSys CAD 插件并自动将库导入/安装到设计环境中。图 5 显示了所有支持的电子设计 CAD 软件 [5]。很明显,所有著名的球员都得到支持。我使用 Altium Designer,所以我使用 SamacSys Altium 插件安装了缺少的库(图 6)[6]。

poYBAGJT7n-ABQ9NAATffsDWZYs347.png

图 6-SamacSys Altium 插件中的选定组件库

pYYBAGJT7nqAVo1BAAKF7GCTsUk381.png

图 7-PCB板的3D视图和两个组装图

#include
#include


unsigned long uS = 0;


#define TRIGGER_PIN 3
#define ECHO_PIN 4
#define MAX_DISTANCE 41


NewPing sonar(TRIGGER_PIN, ECHO_PIN, MAX_DISTANCE);
unsigned int CM = 0, IN = 0;
unsigned char cnt = 0;


void setup() {
oled.begin(128, 64, sizeof(tiny4koled_init_128x64br), tiny4koled_init_128x64br);
oled.on();
oled.setCursor(0, 1);
oled.setFont(FONT8X16);
oled.clear();
oled.print("ULS Range Finder");
}


void loop() {
uS = sonar.ping();
CM = sonar.convert_cm(uS) + CM;
IN = sonar.convert_in(uS) + IN;
cnt ++;
if (cnt == 10)
{
oled.setCursor(0, 2);
oled.print(CM / 10);
if (CM / 10 < 10)
{
oled.setCursor(9, 2);
oled.print(" Centimeter ");
} else
{
oled.setCursor(17, 2);
oled.print(" Centimeter");
}


oled.setCursor(0, 4);
oled.print(IN / 10);
if (IN / 10 < 10)
{
oled.setCursor(9, 4);
oled.print(" Inches ");
} else
{
oled.setCursor(17, 4);
oled.print(" Inches");
}


switch (CM / 10)
{


case 0:
oled.setCursor(0, 6);
oled.print(" [out of range] ");
break;
case 1 ... 4:
oled.setCursor(0, 6);
oled.print("== ");
break;
case 5 ... 9:
oled.setCursor(0, 6);
oled.print("==== ");
break;
case 10 ... 14:
oled.setCursor(0, 6);
oled.print("===== ");
break;
case 15 ... 19:
oled.setCursor(0, 6);
oled.print("======= ");
break;
case 20 ... 24:
oled.setCursor(0, 6);
oled.print("========= ");
break;
case 25 ... 29:
oled.setCursor(0, 6);
oled.print("=========== ");
break;
case 30 ... 34:
oled.setCursor(0, 6);
oled.print("============= ");
break;
case 35 ... 39:
oled.setCursor(0, 6);
oled.print("=============== ");
break;
case 40 ... 41:
oled.setCursor(0, 6);
oled.print("================");
break;
}


CM = 0;
IN = 0;
cnt = 0;
}
delay(10);
}

MCU的代码编写如下。您需要安装 ATtinyCore Board Manager [7] 并从菜单中选择 ATtiny25/45/85(无引导加载程序)(图 8)。然后选择芯片为 ATtiny85 并选择 8MHz (Internal) 作为时钟源(图 9)。

然后您需要安装 NewPing [8] 和 Tiny4KOLED [9] 库。之后,只需转到“Sketch”菜单并选择“Export compiled binary”(图 10)。就是这样。您可以在与您的代码相同的文件夹中找到已编译的 HEX 文件。只需使用 AVR ISP 编程器(例如 USBasp 或其他)使用 PCB 背面的可用引脚(GND、RESET、MISO、MOSI、SCK)对芯片进行编程。按照程序对保险丝位进行编程,如图 11 所示。从板上断开编程器和电线,就是这样:-)。

代码

pYYBAGJT7nWAVDUqAAOwQ_DuiJc571.png

图 8-从菜单中选择合适的芯片系列(ATTiny25/45/85(无引导加载程序))

poYBAGJT7nCAUpynAASNlc2n5BY742.png

图 9-ATtiny85 时钟源选择(8MHz,内部)

pYYBAGJT7myAXpWZAALgRFVaDg8279.png

图 10-找到和导出 HEX 文件(草图菜单)

pYYBAGJT7meAHkFNAAK0uMxC9OE150.png

图 11-使用 AVR ISP 编程器对电路板进行编程

组装和测试

图 12 显示了组装好的 PCB 板。我在显示器和 PCB 之间放了一块双面胶带,以避免任何可能的短路。从图片中可以清楚地看到,OLED屏幕上的文字非常鲜艳生动。

poYBAGJT7mOASOJNAAgLQ3oWoZY888.png

图 12-超声波测距仪的组装PCB板

如果您计划使用电池为电路板供电,则设备的电流消耗很重要。所以我使用了 Siglent SDM3045X 台式万用表 [10] 并测量了 24mA 的电流。图 13 显示了万用表屏幕。

pYYBAGJT7l-AI873AAQMR1aL4gk942.png

图 13-超声波测距仪电路的电流消耗

材料清单

图 14 显示了该项目的材料清单。

poYBAGJT7leAbSk_AAHd_fLOiK0727.png

图 14-材料清单

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 超声波
    +关注

    关注

    63

    文章

    2808

    浏览量

    136725
收藏 人收藏

    评论

    相关推荐

    超声波测距仪研究

    根据声波反射原理,应用单片机(AT89S52)技术和UCM40T超声波传感器设计了一种超声波测距仪。硬件部分主要由控制模块、超声波发射模块、
    发表于 03-04 15:38

    基于STM8的红外与超声波测距仪设计

    相对比较高,不适合做长距离测量。本文设计的超声波测距仪主要用于长度超过10 m的远距离测量,而且要求可靠性高、稳定性好。故本文采用红外与超声波相结合的设计方案以实现这一功能。1
    发表于 11-09 20:59

    超声波测距仪的设计

    超声波测距仪的设计。
    发表于 11-15 21:58

    动手制作超声波测距仪

    动手制作超声波测距仪
    发表于 08-18 16:02

    数字超声波测距仪的详细剖析

    第十章 数字超声波测距仪(SR-04超声波测距模块+四位数码管)(Arduino边做边学:从点亮Led到物联网)
    发表于 06-04 10:54

    如何去实现一种HY-SRF05超声波测距模块呢

    超声波测距模块有何作用?超声波测距模块HY-SRF05有哪些引脚?如何去实现一种HY-
    发表于 11-08 06:21

    HC-SRF05超声波测距模块的原理是什么

    测距原理HC-SRF05超声波测距模块可提供2cm-400cm的非接触式距离感测功能,测距精度可达高到3mm;模块包括
    发表于 12-01 06:09

    怎样设计制作一个超声波测距仪

    【资源下载】下载地址:点击下载1311百度网盘摘 要本次课设的要求是设计制作一个超声波测距仪测距范围要求为2米以上,精度为1厘米以内。本作品使用AT89S51做控制器,超声波接收与发
    发表于 12-08 07:39

    基于SRF05ATtiny85超声波测距仪

    描述使用 SRF05ATtiny85超声波测距仪超声波测距仪是各种现实生活和机器人应用
    发表于 06-23 08:49

    电子设计应用超声波测距仪的设计

    电子设计应用超声波测距仪的设计电子设计应用超声波测距仪的设计电子设计应用超声波测距仪的设计电子设
    发表于 12-16 17:46 11次下载

    HY-SRF05超声波测距程序

    HY-SRF05超声波测距程序。
    发表于 04-28 11:45 0次下载

    dfrobotSRF05 超声波传感器简介

    SRF05一款高性能的双探头超声波,其探测距离为1厘米-4米。
    的头像 发表于 12-10 14:27 1995次阅读
    dfrobotSRF<b class='flag-5'>05</b> <b class='flag-5'>超声波</b>传感器简介

    使用SRF05ATtiny85超声波测距仪

    电子发烧友网站提供《使用SRF05ATtiny85超声波测距仪.zip》资料免费下载
    发表于 07-04 11:23 1次下载
    使用<b class='flag-5'>SRF05</b>和<b class='flag-5'>ATtiny85</b>的<b class='flag-5'>超声波</b><b class='flag-5'>测距仪</b>

    使用SRF05ATtiny85超声波测距仪

    超声波测距仪是各种现实生活和机器人应用中的有用工具,例如避障和距离测量系统。超声波测距仪通过发射 40 kHz 的超声波脉冲来测量距离,该脉
    的头像 发表于 07-25 09:39 1900次阅读
    使用<b class='flag-5'>SRF05</b>和<b class='flag-5'>ATtiny85</b>的<b class='flag-5'>超声波</b><b class='flag-5'>测距仪</b>

    探究SRF05ATtiny85超声波测距仪

    超声波测距仪是各种现实生活和机器人应用中的有用工具,例如避障和距离测量系统。超声波测距仪通过发射一个 40KHz 的超声波脉冲来测量距离,该
    的头像 发表于 03-16 10:03 789次阅读
    探究<b class='flag-5'>SRF05</b>和<b class='flag-5'>ATtiny85</b>的<b class='flag-5'>超声波</b><b class='flag-5'>测距仪</b>