電子發(fā)燒友App

硬聲App

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

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

3天內(nèi)不再提示
創(chuàng)作
電子發(fā)燒友網(wǎng)>電子資料下載>電子資料>運(yùn)行水龍頭報(bào)警器開(kāi)源分享

運(yùn)行水龍頭報(bào)警器開(kāi)源分享

2023-02-06 | zip | 0.21 MB | 次下載 | 免費(fèi)

資料介紹

描述

概述

記憶力減退只是老年帶來(lái)的許多不愉快經(jīng)歷中的一小部分,這些問(wèn)題可能對(duì)老年人的舒適度和安全感產(chǎn)生深遠(yuǎn)影響。癡呆癥是與老年人相關(guān)的最常見(jiàn)的神經(jīng)系統(tǒng)問(wèn)題之一。想象一下老年人把水龍頭開(kāi)著的情況。可能隨之而來(lái)的那種水害簡(jiǎn)直是難以想象的。更不用說(shuō)許多安全問(wèn)題,例如觸電和溺水。此外,有時(shí)孩子甚至大人在使用后會(huì)忘記關(guān)掉水龍頭。它還會(huì)增加您每月的用水費(fèi)用。在這個(gè)項(xiàng)目中,我已經(jīng)構(gòu)建了一個(gè)支持物聯(lián)網(wǎng)的設(shè)備的概念驗(yàn)證,它可以使用聲音傳感器檢測(cè)正在運(yùn)行的水龍頭,并可以通過(guò)蜂鳴器發(fā)出警報(bào)并可以選擇向您發(fā)送電子郵件。

硬件設(shè)置

我正在使用帶有內(nèi)置麥克風(fēng)的 i.MX RT1010 開(kāi)發(fā)板。另外,我正在使用 PCF85063AT-ARD 實(shí)時(shí)時(shí)鐘 (RTC) Shield。在 i.MX RT1010 開(kāi)發(fā)板接頭頂部安裝 PCF85063AT-ARD 后,無(wú)法訪(fǎng)問(wèn)主板上的其他引腳,但 PCF85063AT-ARD 具有外部 I2C 引腳,可用于連接其他 I2C 外設(shè)。我使用 M5Stack Atom Lite(ESP32 開(kāi)發(fā)板)進(jìn)行 Wifi 連接,使用 SSD1306 OLED 顯示器顯示預(yù)測(cè)標(biāo)簽。此外,Grove 無(wú)源蜂鳴器連接到 M5Stack Atom Lite 以發(fā)出警報(bào)。

img_0155_Xt38Wd9bhD.jpeg?auto=compress%2Cformat&w=740&h=555&fit=max
?

我構(gòu)建了一個(gè)自定義子板,用于將 M5Stack Atom Lite 和 OLED 顯示器安裝到 PCF85063AT-ARD I2C 接頭連接器上。

img_0156_IuRtDdDN9d.jpeg?auto=compress%2Cformat&w=740&h=555&fit=max
?

連接圖可以在原理圖部分找到。您可以在圖像(下圖)中看到最終設(shè)置,它非常整潔緊湊。

img_0160_9UxIgC24zD.jpeg?auto=compress%2Cformat&w=740&h=555&fit=max
?

開(kāi)發(fā)環(huán)境設(shè)置

對(duì)于固件的開(kāi)發(fā),我正在使用 MCUXpresso 集成開(kāi)發(fā)環(huán)境,

安裝后打開(kāi) MCUXpresso IDE 并在快速啟動(dòng)面板中單擊新建項(xiàng)目鏈接。在 Device selection 頁(yè)面中,選擇evkmimxrt1010并單擊Next按鈕。

screen_shot_2021-06-22_at_10_28_46_2NocEWGB3z.png?auto=compress%2Cformat&w=740&h=555&fit=max
?

我選擇了 C++ 項(xiàng)目,因?yàn)?Tensorflow Lite 和 Edge Impulse SDK 庫(kù)中的大部分代碼庫(kù)都使用 C++。此外,我在“驅(qū)動(dòng)程序”選項(xiàng)卡中選擇了sai-edma ,因?yàn)槲覀儗⑹褂猛?a target='_blank' class='arckwlink_none'>音頻接口 (SAI) 進(jìn)行音頻捕獲。

