衡阳派盒市场营销有限公司

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

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

3天內不再提示

玩嗨OpenHarmony:基于OpenHarmony的機械狗進階版——聽話的狗子

共熵服務中心 ? 來源:未知 ? 2022-11-01 21:25 ? 次閱讀

原文引自CSDN社區 《[立創&傳智&黑馬程序員&CSDN]訓練營——仿生機械狗》

79e91e70-59e8-11ed-a3b6-dac502259ad0.png

編者按 昨天的《玩嗨OpenHarmony:基于OpenHarmony的仿生四足狗開發分享》,大家看到了一只12個自由度可在3D空間移動的機械狗的開發心得。今天分享的機械狗會更上一層樓,不僅僅支持藍牙操控實現復雜動作,而且還是支持通過語音控制的哦。相信大家會喜歡。 1. 功能描述 話不多說,我們先上圖上視頻正視圖:

7a1122a8-59e8-11ed-a3b6-dac502259ad0.jpg

俯視圖:

7a1c3616-59e8-11ed-a3b6-dac502259ad0.png

視頻展示: 狗狗名字叫小嘉,目前這只狗狗已經支持語音控制前進、后退、左轉、右轉、扭身子、握手、跳躍等;支持AP模式,用終端連接熱點,訪問網頁進行控制;還支持使用HC05和藍牙調試器進行控制;超聲波避障還在優化中。 2. 硬件介紹 電源 由于整個項目需要驅動9個舵機,需要比較大的電流,所以供電選用兩節18(直徑)65(長度)0(圓柱形)鋰電池,電源部分主要使用12V-5V,以及5V-3.3V的LDO(這里有個優化點,當時圖簡單,使用的都是LDO(編者注:Low Dropout Regulator 線性穩壓電源 的英文縮寫),實測發熱還是比較嚴重,后面有打算換成DC/DC進行供電)。 用到了LM1084 (商城料號:C259973)和UZ1084(商城料號:C84897)。

7a906db0-59e8-11ed-a3b6-dac502259ad0.png

7aace1e8-59e8-11ed-a3b6-dac502259ad0.png

實際使用電路如下:

7ac87e12-59e8-11ed-a3b6-dac502259ad0.png

2.1 主控電路: 主控使用的是傳智教育的HI3861模組(商城料號C2923578),該模組內置最小系統電路,簡化了該部分電路設計,只需要額外增加一個復位電路以及在電源部分添加一個100nF的旁路電容C7(大電容濾除低頻噪聲,小電容濾除高頻噪聲)即可。

7b6b5a2e-59e8-11ed-a3b6-dac502259ad0.png

下載電路: 在之前的鴻蒙訓練營,沒有添加CH340需要外部接線,給我人接麻了,疼定思痛,加上了CH340G模塊,由于使用的是Typec接口,所以在CC1和CC2要下來倆個電阻,方便電腦識別如果不加有可能會識別不到。另外,Hi3861是3.3V電壓基準,為了保證統一電平,這里CH340G采用3.3V供電(上一期筆者有用5V供電燒錄失敗的經歷)所以對應的V3端口也要接3.3V,而非5V供電時的那樣。

7b7ca950-59e8-11ed-a3b6-dac502259ad0.png

PCB實物如下:

7c08cafc-59e8-11ed-a3b6-dac502259ad0.jpg

2.2 舵機驅動模塊: 由于PCA9685商城沒有現貨,在某寶查了一下價格,買個芯片和買個模塊要花差不多的米,本著提高成功率的態度,買了模塊。

7c1b7134-59e8-11ed-a3b6-dac502259ad0.png

2.3 語音識別模塊:

7c35677e-59e8-11ed-a3b6-dac502259ad0.png

語音識別使用的是鹿小班語音識別模塊,官方簡介:

ASR-01是一顆專用于語音處理的人工智能芯片,可廣泛應用于家電、家居、照明、玩具等產品領域,實現語音交互及控制。

