1 基于OpenHarmony系统和小凌派RK2206开发板的避障小车-德赢Vwin官网 网
0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

基于OpenHarmony系统和小凌派RK2206开发板的避障小车

德赢Vwin官网 开源社区 来源:HarmonyOS官方合作社区 作者:凌睿智捷 2022-04-21 07:58 次阅读

1避障小车简介

这是一款基于OpenHarmony系统和小凌派-RK2206开发板的避障小车。同时,小车上搭载了超声波测距模块、舵机模块、红外寻迹模块、直流电机模块。

具体实验成果展示如下:

2避障小车模块介绍

小凌派-RK2206开发板的示意图

19f05e08-c0fe-11ec-bce3-dac502259ad0.jpg

小凌派配置了一个E53外接拓展口,这是E53接口的原理图:

1a06ec36-c0fe-11ec-bce3-dac502259ad0.png

这是E53模块的原理图:

1a1ce392-c0fe-11ec-bce3-dac502259ad0.png

1. 直流电机模块

直流电机模块由E53模块上的L9110S驱动芯片进行驱动。L9110S驱动芯片所引出的引脚对应接口的GPIO0_B7、GPIO0_B6,另一块驱动芯片对应GPIO1_D0、GPIO0_A5。我们对相应的GPIO引脚进行初始化并设置为上拉模式。

//右直流电机 IA GPIO0_PB7PinctrlSet(GPIO0_PB7, MUX_FUNC0, PULL_UP, DRIVE_KEEP);LzGpioInit(GPIO0_PB7);
//右直流电机 IB GPIO0_PB6PinctrlSet(GPIO0_PB6, MUX_FUNC0, PULL_UP, DRIVE_KEEP);LzGpioInit(GPIO0_PB6);
//左直流电机 IB GPIO1_PD0PinctrlSet(GPIO1_PD0, MUX_FUNC0, PULL_UP, DRIVE_KEEP);LzGpioInit(GPIO1_PD0);
//左直流电机 IA GPIO0_PA5PinctrlSet(GPIO0_PA5, MUX_FUNC0, PULL_UP, DRIVE_KEEP);LzGpioInit(GPIO0_PA5);

(左右移动查看全部内容)

通过阅读L9110S的芯片手册可以得到以下真值表:

1a411668-c0fe-11ec-bce3-dac502259ad0.png

通过真值表,我们可以通过对IO口的输出来控制直流电机的正转、反转还有停止:

1a57d45c-c0fe-11ec-bce3-dac502259ad0.png

2. 超声波测距模块

超声波测距模块用来计算出模块到前方障碍物的距离。采用IO口TRIG触发测距,给最少10us的高电平信号。模块自动发送8个40khz的方波,自动检测是否有信号返回;有信号返回,通过IO口ECHO输出一个高电平,同时开定时器计时,当此口变为低电平时就可以读定时器的值,高电平持续的时间就是超声波从发射到返回的时间。

模块Trig对应引脚GPIO_B0,Echo对应引脚GPIO_B1,对这两个引脚进行初始化

// Echo 超声波传感器PinctrlSet(GPIO0_PB1, MUX_FUNC0, PULL_KEEP, DRIVE_KEEP);LzGpioInit(GPIO0_PB1);LzGpioSetDir(GPIO0_PB1, LZGPIO_DIR_IN);
// Trig 超声波传感器PinctrlSet(GPIO0_PB0, MUX_FUNC0, PULL_KEEP, DRIVE_KEEP);LzGpioInit(GPIO0_PB0);LzGpioSetDir(GPIO0_PB0, LZGPIO_DIR_OUT);LzGpioSetVal(GPIO0_PB0, LZGPIO_LEVEL_LOW);

(左右移动查看全部内容)

触发信号:

//通过Trig发送触发信号LzGpioSetVal(GPIO0_PB0, LZGPIO_LEVEL_HIGH);HAL_DelayUs(20);LzGpioSetVal(GPIO0_PB0, LZGPIO_LEVEL_LOW);

