一区二区三区三上|欧美在线视频五区|国产午夜无码在线观看视频|亚洲国产裸体网站|无码成年人影视|亚洲AV亚洲AV|成人开心激情五月|欧美性爱内射视频|超碰人人干人人上|一区二区无码三区亚洲人区久久精品

電子發(fā)燒友App

硬聲App

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

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

3天內(nèi)不再提示
創(chuàng)作
電子發(fā)燒友網(wǎng)>電子資料下載>電子資料>基于AWS IoT EduKit的睡眠監(jiān)測(cè)系統(tǒng)

基于AWS IoT EduKit的睡眠監(jiān)測(cè)系統(tǒng)

2022-12-06 | zip | 0.04 MB | 次下載 | 免費(fèi)

資料介紹

描述

使命

該項(xiàng)目始于將睡眠監(jiān)測(cè)系統(tǒng)與機(jī)器學(xué)習(xí)能力相結(jié)合的想法。這個(gè)想法不僅是生成和可視化睡眠數(shù)據(jù),而且最終創(chuàng)建一個(gè)人的睡眠預(yù)測(cè)。項(xiàng)目本身可以分解為以下三個(gè)目標(biāo):

  • 擁有一個(gè)低調(diào)、電池供電的設(shè)備,可以在睡眠和環(huán)境溫度時(shí)向 AWS 報(bào)告運(yùn)動(dòng)。
  • 能夠在 Web 應(yīng)用程序中存儲(chǔ)、處理和可視化傳入的數(shù)據(jù)。
  • 提出一個(gè)基于長(zhǎng)期數(shù)據(jù)的可行模型,可以預(yù)測(cè)個(gè)人的睡眠模式

?

poYBAGOIvgOAJQNOAACv8MHX0oI028.png
睡眠監(jiān)測(cè)系統(tǒng)的理論過(guò)程
?

?

描述

首先我要說(shuō)的是,這絕對(duì)是一項(xiàng)正在進(jìn)行的工作,但我希望迄今為止在設(shè)備上完成的工作對(duì)處理 AWS Iot EduKit 的其他人有用。在使命宣言中提到的目標(biāo)中,只有一個(gè)已經(jīng)實(shí)現(xiàn),而且還是有點(diǎn)問(wèn)題:

  • 擁有一個(gè)低調(diào)、電池供電的設(shè)備,可以在睡眠和環(huán)境溫度時(shí)向 AWS 報(bào)告運(yùn)動(dòng)。

因此,我將介紹正在使用的代碼以及采樣方法背后的一些邏輯,并將后兩個(gè)要點(diǎn)留作進(jìn)一步工作的懸念。

如前所述,所使用的設(shè)備是 AWS IoT EduKit,被選為亞馬遜網(wǎng)絡(luò)服務(wù)重塑健康空間競(jìng)賽的一部分。該設(shè)備可以安裝在床架上,以監(jiān)測(cè)房間狀況和床上任何運(yùn)動(dòng)引起的振動(dòng)。起初,我們的想法是測(cè)量盡可能多的參數(shù):噪音、溫度、旋轉(zhuǎn)和加速度、濕度、壓力、環(huán)境光……但是,為了簡(jiǎn)單起見(jiàn),我從溫度、加速度和旋轉(zhuǎn)開(kāi)始。這些是使用 EduKit 板載的 MPU6886 芯片功能測(cè)量的。

MPU6886 的加速度計(jì)和陀螺儀測(cè)量值旨在作為床上運(yùn)動(dòng)的指示,這是我對(duì)睡眠質(zhì)量的代表。在確定這個(gè)重要變量時(shí),可能有多種方法可以采用,但市場(chǎng)上許多測(cè)量睡眠的商業(yè)產(chǎn)品都是通過(guò)測(cè)量運(yùn)動(dòng)來(lái)實(shí)現(xiàn)的。因此,這似乎是一個(gè)有效的、簡(jiǎn)約的解決方案,特別是因?yàn)檫@些功能已經(jīng)存在于 EduKit 上。

?

代碼

設(shè)備固件的框架是 EduKit GitHub 存儲(chǔ)庫(kù)中的 Blinky-Hello-World.c 示例。

