简介: 2020年云栖大会上,阿里云发布了一款机器人“小蛮驴”,瞬间激起千层浪,无人车,智能物流,机器人等一些概念又火热了一把。 借“小蛮驴”的东风以及火热的HaaS,我们推出了更加亲民的“小小蛮驴”,丰富HaaS的场景打造,全面开放的云、端、钉示例也能助力开发者学习全链路知识,吸引更多的开发者和企业来加入HaaS的生态建设。

1、认识一下小小蛮驴真面目

1.1、组件部分

HaaS100核心板
HaaS100是一款物联网场景中的标准硬件,并配套嵌入到硬件中的软件驱动及功能模块,为用户提供物联网设备高效开发服务。

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

智能车底板电路

  • 红外接收头子,实现红外遥控小车
  • 5V电源稳压芯片
  • 电机驱动芯片,电流可达2A,为小车提供强大的动力
  • 电源指示灯
  • 保护二极管

其他丰富接口

  • 电机接口
  • 超声波模块接口
  • 舵机模块接口
  • 测速模块接口
  • 红外避障模块接口
  • 电池座接口
  • HaaS连接接口

1.2、重要模块介绍
1.2.1、驱动电机
驱动电机芯片是小车最重要的模块之一,2A的强大输出电流为小车提供满满的动力。
驱动模块的接口定义

其中,IN1和IN2是控制小车的左电机,IN3和IN4是控制小车的右电机,ENA和ENB引脚为输出使能管脚,高电平有效,IN1、IN2、IN3和IN4可以通过PWM脉冲调速。

电机控制:
IN1高电平,IN2低电平,左电机正传;
IN1低电平,IN2高电平,左电机反传;
IN3高电平,IN4低电平,右电机正传;
IN3低电平,IN4高电平,右电机反传。

1.2.2、超声波测距模块

超声波测距一般有4个管脚:
GND:接公共地
VCC:供5V电源
Trigger:触发控制,信号输入引脚
Echo:回响信号输出引脚
超声波测距原理是当发送的超声波遇到物体被发射回来,被接收端接收,然后通过发送信号到接收到回响的信号时间间隔可以测算出距离。

测距过程如下:HaaS100给Trigger引脚至少10uS的脉冲触发信号,这时候超声波模块发射8个40KHz的方波,然后模块自动检测是否有信号返回。若检测到回响信号,会通过Echo引脚输出一个高电平脉冲,脉冲的宽度就是超声波从发射到返回的时间t。假设小车距离障碍物距离L,2L=vt,L=vt/2,其中v声音的传播速度340m/s。

1.2.3、红外避障模块

红外避障原理就是当障碍物靠近的时候,红外接收到的发射光强度越来越大,所以增大了输出的模拟信号,模拟信号接入比较器,经过比较器处理,输出数字信号。读取数字信号电平,就可以判断前方是否有障碍物。

1.2.4、测速模块

测速模块主要原理是由码盘结合光电传感器,传感器一端为发射光,另一端接收光,通过测量单位时间内脉冲个数得出小车的速度,本模块采用施密特触发器输出的信号非常稳定( 去抖)。

2、云端小小蛮驴产品创建

参考基于《一步步打造能手机远程管理的HaaS花卉养植系统》系列文章,一步步在物联网平台创建产品、对应的物模型以及设备。也可以通过载入TSL文件,一键生成物模型。

2.1、云端产品创建展示
创建了HaaS电动车的产品名称,然后定义了前进、后退、暂停、左转、右转等物模型属性。

按照一步步操作,云端创建产品、物模型以及设备以后,我们可以获取对应的四元组信息。

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这个工程。

  • 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子账号的形式,来对权限进行分离

创建完成后,需要手动分配权限,点击右侧,添加权限。我这里直接选择了 AdministratorAccess。 添加完成后如下。

  • DeviceName ProducKey

这两个参数在创建设备时生成。

3.3.4、编译验证
点击小程序IDE右上角“真机调试”按钮,等待二维码生成后,使用钉钉APP扫码,即可发起小程序。

3.4、效果展示

作者:AIoT产品小助手

原文链接

本文为阿里云原创内容,未经允许不得转载

