1小時打造HaaS版小小蠻驢智能車

前言

2020年雲棲大會上,阿里雲發佈了一款機器人“小蠻驢”,瞬間激起千層浪,無人車,智能物流,機器人等一些概念又火熱了一把。

借“小蠻驢”的東風以及火熱的HaaS,我們推出了更加親民的“小小蠻驢”,豐富HaaS的場景打造,全面開放的雲、端、釘示例也能助力開發者學習全鏈路知識,吸引更多的開發者和企業來加入HaaS的生態建設。

 

1、認識一下小小蠻驢真面目

1.1、組件部分

image.png

HaaS100核心板

HaaS100是一款物聯網場景中的標準硬件,並配套嵌入到硬件中的軟件驅動及功能模塊,爲用戶提供物聯網設備高效開發服務。

image.png

HaaS100核心板有着豐富的外設接口,如下所示:

image.png

詳細的資料參考HaaS100 硬件規格

智能車底板電路

  • 紅外接收頭子,實現紅外遙控小車
  • 5V電源穩壓芯片
  • 電機驅動芯片,電流可達2A,爲小車提供強大的動力
  • 電源指示燈
  • 保護二極管

其他豐富接口

  • 電機接口
  • 超聲波模塊接口
  • 舵機模塊接口
  • 測速模塊接口
  • 紅外避障模塊接口
  • 電池座接口
  • HaaS連接接口

1.2、重要模塊介紹

1.2.1、驅動電機

驅動電機芯片是小車最重要的模塊之一,2A的強大輸出電流爲小車提供滿滿的動力。

驅動模塊的接口定義

接口

HaaS100

模式

IN1

GPIO47

O

IN2

GPIO40

O

ENA

GPIO24

O

IN3

GPIO26

O

IN4

GPIO46

O

ENB

GPIO25

O

其中,IN1和IN2是控制小車的左電機,IN3和IN4是控制小車的右電機,ENA和ENB引腳爲輸出使能管腳,高電平有效,IN1、IN2、IN3和IN4可以通過PWM脈衝調速。

電機控制:

IN1高電平,IN2低電平,左電機正傳;

IN1低電平,IN2高電平,左電機反傳;

IN3高電平,IN4低電平,右電機正傳;

IN3低電平,IN4高電平,右電機反傳。

1.2.2、超聲波測距模塊

image.png

超聲波測距一般有4個管腳:

GND:接公共地

VCC:供5V電源

Trigger:觸發控制,信號輸入引腳

Echo:迴響信號輸出引腳

超聲波測距原理是當發送的超聲波遇到物體被髮射回來,被接收端接收,然後通過發送信號到接收到迴響的信號時間間隔可以測算出距離。

image.png

測距過程如下:HaaS100給Trigger引腳至少10uS的脈衝觸發信號,這時候超聲波模塊發射8個40KHz的方波,然後模塊自動檢測是否有信號返回。若檢測到迴響信號,會通過Echo引腳輸出一個高電平脈衝,脈衝的寬度就是超聲波從發射到返回的時間t。假設小車距離障礙物距離L,2L=vt,L=vt/2,其中v聲音的傳播速度340m/s。

1.2.3、紅外避障模塊

image.png

紅外避障原理就是當障礙物靠近的時候,紅外接收到的發射光強度越來越大,所以增大了輸出的模擬信號,模擬信號接入比較器,經過比較器處理,輸出數字信號。讀取數字信號電平,就可以判斷前方是否有障礙物。

1.2.4、測速模塊

image.png

測速模塊主要原理是由碼盤結合光電傳感器,傳感器一端爲發射光,另一端接收光,通過測量單位時間內脈衝個數得出小車的速度,本模塊採用施密特觸發器輸出的信號非常穩定( 去抖)。

 

2、雲端小小蠻驢產品創建

參考基於《一步步打造能手機遠程管理的HaaS花卉養植系統》系列文章,一步步在物聯網平臺創建產品、對應的物模型以及設備。也可以通過載入TSL文件,一鍵生成物模型。

 

2.1、雲端產品創建展示

創建了HaaS電動車的產品名稱,然後定義了前進、後退、暫停、左轉、右轉等物模型屬性。

image.png

按照一步步操作,雲端創建產品、物模型以及設備以後,我們可以獲取對應的四元組信息。

 

3、HaaS電動小車軟件開發

3.1、配置初始化

HaaS100設備端電動小車參考代碼的路徑在:/application/example/auto_demo下。

從物聯網雲平臺創建的產品時候,可以獲取調試設備的四元組信息。如下所示:

//四元組信息初始化
#define PRODUCT_KEY "*******"
#define PRODUCT_SECRET "*******"
#define DEVICE_NAME "*******"
#define DEVICE_SECRET "*******"

對驅動電機芯片控制引腳配置

int auto_gpio_init(void)
{
    temp_gpio.port = IN1_PIN;
    temp_gpio.config = OUTPUT_OPEN_DRAIN_PULL_UP;
    hal_gpio_init(&temp_gpio);
	temp_gpio.port = IN2_PIN;
    temp_gpio.config = OUTPUT_OPEN_DRAIN_PULL_UP;
    hal_gpio_init(&temp_gpio);
	temp_gpio.port = IN3_PIN;
    temp_gpio.config = OUTPUT_OPEN_DRAIN_PULL_UP;
    hal_gpio_init(&temp_gpio);
	temp_gpio.port = IN4_PIN;
    temp_gpio.config = OUTPUT_OPEN_DRAIN_PULL_UP;
    hal_gpio_init(&temp_gpio);

	temp_gpio.port = ENA_PIN;
    temp_gpio.config = OUTPUT_OPEN_DRAIN_PULL_UP;
    hal_gpio_init(&temp_gpio);
	temp_gpio.port = ENB_PIN;
    temp_gpio.config = OUTPUT_OPEN_DRAIN_PULL_UP;
    hal_gpio_init(&temp_gpio);

	GPIO_Set(ENA_PORT,1); //使能驅動電機左
	GPIO_Set(ENB_PORT,1);//使能驅動電機右
	stop_ctl();
}

