色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

電子發燒友App

硬聲App

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示
電子發燒友網>電子資料下載>電子資料>基于AWS IoT EduKit的睡眠監測系統

基于AWS IoT EduKit的睡眠監測系統

2022-12-06 | zip | 0.04 MB | 次下載 | 免費

資料介紹

描述

使命

該項目始于將睡眠監測系統與機器學習能力相結合的想法。這個想法不僅是生成和可視化睡眠數據,而且最終創建一個人的睡眠預測。項目本身可以分解為以下三個目標:

  • 擁有一個低調、電池供電的設備,可以在睡眠和環境溫度時向 AWS 報告運動。
  • 能夠在 Web 應用程序中存儲、處理和可視化傳入的數據。
  • 提出一個基于長期數據的可行模型,可以預測個人的睡眠模式

?

poYBAGOIvgOAJQNOAACv8MHX0oI028.png
睡眠監測系統的理論過程
?

?

描述

首先我要說的是,這絕對是一項正在進行的工作,但我希望迄今為止在設備上完成的工作對處理 AWS Iot EduKit 的其他人有用。在使命宣言中提到的目標中,只有一個已經實現,而且還是有點問題:

  • 擁有一個低調、電池供電的設備,可以在睡眠和環境溫度時向 AWS 報告運動。

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

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

MPU6886 的加速度計和陀螺儀測量值旨在作為床上運動的指示,這是我對睡眠質量的代表。在確定這個重要變量時,可能有多種方法可以采用,但市場上許多測量睡眠的商業產品都是通過測量運動來實現的。因此,這似乎是一個有效的、簡約的解決方案,特別是因為這些功能已經存在于 EduKit 上。

?

代碼

設備固件的框架是 EduKit GitHub 存儲庫中的 Blinky-Hello-World.c 示例

所有的修改都在Blinky 項目的main.c中完成,同時在主目錄下的CMakeLists.txt文件中進行了一個小修改:

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

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

在 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

接下來,需要定義一些參數以供稍后在代碼中使用:

#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;

?

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

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;

?

需要以對手頭任務有意義的方式對數據進行平均。對于溫度,只需將一段時間內的測量值相加,然后除以測量次數就足夠了。

然而,運動數據有點棘手。由于振動可能對每個正值都有一個緊密匹配的負旋轉/加速度,因此不能只添加這些值 - 它們必須是無符號的。此外,因為我們希望無運動大運動之間的傳播范圍很廣,所以測量值在求和之前先平方。這允許更明顯地檢測微弱運動,以及更強烈地指示大運動。