所有的修改都在Blinky 項(xiàng)目的main.c中完成,同時(shí)在主目錄下的CMakeLists.txt文件中進(jìn)行了一個(gè)小修改:

set(COMPONENT_REQUIRES "nvs_flash" "esp-aws-iot" "esp-cryptoauthlib" "core2forAWS" "json")

包含“json”以提取用于打包要發(fā)送到 AWS 的有效負(fù)載的 JSON 庫(kù)。

在 main.c 中,必須包含 cJSON.h:

#include "freertos/FreeRTOS.h"
#include "freertos/task.h"
#include "freertos/semphr.h"
#include "freertos/event_groups.h"
#include "esp_log.h"
#include "cJSON.h" // Included for creating the JSON file payloads

接下來(lái),需要定義一些參數(shù)以供稍后在代碼中使用:

#define STARTING_ROOMTEMPERATURE 0.0f

/* The time between each MQTT message publish in milliseconds */
#define PUBLISH_INTERVAL_MS 5000

/* The time between each sensor data gathering period (in seconds)*/
#define SENSOR_READING_AVERAGE_DELAY 4.6

/* The time between reading the sensor data once, before the next read (in seconds).
This should be a factor of SENSOR_READING_AVERAGE_DELAY, otherwise you risk doing sensor readings beyond 5 seconds*/
#define SENSOR_READING_DELAY 0.2

/* Specify variable for keeping track of time in vTaskDelayUntil */
TickType_t xLastWakeTime;

并且需要初始化一些變量:

/* Initialize all the variables to be used for gathering sensor data and averages */
float temperature = 0;
float gx = 0;
float gy = 0;
float gz = 0;
float ax = 0;
float ay = 0;
float az = 0;

float avg_temperature = 0;
float avg_gx = 0;
float avg_gy = 0;
float avg_gz = 0;
float avg_ax = 0;
float avg_ay = 0;
float avg_az = 0;

float Sum_Temperature = 0;
float Sum_Gyro_x = 0;
float Sum_Gyro_y = 0;
float Sum_Gyro_z = 0;
float Sum_Accel_x = 0;
float Sum_Accel_y = 0;
float Sum_Accel_z = 0;

?

接下來(lái),我創(chuàng)建了一個(gè)名為 sensorData() 的函數(shù),用于實(shí)際從 MPU6886 中提取數(shù)據(jù),并在將其發(fā)送到發(fā)布之前對(duì)其進(jìn)行處理。這確實(shí)是代碼的核心。為了減少發(fā)布頻率以及隨后的 AWS MQTT 費(fèi)用,此功能將定期向 AWS 報(bào)告特定時(shí)間段內(nèi)的平均值,但不經(jīng)常報(bào)告。該函數(shù)將指針類(lèi)型變量作為輸入,因此當(dāng)它被調(diào)用時(shí),這些地址的平均值可以用于未來(lái)的操作。及時(shí)收集數(shù)據(jù)以適應(yīng)發(fā)布頻率窗口。我們需要在那個(gè)時(shí)間段內(nèi)的數(shù)據(jù)總和,所以這些值首先被初始化。

void sensorData(float *Avg_Gyro_x, float *Avg_Gyro_y, float *Avg_Gyro_z, float *Avg_Accel_x, float *Avg_Accel_y, float *Avg_Accel_z, float *Avg_Temperature){

/* Reset all summing variables and the counter to zero */
Sum_Temperature = 0;
Sum_Gyro_x = 0;
Sum_Gyro_y = 0;
Sum_Gyro_z = 0;
Sum_Accel_x = 0;
Sum_Accel_y = 0;
Sum_Accel_z = 0;
int count_i = 0;

?

需要以對(duì)手頭任務(wù)有意義的方式對(duì)數(shù)據(jù)進(jìn)行平均。對(duì)于溫度,只需將一段時(shí)間內(nèi)的測(cè)量值相加,然后除以測(cè)量次數(shù)就足夠了。

然而,運(yùn)動(dòng)數(shù)據(jù)有點(diǎn)棘手。由于振動(dòng)可能對(duì)每個(gè)正值都有一個(gè)緊密匹配的負(fù)旋轉(zhuǎn)/加速度,因此不能只添加這些值 - 它們必須是無(wú)符號(hào)的。此外,因?yàn)槲覀兿M?/font>無(wú)運(yùn)動(dòng)大運(yùn)動(dòng)之間的傳播范圍很廣,所以測(cè)量值在求和之前先平方。這允許更明顯地檢測(cè)微弱運(yùn)動(dòng),以及更強(qiáng)烈地指示大運(yùn)動(dòng)。

