【RT-Thread作品秀】Art-pi机械臂控制
作者:李志青
概述
5G时代物联走入更多行业与领域,使用广和通的L610在模块,通过MQTT与中国移动onenet互联,也尝试搭建了本地MQTT服务器,适合内部布署,其再加入柿饼派两块,结合体感手套与机械臂,数据进行通讯,实现远程控制。
开发环境
硬件:art-pi,广和通4G模块,柿饼派,体感手套,SG90舵机
RT-Thread版本:4.0.3
开发工具及版本:RT-Thread Studio, STM32CubeMX, Arduino IDE1.8.5,PersimmonUIBuilder
RT-Thread使用情况概述
ulog:日志标红打印,更显眼
pahomqtt:与中国移动OneNet进行通讯
at_device:建立与广和通L610通讯
onnet:加密授权与中国移动OneNet配置信息一致
pwm:控制sg90舵机
uart:运用了三个,分别是uart1(控制台使用),uart4(与广和通L610通讯),uart6(接收柿饼派串口信息)
硬件框架
请见附件word文件
- 体感手套使用arduino板子,串口通讯至第一块柿饼派
- 第一块柿饼派通过MQTT通讯到第二块柿饼派
- 第二块柿饼派通过串口与art-pi通讯
- Art-pi与舵机,广和通L610通讯相互
软件框架说明
请见附件word文件
软件模块说明
具体软件模块:
Uart串口通讯主要在main,c:
/* 数据解析线程---发送串口指令 */
static void data_parsing(void)
{
char ch;
char data[ONE_DATA_MAXLEN];
static char i = 0;
while (1)
{
ch = uart_sample_get_char();
rt_device_write(serial, 0, &ch, 1);
if(ch == DATA_CMD_END)
{
data[i++] = '';
rt_kprintf("data=%srn",data);
i = 0;
if (strcmp(data, "0") == 0) {
UserPWM_0_5msStart(); // 0度
}
if (strcmp(data, "45") == 0) {
UserPWM_1_0msStart(); // 45度
}
if (strcmp(data, "90") == 0) {
UserPWM_1_5msStart(); // 90度
}
if (strcmp(data, "135") == 0) {
UserPWM_2_0msStart(); // 135度
}
if (strcmp(data, "180") == 0) {
UserPWM_2_5msStart(); // 180度
}
//UserPWM_0_5msStart();
continue;
}
i = (i >= ONE_DATA_MAXLEN-1) ? ONE_DATA_MAXLEN-1 : i;
data[i++] = ch;
}
}
Pwm控制主要在drv_pwm.c:
/* 封装舵机控制函数,即pwm */
void UserPWM_Init(void)
{
MX_TIM3_Init();
}
MSH_CMD_EXPORT(UserPWM_Init, user pwm init);
void UserPWM_Stop(void)
{
HAL_TIM_PWM_Stop(&htim3, TIM_CHANNEL_3);
}
MSH_CMD_EXPORT(UserPWM_Stop, user pwm stop);
void UserPWM_0_5msStart(void)
{
HAL_TIM_PWM_Stop(&htim3, TIM_CHANNEL_3);
__HAL_TIM_SET_COMPARE(&htim3,TIM_CHANNEL_3,500);
HAL_TIM_PWM_Start(&htim3, TIM_CHANNEL_3);
}
MSH_CMD_EXPORT(UserPWM_0_5msStart, angle zero);
void UserPWM_1_0msStart(void)
{
HAL_TIM_PWM_Stop(&htim3, TIM_CHANNEL_3);
__HAL_TIM_SET_COMPARE(&htim3,TIM_CHANNEL_3,1000);
HAL_TIM_PWM_Start(&htim3, TIM_CHANNEL_3);
}
MSH_CMD_EXPORT(UserPWM_1_0msStart, angle 45);
void UserPWM_1_5msStart(void)
{
HAL_TIM_PWM_Stop(&htim3, TIM_CHANNEL_3);
__HAL_TIM_SET_COMPARE(&htim3,TIM_CHANNEL_3,1500);
HAL_TIM_PWM_Start(&htim3, TIM_CHANNEL_3);
}
MSH_CMD_EXPORT(UserPWM_1_5msStart, angle 90);
命令行控制台 与 OneNet通讯:
/* 与onnet平台的通讯指令 */
Onnet_mqtt_init
演示效果
请见附件word文件
视频地址:
比赛感悟
Rt-thread的产品应用在领域广泛,这次就柿饼派与art-pi做了一次结合体验,并加入了舵机和广和通4G模块,arduino板子,对RT-Thread Studio软件操作不太熟悉,但又更想尝试用,在学习的过程中进度较慢,只好不停的QQ群或是微信群里不停请教,并收集互联网上的资料(CSDN,微信公众号,B站视频等)别人做了什么项目,就买相关硬件进行测试,请教别人做的DEMO,在上面做延伸,慢慢相对理解了里面原理,对PWM,UART,MQTT都明白,再一步步整合到自已的项目,收获就是对rt-thread了解的更加透彻了一点,各种组件的应用也更得心应手了,大致能知道问题出现时的解决基本思路,能在向别人请教时方向更明确,问题更具体化,做到消化吸收的有效性加强。不足之处:mqtt可以合并,机械臂可以是多个,以后再接再励,加油!!!