/* 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){}
}

請注意這部分代碼中計時器的實現。一個 while 循環跟蹤平均周期約 4-5 秒,另一個 while 循環在每次測量之間提供延遲,以免淹沒設備內存。為這些計時器選擇的值是 4.6 秒(總收集時間)和 0.2 秒(延遲)。4.6s 允許測量后的時間每 5 秒平均、打包和發布數據。

**對其他制造商的警告:有人懷疑定時器實現(while 循環而不是警報或中斷)在設備運行一段時間后導致 malloc 錯誤。

?

采集數據后,需要打包發布。這是在 publisher() 函數中完成的。創建一個 JSON 有效負載,其中包含所有溫度、加速度和陀螺儀測量值。然后使用服務質量 1 發送消息,以便設備需要來自 AWS 的 ack 以確認接收。

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 中調用這兩個函數,并設置 5 秒計時器。為此,在 app_main 中,喚醒時間被初始化,以便與 vTaskDelayUntil() 一起使用,這將在上次執行后等待 5 秒,然后再次開始 aws_iot_task while 循環(如果連接到 AWS,則無限期運行的循環是好的)。

app_main 補充:

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

以及 aws_iot_task 循環中的 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));

?

這樣做是為了代碼。值得注意的是,時序實現似乎并沒有理論上的那么精確。數據最終被打包并發送到 AWS。

?

示例數據

以下是設備放置在床頭板頂部的示例,在 (1)最小限度地移動和 (2)輾轉反側

無動作示例 -

{ "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 }

輾轉反側的例子——

{ "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 }

?

向前進

顯然,在這個概念上還有大量工作要做。我確實設法完成了大部分設備固件,并創建/證明了一種測量睡眠運動和環境條件的方法。然而,預測睡眠的新概念仍然需要數據工程和應用程序工作。未來的工作將包括:

  • 在 AWS IoT 分析中存儲數據
  • 創建 Web 應用程序,或利用 AWS 服務來可視化和關聯睡眠數據
  • 執行機器學習模型以提供睡眠預測并改進數據表示。

?


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

評論

查看更多

下載排行

本周

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

本月

  1. 1OrCAD10.5下載OrCAD10.5中文版軟件
  2. 0.00 MB  |  234315次下載  |  免費
  3. 2555集成電路應用800例(新編版)
  4. 0.00 MB  |  33566次下載  |  免費
  5. 3接口電路圖大全
  6. 未知  |  30323次下載  |  免費
  7. 4開關電源設計實例指南
  8. 未知  |  21549次下載  |  免費
  9. 5電氣工程師手冊免費下載(新編第二版pdf電子書)
  10. 0.00 MB  |  15349次下載  |  免費
  11. 6數字電路基礎pdf(下載)
  12. 未知  |  13750次下載  |  免費
  13. 7電子制作實例集錦 下載
  14. 未知  |  8113次下載  |  免費
  15. 8《LED驅動電路設計》 溫德爾著
  16. 0.00 MB  |  6656次下載  |  免費

總榜

  1. 1matlab軟件下載入口
  2. 未知  |  935054次下載  |  免費
  3. 2protel99se軟件下載(可英文版轉中文版)
  4. 78.1 MB  |  537798次下載  |  免費
  5. 3MATLAB 7.1 下載 (含軟件介紹)
  6. 未知  |  420027次下載  |  免費
  7. 4OrCAD10.5下載OrCAD10.5中文版軟件
  8. 0.00 MB  |  234315次下載  |  免費
  9. 5Altium DXP2002下載入口
  10. 未知  |  233046次下載  |  免費
  11. 6電路仿真軟件multisim 10.0免費下載
  12. 340992  |  191187次下載  |  免費
  13. 7十天學會AVR單片機與C語言視頻教程 下載
  14. 158M  |  183279次下載  |  免費
  15. 8proe5.0野火版下載(中文版免費下載)
  16. 未知  |  138040次下載  |  免費
主站蜘蛛池模板: 两性午夜色视频免费网站| 24小时日本免费看| 色影音先锋av资源网| 国产欧美一区二区精品性色tv | 九九99热久久精品在线6| 欧美黑人巨大videos免费| 100国产精品人妻无码| 久久久久亚洲日日精品| 日本理伦片午夜理伦片| 成人在线小视频| 午夜天堂一区人妻| 三级全黄a| 日本国产成人精品无码区在线网站 | 高hnp肉文| 大迪克黑人异族| 成人国产精品日本在线| 大相蕉伊人狼人久草av| 成年女人免费影院播放| 成 人 网 站毛片| 大香伊人久久精品一区二区| 大乳牛奶女在线观看| 国产成人亚洲精品无广告| 国产v综合v亚洲欧美大片| 国产精品嫩草影视在线观看| 国产乱人视频在线观看| 国产午夜精品久久理论片小说| 国产午夜精品一区二区| 国产线精品视频在线观看| 后式大肥臀国产在线| 九色PORNY真实丨国产免费| 久久99精品国产自在自线| 快播欧美大片| 女人被躁到高潮嗷嗷叫免费| 日韩久久影院| 无遮18禁在线永久免费观看挡| 亚洲精品无码成人AAA片| 伊人精品影院| 97影院理论午夜伦不卡偷| 成人女人A级毛片免费软件| 高清撒尿hdtube撒尿| 国产色综合色产在线视频|