打印
[应用相关]

STM32与扫地机器人研究

[复制链接]
楼主: goodluck09876
手机看帖
扫描二维码
随时随地手机跟帖
61
goodluck09876|  楼主 | 2019-5-11 13:30 | 只看该作者 |只看大图 回帖奖励 |倒序浏览

使用特权

评论回复
62
goodluck09876|  楼主 | 2019-5-11 13:37 | 只看该作者

使用特权

评论回复
63
goodluck09876|  楼主 | 2019-5-11 13:37 | 只看该作者
    要控制ESP8266,用户主要通过串口使用AT指令ESP8266交互。每条指
令可以细分为四种命令,如表3. 2所示:

使用特权

评论回复
64
goodluck09876|  楼主 | 2019-5-11 13:38 | 只看该作者

使用特权

评论回复
65
goodluck09876|  楼主 | 2019-5-11 13:39 | 只看该作者
    ATK_ ESP8266模块支持STA/AP/STA+AP三种工作模式,本课题中使用
ATK ESP8266模块作为W IFI热点,笔记本以无线方式连接ATK_ ESP8266模块,
选用AP模式。ATK_ ESP8266模块作为服务器端,笔记本作为客户端,通过网
络调试助手软件进行连接。配置ATK ESP8266模块过程如下:
      (1>初始化连接ATK_ ESP8266模块的串口。
      (2)配置好笔记本电脑的串口助手软件,通过笔记本向串口发送AT指令
来完成ATK_ ESP8266模块的配置。
      (3)发送“AT+CWMODE=2\r\n",若返回“OK",则AP模式设置成功。
      (4)发送重启模块命令“AT+RST\r\n”重新启动模块使指令生效,若返
回ATK_ ESP8266模块信息和“OK",则重启成功。
    (5)发送‘AT+CWSAP= "ATK_ ESP8266",“12345678" 1, 4\r\n'。设置
接入点名称为ATK_ ESP8266,密码12345678,通道号为1,加密方式为
WPA_ WPA2_ PSK。若返回“OK",则设置成功。
    (6)发送“AT+C工PMLJX=0 \r \n ",设置单路连接模式,若返回“OK",则
设置成功。
    (7)发送“AT+C工PSERVER=1, 8086\r\n",开启服务器模式,端口号为
8086,若返回“OK",则设置成功。
    (8)发送“AT+C工PSEND=X\r\n",收到此命令后先换行返回”>”,然后
开始接收串口数据,当数据长度满X字节时发送数据。若连接被断开或未建立
连接,返回ERROR。若成功发送数据,返回SEND OK。

使用特权

评论回复
66
goodluck09876|  楼主 | 2019-5-11 13:39 | 只看该作者

使用特权

评论回复
67
goodluck09876|  楼主 | 2019-5-11 13:39 | 只看该作者
    W工F工模块主要功能是接收开机、关机指令和向笔记本电脑发送传感器数据,
主程序首先对接收到的指令进行判断,决定开机和关机。这里只设定了开机和
关机两个命令,当接收到其他数据时,程序会返回error,提示发送了错误指令。
发送传感器数据信息通过printf()函数实现。

使用特权

评论回复
68
goodluck09876|  楼主 | 2019-5-11 13:40 | 只看该作者
    延迟delay文件夹包含两个文件,delay.c和delay.ho Cortex-M3处理器内部
包含SysTick定时器,它是一个24位倒数计时器。当倒计数到零时,原始设定
值自动从RELOAD寄存器重新加载,并开始新的计数。只要不把相应的使能
位清除,它将永不停止重复该运算。由于它使用芯片内部SysTick来实现延迟,
因此不会中断且不会占用系统计时器,大大节省系统的资源。下面将介绍本课
题用到的三个系统延时的函数:延迟初始化函数,微秒延迟函数,毫秒延迟函
数。
    (1) delay_ init( u8 SYSCLK)是延时初始化函数,它参数有两个:fac_ us
(微秒)和fac_ ms(毫秒),使用SysTick_ CLKSourceConfig( SysTick_
CLKSource_  HCLK_  Div8)设置定时器SysTick为外部时钟源。在将HCLK 8
分频以成为SysTick定时器的时钟源之后,假设外部晶振为8 MHz,然后倍频到
72 MHz,  SysTick定时器的时钟频率为9 MHz。也就是说,如果SysTick的计数
器VAL减1,这意味着时间己经超过1/9 us。故
fac_ ms=SystemCoreClock/8000000是计算在SystemCoreClock时钟频率下延时
lms需要多少个SysTick时钟周期。Systick的时钟是系统时钟的8分频,所以
如果系统时钟不是8的整数倍,将直接导致延时函数误差变大,这也是本设计
将STM32系统时钟源的外部时钟选择8 MHz HSE(高速外部时钟信号)的重
要原因之一。
    (    2 ) delay_us C u32 nus)是微秒延迟函数,nus是需要延迟的微秒数。由
