0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

如何用鴻蒙開發(fā)板輕松做一個(gè)報(bào)警器(內(nèi)附教程)

OpenHarmony技術(shù)社區(qū) ? 來源:鴻蒙技術(shù)社區(qū) ? 作者:唐佐林 ? 2021-10-11 14:36 ? 次閱讀

通過前面兩篇貼子的介紹,相信大家已經(jīng)掌握如何使用 Python 操作 GPIO 和 I2C 了。

那么今天我們可以更進(jìn)一步,通過 Python 中的 GPIO 和 PWM 接口使蜂鳴器發(fā)聲。

當(dāng)然,如果只是實(shí)現(xiàn)這個(gè)功能就太無聊了,所以我們可以擴(kuò)展一下,做個(gè)稍微有意思一些的東西。

嗯。。。想想做點(diǎn)啥呢?!翻箱倒柜一番之后,我找到了下面這塊擴(kuò)展板。

這是小熊派鴻蒙開發(fā)套件中的“智慧安防”擴(kuò)展板,板子上搭配了一個(gè)紅外傳感器和一個(gè)蜂鳴器。

基于這個(gè)板子,可以開發(fā)一個(gè)簡(jiǎn)單的安防案例:當(dāng)紅外傳感器有感應(yīng)(有人靠近)時(shí),觸發(fā)蜂鳴器發(fā)出警告(發(fā)聲)。

在開始之前需要先介紹一個(gè)新概念:脈沖寬度調(diào)制(Pulse Width Modulation),即:PWM。

這是一個(gè)屬于硬件電路層面的概念,對(duì)于物聯(lián)網(wǎng)開發(fā)來說不需要特別深入的對(duì)它進(jìn)行研究,只需要掌握基本原理后應(yīng)用到開發(fā)中即可。

簡(jiǎn)單的說,PWM 就是利用數(shù)字信號(hào)輸出模擬信號(hào)的一種技術(shù)。眾所周知,現(xiàn)代計(jì)算機(jī)系統(tǒng)是數(shù)字驅(qū)動(dòng)的,即:所有計(jì)算機(jī)部件在高低電平的交替驅(qū)動(dòng)下工作。

如果所有的外設(shè)都是數(shù)字的,那么事情就很簡(jiǎn)單了,直接 GPIO 連接就可以通信

然而,有些外設(shè)就不是數(shù)字的,而是模擬的,需要接收模擬信號(hào)(如:正弦波信號(hào)),所以需要借助處理器使用 PWM 技術(shù)實(shí)現(xiàn)模擬信號(hào)。

基本原理如下:

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

根據(jù)電工電子學(xué)老師的說法,如果需要產(chǎn)生這樣的一個(gè)正弦波,可以用多個(gè)方波代替,其效果是相同的。

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

圖 a) 中的正弦波可以用一個(gè)個(gè)幅值相同但是寬度不同的方波代替,如圖 b) ,只要這些方波與 t 軸圍起來的面積和原始正弦波與 t 軸圍起來的面積相同即可。

有了上面的原理之后,接下來需要討論的就是:如何調(diào)節(jié)出等效的方波?

為了解決這個(gè)問題,需要了解占空比的概念!占空比指在一個(gè)周期內(nèi),信號(hào)處于高電平的時(shí)間占據(jù)整個(gè)信號(hào)周期的百分比。

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

在上圖中一個(gè)周期是 4ms ,而高電平在一個(gè)周期中的持續(xù)時(shí)間是 1ms,所以占空比為 25% 。

掌握了這些理論性的東西之后,就可以考慮如何實(shí)操的問題了:怎么實(shí)現(xiàn) PWM 信號(hào)(方波信號(hào))輸出?

很幸運(yùn),Hi3861中自帶了 PWM 模塊,所以在代碼層面只需要調(diào)用相關(guān) API 接口向 PWM 模塊設(shè)置必要參數(shù),就可以輸出需要的連續(xù) PWM 信號(hào)(方波信號(hào))。

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

上面表格中的接口功能可謂一目了然,幾乎可以做到“開箱即用”,唯一需要做解釋的就是 start(port,duty,freq)這個(gè)函數(shù)。

port 表示 PWM 信號(hào)的輸出通道編號(hào),freq 用于控制 PWM 信號(hào)的輸出頻率,duty 用于指定占空比,占空比的值為 duty 和 freq 的比值。

Ok!有了這些鋪墊,可以上代碼了!

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

Snippet 1部分的代碼先對(duì) GPIO_7 進(jìn)行初始化和功能設(shè)置,目的是接收 is1 也就是紅外傳感器的感應(yīng)信號(hào),當(dāng) Hi3861 接收到這個(gè)紅外感應(yīng)信號(hào)就會(huì)觸發(fā)回調(diào) is1_callback() 。

Snippet 2 部分的代碼復(fù)用 GPIO_8 使其連接 PWM 模塊,目的是對(duì) PWM 進(jìn)行參數(shù)設(shè)置。

