0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

基于OpenHarmony系統(tǒng)和小凌派RK2206開發(fā)板的避障小車

電子發(fā)燒友開源社區(qū) ? 來(lái)源:HarmonyOS官方合作社區(qū) ? 作者:凌睿智捷 ? 2022-04-21 07:58 ? 次閱讀

1避障小車簡(jiǎn)介

這是一款基于OpenHarmony系統(tǒng)和小凌派-RK2206開發(fā)板的避障小車。同時(shí),小車上搭載了超聲波測(cè)距模塊、舵機(jī)模塊、紅外尋跡模塊、直流電機(jī)模塊。

具體實(shí)驗(yàn)成果展示如下:

2避障小車模塊介紹

小凌派-RK2206開發(fā)板的示意圖

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

小凌派配置了一個(gè)E53外接拓展口,這是E53接口的原理圖:

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

這是E53模塊的原理圖:

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

1. 直流電機(jī)模塊

直流電機(jī)模塊由E53模塊上的L9110S驅(qū)動(dòng)芯片進(jìn)行驅(qū)動(dòng)。L9110S驅(qū)動(dòng)芯片所引出的引腳對(duì)應(yīng)接口的GPIO0_B7、GPIO0_B6,另一塊驅(qū)動(dòng)芯片對(duì)應(yīng)GPIO1_D0、GPIO0_A5。我們對(duì)相應(yīng)的GPIO引腳進(jìn)行初始化并設(shè)置為上拉模式。

//右直流電機(jī) IA GPIO0_PB7PinctrlSet(GPIO0_PB7, MUX_FUNC0, PULL_UP, DRIVE_KEEP);LzGpioInit(GPIO0_PB7);
//右直流電機(jī) IB GPIO0_PB6PinctrlSet(GPIO0_PB6, MUX_FUNC0, PULL_UP, DRIVE_KEEP);LzGpioInit(GPIO0_PB6);
//左直流電機(jī) IB GPIO1_PD0PinctrlSet(GPIO1_PD0, MUX_FUNC0, PULL_UP, DRIVE_KEEP);LzGpioInit(GPIO1_PD0);
//左直流電機(jī) IA GPIO0_PA5PinctrlSet(GPIO0_PA5, MUX_FUNC0, PULL_UP, DRIVE_KEEP);LzGpioInit(GPIO0_PA5);

(左右移動(dòng)查看全部?jī)?nèi)容)

通過(guò)閱讀L9110S的芯片手冊(cè)可以得到以下真值表:

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

通過(guò)真值表,我們可以通過(guò)對(duì)IO口的輸出來(lái)控制直流電機(jī)的正轉(zhuǎn)、反轉(zhuǎn)還有停止:

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

2. 超聲波測(cè)距模塊

超聲波測(cè)距模塊用來(lái)計(jì)算出模塊到前方障礙物的距離。采用IO口TRIG觸發(fā)測(cè)距,給最少10us的高電平信號(hào)。模塊自動(dòng)發(fā)送8個(gè)40khz的方波,自動(dòng)檢測(cè)是否有信號(hào)返回;有信號(hào)返回,通過(guò)IO口ECHO輸出一個(gè)高電平,同時(shí)開定時(shí)器計(jì)時(shí),當(dāng)此口變?yōu)榈碗娖綍r(shí)就可以讀定時(shí)器的值,高電平持續(xù)的時(shí)間就是超聲波從發(fā)射到返回的時(shí)間。

模塊Trig對(duì)應(yīng)引腳GPIO_B0,Echo對(duì)應(yīng)引腳GPIO_B1,對(duì)這兩個(gè)引腳進(jìn)行初始化

// 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);

(左右移動(dòng)查看全部?jī)?nèi)容)

觸發(fā)信號(hào):

//通過(guò)Trig發(fā)送觸發(fā)信號(hào)LzGpioSetVal(GPIO0_PB0, LZGPIO_LEVEL_HIGH);HAL_DelayUs(20);LzGpioSetVal(GPIO0_PB0, LZGPIO_LEVEL_LOW);

(左右移動(dòng)查看全部?jī)?nèi)容)

獲取定時(shí)器計(jì)數(shù)器當(dāng)前值:

while (1)  {    LzGpioGetVal(GPIO_8, &value);    //獲取上升沿的定時(shí)器計(jì)數(shù)器當(dāng)前值    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;    }    //獲取下降沿的定時(shí)器計(jì)數(shù)器當(dāng)前值    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;    }  }

(左右移動(dòng)查看全部?jī)?nèi)容)

上升沿和下降沿的節(jié)拍數(shù)差計(jì)算距離。其中,系統(tǒng)時(shí)鐘為40MHz,超聲波速度為340米/秒,高電平時(shí)間寬度為超聲波的往返之和,所以實(shí)際距離 = 節(jié)拍數(shù)差 / 40MHz / 340(米/秒) / 2(往返2次)。具體計(jì)算代碼如下:

if (m_echo_info.flag == EECHO_FLAG_CAPTURE_SUCCESS)  {/* 如果是采集成功,則計(jì)算距離 */    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;

(左右移動(dòng)查看全部?jī)?nèi)容)

3. 舵機(jī)模塊

舵機(jī)模塊用來(lái)控制超聲波測(cè)距模塊測(cè)量左右方向的距離,舵機(jī)引腳為GPIO0_B4,對(duì)GPIO0_B4進(jìn)行初始化。

//舵機(jī)PinctrlSet(GPIO0_PB4, MUX_FUNC0, PULL_KEEP, DRIVE_KEEP);LzGpioInit(GPIO0_PB4);LzGpioSetDir(GPIO0_PB4, LZGPIO_DIR_OUT);

(左右移動(dòng)查看全部?jī)?nèi)容)

通過(guò)模擬PWM波讓舵機(jī)工作。具體代碼如下:

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);}

(左右移動(dòng)查看全部?jī)?nèi)容)

4. 紅外尋跡模塊

紅外尋跡模塊,在避障小車中的功能是防止小車意外掉落。紅外尋跡模塊與小凌派的GPIO0_A2、GPIO0_C4連接,對(duì)這兩個(gè)引腳進(jìn)行初始化。

//初始化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);

(左右移動(dòng)查看全部?jī)?nèi)容)

3避障小車功能實(shí)現(xiàn)

通過(guò)小凌派開發(fā)板自帶的按鍵啟動(dòng)小車的避障功能

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

(左右移動(dòng)查看全部?jī)?nèi)容)

通過(guò)超聲波測(cè)距模塊測(cè)量前方距離來(lái)判斷小車接下來(lái)要運(yùn)動(dòng)的方向。若距離大于等于20cm繼續(xù)前進(jìn)。若距離小于20cm,先停止再后退0.5s,再繼續(xù)進(jìn)行測(cè)距,再進(jìn)行判斷。通過(guò)兩個(gè)紅外尋跡傳感器可以防止小車掉落,當(dāng)紅外傳感器輸出為高電平時(shí),小車就會(huì)停止前進(jìn),并且重新尋找安全方向。

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
");  }}

(左右移動(dòng)查看全部?jī)?nèi)容)

4心得體會(huì)

通過(guò)使用OpenHarmony操作系統(tǒng) + 小凌派-RK2206開發(fā)板來(lái)控制小車完成距離檢測(cè)、前進(jìn)、后退、左轉(zhuǎn)、右轉(zhuǎn)、判斷算法等功能,實(shí)現(xiàn)了避障小車的基本功能。經(jīng)過(guò)這一次實(shí)驗(yàn)測(cè)試,加強(qiáng)我個(gè)人對(duì)OpenHarmony的理解,實(shí)在是一次不錯(cuò)的學(xué)習(xí)體驗(yàn),特此記錄!

原文標(biāo)題:基于搭載 OpenHarmony 避障小車心得體會(huì)

文章出處:【微信公眾號(hào):HarmonyOS官方合作社區(qū)】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

審核編輯:湯梓紅
聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 開發(fā)板
    +關(guān)注

    關(guān)注

    25

    文章

    4896

    瀏覽量

    97058
  • OpenHarmony
    +關(guān)注

    關(guān)注

    25

    文章

    3635

    瀏覽量

    16061
  • RK2206
    +關(guān)注

    關(guān)注

    0

    文章

    34

    瀏覽量

    1756
  • 小凌派
    +關(guān)注

    關(guān)注

    0

    文章

    27

    瀏覽量

    1187

原文標(biāo)題:基于搭載 OpenHarmony 避障小車心得體會(huì)