3.2、接收雲端控制命令

接受處理雲端的控制命令,包括後退、左轉、右轉、停止、前進等。

char *auto_temp[5]={"back","left","right","stop","front"};
static int user_property_set_event_handler(const int devid, const char *request, const int request_len)
{
    int res = 0;
    char i =0,*auto_c;
    cJSON *root = cJSON_Parse(request)
    for(i=0;i<5;i++){
        auto_c = auto_temp[i];
        cJSON *value = cJSON_GetObjectItem(root,auto_c);
        if (value == NULL || !cJSON_IsNumber(value)) {
            EXAMPLE_TRACE("not find %d",i);        
        }
        else{
            goto hass_send;
        }
    }
    cJSON_Delete(root);
    if(i == 5){
        EXAMPLE_TRACE("not find %d",i);       
        return -1;
    }
hass_send:
    switch(i){
        case 0:
            back_ctl();
            EXAMPLE_TRACE("---back");
        break;

        case 1:
            left_ctl();
            EXAMPLE_TRACE("---left");
        break;

        case 2:
            right_ctl();
            EXAMPLE_TRACE("---right");
        break;

        case 3:
            stop_ctl();
            EXAMPLE_TRACE("---stop");
        break;

        case 4:
            front_ctl();
            EXAMPLE_TRACE("---front");
        break;

        default:
            break;
    }
    res = IOT_Linkkit_Report(EXAMPLE_MASTER_DEVID, ITM_MSG_POST_PROPERTY,
                             (unsigned char *)request, request_len);
    return 0;
}

 

3.3、HaaS電動車小程序開發

3.3.1、雲端釘一體小程序SDK獲取

git clone -b dev_3.1.0_haas https://github.com/alibaba/AliOS-Things.git

SDK相關代碼及操作readme在application/miniapp/目錄下。

3.3.2、SDK目錄結構

/ 
├─ lib (存放依賴庫的文件夾,用戶無需關心)
│    ├─ @alicloud/pop-core     (https://github.com/aliyun/openapi-core-nodejs-sdk)
│    ├─ kitx
│    └─ iot-packet.js              (封裝給用戶的文件)
├─ pages                              (頁面文件夾,用戶在這裏自定義頁面,示例持續更新中)
│    └─ index                        (首頁 選擇進入不同示例) 
│             ├─ index.axml         
│             ├─ index.js           
│             ├─ index.acss 
│             └─ index.json 
│    └─ HaasCar                    (示例1 HaaS小小蠻驢)
│             ├─ HaasCar.axml    (頁面佈局文件)
│             ├─ HaasCar.js        (控制邏輯,用戶在這裏定義交互行爲)
│             ├─ HaasCar.acss    (頁面樣式)
│             ├─ HaasCar.json      (頁面配置,用於配置頁面標題等)
│             └─ HaasCar.TSL.json (示例對應的TSL文件,用戶可以在物聯網平臺上導入該文件生成物模型)
│    └─ HaasFlower              (示例2 HaaS養花,目錄結構同 HaasCar)
├─ app.js                            (註冊小程序,在這裏進行全局參數配置,如 AccessKey)
├─ app.acss                         (小程序全局樣式)
├─ app.json                         (小程序全局配置,可以在這裏設置小程序打開的默認頁面)
└─ others

3.3.3、SDK使用

使用小程序開發工具打開miniapp這個工程。

image.png

  • step1 在app.js填寫AccessKeyID 以及 AccessKeySecret , 獲取雲端API調用權限
  • step2 填寫目標設備 DeviceName 以及 ProductKey,這裏是待控制的設備
// app.js
let accessKey = {
  accessKeyId: '<- accessKeyId ->', 	// 填入阿里雲平臺生成的 assessKeyId 以及 Secret
  accessKeySecret: '<- accessKeySecret ->',
}

// HaasCar.js
let device = {
  DeviceName: '<- DeviceName ->',   // 填入目標設備 DeviceName 以及 ProductKey
  ProductKey: '<- ProductKey ->'
}

代碼中提到的幾個關鍵參數:

  • AccessKeyID AccessKeySecret

雲賬號AccessKey是用戶訪問阿里雲API的密鑰。(https://usercenter.console.aliyun.com/#/manage/ak

安全起見,我們可以採取創建RAM子賬號的形式,來對權限進行分離

截屏2020-10-29 下午1.01.39.png

創建完成後,需要手動分配權限,點擊右側,添加權限。我這裏直接選擇了 AdministratorAccess。 添加完成後如下。

截屏2020-10-29 下午1.03.13.png

  • DeviceName ProducKey

這兩個參數在創建設備時生成。

3.3.4、編譯驗證

點擊小程序IDE右上角“真機調試”按鈕,等待二維碼生成後,使用釘釘APP掃碼,即可發起小程序。

image.png

image.png

 

3.4、效果展示

image.png

 

4、開發者技術支持

如需更多技術支持,可加入釘釘開發者羣

更多技術與解決方案介紹,請訪問阿里雲AIoT首頁https://iot.aliyun.com/

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章