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

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

3天内不再提示

如何用鸿蒙开发板轻松做一个报警器(内附教程)

OpenHarmony技术社区 来源:鸿蒙技术社区 作者:唐佐林 2021-10-11 14:36 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

通过前面两篇贴子的介绍,相信大家已经掌握如何使用 Python 操作 GPIO 和 I2C 了。

那么今天我们可以更进一步,通过 Python 中的 GPIO 和 PWM 接口使蜂鸣器发声。

当然,如果只是实现这个功能就太无聊了,所以我们可以扩展一下,做个稍微有意思一些的东西。

嗯。。。想想做点啥呢?!翻箱倒柜一番之后,我找到了下面这块扩展板。

这是小熊派鸿蒙开发套件中的“智慧安防”扩展板,板子上搭配了一个红外传感器和一个蜂鸣器。

基于这个板子,可以开发一个简单的安防案例:当红外传感器有感应(有人靠近)时,触发蜂鸣器发出警告(发声)。

在开始之前需要先介绍一个新概念:脉冲宽度调制(Pulse Width Modulation),即:PWM。

这是一个属于硬件电路层面的概念,对于物联网开发来说不需要特别深入的对它进行研究,只需要掌握基本原理后应用到开发中即可。

简单的说,PWM 就是利用数字信号输出模拟信号的一种技术。众所周知,现代计算机系统是数字驱动的,即:所有计算机部件在高低电平的交替驱动下工作。

如果所有的外设都是数字的,那么事情就很简单了,直接 GPIO 连接就可以通信

然而,有些外设就不是数字的,而是模拟的,需要接收模拟信号(如:正弦波信号),所以需要借助处理器使用 PWM 技术实现模拟信号。

基本原理如下:

8caba956-2a46-11ec-82a8-dac502259ad0.png

根据电工电子学老师的说法,如果需要产生这样的一个正弦波,可以用多个方波代替,其效果是相同的。

8d2b9652-2a46-11ec-82a8-dac502259ad0.png

图 a) 中的正弦波可以用一个个幅值相同但是宽度不同的方波代替,如图 b) ,只要这些方波与 t 轴围起来的面积和原始正弦波与 t 轴围起来的面积相同即可。

有了上面的原理之后,接下来需要讨论的就是:如何调节出等效的方波?

为了解决这个问题,需要了解占空比的概念!占空比指在一个周期内,信号处于高电平的时间占据整个信号周期的百分比。

8dae4ee4-2a46-11ec-82a8-dac502259ad0.jpg

在上图中一个周期是 4ms ,而高电平在一个周期中的持续时间是 1ms,所以占空比为 25% 。

掌握了这些理论性的东西之后,就可以考虑如何实操的问题了:怎么实现 PWM 信号(方波信号)输出?

很幸运,Hi3861中自带了 PWM 模块,所以在代码层面只需要调用相关 API 接口向 PWM 模块设置必要参数,就可以输出需要的连续 PWM 信号(方波信号)。

8e23649a-2a46-11ec-82a8-dac502259ad0.jpg

上面表格中的接口功能可谓一目了然,几乎可以做到“开箱即用”,唯一需要做解释的就是 start(port,duty,freq)这个函数。

port 表示 PWM 信号的输出通道编号,freq 用于控制 PWM 信号的输出频率,duty 用于指定占空比,占空比的值为 duty 和 freq 的比值。

Ok!有了这些铺垫,可以上代码了!

8ea15076-2a46-11ec-82a8-dac502259ad0.png

Snippet 1部分的代码先对 GPIO_7 进行初始化和功能设置,目的是接收 is1 也就是红外传感器的感应信号,当 Hi3861 接收到这个红外感应信号就会触发回调 is1_callback() 。

Snippet 2 部分的代码复用 GPIO_8 使其连接 PWM 模块,目的是对 PWM 进行参数设置。

这里可以更进一步的给大家科普一下 GPIO 和 PWM 的关系:在理论上可以直接用 GPIO 产生需要的方波信号,但现实中并不会这么做!

原因很简单,这么做会耗费大量的处理器资源,并且产生的方波信号频率有限。

所以,一般都会引入独立的 PWM 模块,处理器通过 GPIO 与这个模块连接在一起,从而能够对其进行参数设置。之后,具体产生方波的工作就由 PWM 模块完成了。