/* Create a basic timer to control the data collection loop, reporting averages according to SENSOR_READING_AVERAGE_DELAY */
clock_t begin_Time = clock();

while ( ((unsigned long) (clock() - begin_Time)/CLOCKS_PER_SEC) < SENSOR_READING_AVERAGE_DELAY){

MPU6886_GetTempData(&temperature);
Sum_Temperature += (temperature * 1.8)  + 32 - 80;


/*Taking the square of each value so that averaging makes more sense with both positives and negatives coming in,
and so motion is weighted more (trying to pick up smaller motion)*/

MPU6886_GetAccelData(&ax, &ay, &az);
Sum_Accel_x += ax*ax;
Sum_Accel_y += ay*ay;
Sum_Accel_z += az*az;

MPU6886_GetGyroData(&gx, &gy, &gz);
Sum_Gyro_x += gx*gx;
Sum_Gyro_y += gy*gy;
Sum_Gyro_z += gz*gz;

count_i++;

/* To keep from accumulating huge numbers in the Sum_xxx variables, the while loop below delays for SENSOR_READING_DELAY
This is probably not the best implementation, but should work for the sleep monitor's purposes*/
clock_t start_Time = clock();
while ( ((unsigned long) (clock() - start_Time)/CLOCKS_PER_SEC) < SENSOR_READING_DELAY){}
}

請(qǐng)注意這部分代碼中計(jì)時(shí)器的實(shí)現(xiàn)。一個(gè) while 循環(huán)跟蹤平均周期約 4-5 秒,另一個(gè) while 循環(huán)在每次測(cè)量之間提供延遲,以免淹沒(méi)設(shè)備內(nèi)存。為這些計(jì)時(shí)器選擇的值是 4.6 秒(總收集時(shí)間)和 0.2 秒(延遲)。4.6s 允許測(cè)量后的時(shí)間每 5 秒平均、打包和發(fā)布數(shù)據(jù)。

**對(duì)其他制造商的警告:有人懷疑定時(shí)器實(shí)現(xiàn)(while 循環(huán)而不是警報(bào)或中斷)在設(shè)備運(yùn)行一段時(shí)間后導(dǎo)致 malloc 錯(cuò)誤。

?

采集數(shù)據(jù)后,需要打包發(fā)布。這是在 publisher() 函數(shù)中完成的。創(chuàng)建一個(gè) JSON 有效負(fù)載,其中包含所有溫度、加速度和陀螺儀測(cè)量值。然后使用服務(wù)質(zhì)量 1 發(fā)送消息,以便設(shè)備需要來(lái)自 AWS 的 ack 以確認(rèn)接收。

static void publisher(AWS_IoT_Client *client, char *base_topic, uint16_t base_topic_len){

IoT_Publish_Message_Params paramsQOS1;
paramsQOS1.qos = QOS1;
paramsQOS1.isRetained = 0;

cJSON *payload = cJSON_CreateObject();

cJSON *temperature_value = cJSON_CreateNumber(avg_temperature);
cJSON_AddItemToObject(payload, "temperature_value", temperature_value);

cJSON *accel_x_value = cJSON_CreateNumber(avg_ax);
cJSON *accel_y_value = cJSON_CreateNumber(avg_ay);
cJSON *accel_z_value = cJSON_CreateNumber(avg_az);
cJSON_AddItemToObject(payload, "accel_x_value", accel_x_value);
cJSON_AddItemToObject(payload, "accel_y_value", accel_y_value);
cJSON_AddItemToObject(payload, "accel_z_value", accel_z_value);

cJSON *gyro_x_value = cJSON_CreateNumber(avg_gx);
cJSON *gyro_y_value = cJSON_CreateNumber(avg_gy);
cJSON *gyro_z_value = cJSON_CreateNumber(avg_gz);
cJSON_AddItemToObject(payload, "gyro_x_value", gyro_x_value);
cJSON_AddItemToObject(payload, "gyro_y_value", gyro_y_value);
cJSON_AddItemToObject(payload, "gyro_z_value", gyro_z_value);

const char *JSONPayload = cJSON_Print(payload);
paramsQOS1.payload = (void*) JSONPayload;
paramsQOS1.payloadLen = strlen(JSONPayload);

// Publish and check if "ack" was sent from AWS IoT Core
IoT_Error_t rc = aws_iot_mqtt_publish(client, base_topic, base_topic_len, ¶msQOS1);

if (rc == MQTT_REQUEST_TIMEOUT_ERROR) {
ESP_LOGW(TAG, "QOS1 publish ack not received.");
rc = SUCCESS;
}
}