1小时打造HaaS版小小蛮驴智能车的更多相关文章

  1. 打造MacOS版“XShell”

    1.背景 XShell作为一个强大的安全终端模拟软件,它支持SSH1, SSH2, 以及Microsoft Windows 平台的TELNET 协议.作为server端开发,几乎是必备工具了. 很多刚 ...

  2. 【树莓派+.NET MF打造视频监控智能车】控制篇(树莓派)

    对已经具备一定Linux基础的人来说,树莓派学习起来应该非常简单自然.在他们眼中,树莓派就是一个简易版的,卡通版的Linux而已.但是对我这样一个早已习惯微软技术生态系统的人或者初学者来说,要实现一个 ...

  3. 【树莓派+.NET MF打造视频监控智能车】控制篇(.NET MF)

    在上一篇<遥控篇>文章中,我们介绍了Sony PS2手柄信号的采集和编程,通过简单的封装,以事件的方式向我们提供按键信息.本篇文章主要介绍.NET Micro Framework系统接受到 ...

  4. 【树莓派+.NET MF打造视频监控智能车】遥控篇

    树莓派是最近比较火热的开源硬件,其设备只有信用卡大小,运行着Linux系统,专为学生编程教育而设计.我十多年的技术路线基本以学习微软的技术为主,中间也曾试图学习过linux,但是相对陡峭的学习曲线,只 ...

  5. 翻译 | 使用A-Frame打造WebVR版《我的世界》

    原文地址:Minecraft in WebVR with HTML Using A-Frame 原文作者:Kevin Ngo 译者:Felix 校对:阿希 我是 Kevin Ngo,一名就职于 Moz ...

  6. 从零打造“乞丐版” React(一)——从命令式编程到声明式编程

    这个系列的目的是通过使用 JS 实现"乞丐版"的 React,让读者了解 React 的基本工作原理,体会 React 带来的构建应用的优势 1 HTML 构建静态页面 使用 HT ...

  7. 智能车学习(十五)——K60野火2013版例程

    一.中断函数注册方法: 1.格式: 配置某个功能的中断 注册中断函数 开启中断 2.一个例子 pit_init_ms(PIT0,);//定时中断初始化 set_vector_handler(PIT0_ ...

  8. Robot Operating System (ROS)学习笔记---创建简单的机器人模型smartcar

    搭建环境:XMWare  Ubuntu14.04  ROS(indigo) 转载自古月居  转载连接:http://www.guyuehome.com/243 一.创建硬件描述包 已创建catkin_ ...

  9. 正式版/免费版 Xamarin 体验与拥抱

    感谢MS, 感谢老纳.终于把 Xamarin 这个磨人的小妖精给收了,在也不用向大神要破解补丁了, 终于可以光明正大的使用了!! 跟据实践, 如果你们想体验一下 .NET 开发 IOS /Androi ...

  10. MyChrome制作Chrome浏览器便携版

    Google Chrome官方离线下载地址: https://api.shuax.com/tools/getchrome MyChrome下载地址: http://code.taobao.org/p/ ...

随机推荐

  1. 向TreeView添加自定义信息

    可在 Windows 窗体 TreeView 控件中创建派生节点,或在 ListView 控件中创建派生项. 通过派生可添加任何所需字段,以及添加处理这些字段的自定义方法和构造函数. 此功能的用途之一 ...

  2. 09.Java数据算法

    好消息 博客笔记大汇总[15年10月到至今],包括Java基础及深入知识点,Android技术博客,Python学习笔记等等,还包括平时开发中遇到的bug汇总,当然也在工作之余收集了大量的面试题,长期 ...

  3. 工作记录:Vue3.0新特性

    简单对比 Vue2.x 与 Vue3.x 响应式 Vue2 使用Object.defineProperty劫持对象的属性 Vue3 使用Proxy 直接代理对象 由于Object.defineProp ...

  4. 详解SSL证书系列(6)了解HTTP及网络基础

    使用HTTP协议访问Web 你知道当我们在网页浏览器(比如Chrome)的地址栏中输入URL时,Web网页是如何呈现的吗?   Web页面当然不会凭空显示出来.根据Web浏览器地址栏中指定的URL,W ...

  5. KingbaseES V8R6 空闲事务会话超时自动终止机制

    背景 如果会话在事务中停留的时间过长,则允许自动终止空闲会话.可以由配置参数idle_in_transaction_session_timeout 事务处于空闲状态的时长,它有助于防止被遗忘的交易事务 ...

  6. CVS Excell乱码怎么修改

    问题描述 日常办公,从网页或者其他web端下载的表格(excel格式或csv格式),打开后发现中文乱码,如下: 常规解法 百度会发现,大部分提供的方法,就是通过excel的另存为,然后选择相应的编码, ...

  7. #交互,分类讨论#CF1292E Rin and The Unknown Flower

    题目传送门 分析 先尝试锁定一个字母,显然询问 \(CH,CO,CC\) 会比直接询问 \(C\) 更优,虽然牺牲了最后一个位置是否为 \(C\) 的查询. 同理,询问 \(HH,OH,CH\) 会比 ...

  8. #线段树#洛谷 4340 [SHOI2016]随机序列

    题目 分析 可以发现加号和减号会抵消掉,真正有用的答案就是第一段的乘积. 那也就是 \(\sum_{i=1}^nS_i*2*3^{n-i-1}\),其中 \(S_i\) 表示 \(a_1\) 到 \( ...

  9. 区块链从入门到放弃系列教程-涵盖密码学,超级账本,以太坊,Libra,比特币等持续更新

    目录 简介 什么是区块链 区块链不是什么 区块链的基础:密码学 区块链的基础:分布式系统和共识机制 超级账本Hyperledger 以太坊 Libra 比特币 总结 简介 区块链是一种防篡改的共享数字 ...

  10. C# 方法参数中的this参数

    引用:C# 方法中的this参数 - zh89233 - 博客园 (cnblogs.com) public static class StringExtension { public static v ...