接下来,看看回调函数 is1_callback() 的实现。

8f304812-2a46-11ec-82a8-dac502259ad0.png

代码很简单,核心部分就是对变量 pwm_on 进行标记,即:当接收到红外感应信号的时候将 pwm_on 赋值为 True。

然后呢?然后在别处进行处理!

8fada208-2a46-11ec-82a8-dac502259ad0.png

脚本文件的最后,可以看到处理 pwm_on 为 True 的代码,即:当 pwm_on 为 True 时,调用 start() 函数促使 1 号 PWM 通道产生方波信号。

而 1 号 PWM 通道连接的是一个蜂鸣器,产生方波信号的最终结果就是使得蜂鸣器发声。

整体流程如下:

90185d00-2a46-11ec-82a8-dac502259ad0.png

最终效果如下:

90baf36c-2a46-11ec-82a8-dac502259ad0.gif

可以看到,当我靠近开发板时,红外感应器立即发送感应信号,进而触发蜂鸣器发声。

WOW!一个简单的安防系统就这么完成了!

PS:最新版 Python 引擎库能够支持几乎所有鸿蒙的外设接口,以及基础浮点运算。

感兴趣的同学可下载附件中的代码和文件自行编程尝试。

Enjoy It!

代码开源地址:

https://gitee.com/delphi-tang/python-for-hos

编辑:jq

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

    关注

    26

    文章

    6415

    浏览量

    120747
  • GPIO
    +关注

    关注

    16

    文章

    1333

    浏览量

    56445
  • 红外感应器
    +关注

    关注

    0

    文章

    11

    浏览量

    8647

原文标题:用鸿蒙开发板做一个报警器,超简单

文章出处:【微信号:gh_834c4b3d87fe,微信公众号:OpenHarmony技术社区】欢迎添加关注!文章转载请注明出处。