于STM32能够识别的是定时器SysTick的时钟数,所以首先需要做的是把需要
延时的微秒数换算成SysTick时钟数,写入LOAD寄存器。重置VAL寄存器,
并开启倒计时功能。当VAL当前值寄存器倒数结束的时候,就实现延时nus微
秒了。实现了微秒延时后,需要关闭SysTick定时器并把当前值寄存器VAL重
置清零。延时的nus数值要控制在一定范围内,要保证nusG=(2^24)/fac_ us,
不然会出现延时时间不准确的情况。如果超出LOAD范围,高位将被丢弃,这
是不准确的延迟的原因。

使用特权

评论回复
69
goodluck09876|  楼主 | 2019-5-11 13:40 | 只看该作者

使用特权

评论回复
70
goodluck09876|  楼主 | 2019-5-11 13:44 | 只看该作者
铺垫了这么多
下面是重点!
重点来喽!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

使用特权

评论回复
71
goodluck09876|  楼主 | 2019-5-11 13:46 | 只看该作者
    在没有障碍物或房间结构变化不大的情况下,扫地机器人可应用巡航路径
规划算法。
步骤1:扫地机器人从MPU60_50模块获得偏航角,并将此偏航角设定为参考角
然后扫地机器人在基于参考角调整偏航角的同时开始向前移动。距离D由编码
器记录,D的值将被分配给一个名为pre_ Walkingcount的变量。当超声波传感
器检测到障碍物的存在时,机器人会降低速度以避免碰撞发生。如果红外传感
器返回低电平,则该算法切换到步骤20

使用特权

评论回复
72
goodluck09876|  楼主 | 2019-5-11 13:46 | 只看该作者
步骤2:机器人向左旋转90度。然后,机器人用编码器记录向前移动的距离d0
如果d=1},  1}代表扫地机器人的清洁端口的宽度,机器人再向左旋转90度。之
后,算法切换到步骤3。步骤2的编程实现中,编写了实现扫地机器人左转900
函数Left turn()和直行1。的函数Straight_go() 0

使用特权

评论回复
73
goodluck09876|  楼主 | 2019-5-11 14:08 | 只看该作者

使用特权

评论回复
74
goodluck09876|  楼主 | 2019-5-11 14:12 | 只看该作者

使用特权

评论回复
75
goodluck09876|  楼主 | 2019-5-11 14:30 | 只看该作者

使用特权

评论回复
76
goodluck09876|  楼主 | 2019-5-11 14:31 | 只看该作者
    在上述步骤3中,如果D + } Gpre_Walkingcount,说明由于障碍物的阻挡,
会出现未覆盖区域。则设置标志位Permission一 to一 Start,变量pre一 Clean在
STEP2和STEP4完成时开始计数,用于计算未覆盖区域的长度。中是机器人的
直径。当D一} > pre_ Walkingcount和pre_ Clean > 0时,说明扫地机器人己经
走过障碍物,算法A被激活,对未覆盖的区域进行清扫。机器人转向的方向取
决于机器人在运行路径规划算法时的步骤。如果机器人在步骤1,它会向右转,
如果机器人在步骤3,它会向左转向。
    STEP1:机器人转动90度,然后切换到STEP2o
    STEP2:机器人向前移动,编码器记录距离d。当d=pre_ Clean*1。时,算
法切换到STEP3。如果d < pre_ Clean*1}, pre_ Clean = 0,算法移到下一步。
    STEP3:机器人转动90度,清除标志Permission_ to_ Start。为了防止算法
被激活以重新覆盖己经被清理的区域,设置标志Permission_ to_Stop。在算法A
完成后,将清除标志Permission_ to_Stop直到新的循环完成。

使用特权

评论回复
77
goodluck09876|  楼主 | 2019-5-11 14:31 | 只看该作者

使用特权

评论回复
78
goodluck09876|  楼主 | 2019-5-11 14:32 | 只看该作者
    在遇到如图3. 10所示的情况时,按照巡航算**出现未覆盖区域,我们
使用使用算法B对未覆盖区域进行清扫,算法B类似于算法A。这两种算法的
区别在于算法B不需要记录运动的距离。当D一中> pre_ Walkingcount和
pre_ Clean = 0,时,算法B被激活。该算法与算法A的转弯策略相同。
Step 1:机器人转动90度,然后切换到STEP2o
Step2:机器人向前移动。当机器人检钡」到障碍物时,算法切换到STEP3 0
Step3:机器人转动90度,开始一个新的循环。

使用特权

评论回复
79
goodluck09876|  楼主 | 2019-5-11 14:42 | 只看该作者

使用特权

评论回复
80
goodluck09876|  楼主 | 2019-5-11 14:56 | 只看该作者

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则