文章出處:【微信號(hào):HarmonyOS_Community,微信公眾號(hào):電子發(fā)燒友開源社區(qū)】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏

    評(píng)論

    相關(guān)推薦

    基于OpenHarmony+小RK2206開發(fā)板制作的簡(jiǎn)易示波器

    基于OpenHarmony + 小RK2206開發(fā)板制作的簡(jiǎn)易示波器,實(shí)時(shí)采集波形,實(shí)時(shí)計(jì)算并實(shí)時(shí)顯示對(duì)應(yīng)的波形。
    的頭像 發(fā)表于 05-10 09:02 ?4334次閱讀

    RK2206鴻蒙開發(fā)板新品首發(fā)試用

    鴻蒙開發(fā)板 瑞芯微RK2206 OpenHarmony系統(tǒng) E53 loT物聯(lián)網(wǎng)了解更多
    發(fā)表于 03-28 17:12

    基于搭載 OpenHarmony 小車心得體會(huì)

    文章提供:福州市睿智捷電子有限公司一、 小車簡(jiǎn)介這是一款基于OpenHarmony系統(tǒng)和小
    發(fā)表于 04-15 15:07

    輕量系統(tǒng)開發(fā)套件介紹:睿智捷 | 小-RK2206 開發(fā)板套件

    睿智捷 | 小-RK2206 開發(fā)板套件是由福州市睿智捷電子有限公司出品,主控器為瑞芯微
    發(fā)表于 04-21 13:39

    【小RK2206開發(fā)板試用體驗(yàn)】2、開箱及hello

    \lockzhiner-rk2206\images5、下載固件:6、下載成功后就可以看到串口打印了:總結(jié):今天第一次拿開發(fā)板,對(duì)于
    發(fā)表于 05-02 14:54

    【小RK2206開發(fā)板試用體驗(yàn)】第2章 源碼編譯與固件下載

    開發(fā)環(huán)境:開發(fā)系統(tǒng):Ubuntu 20.04開發(fā)板:小-
    發(fā)表于 05-08 14:02

    【小RK2206開發(fā)板試用體驗(yàn)】第3章 應(yīng)用開發(fā)

    開發(fā)環(huán)境:開發(fā)系統(tǒng):Ubuntu 20.04開發(fā)板:小-
    發(fā)表于 05-08 14:07

    【小RK2206開發(fā)板試用體驗(yàn)】二運(yùn)行

    入手后,我申請(qǐng)的是人體感應(yīng)套件,所以首先 查詢資料docsoard硬件原理圖小開發(fā)板原理圖只提供底板的原理圖,核心原理圖可在開發(fā)板
    發(fā)表于 06-02 10:23

    【小RK2206開發(fā)板試用體驗(yàn)】OpenHarmony華為云IoT應(yīng)用開發(fā)-智慧井蓋

    本帖最后由 周安平 于 2022-6-4 10:07 編輯 【小RK2206開發(fā)板試用體驗(yàn)】OpenHarmony華為云IoT應(yīng)用
    發(fā)表于 06-03 20:48

    RK2206開發(fā)板搭載OpenHarmony操作系統(tǒng)簡(jiǎn)介

    1、小-RK2206開發(fā)板簡(jiǎn)介小-RK2206
    發(fā)表于 07-28 17:28

    RK2206開發(fā)板順利通過(guò)開放原子開源基金會(huì)XTS認(rèn)證

    -RK2206開發(fā)板OpenHarmony 良好兼容、系統(tǒng)互通,符合 OpenHarmony 兼容性設(shè)計(jì)要求及認(rèn)證標(biāo)準(zhǔn)。 未來(lái),
    的頭像 發(fā)表于 03-23 16:18 ?4930次閱讀
    小<b class='flag-5'>凌</b><b class='flag-5'>派</b><b class='flag-5'>RK2206</b><b class='flag-5'>開發(fā)板</b>順利通過(guò)開放原子開源基金會(huì)XTS認(rèn)證

    基于小RK2206開發(fā)板所制作的簡(jiǎn)易示波器

    RK2206開發(fā)板而做的簡(jiǎn)易示波器開發(fā)。 本開發(fā)以瑞芯微RK2206芯片 + OpenHarmony
    的頭像 發(fā)表于 05-06 17:09 ?1728次閱讀
    基于小<b class='flag-5'>凌</b><b class='flag-5'>派</b><b class='flag-5'>RK2206</b><b class='flag-5'>開發(fā)板</b>所制作的簡(jiǎn)易示波器

    智電子:小-RK2206開發(fā)板順利通過(guò)開放原子開源基金會(huì)兼容性測(cè)評(píng)

    3月18日,智電子小-RK2206開發(fā)套件順利完成OpenAtomOpenHarmony
    的頭像 發(fā)表于 04-13 09:56 ?970次閱讀
    <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'>開發(fā)板</b>順利通過(guò)開放原子開源基金會(huì)兼容性測(cè)評(píng)

    基于搭載OpenHarmony小車連接華為云心得體會(huì)

    下,終于完成了通過(guò)華為云給小車下發(fā)工作命令的小車。二、小車介紹這是一款基于OpenHarmony
    的頭像 發(fā)表于 06-14 11:15 ?1086次閱讀
    基于搭載<b class='flag-5'>OpenHarmony</b><b class='flag-5'>避</b><b class='flag-5'>障</b><b class='flag-5'>小車</b>連接華為云心得體會(huì)

    -RK2206開發(fā)板:UART控制案例

    -RK2206開發(fā)板:UART控制案例一、簡(jiǎn)介通用異步收發(fā)傳輸器(UniversalAsynchronousReceiver/Transmitter),通常稱作UART。它將要傳
    的頭像 發(fā)表于 06-14 11:12 ?965次閱讀
    小<b class='flag-5'>凌</b><b class='flag-5'>派</b>-<b class='flag-5'>RK2206</b><b class='flag-5'>開發(fā)板</b>:UART控制案例