ASR-ONE內置自主研發的腦神經網絡處理器BNPU(編者注:Brain Neural Network Processing Unit的英文縮寫),支持200條命令詞以內的本地語音識別,內置CPU核和高性能低功耗Audio Codec模塊,集成多路UART(編者注:通用非同步收發傳輸器Universal Asynchronous Receiver/Transmitter的英文縮寫)、IIC(編者注:Inter-Integrated Circuit 內部集成電路的英文縮寫)、PWM(編者注:Pulse Width Modulation 脈沖寬度調制的英文縮寫)、GPIO(編者注:General-purpose input/output 通用輸入輸出的英文縮寫)等外圍控制接口,可以開發各類高性價比單芯片智能語音產品方案

他們近期出了一款PRO版本,據說是支持聲紋識別的,筆者還沒買來嘗鮮,有興趣的同學自行了解吧。 2.4 超聲波模塊:

7c70c698-59e8-11ed-a3b6-dac502259ad0.jpg

這里筆者使用的是2022款的超聲波測距模塊HC-SR04 超聲波傳感器,支持兼容UNO R3/51/STM32,該模塊支持普通GPIO模式、IIC模式、UART模式、1-Wire模式,由于串口和IIC已經被用到了其他地方,所以只能選擇GPIO模式或者是1-Wire模式。筆者使用的是GPIO模式,不需要更改電阻。如果使用其他模式需要根據操作手冊進行修改。 3. 軟件介紹 3.1 主體框架: 程序主體還是用的傳智官方的示例,在此基礎上進行了億點點修改,主要是增加了一個串口任務和動作邏輯。

