一区二区三区三上|欧美在线视频五区|国产午夜无码在线观看视频|亚洲国产裸体网站|无码成年人影视|亚洲AV亚洲AV|成人开心激情五月|欧美性爱内射视频|超碰人人干人人上|一区二区无码三区亚洲人区久久精品

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

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

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

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

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

1避障小車簡介

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

具體實驗成果展示如下:

2避障小車模塊介紹

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

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

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

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

這是E53模塊的原理圖:

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

1. 直流電機模塊

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

//右直流電機 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);

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

通過閱讀L9110S的芯片手冊可以得到以下真值表:

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

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

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

2. 超聲波測距模塊

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

模塊Trig對應(yīng)引腳GPIO_B0,Echo對應(yīng)引腳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);

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

觸發(fā)信號:

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

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

獲取定時器計數(shù)器當前值:

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

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

上升沿和下降沿的節(jié)拍數(shù)差計算距離。其中,系統(tǒng)時鐘為40MHz,超聲波速度為340米/秒,高電平時間寬度為超聲波的往返之和,所以實際距離 = 節(jié)拍數(shù)差 / 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;

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

3. 舵機模塊

舵機模塊用來控制超聲波測距模塊測量左右方向的距離,舵機引腳為GPIO0_B4,對GPIO0_B4進行初始化。

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

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

通過模擬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);}

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

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

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

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

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

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

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

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

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

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

4心得體會

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

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

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

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

    關(guān)注

    25

    文章

    5389

    瀏覽量

    100889
  • OpenHarmony
    +關(guān)注

    關(guān)注

    26

    文章

    3804

    瀏覽量

    17853
  • RK2206
    +關(guān)注

    關(guān)注

    0

    文章

    38

    瀏覽量

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

    關(guān)注

    0

    文章

    28

    瀏覽量

    1350

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

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

收藏 人收藏

    評論

    相關(guān)推薦

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

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

    基于搭載 OpenHarmony 小車心得體會

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

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

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

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

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

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

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

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

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

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

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

    智電子:小-RK2206開發(fā)板順利通過開放原子開源基金會兼容性測評

    3月18日,智電子小-RK2206開發(fā)套件順利完成OpenAtomOpenHarmony
    的頭像 發(fā)表于 04-13 09:56 ?1181次閱讀
    <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>順利通過開放原子開源基金會兼容性測評

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

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

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

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

    基于小RK2206開發(fā)板OpenHarmony如何使用IoT接口控制ADC外設(shè)

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

    基于小RK2206開發(fā)板OpenHarmony如何使用IoT接口控制GPIO外設(shè)

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

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

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

    基于小RK2206開發(fā)板OpenHarmony如何使用IoT接口控制UART外設(shè)

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

    基于小RK2206開發(fā)板OpenHarmony如何使用IoT接口控制FLASH外設(shè)

    1、實驗簡介本實驗將演示如何在小-RK2206開發(fā)板上使用IOT庫的FLASH接口,進行FLASH編程開發(fā)。例程將創(chuàng)建一個任務(wù),實現(xiàn)FL
    的頭像 發(fā)表于 04-22 14:49 ?173次閱讀
    基于小<b class='flag-5'>凌</b><b class='flag-5'>派</b><b class='flag-5'>RK2206</b><b class='flag-5'>開發(fā)板</b>:<b class='flag-5'>OpenHarmony</b>如何使用IoT接口控制FLASH外設(shè)