screen_shot_2021-06-22_at_10_31_05_sAzA2f0RSR.png?auto=compress%2Cformat&w=740&h=555&fit=max
?

Components中選擇提供音頻編解碼控制接口codec_wm8960_adapter 。

screen_shot_2021-06-22_at_10_31_19_rGXr8yqfsd.png?auto=compress%2Cformat&w=740&h=555&fit=max
?

PCF85063AT-ARD RTC 和 SSD1306 OLED 庫(kù)

目前,MCUXpresso SDK 中沒(méi)有可用于 PCF85063AT-ARD RTC Shield 和 SSD1306 OLED 的庫(kù),因此我使用數(shù)據(jù)表和 Arduino 庫(kù)中現(xiàn)有代碼庫(kù)的一些幫助編寫(xiě)了一個(gè)。除了準(zhǔn)確的實(shí)時(shí)時(shí)鐘外,PCF85063AT-ARD 還具有鬧鐘和倒數(shù)計(jì)時(shí)器功能。我們將在項(xiàng)目中使用倒數(shù)計(jì)時(shí)器和時(shí)鐘功能。

Tensorflow Lite 模型創(chuàng)建

我們將使用 Edge Impulse Studio 來(lái)訓(xùn)練和構(gòu)建 Tensorflow Lite 模型。我們正在使用預(yù)建數(shù)據(jù)集來(lái)檢測(cè)水龍頭是否基于音頻運(yùn)行。它包含在以下兩個(gè)類(lèi)別中從麥克風(fēng)以 16KHz 采樣的 15 分鐘數(shù)據(jù):

  • Faucet - 水龍頭正在運(yùn)行,具有各種后臺(tái)活動(dòng)。
  • 噪音 - 只是背景活動(dòng)。

我們可以使用 Edge Impulse CLI 上傳器將此數(shù)據(jù)集導(dǎo)入 Edge Impulse Studio 項(xiàng)目。請(qǐng)按照此處的說(shuō)明安裝 Edge Impulse CLI:https://docs.edgeimpulse.com/docs/cli-installation。數(shù)據(jù)集可以從這里下載https://cdn.edgeimpulse.com/datasets/faucet.zip。