這里可以更進(jìn)一步的給大家科普一下 GPIO 和 PWM 的關(guān)系:在理論上可以直接用 GPIO 產(chǎn)生需要的方波信號(hào),但現(xiàn)實(shí)中并不會(huì)這么做!

原因很簡(jiǎn)單,這么做會(huì)耗費(fèi)大量的處理器資源,并且產(chǎn)生的方波信號(hào)頻率有限。

所以,一般都會(huì)引入獨(dú)立的 PWM 模塊,處理器通過 GPIO 與這個(gè)模塊連接在一起,從而能夠?qū)ζ溥M(jìn)行參數(shù)設(shè)置。之后,具體產(chǎn)生方波的工作就由 PWM 模塊完成了。

接下來,看看回調(diào)函數(shù) is1_callback() 的實(shí)現(xiàn)。

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

代碼很簡(jiǎn)單,核心部分就是對(duì)變量 pwm_on 進(jìn)行標(biāo)記,即:當(dāng)接收到紅外感應(yīng)信號(hào)的時(shí)候?qū)?pwm_on 賦值為 True。

然后呢?然后在別處進(jìn)行處理!

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

腳本文件的最后,可以看到處理 pwm_on 為 True 的代碼,即:當(dāng) pwm_on 為 True 時(shí),調(diào)用 start() 函數(shù)促使 1 號(hào) PWM 通道產(chǎn)生方波信號(hào)。

而 1 號(hào) PWM 通道連接的是一個(gè)蜂鳴器,產(chǎn)生方波信號(hào)的最終結(jié)果就是使得蜂鳴器發(fā)聲。

整體流程如下:

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

最終效果如下:

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

可以看到,當(dāng)我靠近開發(fā)板時(shí),紅外感應(yīng)器立即發(fā)送感應(yīng)信號(hào),進(jìn)而觸發(fā)蜂鳴器發(fā)聲。

WOW!一個(gè)簡(jiǎn)單的安防系統(tǒng)就這么完成了!

PS:最新版 Python 引擎庫(kù)能夠支持幾乎所有鴻蒙的外設(shè)接口,以及基礎(chǔ)浮點(diǎn)運(yùn)算。

感興趣的同學(xué)可下載附件中的代碼和文件自行編程嘗試。

Enjoy It!

代碼開源地址:

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

編輯:jq

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 開發(fā)板
    +關(guān)注

    關(guān)注

    25

    文章

    4771

    瀏覽量

    96188
  • GPIO
    +關(guān)注

    關(guān)注

    16

    文章

    1175

    瀏覽量

    51515
  • 紅外感應(yīng)器
    +關(guān)注

    關(guān)注

    0

    文章

    9

    瀏覽量

    8328

原文標(biāo)題:用鴻蒙開發(fā)板做一個(gè)報(bào)警器,超簡(jiǎn)單

