前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >开发者成长激励计划-基于TencentOS Tiny的智能轮椅控制系统

开发者成长激励计划-基于TencentOS Tiny的智能轮椅控制系统

原创
作者头像
SEU_HZZ
修改2022-08-23 15:27:26
5840
修改2022-08-23 15:27:26
举报

基于TencentOS Tiny的智能轮椅控制系统.pptx

项目演示视频

模块介绍及功能演示视频

1 、项目背景

  • 当今社会人们的生活条件不断改善,我国国民的平均寿命也在不断提高。然而,随着年龄的增长老年人的身体机能也在逐渐老化,尤其是下肢力量衰退显著,这使得老年人的活动受到了很大的限制。另一方面,先天缺陷或后天事故所带来的下肢残疾也给一部分人的生活带来了很大的困扰。
  • 如何通过科技手段帮助这些行动不便的老年人和残疾人恢复生活自理能力,一直以来都是社会关注的焦点。目前市面上的电动轮椅发展迅速,市场前景广阔,如何提高轮椅的舒适性和主动安全性将会是未来发展的新趋势。

2 、项目亮点

  • 可以通过TencentOS Tiny快速接入腾讯云IoT Explorer平台,实时查看轮椅状态。
  • 设计的腾讯连连小程序分为数据端和控制端。
  • 乘坐过程中轮椅可以通过检测人体的姿态实时调整角度,实现舒适乘坐。
  • 当乘坐人员体姿出现异常时,轮椅会制动报警,具有一定的主动安全性。

3 、项目整体方案

基于TencentOS Tiny的智能轮椅控制系统主要由以下几个部分组成:搭载有腾讯物联网操作系统的CH32V_EVB开发板,电动推杆控制系统、薄膜压力传感器及其采集卡系统构成的体姿检测系统、腾讯云物联网开发平台和腾讯连连小程序等。

项目方案流程图
项目方案流程图

4、项目软硬件设计

4.1CH32V_EVB是腾讯物联网操作系统TencentOS tiny 团队联合沁恒微电子设计的一款物联网评估板,用于TencentOS tiny 基础内核、RISC-V IP核架构和IoT组件功能体验和评估。 在本项目中主要用于接收系统数据并向腾讯云上报业务数据,然后显示在腾讯连连小程序界面中。同时接受腾讯连连小程序的下发控制指令,控制轮椅运行。

CH32V_EVB开发板
CH32V_EVB开发板

4.2腾讯云物联网开发平台的设计步骤如下:首先完成新建项目和新建产品,然后在物模型中添加对应的功能;随后在可视化面板编辑器中完成腾讯云腾讯连连小程序的界面设计,其中上半部分用于显示轮椅的数据信息,下半部分用于手动控制轮椅运行。完成相应的配置后,将相应产品添加到小程序当中,通过CH32V开发板就可以上报信息到小程序中。

腾讯云物联网开发平台——新建产品界面
腾讯云物联网开发平台——新建产品界面
腾讯云物联网开发平台——功能编辑界面
腾讯云物联网开发平台——功能编辑界面
腾讯云物联网开发平台——可视化面板编辑器
腾讯云物联网开发平台——可视化面板编辑器
小程序各部分信息说明
小程序各部分信息说明

4.3电动推杆控制系统主要由:单片机核心板、485转TTL通信模组,双路电机驱动板及电源模块构成。其中电机驱动板用于驱动轮椅靠背处、坐垫下方和腿部踏板的电机推杆。左侧一排接口是用于连接各种传感器的航空插头,四根线分别为:VCC、GND、485-A、485-B。

推杆驱动板
推杆驱动板

4.4水平倾角传感器通过Modbus通信协议与CH32V_EVB进行数据通信,CH32V_EVB不断向传感器发送读取数据的指令并收到返回值,解算出角度值,进而判断轮椅各个部位的状态,最终通过腾讯与上报给腾讯连连小程序。

水平倾角传感器
水平倾角传感器

4.5体姿检测系统由两个薄膜压力传感器和采集卡组成,通过检测上面的压力大小判断人体的坐姿状态。薄膜压力传感器安装在坐垫,靠背以及脚踏板等位置。薄膜压力传感器的采集卡电路板主要包括以下几个部分:STM32H750系列的MCU核心板、选通电路、同相比例运算电路、电压比较器、电位器和电源。其中选通电路用于将不同的行和列选通接入同比例运算电路;同相比例运算电路主要由运放和反馈电阻构成,当接入电路中的电阻值发生改变时,其输出端的电压值也会随之变化,同相比例运算电路的输出端分别接到MCU核心板的ADC引脚和电压比较器电路;电压比较器电路由电压比较器芯片和电位器构成,通过调节电位器可以对电压阈值进行控制,输入的电压和阈值电压进行比较,当达到阈值电压时电压比较器电路输出高电平,反之输出低电平,该电平信号接在MCU核心板的IO口上。

采集卡电路流程框图
采集卡电路流程框图
用于体姿检测采集卡
用于体姿检测采集卡
薄膜压力传感器
薄膜压力传感器

