在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

基于OpenHarmony系統和小凌派RK2206開發板的避障小車

電子發燒友開源社區 ? 來源: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);

(左右移動查看全部內容)

通過模擬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官方合作社區】歡迎添加關注!文章轉載請注明出處。

審核編輯:湯梓紅
聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 開發板
    +關注

    關注

    25

    文章

    5565

    瀏覽量

    102755
  • OpenHarmony
    +關注

    關注

    28

    文章

    3836

    瀏覽量

    18220
  • RK2206
    +關注

    關注

    0

    文章

    38

    瀏覽量

    2117
  • 小凌派
    +關注

    關注

    0

    文章

    28

    瀏覽量

    1389

原文標題:基于搭載 OpenHarmony 避障小車心得體會

文章出處:【微信號:HarmonyOS_Community,微信公眾號:電子發燒友開源社區】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦
    熱點推薦

    基于OpenHarmony+小RK2206開發板制作的簡易示波器

    基于OpenHarmony + 小RK2206開發板制作的簡易示波器,實時采集波形,實時計算并實時顯示對應的波形。
    的頭像 發表于 05-10 09:02 ?5098次閱讀

    基于搭載 OpenHarmony 小車心得體會

    文章提供:福州市睿智捷電子有限公司一、 小車簡介這是一款基于OpenHarmony系統和小
    發表于 04-15 15:07

    輕量系統開發套件介紹:睿智捷 | 小-RK2206 開發板套件

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

    【小RK2206開發板試用體驗】第2章 源碼編譯與固件下載

    開發環境:開發系統:Ubuntu 20.04開發板:小-
    發表于 05-08 14:02

    【小RK2206開發板試用體驗】第3章 應用開發

    開發環境:開發系統:Ubuntu 20.04開發板:小-
    發表于 05-08 14:07

    RK2206開發板搭載OpenHarmony操作系統簡介

    1、小-RK2206開發板簡介小-RK2206
    發表于 07-28 17:28

    基于小RK2206開發板所制作的簡易示波器

    RK2206開發板而做的簡易示波器開發。 本開發以瑞芯微RK2206芯片 + OpenHarmony
    的頭像 發表于 05-06 17:09 ?2128次閱讀
    基于小<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 ?1261次閱讀
    <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 ?1414次閱讀
    基于搭載<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 ?1412次閱讀
    小<b class='flag-5'>凌</b><b class='flag-5'>派</b>-<b class='flag-5'>RK2206</b><b class='flag-5'>開發板</b>:UART控制案例

    基于小RK2206開發板OpenHarmony如何使用IoT接口控制ADC外設

    1、案例簡介本案例主要講解如何在小-RK2206開發板上使用IoT庫的ADC接口,進行ADC編程開發。例程內容為創建一個任務,讀取按鍵的
    的頭像 發表于 04-10 16:00 ?353次閱讀
    基于小<b class='flag-5'>凌</b><b class='flag-5'>派</b><b class='flag-5'>RK2206</b><b class='flag-5'>開發板</b>:<b class='flag-5'>OpenHarmony</b>如何使用IoT接口控制ADC外設

    基于小RK2206開發板OpenHarmony如何使用IoT接口控制GPIO外設

    1、案例簡介本案例主要是如何在小-RK2206開發板上使用IOT庫的GPIO接口,進行GPIO編程開發。例程將創建一個任務,通過配置GP
    的頭像 發表于 04-11 15:36 ?901次閱讀
    基于小<b class='flag-5'>凌</b><b class='flag-5'>派</b><b class='flag-5'>RK2206</b><b class='flag-5'>開發板</b>:<b class='flag-5'>OpenHarmony</b>如何使用IoT接口控制GPIO外設

    基于小RK2206開發板OpenHarmony如何使用IoT接口控制GPIO中斷

    1、實驗簡介本實驗將演示如何在小-RK2206開發板上使用IOT庫的GPIO中斷模式,進行GPIO編程開發。例程將創建一個任務,通過配置
    的頭像 發表于 04-21 10:39 ?374次閱讀
    基于小<b class='flag-5'>凌</b><b class='flag-5'>派</b><b class='flag-5'>RK2206</b><b class='flag-5'>開發板</b>:<b class='flag-5'>OpenHarmony</b>如何使用IoT接口控制GPIO中斷

    基于小RK2206開發板OpenHarmony如何使用IoT接口控制UART外設

    1、實驗簡介本實驗將演示如何在小-RK2206開發板上使用IOT庫的UART接口,進行UART編程開發。例程將創建一個任務,通過配置UA
    的頭像 發表于 04-22 14:22 ?354次閱讀
    基于小<b class='flag-5'>凌</b><b class='flag-5'>派</b><b class='flag-5'>RK2206</b><b class='flag-5'>開發板</b>:<b class='flag-5'>OpenHarmony</b>如何使用IoT接口控制UART外設

    基于小RK2206開發板OpenHarmony如何使用IoT接口控制FLASH外設

    1、實驗簡介本實驗將演示如何在小-RK2206開發板上使用IOT庫的FLASH接口,進行FLASH編程開發。例程將創建一個任務,實現FL
    的頭像 發表于 04-22 14:49 ?286次閱讀
    基于小<b class='flag-5'>凌</b><b class='flag-5'>派</b><b class='flag-5'>RK2206</b><b class='flag-5'>開發板</b>:<b class='flag-5'>OpenHarmony</b>如何使用IoT接口控制FLASH外設
    主站蜘蛛池模板: 免费特黄一区二区三区视频一 | 热99热| 么公的好大好硬好深好爽在线视频 | 噜噜噜久久 | 亚洲欲色 | 亚色成人 | 久久久久久亚洲精品 | 天天摸日日 | 手机看片福利日韩 | 国模吧一区二区三区精品视频 | xxxxbbbb欧美| 欲妇放荡叫床很浪的小说 | 一个人看aaaa免费中文 | 欧美亚洲一区二区三区在线 | 全部免费特黄特色大片视频 | 2021国产成人午夜精品 | 日韩成人在线影院 | 日日操夜夜操免费视频 | 久久久久久噜噜噜久久久精品 | 天天草比 | 国产jlzzjlzz视频免费 | 国产美女亚洲精品久久久综合 | 97理论三级九七午夜在线观看 | 特一级毛片 | 成 人色 网 站 欧美大片在线观看 | 一级做a爰片久久毛片免费 一级做a爰片久久毛片免费看 | 91亚洲国产成人久久精品网站 | 成人欧美一区二区三区小说 | 久月婷婷| 韩国a级床戏大尺度在线观看 | 超级乱淫小黄文小说 | 国产精品资源在线观看 | 午夜视频免费观看黄 | 色天天天天综合男人的天堂 | 在线亚洲国产精品区 | 国产视频第一页 | 一级片观看 | 欧美特黄视频在线观看 | 亚洲国产福利 | 四虎影在永久地址在线观看 | 性做久久久久久免费观看 |