$ unzip faucet.zip
$ cd faucet
$ edge-impulse-uploader --clean
$ edge-impulse-uploader --category training faucet/training/*.cbor
$ edge-impulse-uploader --category testing faucet/testing/*.cbor

系統(tǒng)將提示您輸入用戶(hù)名、密碼和要添加數(shù)據(jù)集的項(xiàng)目。上傳完成后我們可以在數(shù)據(jù)采集頁(yè)面看到數(shù)據(jù)。

screen_shot_2021-06-22_at_13_09_00_n8EwfspRRT.png?auto=compress%2Cformat&w=740&h=555&fit=max
?

Impulse Design > Create Impulse頁(yè)面中,我們可以添加處理塊和學(xué)習(xí)塊。我們選擇了 MFCC 作為處理塊,它使用 Mel 頻率倒譜系數(shù)從音頻信號(hào)中提取特征,對(duì)于學(xué)習(xí)塊,我們選擇了神經(jīng)網(wǎng)絡(luò) (Keras),它從數(shù)據(jù)中學(xué)習(xí)模式,并將這些模式應(yīng)用于新數(shù)據(jù)以識(shí)別音頻。

screen_shot_2021-06-22_at_13_10_53_ilCNHwuHmJ.png?auto=compress%2Cformat&w=740&h=555&fit=max
?

現(xiàn)在我們需要在 Impulse Design > MFCC 頁(yè)面中生成特征。我們可以使用默認(rèn)參數(shù)。

screen_shot_2021-06-22_at_13_17_26_jNlZZ2rABz.png?auto=compress%2Cformat&w=740&h=555&fit=max
?

單擊“保存參數(shù)”按鈕后,頁(yè)面將重定向到“生成特征”頁(yè)面,我們可以在此處開(kāi)始生成特征,這需要幾分鐘時(shí)間。特征生成后,我們可以在特征資源管理器中看到輸出。

screen_shot_2021-06-22_at_13_20_16_Wh0ilyeJaZ.png?auto=compress%2Cformat&w=740&h=555&fit=max
?

現(xiàn)在我們可以轉(zhuǎn)到 Impulse Design > NN Classifier 頁(yè)面,我們可以在其中定義神經(jīng)網(wǎng)絡(luò)架構(gòu)。我們正在使用適用于音頻分類(lèi)的一維卷積網(wǎng)絡(luò)。

screen_shot_2021-06-22_at_13_21_02_YugqfjT1zD.png?auto=compress%2Cformat&w=740&h=555&fit=max
?

完成架構(gòu)后,我們可以開(kāi)始訓(xùn)練,這需要幾分鐘才能完成。我們可以在下面看到準(zhǔn)確率和混淆矩陣。

screen_shot_2021-06-22_at_13_24_41_DC1pWYo5WW.png?auto=compress%2Cformat&w=740&h=555&fit=max
?

對(duì)于這么小的數(shù)據(jù)集,89.3% 的準(zhǔn)確率已經(jīng)不錯(cuò)了,所以我們將使用這個(gè)模型。目前 Edge Impulse Studio 不支持 i.MX RT1010 MCU,因此我們需要在部署頁(yè)面中選擇創(chuàng)建庫(kù)> C++ 庫(kù)并單擊構(gòu)建按鈕來(lái)下載 C++ 庫(kù)包。構(gòu)建完成后,將下載到本地計(jì)算機(jī),我們可以將庫(kù)包解壓縮并移動(dòng)到 MCUXpresso 項(xiàng)目源目錄。

移植 Edge Impulse 庫(kù)

i.MX RT1010 MCU 沒(méi)有開(kāi)箱即用的支持,因此我們需要移植它。在 MIMXRT1011_Faucet_Alarm_Project/source/edge-impulse-sdk/porting/ei_classifier_porting.h 中,在文件末尾添加以下行。

#ifndef EI_PORTING_IMXRT1010
#ifdef CPU_MIMXRT1011DAE5A
#define EI_PORTING_IMXRT1010 1
#else
#define EI_PORTING_IMXRT1010 0
#endif

我們需要在 porting/imxrt1010 目錄下添加兩個(gè)文件。

1. 移植/imxrt1010/ ei_classifier_porting.cpp

#include "../ei_classifier_porting.h"
#if EI_PORTING_IMXRT1010 == 1
#include 
#include 
#include 
#include "clock_config.h"
#include "board.h"

#define EI_WEAK_FN __attribute__((weak))

extern "C" {
  volatile uint32_t g_systickCounter;
  volatile uint32_t g_millis_counter;
  void SysTick_Handler(void)
  {
    if (g_systickCounter != 0U)
    {
      g_systickCounter--;
    }
    g_millis_counter++;
  }
}

void SysTick_DelayTicks(uint32_t n)
{
  g_systickCounter = n;
  while (g_systickCounter != 0U) { }
}

EI_WEAK_FN EI_IMPULSE_ERROR ei_run_impulse_check_canceled() {
  return EI_IMPULSE_OK;
}

EI_WEAK_FN EI_IMPULSE_ERROR ei_sleep(int32_t time_ms) {
  SysTick_DelayTicks(time_ms);
  return EI_IMPULSE_OK;
}

uint64_t ei_read_timer_ms() {
  return (uint64_t)g_millis_counter;
}

uint64_t ei_read_timer_us() {
  return ei_read_timer_ms() * 1000UL;
}

/**
* Printf function uses vsnprintf and output using Arduino Serial
*/
__attribute__((weak)) void ei_printf(const char *format, ...) {
  va_list args;
  va_start(args, format);
  vprintf(format, args);
  va_end(args);
}
__attribute__((weak)) void ei_printf_float(float f) {
  ei_printf("%f", f);
}
__attribute__((weak)) void *ei_malloc(size_t size) {
  return malloc(size);
}
__attribute__((weak)) void *ei_calloc(size_t nitems, size_t size) {
  return calloc(nitems, size);
}
__attribute__((weak)) void ei_free(void *ptr) {
  free(ptr);
}
#if defined(__cplusplus) && EI_C_LINKAGE == 1
extern "C"
#endif
__attribute__((weak)) void DebugLog(const char* s) {
  ei_printf("%s", s);
}
#endif // EI_PORTING_IMXRT1010 == 1