4.6项目软件部分代码,主要为对接腾讯云物联网平台和腾讯连连小程序部分的代码。

代码语言:javascript
复制
#include "tos_k.h"
#include "esp8266_tencent_firmware.h"
#include "tencent_firmware_module_wrapper.h"
#include "cJSON.h"
#include "string.h"
#include "usart.h"
#include "ch32v30x_it.h"
#define PRODUCT_ID              "U5FOC4ZH3C"
#define DEVICE_NAME             "test"
#define DEVICE_KEY              "DRjJa88UARCe0psnttX15w=="
#define REPORT_DATA_TEMPLATE    "{\\\"method\\\":\\\"report\\\"\\,\\\"clientToken\\\":\\\"00000001\\\"\\,\\\"params\\\":{\\\"push3_roll\\\":%d}}"
char string[3]={'0','0','0'};
char json_string[256];
int i;
uint8_t ask_data[8]={0x54,0x03,0x00,0x3d,0x00,0x03,0x98,0x02};
int16_t sReg;
int fAcc;
extern char rec_data[11];
extern uint8_t uart6_flag;
extern uint8_t U6_RxCounter;
void default_message_handler(mqtt_message_t* msg)
{
    strcpy(json_string,msg->payload);
    for(i=0;i<sizeof(json_string)-1;i++)
    {
        json_string[i]=json_string[i+1];
    }
    cJSON* pload = cJSON_Parse(json_string);
   if(pload == NULL)                       //判断转换是否成功
   {
       return;
       //printf("cjson error...\r\n");
   }
   else if(pload != NULL)
   {
       //printf("\r\n %s \r\n",cJSON_Print(pload));//打包成功调用cJSON_Print打印输出
       cJSON* method = cJSON_GetObjectItem(pload, "method");
       if (0!=strncmp(method->valuestring , "control" , sizeof("control") - 1))
      {
         cJSON_Delete(pload);
       //printf("Invalid method data\r\n");
         return;
      }

       cJSON* params = cJSON_GetObjectItem(pload, "params");
       if(!params)
       {
         cJSON_Delete(pload);
         printf("Invalid params data\r\n");
         return;
       }
//       cJSON* push1 = cJSON_GetObjectItem(params, "push1");
//       if(push1)string[0] = push1->valueint+'0';
       cJSON* push2 = cJSON_GetObjectItem(params, "push2");
       if(push2)string[0] = push2->valueint+'0';
       cJSON* push3 = cJSON_GetObjectItem(params, "push3");
       if(push3)string[1] = push3->valueint+'0';
       cJSON* push4 = cJSON_GetObjectItem(params, "push4");
       if(push4)string[2] = push4->valueint+'0';
       cJSON_Delete(pload);
       usart_send_bytes(UART7, string, sizeof(string));//发送数据
       string[0] = '0';
       string[1] = '0';
       string[2] = '0';
  //   string[4] = '0';
   }
}
char payload[256] = {0};
static char report_topic_name[TOPIC_NAME_MAX_SIZE] = {0};
static char report_reply_topic_name[TOPIC_NAME_MAX_SIZE] = {0};