?

最后要考慮的代碼是在 aws_iot_task 中調(diào)用這兩個(gè)函數(shù),并設(shè)置 5 秒計(jì)時(shí)器。為此,在 app_main 中,喚醒時(shí)間被初始化,以便與 vTaskDelayUntil() 一起使用,這將在上次執(zhí)行后等待 5 秒,然后再次開(kāi)始 aws_iot_task while 循環(huán)(如果連接到 AWS,則無(wú)限期運(yùn)行的循環(huán)是好的)。

app_main 補(bǔ)充:

/* Initialize the tick time for use in vTaskDelayUntil*/
xLastWakeTime = xTaskGetTickCount();

以及 aws_iot_task 循環(huán)中的 publisher()、sensorData() 和 vTaskDelayUntil():

sensorData(&avg_gx, &avg_gy, &avg_gz, &avg_ax, &avg_ay, &avg_az, &avg_temperature);
publisher(&client, base_publish_topic, BASE_PUBLISH_TOPIC_LEN);
vTaskDelayUntil(&xLastWakeTime, pdMS_TO_TICKS(PUBLISH_INTERVAL_MS));

?

這樣做是為了代碼。值得注意的是,時(shí)序?qū)崿F(xiàn)似乎并沒(méi)有理論上的那么精確。數(shù)據(jù)最終被打包并發(fā)送到 AWS。

?

示例數(shù)據(jù)

以下是設(shè)備放置在床頭板頂部的示例,在 (1)最小限度地移動(dòng)和 (2)輾轉(zhuǎn)反側(cè)

無(wú)動(dòng)作示例 -

{ "temperature_value": 25.075153350830078, "accel_x_value": 0.0004551649035420269, "accel_y_value": 0.00015581845946144313, "accel_z_value": 1.1685764789581299, "gyro_x_value": 17.144529342651367, "gyro_y_value": 0.4716217517852783 , "gyro_z_value": 23.804603576660156 }

輾轉(zhuǎn)反側(cè)的例子——

{ "temperature_value": 24.038557052612305, "accel_x_value": 0.0009434580570086837, "accel_y_value": 0.0001554012269480154, "accel_z_value": 1.16836678981781, "gyro_x_value": 137.39096069335938 , "gyro_y_value": 19.99363136291504 , "gyro_z_value": 565.6026000976562 }

?

向前進(jìn)

顯然,在這個(gè)概念上還有大量工作要做。我確實(shí)設(shè)法完成了大部分設(shè)備固件,并創(chuàng)建/證明了一種測(cè)量睡眠運(yùn)動(dòng)和環(huán)境條件的方法。然而,預(yù)測(cè)睡眠的新概念仍然需要數(shù)據(jù)工程和應(yīng)用程序工作。未來(lái)的工作將包括:

  • 在 AWS IoT 分析中存儲(chǔ)數(shù)據(jù)
  • 創(chuàng)建 Web 應(yīng)用程序,或利用 AWS 服務(wù)來(lái)可視化和關(guān)聯(lián)睡眠數(shù)據(jù)
  • 執(zhí)行機(jī)器學(xué)習(xí)模型以提供睡眠預(yù)測(cè)并改進(jìn)數(shù)據(jù)表示。

?


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

評(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)