2. 移植/imxrt1010/debug_log.cpp

#include "../ei_classifier_porting.h"
#if EI_PORTING_IMXRT1010 == 1
#include "tensorflow/lite/micro/debug_log.h"
#include 
#include 
// On IMXRT1010, we set up a serial port and write to it for debug logging.
#if defined(__cplusplus) && EI_C_LINKAGE == 1
extern "C"
#endif // defined(__cplusplus) && EI_C_LINKAGE == 1
void DebugLog(const char* s) {
  ei_printf("%s", s);
}
#endif // EI_PORTING_IMXRT1010

流程圖

下面給出應(yīng)用流程圖。

flow_chart_u0DqBc9EcP.jpg?auto=compress%2Cformat&w=740&h=555&fit=max
?

使用 i.MX RT1010 FlexRAM

i.MXRT1010 有限的 128 KB 內(nèi)存分為 32 KB 存儲(chǔ)區(qū)。由于內(nèi)存溢出,編譯失敗。由于我們使用雙緩沖來(lái)捕獲音頻數(shù)據(jù);第一個(gè)緩沖區(qū)用于音頻采樣過(guò)程,用新的樣本數(shù)據(jù)填充緩沖區(qū),第二個(gè)緩沖區(qū)用于推理過(guò)程,從緩沖區(qū)中獲取樣本數(shù)據(jù),提取特征并運(yùn)行推理。所以它需要更多的內(nèi)存。如果我們構(gòu)建固件,它會(huì)顯示以下錯(cuò)誤。

錯(cuò)誤:arm-none-eabi/bin/ld:MIMXRT1011_Faucet_Alarm_Project.axf 部分“.bss”不適合區(qū)域“SRAM_DTC”。

Memory region  Used Size Region Size %age Used
BOARD_FLASH:   289968 B  16 MB        1.73%
SRAM_DTC:      49840 B   32 KB        152.10%
SRAM_ITC:      0 B       32 KB        0.00%
SRAM_OC:       0 B       32 KB        0.00%
NCACHE_REGION: 0 B       32 KB         0.00%

多虧了 FlexRAM,我們可以通過(guò)以下步驟重新配置 SRAM_DTC 以增加堆內(nèi)存大小。在“快速入門(mén)”面板中,單擊“編輯項(xiàng)目設(shè)置”。在設(shè)置窗口中,選擇C/C++ build > Settings > MCU C++ Linker > Managed Linker Script ,然后在大小字段中將默認(rèn)堆值從 2 KB (0x800) 更改為 20 KB (0x5000)。單擊應(yīng)用和保存按鈕以保存設(shè)置。

screen_shot_2021-06-22_at_12_38_48_r22LtGG7a1.png?auto=compress%2Cformat&w=740&h=555&fit=max
?

此外,在主代碼中,通過(guò)在__DATA(RAM3) 前加上前綴來(lái)修改占用大量?jī)?nèi)存的緩沖區(qū)變量的聲明,以便將數(shù)據(jù)放置在 OCRAM 內(nèi)存區(qū)域中。

__DATA(RAM3) static inference_t inference;
__DATA(RAM3) static signed short sampleBuffer[EI_CLASSIFIER_SLICE_SIZE>>1];

重建項(xiàng)目后,我們可以在輸出中看到所有內(nèi)存區(qū)域都在其限制范圍內(nèi)。

Memory region  Used Size Region Size %age Used
BOARD_FLASH:   309988 B  16 MB       1.85%
SRAM_DTC:      28268 B   32 KB       86.27%
SRAM_ITC:      0 B       32 KB       0.00%
SRAM_OC:       20012 B   32 KB       61.07%
NCACHE_REGION: 0 B       32 KB       0.00%

引腳配置

WM8960 編解碼器 IC 使用 LPI2C1。對(duì)于 PCF85063AT-ARD,我們將在 GPIO_AD_01 和 GPIO_AD_02 上配置 LPI2C2 (SCL/SDA),它們是通過(guò) I2C 連接到 PCF85063AT IC 的接頭上的引腳。此外,OLED 顯示器和 ESP32 I2C 從設(shè)備將通過(guò)該 LPI2C2 總線(xiàn)連接。