static void UART_Task(void)
{
    IotUartAttribute uart_attr = {
        //baud_rate: 9600
        .baudRate = 9600,
        //data_bits: 8bits
        .dataBits = 8,
        .stopBits = 1,
        .parity = 0,
        .rxBlock = 0,
        .txBlock = 0,
    };
    //Initialize uart driver
    IoTUartInit(HI_UART_IDX_1, &uart_attr);
    while (1)
    {
        printf("=======================================
");
        printf("*************SIZU_example**************
");
        printf("=======================================
");
        // //通過串口1發送數據
        // IoTUartWrite(HI_UART_IDX_1, (unsigned char *)data, strlen(data));
        //通過串口1接收數據
        IoTUartRead(HI_UART_IDX_1, uart_buff_ptr, UART_BUFF_SIZE);
        SIZU_Uart_Cmd((char *)uart_buff_ptr);
        printf("Uart1 read data:%s
", uart_buff_ptr);
        usleep(500000);
    }
}


static void start(void) {
    osThreadAttr_t attr;
    //設置GPIO_2引腳復用功能為PWM
    IoTIoSetFunc(IOT_IO_NAME_5, IOT_IO_FUNC_5_UART1_RXD);
    IoTIoSetFunc(IOT_IO_NAME_6, IOT_IO_FUNC_6_UART1_TXD);
    IoTIoSetFunc(IOT_IO_NAME_10, IOT_IO_FUNC_10_I2C0_SDA);
    IoTIoSetFunc(IOT_IO_NAME_9, IOT_IO_FUNC_9_I2C0_SCL);
    IoTI2cInit(0, 400000);
    dog_init();
    genki_services_start();
    init_service();
    attr.name = "UART_Task";
    attr.attr_bits = 0U;
    attr.cb_mem = NULL;
    attr.cb_size = 0U;
    attr.stack_mem = NULL;
    attr.stack_size = UART_TASK_STACK_SIZE;
    attr.priority = UART_TASK_PRIO;
    if (osThreadNew((osThreadFunc_t)UART_Task, NULL, &attr) == NULL)
    {
        printf("[ADCExample] Falied to create UART_Task!
");
    }
}


APP_FEATURE_INIT(start);
動作邏輯主要參考如下視頻:
//  --------                 --------
// |  D9    |               |  D7    |
// | joint9 |               | joint7 |
//  ----- --------     --------- -----
//       |  D8    |   |  D6    |
//       | joint8 |   | joint6 |
//        --------     --------
//       |  D2    |  |   D4    |
//       | joint2 |  |  joint4 |
//  ----- --------    --------- -----
// |  D3    |               |  D5    |
// | joint3 |               | joint5 |
//  --------                 --------
//                Front
————————————————
3.2 語音識別 語音識別參考的筆者之前做的筆記: 《OpenHarmony學習筆記——Hi3861+ASR-01的語音識別助手》(https://blog.csdn.net/qq_41954556/article/details/123905578)。 由于功能比較簡單,也就沒有去弄數據包,一個簡單的開頭和一個數字,然后使用atoi函數獲取數字,進行判斷,最后執行操作即可。
// An highlighted block
enum{
    Get_Down,//趴下
  Hand_shake,//握手
    Go_Forward,//前進
    Go_Backward,//后退
    Go_Left,//左轉
    Go_Right,//右轉
    Twist_Body,//扭身子
    Stretch_Oneself,//伸懶腰
    WAIT//d
};


//檢測串口指令
void SIZU_Uart_Cmd(char *str)      
{
    char  *Str;
    unsigned char ID=255;
  
    Str=&str[1];//定位到指令的數字部分“U1”
    ID=atoi(Str);
  
  if(strstr((const char *)str,"G")!=NULL)      //如果字符串str中包含有“G”
  {
    switch(ID)
    {
      case Get_Down:  //趴下  G0
                sithome();
                printf("Get_Down
");
        break;
      case Hand_shake:  // 握手G1
                wink(10);
                printf("Handshake
");
        break;
      case Go_Forward:  // 前進G2
                forward(5);
                printf("Go_Forward
");
        break;
      case Go_Backward:  // 后退G3
                 backward(5);
                 printf("Go_Backward
");
        break;
            case Go_Left:  // 左轉G4
                leftturn(5);
                 printf("Go_Left
");
        break;
             case Go_Right:  // 右轉G5
                 rightturn(5);
                 printf("Go_Right
");
        break;
            case Twist_Body:  // 扭身子
                 twist();
                 printf("LED_Add
");
        break;
            case Stretch_Oneself:  //伸懶腰
                 printf("LED_Reduce
");
                 stand3();
        break;
      default:
        printf("%s ERROR",str);
                standhome();
        break;
    }
  }
    memset(uart_buff,0,sizeof(uart_buff));
}
OLED顯示表情,這個需要找到表情包GIF然后分離出單幀表情,取模,顯示,詳細的取模過程參考博客:《0.96寸OLED取模教程——字符與圖片取模》(https://blog.csdn.net/qq_39400113/article/details/108036400) 語音識別的關鍵詞使用的是天問的鹿小班模塊,內置圖形化編程模塊,YYDS!會拖動模塊就可以了,想玩語音識別的,強烈推薦此款。

7c7ca486-59e8-11ed-a3b6-dac502259ad0.png

3.3 超聲波測距 這里筆者使用的是GPIO模式,利用兩個GPIO口進行控制和捕獲,進而計算出距離,詳細介紹請參考筆者的博客《OpenHarmony南向學習筆記——Hi3861+HC-SR04超聲波檢測》(https://blog.csdn.net/qq_41954556/article/details/125910794)

通信流程:

根據廠商資料可以知道,該模塊的通信流程如下:

主控芯片與TRIG連接的IO配置為輸出模式,與ECHO連接的IO配置為輸入模式;

MCU(編者注:Micro Controller Unit 微控制單元的英文縮寫)給TRIG引腳輸出一個大于10us的高電平脈沖;

模塊通過ECHO腳返回一個高電平脈沖信號

主控記錄ECHO腳高電平脈沖時間T并代入公式計算。

代碼:

// An highlighted block


#define Echo  8   //Echo   //GPIO8
#define Trig  7   //Trig   //GPIO7
#define GPIO_FUNC 0


float GetDistance  (void) {
    static unsigned long start_time = 0, time = 0;
    float distance = 0.0;
    IotGpioValue value = IOT_GPIO_VALUE0;
    unsigned int flag = 0;
/*========GPIO通信模式流程1初始化GPIO =============== */
    IoTIoSetFunc(Echo, GPIO_FUNC);//設置Echo連接IO為普通GPIO模式,無復用
    IoTGpioSetDir(Echo, IOT_GPIO_DIR_IN);//設置Echo連接IO為輸入模式
    IoTGpioSetDir(Trig, IOT_GPIO_DIR_OUT);//設置Trig連接IO為輸出模式
/* ======== GPIO通信模式流程 2輸出起始信號 =============== */
    IoTGpioSetOutputVal(Trig, IOT_GPIO_VALUE1);//拉高Trig
    IoTUdelay(20);//20us
    IoTGpioSetOutputVal(Trig, IOT_GPIO_VALUE0);//拉低Trig
/* ======== GPIO通信模式流程 3檢測Echo腳輸出的高電平時間 ==== */
    while (1) {
        IoTGpioGetInputVal(Echo, &value);//讀取Echo腳的電平狀態
        if ( value == IOT_GPIO_VALUE1 && flag == 0) {//如果為高
            start_time = IoTGetUs();//獲取此時時間
            flag = 1;
        }
        if (value == IOT_GPIO_VALUE0 && flag == 1) {//高電平結束變成低電平
            time = IoTGetUs() - start_time;//計算高電平維持時間
            start_time = 0;
            break;
        }
    }
/* ======== GPIO通信模式流程 4代入公式計算 ====== */
    distance = time * 0.034 / 2;
    // printf("distance is %f
",distance);
    return distance;
}
4. 機械結構 筆者也是第一次自己繪制3D結構件,還不太OK啊,跟著畫了個錘子,然后覺著自己畫的結構實在不太靠譜,于是去海鮮市場撈了一個,有相同煩惱的同學可以去看看。

7c9d9e66-59e8-11ed-a3b6-dac502259ad0.png

7cb9cde8-59e8-11ed-a3b6-dac502259ad0.png

4.1 物料清單

四足機器人3D打印件(打印件不是整機,電子件、螺絲等自備)38 * 1

SG90 MG90S 9g舵機 固定翼航模遙控飛機 9克 馬達航模5.99 * 9

16路PWM舵機驅動板PCA9685控制器機器人IIC適用MG90S SG90 MG995 19.6 * 1

鋰電池兩節18650或者2S,大約30-40,加上OLED、超聲波模塊,M3螺絲、螺母、銅柱、模組、芯片一起大約200成本。

總結 感謝立創EDA、傳智、黑馬程序員、CSDN提供的鴻蒙物聯網實戰訓練營活動,在本次活動中學到了很多之前未接觸的知識,受益良多。 寫在最后 我們最近正帶著大家玩嗨OpenHarmony。如果你有好玩的東東,歡迎投稿,讓我們一起嗨起來!有點子,有想法,有Demo,立刻聯系我們: 合作郵箱:zzliang@atomsource.org

7cd6f814-59e8-11ed-a3b6-dac502259ad0.gif

7cf3da60-59e8-11ed-a3b6-dac502259ad0.png7d5254dc-59e8-11ed-a3b6-dac502259ad0.png7d6fddb8-59e8-11ed-a3b6-dac502259ad0.png7da2e366-59e8-11ed-a3b6-dac502259ad0.png

7dbadc14-59e8-11ed-a3b6-dac502259ad0.png

7e0fab40-59e8-11ed-a3b6-dac502259ad0.png

7ebf8254-59e8-11ed-a3b6-dac502259ad0.png

7ed3cd54-59e8-11ed-a3b6-dac502259ad0.png

7f122df6-59e8-11ed-a3b6-dac502259ad0.png

原文標題:玩嗨OpenHarmony:基于OpenHarmony的機械狗進階版——聽話的狗子

文章出處:【微信公眾號:開源技術服務中心】歡迎添加關注!文章轉載請注明出處。

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

    關注

    0

    文章

    18

    瀏覽量

    4867
  • OpenHarmony
    +關注

    關注

    25

    文章

    3747

    瀏覽量

    16586

原文標題:玩嗨OpenHarmony:基于OpenHarmony的機械狗進階版——聽話的狗子

文章出處:【微信號:開源技術服務中心,微信公眾號:共熵服務中心】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    OpenHarmony程序分析框架論文入選ICSE 2025

      近日,ICSE 2025軟件工程實踐Track放榜,面向OpenAtom OpenHarmony(以下簡稱“OpenHarmony”)的ArkTS程序分析基礎框架--方舟程序分析器(論文題目為
    的頭像 發表于 01-02 13:41 ?228次閱讀
    <b class='flag-5'>OpenHarmony</b>程序分析框架論文入選ICSE 2025

    OpenHarmony應用開發精品課程重磅來襲

    第一階段為期兩個月的10期課程,多位資深技術專家為你講解原理、分享經驗,帶領你一塊進行代碼實操,助力你從小白進階成為OpenHarmony應用開發高手。
    的頭像 發表于 11-02 08:03 ?297次閱讀
    <b class='flag-5'>OpenHarmony</b>應用開發精品課程重磅來襲

    第三屆OpenHarmony技術大會星光璀璨、致謝OpenHarmony社區貢獻者

    10月12日,在上海舉辦的第三屆OpenHarmony技術大會上,32家高校OpenHarmony技術俱樂部璀璨亮相,30家高校OpenHarmony開發者協會盛大啟幕。還分別致謝了年度星光TSG
    的頭像 發表于 10-21 14:10 ?255次閱讀

    第三屆OpenHarmony技術大會 “OpenHarmony開發者激勵計劃”授牌儀式圓滿舉行

    10月12日,以“技術引領筑生態,萬物智聯創未來”為主題的第三屆OpenHarmony技術大會隆重舉行,“OpenHarmony開發者激勵計劃”授牌儀式在大會期間同步進行。該計劃旨在增加
    的頭像 發表于 10-21 11:48 ?325次閱讀
    第三屆<b class='flag-5'>OpenHarmony</b>技術大會 “<b class='flag-5'>OpenHarmony</b>開發者激勵計劃”授牌儀式圓滿舉行

    OpenHarmony年度技術俱樂部、個人及活動評選結果公示

    2024年度技術俱樂部評選活動已經圓滿結束。在此,OpenHarmony項目群技術指導委員會(TSC)對所有參與者的積極參與和辛勤付出表示感謝。經過嚴格的評選和審核,現將名單予以公示: 評選
    的頭像 發表于 10-05 08:07 ?306次閱讀

    基于ArkTS語言的OpenHarmony APP應用開發:HelloOpenharmony

    1、程序簡介該程序是基于OpenHarmony標準系統編寫的UI應用類:HelloOpenHarmony。本案例是基于API9接口開發。本案例已在OpenHarmony凌蒙派-RK3568開發
    的頭像 發表于 09-15 08:09 ?480次閱讀
    基于ArkTS語言的<b class='flag-5'>OpenHarmony</b> APP應用開發:Hello<b class='flag-5'>Openharmony</b>

    基于ArkTS語言的OpenHarmony APP應用開發:HelloOpenharmony

    1、程序簡介 該程序是基于OpenHarmony標準系統編寫的UI應用類:HelloOpenHarmony。 本案例是基于API 9接口開發。 本案例已在OpenHarmony凌蒙派-RK3568
    發表于 09-14 12:47

    河南大學OpenHarmony技術俱樂部正式揭牌成立

    8月30日,由OpenAtom OpenHarmony(以下簡稱“OpenHarmony”)項目群技術指導委員會與河南大學共同舉辦的“河南大學OpenHarmony技術俱樂部成立大會”在鄭州校區友蘭
    的頭像 發表于 09-03 16:12 ?478次閱讀
    河南大學<b class='flag-5'>OpenHarmony</b>技術俱樂部正式揭牌成立

    openharmony移植AT32F407編譯時錯誤

    openharmony上移植AT32F407,hb build后出現鏈接錯誤 [OHOS ERROR] /home/sven/openharmony/env_setup
    發表于 08-18 17:04

    OpenHarmony之開機優化

    一丶環境信息 源碼版本:OpenHarmony-4.1-Release 板子型號:dayu200(RK3568) 二丶Bootchart工具 在開機優化時,我們需要借助Bootchart工具,當前
    發表于 07-01 16:39

    鴻蒙OpenHarmony【創建工程并獲取源碼】

    在通過DevEco Device Tool創建OpenHarmony工程時,可自動下載相應版本的OpenHarmony源碼。
    的頭像 發表于 04-19 21:40 ?420次閱讀
    鴻蒙<b class='flag-5'>OpenHarmony</b>【創建工程并獲取源碼】

    OpenHarmony南向開發案例:【分布式畫板】

    使用OpenHarmony3.1-Release開發的應用。通過OpenHarmony的分布式技術,使多人能夠一起畫畫。
    的頭像 發表于 04-12 14:40 ?1103次閱讀
    <b class='flag-5'>OpenHarmony</b>南向開發案例:【分布式畫板】

    OpenHarmony南向能力征集令

    1、適配過程中缺少哪些接口能力或者南向能力,需要OpenHarmony去補齊的?例如內核、編譯、器件適配、單板適配等; 2、對標linux,需要OpenHarmony提供哪些能力?比如V4L2
    發表于 04-09 15:32

    OpenAtom OpenHarmony 4.1 Release版本正式發布

    近日,OpenAtom OpenHarmony(以下簡稱“OpenHarmony”)4.1 Release版本如期而至,開發套件同步升級到API 11 Release。
    的頭像 發表于 04-07 11:43 ?744次閱讀

    OpenHarmony內核編程實戰

    編程入門[Hello,OpenHarmony]在正式開始之前,對于剛接觸OpenHarmony的伙伴們,面對大篇幅的源碼可能無從下手,不知道怎么去編碼寫程序,下面用一個簡單的例子帶伙伴們入門。▍任務
    的頭像 發表于 03-27 08:31 ?942次閱讀
    <b class='flag-5'>OpenHarmony</b>內核編程實戰
    隆德县| 大发888的示例| 百家乐官网庄闲统计数| 金宝博网站| 百家乐赌博娱乐城大全| 麻将百家乐官网筹码| 大发888优惠码| 百家乐六合彩3535| 百家乐官网双龙| 网络博彩群| 圣淘沙百家乐的玩法技巧和规则 | 财神真人娱乐城| 威尼斯人娱乐场内幕| 百家乐赌假的工具| 怎样玩百家乐官网看路| 新宝娱乐| 太阳百家乐管理网| 百家乐是片人的吗| 百家乐官网如何买大小| 网上百家乐官网危险| 大发888娱乐城客户端迅雷下载 | 新葡京娱乐场| 查找百家乐群| 百家乐代理博彩正网| 真人百家乐官网国际第一品牌| 遵义市| 大发888电话客服| 真人百家乐软件云南景| 三元玄空24山坐向| 真人百家乐官网代理分成| 德兴市| 大发888作弊| 大上海百家乐娱乐城| 澳门百家乐开户投注| 帝王百家乐官网的玩法技巧和规则| 百家乐官网赌博软件下载| 自贡市| 3d棋牌游戏| 北京太阳城二手房| 百家乐娱乐网官网网| 评测百家乐博彩网站|