(左右移动查看全部内容)

获取定时器计数器当前值:

while (1)  {    LzGpioGetVal(GPIO_8, &value);    //获取上升沿的定时器计数器当前值    if (value == LZGPIO_LEVEL_HIGH && flag == 0)    {      m_echo_info.time_rise = *m_ptimer5_current_value_low;      m_echo_info.flag = EECHO_FLAG_CAPTURE_FALL;      flag = 1;    }    //获取下降沿的定时器计数器当前值    if (value == LZGPIO_LEVEL_LOW && flag == 1)    {      m_echo_info.time_fall = *m_ptimer5_current_value_low;      m_echo_info.flag = EECHO_FLAG_CAPTURE_SUCCESS;      break;    }  }

(左右移动查看全部内容)

上升沿和下降沿的节拍数差计算距离。其中,系统时钟为40MHz,超声波速度为340米/秒,高电平时间宽度为超声波的往返之和,所以实际距离 = 节拍数差 / 40MHz / 340(米/秒) / 2(往返2次)。具体计算代码如下:

if (m_echo_info.flag == EECHO_FLAG_CAPTURE_SUCCESS)  {/* 如果是采集成功,则计算距离 */    if (m_echo_info.time_rise <= m_echo_info.time_fall)    {      time_diff = m_echo_info.time_fall - m_echo_info.time_rise;    }    else    {      time_diff = 0xFFFFFFFF - m_echo_info.time_rise + m_echo_info.time_fall + 1;    }}float f_time = (float)time_diff;float f_freq = (float)ECHO_TIMER_FREQ;distance = f_time / f_freq * 170.0 * 100.0;

(左右移动查看全部内容)

3. 舵机模块

舵机模块用来控制超声波测距模块测量左右方向的距离,舵机引脚为GPIO0_B4,对GPIO0_B4进行初始化。

//舵机PinctrlSet(GPIO0_PB4, MUX_FUNC0, PULL_KEEP, DRIVE_KEEP);LzGpioInit(GPIO0_PB4);LzGpioSetDir(GPIO0_PB4, LZGPIO_DIR_OUT);

(左右移动查看全部内容)

通过vwin PWM波让舵机工作。具体代码如下:

void set_angle(unsigned int duty){   LzGpioSetDir(GPIO0_PB4, LZGPIO_DIR_OUT);   LzGpioSetVal(GPIO0_PB4, LZGPIO_LEVEL_HIGH);   HAL_DelayUs(duty);   LzGpioSetVal(GPIO0_PB4, LZGPIO_LEVEL_LOW);   HAL_DelayUs(20000 - duty);}

(左右移动查看全部内容)

4. 红外寻迹模块

红外寻迹模块,在避障小车中的功能是防止小车意外掉落。红外寻迹模块与小凌派的GPIO0_A2、GPIO0_C4连接,对这两个引脚进行初始化。

//初始化PA2 红外传感器PinctrlSet(GPIO0_PA2, MUX_FUNC0, PULL_UP, DRIVE_KEEP);LzGpioInit(GPIO0_PA2);LzGpioSetDir(GPIO0_PA2, LZGPIO_DIR_IN);LzGpioSetVal(GPIO0_PA2, LZGPIO_LEVEL_HIGH);
//初始化PC7 红外传感器PinctrlSet(GPIO0_PC4, MUX_FUNC0, PULL_UP, DRIVE_KEEP);LzGpioInit(GPIO0_PC4);LzGpioSetDir(GPIO0_PC4, LZGPIO_DIR_IN);LzGpioSetVal(GPIO0_PC4, LZGPIO_LEVEL_HIGH);

(左右移动查看全部内容)

3避障小车功能实现

通过小凌派开发板自带的按键启动小车的避障功能

void car_ Obstacle_avoidance(void){  float m_distance = 0.0;  regress_middle();  /*获取前方物体的距离*/  m_distance = GetDistance();  car_where_to_go(m_distance);  osDelay(20);}

(左右移动查看全部内容)

通过超声波测距模块测量前方距离来判断小车接下来要运动的方向。若距离大于等于20cm继续前进。若距离小于20cm,先停止再后退0.5s,再继续进行测距,再进行判断。通过两个红外寻迹传感器可以防止小车掉落,当红外传感器输出为高电平时,小车就会停止前进,并且重新寻找安全方向。

static void car_where_to_go(float distance){  LzGpioValue io_status_left;  LzGpioValue io_status_right;
  LzGpioGetVal(GPIO0_PA2, &io_status_left);  LzGpioGetVal(GPIO0_PC4, &io_status_right);  if (io_status_left == 0 || io_status_right == 0)  {    if (io_status_left == 0 && io_status_right != 0)    {      car_stop();      LOS_Msleep(500);      car_backward();      LOS_Msleep(500);      car_stop(); // meet wall      car_rightward();      LOS_Msleep(800);      car_stop(); // meet wall    }    else if (io_status_left != 0 && io_status_right == 0)    {      car_stop();      LOS_Msleep(500);      car_backward();      LOS_Msleep(500);      car_stop(); // meet wall      car_leftward();      LOS_Msleep(800);      car_stop(); // meet wall    }    else if (io_status_left == 0 || io_status_right == 0)    {      car_stop();car_backward();      LOS_Msleep(500);      car_stop(); // meet wall
    }  }  else if (distance < DISTANCE_BETWEEN_CAR_AND_OBSTACLE)  {    car_stop();    LOS_Msleep(500);    car_backward();    printf("This is backward
");    LOS_Msleep(500);    car_stop();    unsigned int ret = engine_go_where();    printf("ret is %d
", ret);    if (ret == CAR_TURN_LEFT)    {      car_left();      LOS_Msleep(800);    }    else if (ret == CAR_TURN_RIGHT)    {      car_right();      LOS_Msleep(800);    }    car_stop();  }  else  {    car_forward();    printf("This is forward
");  }}

(左右移动查看全部内容)

4心得体会

通过使用OpenHarmony操作系统 + 小凌派-RK2206开发板来控制小车完成距离检测、前进、后退、左转、右转、判断算法等功能,实现了避障小车的基本功能。经过这一次实验测试,加强我个人对OpenHarmony的理解,实在是一次不错的学习体验,特此记录!

原文标题:基于搭载 OpenHarmony 避障小车心得体会

文章出处:【微信公众号:HarmonyOS官方合作社区】欢迎添加关注!文章转载请注明出处。

审核编辑:汤梓红
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表德赢Vwin官网 网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 开发板
    +关注

    关注

    25

    文章

    5032

    浏览量

    97370
  • OpenHarmony
    +关注

    关注

    25

    文章

    3713

    浏览量

    16251
  • RK2206
    +关注

    关注

    0

    文章

    34

    浏览量

    1780
  • 小凌派
    +关注

    关注

    0

    文章

    27

    浏览量

    1198

原文标题:基于搭载 OpenHarmony 避障小车心得体会

文章出处:【微信号:HarmonyOS_Community,微信公众号:德赢Vwin官网 开源社区】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    基于OpenHarmony+小RK2206开发板制作的简易示波器

    基于OpenHarmony + 小RK2206开发板制作的简易示波器,实时采集波形,实时计算并实时显示对应的波形。
    的头像 发表于 05-10 09:02 4500次阅读

    RK2206鸿蒙开发板新品首发试用

    鸿蒙开发板 瑞芯微RK2206 OpenHarmony系统 E53 loT物联网了解更多
    发表于 03-28 17:12

    基于搭载 OpenHarmony 小车心得体会

    文章提供:福州市睿智捷电子有限公司一、 小车简介这是一款基于OpenHarmony系统和小
    发表于 04-15 15:07

    轻量系统开发套件介绍:睿智捷 | 小-RK2206 开发板套件

    睿智捷 | 小-RK2206 开发板套件是由福州市睿智捷电子有限公司出品,主控器为瑞芯微
    发表于 04-21 13:39

    【小RK2206开发板试用体验】2、开箱及hello

    \lockzhiner-rk2206\images5、下载固件:6、下载成功后就可以看到串口打印了:总结:今天第一次拿开发板,对于
    发表于 05-02 14:54

    【小RK2206开发板试用体验】第2章 源码编译与固件下载

    开发环境:开发系统:Ubuntu 20.04开发板:小-
    发表于 05-08 14:02

    【小RK2206开发板试用体验】第3章 应用开发

    开发环境:开发系统:Ubuntu 20.04开发板:小-
    发表于 05-08 14:07

    【小RK2206开发板试用体验】二运行

    入手后,我申请的是人体感应套件,所以首先 查询资料docsoard硬件原理图小开发板原理图只提供底板的原理图,核心原理图可在开发板
    发表于 06-02 10:23

    【小RK2206开发板试用体验】OpenHarmony华为云IoT应用开发-智慧井盖

    本帖最后由 周安平 于 2022-6-4 10:07 编辑 【小RK2206开发板试用体验】OpenHarmony华为云IoT应用
    发表于 06-03 20:48

    RK2206开发板搭载OpenHarmony操作系统简介

    1、小-RK2206开发板简介小-RK2206
    发表于 07-28 17:28

    RK2206开发板顺利通过开放原子开源基金会XTS认证

    -RK2206开发板OpenHarmony 良好兼容、系统互通,符合 OpenHarmony 兼容性设计要求及认证标准。 未来,
    的头像 发表于 03-23 16:18 4986次阅读
    小<b class='flag-5'>凌</b><b class='flag-5'>派</b><b class='flag-5'>RK2206</b><b class='flag-5'>开发板</b>顺利通过开放原子开源基金会XTS认证

    基于小RK2206开发板所制作的简易示波器

    RK2206开发板而做的简易示波器开发。 本开发以瑞芯微RK2206芯片 + OpenHarmony
    的头像 发表于 05-06 17:09 1801次阅读
    基于小<b class='flag-5'>凌</b><b class='flag-5'>派</b><b class='flag-5'>RK2206</b><b class='flag-5'>开发板</b>所制作的简易示波器

    智电子:小-RK2206开发板顺利通过开放原子开源基金会兼容性测评

    3月18日,智电子小-RK2206开发套件顺利完成OpenAtomOpenHarmony
    的头像 发表于 04-13 09:56 1009次阅读
    <b class='flag-5'>凌</b>智电子:小<b class='flag-5'>凌</b><b class='flag-5'>派</b>-<b class='flag-5'>RK2206</b><b class='flag-5'>开发板</b>顺利通过开放原子开源基金会兼容性测评

    基于搭载OpenHarmony小车连接华为云心得体会

    下,终于完成了通过华为云给小车下发工作命令的小车。二、小车介绍这是一款基于OpenHarmony
    的头像 发表于 06-14 11:15 1129次阅读
    基于搭载<b class='flag-5'>OpenHarmony</b><b class='flag-5'>避</b><b class='flag-5'>障</b><b class='flag-5'>小车</b>连接华为云心得体会

    -RK2206开发板:UART控制案例

    -RK2206开发板:UART控制案例一、简介通用异步收发传输器(UniversalAsynchronousReceiver/Transmitter),通常称作UART。它将要传
    的头像 发表于 06-14 11:12 1033次阅读
    小<b class='flag-5'>凌</b><b class='flag-5'>派</b>-<b class='flag-5'>RK2206</b><b class='flag-5'>开发板</b>:UART控制案例