Quickstart Panel > MCUExpresso Config Tools >> Open Pins中,我們可以配置引腳。

screen_shot_2021-06-22_at_14_22_41_Y4JHaIo8Aw.png?auto=compress%2Cformat&w=740&h=555&fit=max
?

一一點(diǎn)擊GPIO_AD_01和GPIO_AD_02,分配LPI2C2_SCL和LPI2C2_SCL。之后,從頂部菜單中選擇 ConfigTools > Update Code 以生成代碼。

screen_shot_2021-06-22_at_14_19_55_9wPkxsrz5C.png?auto=compress%2Cformat&w=740&h=555&fit=max
?

生成的代碼保存在 board/pin_mux.c 文件中,該文件不正確且無(wú)法運(yùn)行。因此,在從 NXP 論壇獲得幫助后,我們需要修改生成的代碼,如下所示。

void BOARD_InitPins(void) 
{
    CLOCK_EnableClock(kCLOCK_Iomuxc);
    IOMUXC_SetPinMux(IOMUXC_GPIO_AD_01_LPI2C2_SDA, 1U);
    IOMUXC_SetPinMux(IOMUXC_GPIO_AD_02_LPI2C2_SCL, 1U);
    IOMUXC_SetPinConfig(IOMUXC_GPIO_AD_02_LPI2C2_SCL, 0xD8B0U);
    IOMUXC_SetPinConfig(IOMUXC_GPIO_AD_01_LPI2C2_SDA, 0xD8B0U); 
}

構(gòu)建 i.MXRT1010 固件

克隆項(xiàng)目存儲(chǔ)庫(kù)。

$ cd ~
$ git clone https://github.com/metanav/MIMXRT1011_Faucet_Alarm.git

在 MCUXpresso IDE 中打開(kāi)項(xiàng)目。Quickstart 面板中單擊Build鏈接。構(gòu)建完成后,點(diǎn)擊Quickstart panel > Debug來(lái)燒錄并運(yùn)行項(xiàng)目。

構(gòu)建 ESP32 固件

我們還需要構(gòu)建和閃存 M5Stack Atom Lite (ESP32) 以提供 Wifi 和蜂鳴器功能。

$ cd ~/MIMXRT1011_Faucet_Alarm/esp32_i2c_slave_ntp_smtp
$ idf.py build
$ idf.py -b 1500000 -p /dev/tty.usbserial-5D52E80CAC flash

請(qǐng)根據(jù)您的操作系統(tǒng)更改上面的 usb 串口設(shè)備路徑。ESP32 在地址 0x19 運(yùn)行一個(gè) FreeRTOS 應(yīng)用程序作為 I2C 從設(shè)備。MCUExpresso 項(xiàng)目中的主要應(yīng)用程序連接到此 I2C 從設(shè)備以獲取 NTP 時(shí)間以在啟動(dòng)時(shí)設(shè)置 PCF85063AT RTC,啟用/禁用蜂鳴器并發(fā)送電子郵件警報(bào)消息。

設(shè)備上推理

使用帶有增強(qiáng)型直接內(nèi)存訪(fǎng)問(wèn) (eDMA) 控制器的同步音頻接口 (SAI) 捕獲音頻。DSP 應(yīng)用程序中的音頻 MFCC 模塊從音頻信號(hào)中提取系數(shù)并作為輸入發(fā)送到模型。該模型將音頻預(yù)測(cè)為水龍頭或噪音,并在 OLED 屏幕上顯示輸出。出于演示目的,我們將水龍頭運(yùn)行警報(bào)閾值保持在 25 個(gè)連續(xù)水龍頭運(yùn)行檢測(cè)閾值后,它將通過(guò) I2C 向 ESP32 發(fā)送消息觸發(fā)蜂鳴器,并在接下來(lái)的 10 秒內(nèi)使用 PCF85063AT-ARD 啟動(dòng)倒計(jì)時(shí)器。一旦觸發(fā)倒計(jì)時(shí),就會(huì)向 ESP32 發(fā)送一條消息以啟動(dòng)電子郵件發(fā)送過(guò)程。

