智能轮椅项目汇聚了众多先进技术,其目的是为了解决传统轮椅使用上的不便问题。以往,传统轮椅的脚踏板和靠背固定不动,而现代科技的融入,无疑将带来一场革命性的变化。
项目概述
智能轮椅项目旨在提升轮椅的使用性能。目前,在众多场所,包括医院、康复中心和老年社区,传统轮椅的使用范围受到限制。随着现代科技的进步,智能轮椅的研发显得尤为重要。在这个项目中,不同技术的协同合作至关重要。开发团队面临着重大的挑战,他们需要将tinyAIOT开发板、腾讯云平台以及腾讯连连小程序无缝结合。
智能轮椅项目涵盖众多基础研究,这些研究既包括硬件又涉及软件。比如,AIOT开发板的恰当运用、腾讯云平台的高效连接以及小程序功能的精心设计,这些因素都将直接影响到智能轮椅的整体性能。
主控层的重要性
在主控层,AIOT开发套件的作用不容小觑。在实验室里,它负责向LED灯珠和两个电机驱动板发送控制命令,并从传感器那里收集感知信息。这个过程表面上看很简单,但实际操作中却需要多种技术的结合与整合。
这款开发板配备的WIFI模块,是专为连接腾讯云设计的。这种连接并非单纯的互联互通,它类似于AIOT开发板内置的E53接口,支持多种接口类型,包括IIC、SPI、串口以及常规的IO口等,使得连接外部传感器更加方便灵活。借助恩智浦的IDE工具,我们才能生成相应的驱动程序,以便进行后续的开发工作。
多模感知的实现
这个项目的一大特色是多模感知技术。它不仅能感知轮椅自身的状态,还能对周围环境进行监测,极大地方便了使用者。以数据采集为例,E53配备的串口外接数据采集板,能够收集姿态角、定位、速度以及温湿度等多方面信息。这些信息的有效传递,对于AIOT开发板的运行至关重要。
轮椅的状态信息,包括姿态角、定位和速度等,必须被精确地收集。特别是,在轮椅移动时,必须实时获取姿态角信息。这时,正点原子的ATK六轴传感器模块就派上了用场。该模块能精确地捕捉轮椅姿态角的变化。
/* GPIO configuration on GPIO_B1_15 (pin B14) */
gpio_pin_config_t gpio2_pinB14_config = {
.direction = kGPIO_DigitalOutput,
.outputLogic = 0U,
.interruptMode = kGPIO_NoIntmode
};
/* Initialize GPIO functionality on GPIO_B1_15 (pin B14) */
GPIO_PinInit(GPIO2, 31U, &gpio2_pinB14_config);//GPIO2
GPIO_PinInit(GPIO2, 30U, &gpio2_pinB14_config);//GPIO3
GPIO_PinInit(GPIO3, 17U, &gpio2_pinB14_config);//GPIO1
GPIO_PinInit(GPIO3, 4U, &gpio2_pinB14_config);//GPIO4
IOMUXC_SetPinMux(IOMUXC_GPIO_B1_15_GPIO2_IO31, 0U);//GPIO2
IOMUXC_SetPinMux(IOMUXC_GPIO_B1_14_GPIO2_IO30, 0U);//GPIO3
IOMUXC_SetPinMux(IOMUXC_GPIO_SD_B0_05_GPIO3_IO17, 0U);//GPIO1
IOMUXC_SetPinMux(IOMUXC_GPIO_SD_B0_05_GPIO3_IO4, 0U);//GPIO1
if(cjson_switch != NULL){ //靠背降下
power_switch = cjson_switch->valueint;
if (power_switch == 0) {
GPIO_PinWrite(GPIO2, 31, 0);
} else if (power_switch == 1) {
GPIO_PinWrite(GPIO2, 31, 1);
}
}
else if(cjson_switch_jiao != NULL){ //脚踏板升起
tuigan_jiao_switch = cjson_switch_jiao->valueint;
if (tuigan_jiao_switch == 0) {
GPIO_PinWrite(GPIO2, 30, 0);
} else if (tuigan_jiao_switch == 1) {
GPIO_PinWrite(GPIO2, 30, 1);
}
}
else if(cjson_switch_jiao_down != NULL){ //脚踏板降下
tuigan_jiao_down_switch = cjson_switch_jiao_down->valueint;
if (tuigan_jiao_down_switch == 0) {
GPIO_PinWrite(GPIO3, 17, 0);
} else if (tuigan_jiao_down_switch == 1) {
GPIO_PinWrite(GPIO3, 17, 1);
}
}
else if(cjson_switch_bei != NULL){ //靠背升起
tuigan_bei_switch = cjson_switch_bei->valueint;
if (tuigan_bei_switch == 0) {
GPIO_PinWrite(GPIO3, 4, 0);
} else if (tuigan_bei_switch == 1) {
GPIO_PinWrite(GPIO3, 4, 1);
}
}
设备上云与腾讯云平台
腾讯云物联网开发平台为智能轮椅项目设备上云提供了巨大帮助。在试验阶段,开发人员依据项目需求,在平台上设计了设备模型,使得设备数据上传至云端以及云数据的读取变得十分便捷。同时,传输数据的安全性和效率也是必须考虑的重点。
设备与物联网开发平台的连接主要依赖板载的WIFI模块。乐鑫公司生产的这款物联网芯片因其价格低廉、性能稳定而广受欢迎。它具备多种工作模式,例如AP模式,且可通过常用的AT指令进行控制,从而满足各种使用场景的需求。
电机控制的设计
电机控制环节同样至关重要。在本项目里,推杆电机与靠背电机的控制重任,落在了AIOT开发板的E53模块GPIO1至GPIO4上。这些端口负责电机方向的调节。控制逻辑用表格清晰列出。这种精确的控制手段,是确保轮椅各部件正常工作的关键所在。
//串口2发送1个字符 //c:要发送的字符
void usart2_send_char(u8 c)
{
while(USART_GetFlagStatus(USART2,USART_FLAG_TC)==RESET); //循环发送,直到发送完毕
USART_SendData(USART2,c);
}
//fun:功能字. 0XA0~0XAF//data:数据缓存区//len:data区有效数据个数
void usart2_niming_report(u8 fun,u8*data,u8 len)
{
u8 send_buf[64];
u8 i;
send_buf[len+3]=0; //校验数置零
send_buf[0]=0X88; //帧头
send_buf[1]=fun; //功能字
send_buf[2]=len; //数据长度
for(i=0;i<len;i++)send_buf[3+i]=data[i]; //复制数据
for(i=0;i<len+3;i++)send_buf[len+3]+=send_buf[i]; //计算校验和
for(i=0;i<len+4;i++)usart2_send_char(send_buf[i]); //发送数据到串口1
}
智能轮椅的性能优劣与电机的控制紧密相关。比如,在路况多变或使用者需求各异时,电机需迅速且精准地响应,以确保轮椅的安全与舒适。
void LPUART5_IRQHandler(void){
/* If new data arrived. */
int i=0;
if ((kLPUART_RxDataRegFullFlag)&LPUART_GetStatusFlags(LPUART5)){
data = LPUART_ReadByte(LPUART5);
if(len=19)
len=0;
}
SDK_ISR_EXIT_BARRIER;
}
项目收获与意义
参加这个项目,参与者能获得不少收获。若有人曾参加过飞思卡尔智能车竞赛,会发现它与本项目有不少相似之处,二者都采用恩智浦的芯片进行项目开发。在这个过程中,技术能力得到了提升。更重要的是,这种项目开发对个人能力的提升是全面的,涵盖了项目管理、团队协作以及学习新知识等多个方面。
当前社会,此类项目具有深远影响。老龄化趋势日益明显,对残障人士的关怀需求也在不断上升。智能轮椅技术的进步,将显著提升众多人的生活品质。
//pitch:俯仰角 精度:0.1° 范围:-90.0° +90.0°
//roll:横滚角 精度:0.1° 范围:-180.0° +180.0°
//yaw:航向角 精度:0.1° 范围:-180.0° +180.0°
u8 mpu_dmp_get_data(float *pitch,float *roll,float *yaw)
{
float q0=1.0f,q1=0.0f,q2=0.0f,q3=0.0f;
unsigned long sensor_timestamp;
short gyro[3], accel[3], sensors;
unsigned char more;
long quat[4];
if(dmp_read_fifo(gyro, accel, quat, &sensor_timestamp, &sensors,&more))return 1;
if(sensors&INV_WXYZ_QUAT)
{
q0 = quat[0] / q30; //q30格式转换为浮点数
q1 = quat[1] / q30;
q2 = quat[2] / q30;
q3 = quat[3] / q30;
//计算得到俯仰角/横滚角/航向角
*pitch = asin(-2 * q1 * q3 + 2 * q0* q2)* 57.3; // pitch
*roll = atan2(2 * q2 * q3 + 2 * q0 * q1, -2 * q1 * q1 - 2 * q2* q2 + 1)* 57.3; // roll
*yaw = atan2(2*(q1*q2 + q0*q3),q0*q0+q1*q1-q2*q2-q3*q3) * 57.3; //yaw
}else return 2;
return 0;
}
智能轮椅项目融合了多种技术,进行着深入探索与研究。这样的项目为未来的康复辅助设备提供了宝贵的参考样本。有人或许会问,若在技术尚未完全成熟、大规模应用之前出现了一些问题,大家认为应该如何进行改进才更为妥当?期待大家的点赞与分享,听听您的宝贵意见。