void mqtt_demo_task(void)
{
    int ret = 0;
    int size = 0;
    mqtt_state_t state;

    char *product_id = PRODUCT_ID;
    char *device_name = DEVICE_NAME;
    char *key = DEVICE_KEY;

    device_info_t dev_info;
    memset(&dev_info, 0, sizeof(device_info_t));

    /**
     * Please Choose your AT Port first, default is HAL_UART_2(USART2)
    */
    ret = esp8266_tencent_firmware_sal_init(HAL_UART_PORT_2);

    if (ret < 0) {
        printf("esp8266 tencent firmware sal init fail, ret is %d\r\n", ret);
    }

    esp8266_tencent_firmware_join_ap("HZZ", "15380816993");

    strncpy(dev_info.product_id, product_id, PRODUCT_ID_MAX_SIZE);
    strncpy(dev_info.device_name, device_name, DEVICE_NAME_MAX_SIZE);
    strncpy(dev_info.device_serc, key, DEVICE_SERC_MAX_SIZE);
    tos_tf_module_info_set(&dev_info, TLS_MODE_PSK);

    mqtt_param_t init_params = DEFAULT_MQTT_PARAMS;
    if (tos_tf_module_mqtt_conn(init_params) != 0) {
        printf("module mqtt conn fail\n");
    } else {
        printf("module mqtt conn success\n");
    }

    if (tos_tf_module_mqtt_state_get(&state) != -1) {
        printf("MQTT: %s\n", state == MQTT_STATE_CONNECTED ? "CONNECTED" : "DISCONNECTED");
    }

    size = snprintf(report_reply_topic_name, TOPIC_NAME_MAX_SIZE, "$thing/down/property/%s/%s", product_id, device_name);

    if (size < 0 || size > sizeof(report_reply_topic_name) - 1) {
        printf("sub topic content length not enough! content size:%d  buf size:%d", size, (int)sizeof(report_reply_topic_name));
    }
    if (tos_tf_module_mqtt_sub(report_reply_topic_name, QOS0, default_message_handler) != 0) {
        printf("module mqtt sub fail\n");
    } else {
        printf("module mqtt sub success\n");
    }

    memset(report_topic_name, 0, sizeof(report_topic_name));
    size = snprintf(report_topic_name, TOPIC_NAME_MAX_SIZE, "$thing/up/property/%s/%s", product_id, device_name);

    if (size < 0 || size > sizeof(report_topic_name) - 1) {
        printf("pub topic content length not enough! content size:%d  buf size:%d", size, (int)sizeof(report_topic_name));
    }

    while (1) {
       usart_send_bytes(UART6, ask_data,8);//发送数据
        if(uart6_flag==1)
        {
           //printf("X_data is %s \r\n",rec_data);
           //printf("%c%c\r\n",rec_data[3],rec_data[4]);
           uart6_flag =0;
           sReg = ((uint16_t)rec_data[3]<<8)|rec_data[4];
           fAcc = sReg * 180 / 32768 ;
           //printf("X_data is %.3f \r\n", fAcc);
        }
        if(fAcc>1)
        {
            memset(payload, 0, sizeof(payload));
            snprintf(payload, sizeof(payload), REPORT_DATA_TEMPLATE, fAcc);
            /* use AT+PUB AT command */
            if (tos_tf_module_mqtt_pub(report_topic_name, QOS0, payload) != 0) {
                printf("module mqtt pub fail\n");
                break;
            } else {
               printf("module mqtt pub success\n");
            }
        }

        tos_sleep_ms(100);
    }
}

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 项目演示视频
  • 1 、项目背景
  • 2 、项目亮点
  • 3 、项目整体方案
    • 基于TencentOS Tiny的智能轮椅控制系统主要由以下几个部分组成:搭载有腾讯物联网操作系统的CH32V_EVB开发板,电动推杆控制系统、薄膜压力传感器及其采集卡系统构成的体姿检测系统、腾讯云物联网开发平台和腾讯连连小程序等。
    • 4、项目软硬件设计
      • 4.1CH32V_EVB是腾讯物联网操作系统TencentOS tiny 团队联合沁恒微电子设计的一款物联网评估板,用于TencentOS tiny 基础内核、RISC-V IP核架构和IoT组件功能体验和评估。 在本项目中主要用于接收系统数据并向腾讯云上报业务数据,然后显示在腾讯连连小程序界面中。同时接受腾讯连连小程序的下发控制指令,控制轮椅运行。
        • 4.2腾讯云物联网开发平台的设计步骤如下:首先完成新建项目和新建产品,然后在物模型中添加对应的功能;随后在可视化面板编辑器中完成腾讯云腾讯连连小程序的界面设计,其中上半部分用于显示轮椅的数据信息,下半部分用于手动控制轮椅运行。完成相应的配置后,将相应产品添加到小程序当中,通过CH32V开发板就可以上报信息到小程序中。
          • 4.3电动推杆控制系统主要由:单片机核心板、485转TTL通信模组,双路电机驱动板及电源模块构成。其中电机驱动板用于驱动轮椅靠背处、坐垫下方和腿部踏板的电机推杆。左侧一排接口是用于连接各种传感器的航空插头,四根线分别为:VCC、GND、485-A、485-B。
            • 4.4水平倾角传感器通过Modbus通信协议与CH32V_EVB进行数据通信,CH32V_EVB不断向传感器发送读取数据的指令并收到返回值,解算出角度值,进而判断轮椅各个部位的状态,最终通过腾讯与上报给腾讯连连小程序。
              • 4.5体姿检测系统由两个薄膜压力传感器和采集卡组成,通过检测上面的压力大小判断人体的坐姿状态。薄膜压力传感器安装在坐垫,靠背以及脚踏板等位置。薄膜压力传感器的采集卡电路板主要包括以下几个部分:STM32H750系列的MCU核心板、选通电路、同相比例运算电路、电压比较器、电位器和电源。其中选通电路用于将不同的行和列选通接入同比例运算电路;同相比例运算电路主要由运放和反馈电阻构成,当接入电路中的电阻值发生改变时,其输出端的电压值也会随之变化,同相比例运算电路的输出端分别接到MCU核心板的ADC引脚和电压比较器电路;电压比较器电路由电压比较器芯片和电位器构成,通过调节电位器可以对电压阈值进行控制,输入的电压和阈值电压进行比较,当达到阈值电压时电压比较器电路输出高电平,反之输出低电平,该电平信号接在MCU核心板的IO口上。
                • 4.6项目软件部分代码,主要为对接腾讯云物联网平台和腾讯连连小程序部分的代码。
                相关产品与服务
                云开发 CloudBase
                云开发(Tencent CloudBase,TCB)是腾讯云提供的云原生一体化开发环境和工具平台,为200万+企业和开发者提供高可用、自动弹性扩缩的后端云服务,可用于云端一体化开发多种端应用(小程序、公众号、Web 应用等),避免了应用开发过程中繁琐的服务器搭建及运维,开发者可以专注于业务逻辑的实现,开发门槛更低,效率更高。
                领券
                问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档