RT-Thread驱动的餐厅自动化打饭机器人电路设计

3 下载量 128 浏览量 更新于2024-11-25 1 收藏 16.69MB ZIP 举报
资源摘要信息:"【RT-Thread作品秀】打饭机器人-电路方案" 一、开发环境与硬件组件 1. 开发环境硬件:该打饭机器人使用了正点原子探索者STM32F407开发板,该开发板搭载了高性能的STM32F407处理器,具有丰富的外设接口和强大的处理能力,适用于各种复杂的嵌入式应用。此外,还配备了普通机械臂,ESP8266模块作为Wi-Fi模块用于联网,以及超声波模块US-016和蓝牙模块HC-06,分别用于检测餐具和无线通信。 2. 开发工具及版本:软件开发工具采用了KEIL5,这是一个广受欢迎的微控制器集成开发环境,支持各种ARM处理器的开发。使用的RT-Thread版本为RT-thread-nano3.1.3,这是一款针对资源受限的嵌入式设备设计的轻量级实时操作系统。 二、软件架构与功能实现 1. RT-Thread使用情况概述:在打饭机器人项目中,使用了RT-thread-nano的动态创建多任务的内核功能,使得开发过程中可以更加灵活地创建和管理任务。同时,利用了RT-thread-nano的定时器功能来实现任务的定时执行。RT-Thread的控制台Finsh/msh功能支持命令行交互,便于开发者对系统进行调试和控制。 2. 硬件框架与控制策略:硬件框架包括机械臂、阿里云物联网平台、探索者F407开发板和ESP8266模块。机械臂采用正弦信号控制,通过模拟正弦曲线控制PWM的输出,从而实现机械臂从当前状态到目标状态的平滑运动,减少抖动。在软件框架中,定义了多个任务:Alot_task用于机械臂打饭,arm_all_work用于机械臂控制,TARG_dect用于超声波检测餐具和与物联网平台通信确认点餐状态。 3. 软件模块说明:ESP8266模块使用串口2,并通过MQTT协议与阿里云物联网平台通信,实现手机端打饭操作的远程控制。在超声波检测餐具时,如果长时间未取走餐具,机械臂会将其移至一边。若检测到餐具缺失,则通过蜂鸣器和显示屏进行提醒。 三、打饭机器人的实际应用与优化 1. 功能特点:该打饭机器人不仅能够在平时使用,还能在疫情期间减少工作人员和就餐人员的感染风险。它能够自动按预约顺序打饭,避免了排队等待,提高了客人的就餐效率。同时,通过物联网技术实现自动化打饭,降低了因听错、打错饭菜而导致的错误。 2. 实际运行效果:通过演示视频和高清图展示,可以看到机器人具有准确的打饭能力,机械臂运行平稳,能够在多任务环境中协调运行。 3. 项目开发感悟:作者作为一名大三学生,在参与大赛的过程中,深切体会到了RT-thread-nano系统的简洁高效和实用性,提高了理论与实际相结合的能力。在开发过程中,虽然遇到了诸如时钟初始化错误、串口通信异常和系统卡死等问题,但通过学习RT-thread-nano3.1.3文档和社区讨论,最终解决问题,成功实现项目。这一过程不仅丰富了其课余生活,还提高了动手解决实际问题的能力。 四、相关标签与资源文件 - 嵌入式:打饭机器人项目涉及到了嵌入式系统的开发,这一技术广泛应用于需要微处理器或微控制器的场合。 - 机械臂:项目中的核心硬件之一,用于执行打饭等动作,需要精确控制。 - 物联网:利用ESP8266模块与阿里云物联网平台通信,实现了设备的智能化和远程控制。 - STM32F407开发板:提供了一个强大的硬件平台,用于运行RT-Thread操作系统和控制其他硬件模块。 - RT-Thread:作为轻量级实时操作系统,为打饭机器人提供了多任务处理、定时器、控制台等核心功能。 - 电路方案:展示了整个打饭机器人的电路连接和控制策略,是实现其功能的基础。 资源文件列表中包含了项目相关的PDF说明文档、高清效果图、使用说明文本、代码地址和项目压缩包,这些文件为理解和复现项目提供了详实的信息和源码。
2021-04-19 上传
【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文件开启串口并指定相应引脚 开启多个组件,并做具体配置 开启线程 开启指定GPIO并指定引脚 软件模块说明具体软件模块: Uart串口通讯主要在main,c: /*数据解析线程---发送串口指令*/ staticvoiddata_parsing(void) { charch; chardata[ONE_DATA_MAXLEN]; staticchari = 0; while(1) { ch = uart_sample_get_char(); rt_device_write(serial, 0, &ch, 1); if(ch == DATA_CMD_END) { data[i++] ='\0'; rt_kprintf("data=%s\r\n",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 */ voidUserPWM_Init(void) { MX_TIM3_Init(); } MSH_CMD_EXPORT(UserPWM_Init, user pwm init); voidUserPWM_Stop(void) { HAL_TIM_PWM_Stop(&htim3, TIM_CHANNEL_3); } MSH_CMD_EXPORT(UserPWM_Stop, user pwm stop); voidUserPWM_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); voidUserPWM_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_0