文章出處:【微信號(hào):gh_834c4b3d87fe,微信公眾號(hào):OpenHarmony技術(shù)社區(qū)】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏

    評(píng)論

    相關(guān)推薦

    鴻蒙OpenHarmony南向/北向快速開發(fā)教程-迅為RK3568開發(fā)板

    大家期待已久的迅為RK3568開發(fā)板終于迎來了鴻蒙4.1系統(tǒng)的強(qiáng)勢(shì)支持!想知道如何實(shí)現(xiàn)快速開發(fā)學(xué)習(xí)嗎?跟著我們起來探索吧! 迅為RK3568開發(fā)板
    發(fā)表于 07-23 10:44

    鴻蒙OpenHarmony開發(fā)板解析:【芯片解決方案】

    芯片解決方案是指基于某款開發(fā)板的完整解決方案,包含驅(qū)動(dòng)、設(shè)備側(cè)接口適配、開發(fā)板sdk等。
    的頭像 發(fā)表于 05-10 15:42 ?962次閱讀
    <b class='flag-5'>鴻蒙</b>OpenHarmony<b class='flag-5'>開發(fā)板</b>解析:【芯片解決方案】

    鴻蒙OpenHarmony南向:【Hi3861開發(fā)板介紹】

    Hi3861開發(fā)板片大約2cm*5cm大小的開發(fā)板,是款高度集成的2.4GHz WLAN SoC芯片,集成IEEE 802.11b/g/n基帶和RF(Radio Frequenc
    的頭像 發(fā)表于 05-06 17:19 ?708次閱讀
    <b class='flag-5'>鴻蒙</b>OpenHarmony南向:【Hi3861<b class='flag-5'>開發(fā)板</b>介紹】

    無線太陽(yáng)能紅外聲光報(bào)警器

    隨著家庭和社區(qū)的安全需求日益增長(zhǎng),入侵防盜報(bào)警系統(tǒng)成為了人們關(guān)注的焦點(diǎn)。個(gè)高效、可靠的入侵報(bào)警系統(tǒng)能夠預(yù)防潛在的威脅,保障人們的生命財(cái)產(chǎn)安全。本文將介紹
    的頭像 發(fā)表于 04-08 18:04 ?411次閱讀
    無線太陽(yáng)能紅外聲光<b class='flag-5'>報(bào)警器</b>

    家庭燃?xì)?b class='flag-5'>報(bào)警器應(yīng)用示例

    燃?xì)獍踩珶o小事,燃?xì)?b class='flag-5'>報(bào)警器在檢測(cè)到氣體泄漏后發(fā)出報(bào)警并切斷燃?xì)忾y,范防于未“燃”。燃?xì)?b class='flag-5'>報(bào)警器通過高精度傳感檢測(cè)周圍環(huán)境氣體,產(chǎn)生電信號(hào)給到MCU,當(dāng)達(dá)到
    的頭像 發(fā)表于 03-14 10:58 ?762次閱讀
    家庭燃?xì)?b class='flag-5'>報(bào)警器</b>應(yīng)用示例

    門把手觸摸報(bào)警器分享

    報(bào)警器種用于防止或預(yù)防某事件發(fā)生所造成的后果的電子產(chǎn)品。它通過聲音、光、氣壓等形式來提醒或警示人們采取某種行動(dòng)。報(bào)警器可以分為機(jī)械式報(bào)警器和電子
    的頭像 發(fā)表于 02-07 15:33 ?665次閱讀
    門把手觸摸<b class='flag-5'>報(bào)警器</b>分享

    防盜報(bào)警器電路圖分享

    防盜報(bào)警器種電子設(shè)備,通過物理方法或電子技術(shù)產(chǎn)生報(bào)警功能,用于預(yù)防搶劫、盜竊等意外事件的發(fā)生。它主要由防盜報(bào)警主機(jī)與防盜報(bào)警配件共同組成
    的頭像 發(fā)表于 02-02 14:07 ?2033次閱讀
    防盜<b class='flag-5'>報(bào)警器</b>電路圖分享

    盤點(diǎn)那些硬件+項(xiàng)目學(xué)習(xí)套件:Hi3861鴻蒙開發(fā)板及入門常見問題解答

    款用于鴻蒙設(shè)備開發(fā)鴻蒙物聯(lián)網(wǎng)開發(fā)學(xué)習(xí)的開發(fā)板。主控為華為海思Hi3861LV100芯片,內(nèi)
    發(fā)表于 02-01 16:55

    何用小安派-Eyes-S1做一個(gè)電子木魚?

    2024年的第篇教程來了,本篇學(xué)習(xí)如何添加LVGL事件,并制作完成個(gè)電子木魚(小美苦苦哀求,我略微出手而已)。祝大家2024積德累功,心想事成!接下來看看如何用小安派-Eyes-S
    的頭像 發(fā)表于 01-13 15:18 ?825次閱讀
    如<b class='flag-5'>何用</b>小安派-Eyes-S1<b class='flag-5'>做一個(gè)</b>電子木魚?

    鴻蒙設(shè)備-開發(fā)板基礎(chǔ)學(xué)習(xí)(BearPi-HM Micro)

    theme: minimalism 每當(dāng)學(xué)習(xí)門新的編程語(yǔ)言或者上手款新的開發(fā)板,在學(xué)習(xí)鴻蒙設(shè)備開發(fā)過程中,帶大家寫的第
    發(fā)表于 01-08 21:54

    報(bào)警器電路圖大全

    報(bào)警器種為防止或預(yù)防某事件發(fā)生所造成的后果,以聲音、光、氣壓等形式來提醒或警示我們應(yīng)當(dāng)采取某種行動(dòng)的電子產(chǎn)品。報(bào)警器(alarm),分為機(jī)械式報(bào)警器和電子
    的頭像 發(fā)表于 12-27 17:15 ?2557次閱讀
    <b class='flag-5'>報(bào)警器</b>電路圖大全

    星閃BS25開發(fā)板NL001初體驗(yàn)

    最近拿到了塊星閃BS25的開發(fā)板NL001,做一個(gè)山寨版的“開箱”吧。
    的頭像 發(fā)表于 11-17 09:17 ?4827次閱讀
    星閃BS25<b class='flag-5'>開發(fā)板</b>NL001初體驗(yàn)

    教你用NE555定時(shí)做個(gè)防盜報(bào)警器

    今天繼續(xù)給大家分享個(gè)小制作,教你用個(gè)簡(jiǎn)單的方法做一個(gè)防盜報(bào)警器,我想大家應(yīng)該都知道現(xiàn)在無論是
    的頭像 發(fā)表于 11-15 14:33 ?1616次閱讀
    教你用NE555定時(shí)<b class='flag-5'>器</b>做個(gè)防盜<b class='flag-5'>報(bào)警器</b>

    海思星閃BS25開發(fā)板NL001初體驗(yàn)

    最近拿到了塊星閃BS25的開發(fā)板NL001,做一個(gè)山寨版的“開箱”吧。
    的頭像 發(fā)表于 11-15 10:01 ?3796次閱讀
    海思星閃BS25<b class='flag-5'>開發(fā)板</b>NL001初體驗(yàn)

    溫度報(bào)警器

    有人知道基于單片機(jī)用數(shù)碼管顯示溫度報(bào)警器的程序知道怎么設(shè)計(jì)的么
    發(fā)表于 10-15 18:14