收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    性能跃迁,鸿蒙开发新纪元!凌羽派RK3566鸿蒙开发板,开启全场景开发之旅

    【导语】还在为鸿蒙开发寻找强劲、稳定、高效的硬件平台?凌羽派RK3566鸿蒙开发板震撼登场!集高性能、全接口、强生态于身,专为
    的头像 发表于 12-11 17:58 2651次阅读
    性能跃迁,<b class='flag-5'>鸿蒙</b><b class='flag-5'>开发</b>新纪元!凌羽派RK3566<b class='flag-5'>鸿蒙</b><b class='flag-5'>开发板</b>,开启全场景<b class='flag-5'>开发</b>之旅

    想体验鸿蒙生态,该怎么获取鸿蒙开发板?有哪些途径?

    如何快速上手体验鸿蒙生态? 想体验鸿蒙生态,该怎么获取鸿蒙开发板?有哪些途径?
    发表于 11-29 08:40

    如何申请鸿蒙开发板?想体验鸿蒙生态。

    如何申请鸿蒙开发板?想体验鸿蒙生态。
    发表于 11-29 08:34

    4g报警器能不能改成反电鱼报警器

    4G报警器通过震动脱落磁铁来感应报警能不能改成感应电流报警应用场景-鱼塘水库 江河湖泊新能源监控实时感应报警对于电路完全小白求大佬指点下需
    发表于 10-31 23:35

    避坑指南!RK3568开发板选型,这5点没看清千万别下手!(迅为驱动开发指南资源)

    避坑指南!RK3568开发板选型,这5点没看清千万别下手!(迅为驱动开发指南资源)
    的头像 发表于 10-30 15:49 1076次阅读
    避坑指南!RK3568<b class='flag-5'>开发板</b>选型,这5点没看清千万别下手!(<b class='flag-5'>附</b>迅为驱动<b class='flag-5'>开发</b>指南资源)

    触觉智能Purple Pi OH开发板率先适配OpenHarmony6.0 Release,鸿蒙明星开发板

    2025年9月19日,在官网上线开源鸿蒙OpenHarmony6.0Release仅13天,触觉智能宣布旗下PurplePiOH开发板成功完成OpenHarmony6.0Release系统适配。这
    的头像 发表于 10-29 08:00 1074次阅读
    触觉智能Purple Pi OH<b class='flag-5'>开发板</b>率先适配OpenHarmony6.0 Release,<b class='flag-5'>鸿蒙</b>明星<b class='flag-5'>开发板</b>

    【汇思博SEEK100开发板试用体验】在开发板鸿蒙OS搭建QT开发环境

    开发板简介 WISBO - SEEK100 开发板是福州汇思博信息技术有限公司基于展锐 SL8541E 设计的款智能终端开发板。展锐
    发表于 08-24 18:34

    轻松配置小智AI语音开发板,安信可IOT小程序功能更新

    版使用教程: 安信可AI语音开发板全面升级商用版!(教程) 为了让开发体验更加流畅,安信可IOT小程序本次进行了多项功能升级,起来看看吧   PART.01角色音色试听 选声音,不
    的头像 发表于 08-19 17:46 1543次阅读
    <b class='flag-5'>轻松</b>配置小智AI语音<b class='flag-5'>开发板</b>,安信可IOT小程序功能更新

    触觉智能RK3506开发板通过OpenHarmony 5.1 XTS认证,引领鸿蒙开发新标杆!

    触觉智能作为瑞芯微专业方案商与开源鸿蒙南向硬件厂家,旗下RK3506开发板及其核心(模组)通过OpenHarmony5.1XTS认证!这消息犹在行业内引起了广泛关注,标志着触觉智能
    的头像 发表于 08-14 23:49 1944次阅读
    触觉智能RK3506<b class='flag-5'>开发板</b>通过OpenHarmony 5.1 XTS认证,引领<b class='flag-5'>鸿蒙</b><b class='flag-5'>开发</b>新标杆!

    何用Arduino Nano/UNO R3开发板给另一个Arduino IDE不能下载的Arduino Nano/UNO R3开发板重新烧录引导程序bootlaoder

    本文介绍了如何用能够Arduino IDE下载的Arduino Nano/UNO R3开发板给另一个Arduino IDE不能下载的Arduino Nano/UNO R3开发板重新烧录
    的头像 发表于 08-08 20:16 3942次阅读
    如<b class='flag-5'>何用</b>Arduino Nano/UNO R3<b class='flag-5'>开发板</b>给另<b class='flag-5'>一个</b>Arduino IDE不能下载的Arduino Nano/UNO R3<b class='flag-5'>开发板</b>重新烧录引导程序bootlaoder

    微五科技CF5010RBT60开发板试用体验+气体报警器项目demo

    微五科技CF5010RBT60开发板试用体验+气体报警器项目上期我们总结了关于CF5010RBT60开发板试用体验,本篇我给大家分享使
    发表于 08-05 11:38

    开鸿开发板深度体验:从开源鸿蒙开发到AI场景实践

    开鸿开发板KaihongBoard-3588S-SBCKaihongBoard-3576-SBC体验开源鸿蒙能力学习开源鸿蒙开发●●●搭载KaihongOS
    的头像 发表于 07-03 17:03 1976次阅读
    开鸿<b class='flag-5'>开发板</b>深度体验:从开源<b class='flag-5'>鸿蒙</b><b class='flag-5'>开发</b>到AI场景实践

    声光报警器电源线接线时如何确保安全

    声光报警器工作原理是通过电子电路来实现的。 当报警器被触发时,电路会使蜂鸣器发出声音,
    的头像 发表于 06-30 14:29 2149次阅读

    用芯岭技术XL433接收发射芯片开发的火灾报警器

    门禁、传感数据传输等低功耗场景。 这是客户用我们的射频芯片开发的辰西科技火灾报警器规格如下: 、产品特点 1.兼容现有315M接收模块 2.5V MICRO USB供电 3.烟感和热感同时检测 4.
    发表于 06-04 11:14

    贝启BQ3568HM 开发板被选用为 OpenHarmony 明星开发板

    经开放原子开源基金会OpenHarmony社区官方测评评选,贝启科技BQ3568HM开源鸿蒙开发板被正式选用为OpenHarmony明星开发板。BQ3568HM开源鸿蒙
    的头像 发表于 05-25 00:22 1714次阅读
    贝启BQ3568HM <b class='flag-5'>开发板</b>被选用为 OpenHarmony 明星<b class='flag-5'>开发板</b>