推理演示

?

現(xiàn)場(chǎng)演示

?

結(jié)論

如果用更多的音頻數(shù)據(jù)訓(xùn)練模型,可以提高模型的準(zhǔn)確性。此外,板載麥克風(fēng)數(shù)據(jù)有一些噪音和低增益,這可以通過(guò)修改某些設(shè)置來(lái)解決,或者可以使用外部數(shù)字麥克風(fēng)來(lái)獲得更好的性能。我要感謝 NXP 為這個(gè)項(xiàng)目提供免費(fèi)硬件。


下載該資料的人也在下載 下載該資料的人還在閱讀
更多 >

評(píng)論

查看更多

下載排行

本周

  1. 1山景DSP芯片AP8248A2數(shù)據(jù)手冊(cè)
  2. 1.06 MB  |  532次下載  |  免費(fèi)
  3. 2RK3399完整板原理圖(支持平板,盒子VR)
  4. 3.28 MB  |  339次下載  |  免費(fèi)
  5. 3TC358743XBG評(píng)估板參考手冊(cè)
  6. 1.36 MB  |  330次下載  |  免費(fèi)
  7. 4DFM軟件使用教程
  8. 0.84 MB  |  295次下載  |  免費(fèi)
  9. 5元宇宙深度解析—未來(lái)的未來(lái)-風(fēng)口還是泡沫
  10. 6.40 MB  |  227次下載  |  免費(fèi)
  11. 6迪文DGUS開(kāi)發(fā)指南
  12. 31.67 MB  |  194次下載  |  免費(fèi)
  13. 7元宇宙底層硬件系列報(bào)告
  14. 13.42 MB  |  182次下載  |  免費(fèi)
  15. 8FP5207XR-G1中文應(yīng)用手冊(cè)
  16. 1.09 MB  |  178次下載  |  免費(fèi)

本月

  1. 1OrCAD10.5下載OrCAD10.5中文版軟件
  2. 0.00 MB  |  234315次下載  |  免費(fèi)
  3. 2555集成電路應(yīng)用800例(新編版)
  4. 0.00 MB  |  33566次下載  |  免費(fèi)
  5. 3接口電路圖大全
  6. 未知  |  30323次下載  |  免費(fèi)
  7. 4開(kāi)關(guān)電源設(shè)計(jì)實(shí)例指南
  8. 未知  |  21549次下載  |  免費(fèi)
  9. 5電氣工程師手冊(cè)免費(fèi)下載(新編第二版pdf電子書(shū))
  10. 0.00 MB  |  15349次下載  |  免費(fèi)
  11. 6數(shù)字電路基礎(chǔ)pdf(下載)
  12. 未知  |  13750次下載  |  免費(fèi)
  13. 7電子制作實(shí)例集錦 下載
  14. 未知  |  8113次下載  |  免費(fèi)
  15. 8《LED驅(qū)動(dòng)電路設(shè)計(jì)》 溫德?tīng)栔?/a>
  16. 0.00 MB  |  6656次下載  |  免費(fèi)

總榜

  1. 1matlab軟件下載入口
  2. 未知  |  935054次下載  |  免費(fèi)
  3. 2protel99se軟件下載(可英文版轉(zhuǎn)中文版)
  4. 78.1 MB  |  537798次下載  |  免費(fèi)
  5. 3MATLAB 7.1 下載 (含軟件介紹)
  6. 未知  |  420027次下載  |  免費(fèi)
  7. 4OrCAD10.5下載OrCAD10.5中文版軟件
  8. 0.00 MB  |  234315次下載  |  免費(fèi)
  9. 5Altium DXP2002下載入口
  10. 未知  |  233046次下載  |  免費(fèi)
  11. 6電路仿真軟件multisim 10.0免費(fèi)下載
  12. 340992  |  191187次下載  |  免費(fèi)
  13. 7十天學(xué)會(huì)AVR單片機(jī)與C語(yǔ)言視頻教程 下載
  14. 158M  |  183279次下載  |  免費(fèi)
  15. 8proe5.0野火版下載(中文版免費(fèi)下載)
  16. 未知  |  138040次下載  |  免費(fèi)