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、效果展示

4、开发者技术支持

1小时打造HaaS版小小蛮驴智能车相关推荐

  1. 阿里动物园再添新丁,小蛮驴搞定物流最后三公里

    作者 | 硬核云顶宫 责编 | 李雪敬 头图 | CSDN 下载自视觉中国 今天的云栖大会上,阿里动物园再添新丁,不再这个新加入的动物既不是骡子也不是马,而是小蛮驴,这是一个专门解决物流最后三公里的A ...

  2. 阿里达摩院科学家,3年造出小蛮驴!量产物流机器人,完全自动驾驶,4度电跑100公里...

    雷刚 发自 凹非寺  量子位 报道 | 公众号 QbitAI 没想到,这就是阿里达摩院最前沿的AI和自动驾驶技术的集大成者. 取名小蛮驴,四轮构造,外形酷萌.灵活身手还能穿梭在各种末端道路场景中完成送 ...

  3. 阿里动物园再添新丁,小蛮驴搞定物流最后三公里!

    作者 | 硬核云顶宫 责编 | 李雪敬 头图 | CSDN 下载自视觉中国 CSDN编者按:昨天的云栖大会上,阿里动物园再添新丁,不再这个新加入的动物既不是骡子也不是马,而是小蛮驴,这是一个专门解决物 ...

  4. 阿里正式进军机器人赛道,首款物流机器人“小蛮驴”来了!

    9 月 17 日云栖大会,阿里巴巴发布第一款物流机器人"小蛮驴",同时发布机器人平台,正式进军机器人赛道.小蛮驴机器人集成了达摩院最前沿的人工智能和自动驾驶技术,具有类人认知智能, ...

  5. 一周 AIGC 丨王小川打造中国版 OpenAI,阿里版 ChatGPT 上线邀测

    智能时代将再一次开启"文艺复兴".每个人都会因为 AI 的助力而变得更加强大.用好 AI,一个人就可能做一个公司,解决之前难以解决的难题,也更容易成为自己想成为的人.社会也会更加扁 ...

  6. “飞天、无影、小蛮驴…”带你走进2020云栖大会

    今年的2020云栖大会改为云上举办,似乎更贴合云计算的本初. 阿里巴巴集团董事会主席兼首席执行官张勇在2020云栖大会开幕式上表示,阿里巴巴为数字经济时代的到来准备了20年,疫情的爆发让人们看到,过去 ...

  7. 元宇宙里过圣诞,英伟达用300小时打造“冬日仙境”,占地16万平米

    新智元 在元宇宙里过圣诞是种什么体验?今天就带你体验一把!英伟达爆肝300小时打造的冬日仙境终于赶在节前发布了,总共耗费了超3000万个方块,占地近16万平米!三个大雪球构成的世界足够圣诞节去探索了, ...

  8. 阿里无人车配送快递突破 100 万单,小蛮驴牵引的自动驾驶战略布局

    作者 | 张昊 出品 | AI科技大本营(ID:rgznai100) 从物流的"最后"三公里中,我们看到了自动驾驶技术的"最前"沿 在9月27日举办的达摩院媒体 ...

  9. 打造精简版Linux-mini

    Linux系统的核心就是它的内核,所有的Linux系统采用的内核都是相同的,唯一不同的就是除了内核以外的服务以及应用的软件不同而已.那麽可以根据Linux的这一特点,我们可以根据自己的需求打造属于自己 ...

最新文章

  1. Windows平台下程序打包流程
  2. SAP MIGO对工单做101收货,报错 - Check table TFBEFU_CR entry 10 does not exist – 对策
  3. Android 打印方法调用堆栈
  4. 使用Networkx进行图的相关计算——黑产集团挖掘,我靠,可以做dns ddos慢速攻击检测啊...
  5. 【深度学习】用于小目标检测的一个简单高效的网络
  6. Google新作:注意力机制是否真的能够提供模型的可解释性?
  7. “雏鹰”的最近感想……
  8. 再谈Windows 2000安全技术
  9. php分解字符串_php怎么把字符串分解成字符
  10. 视频版ImageNet?快手搞了一场用户兴趣建模大赛 | 附前三名干货
  11. OpenCV 使用 FLANN 库实现特征匹配
  12. ElasticSearch6.0.1 拼音搜索,并且高亮显示结果 —6.X版本
  13. Mac苹果电脑登录其他用户教程
  14. 看这玩意复习你还会挂科?《web开发1篇》
  15. FrameMaker 格式的本地化流程(续1)
  16. 计算机表格要学些什么,刚学电脑,不知道在电脑上怎么制作各种表格, – 手机爱问...
  17. 浏览器和服务器的区别
  18. AspNetCore3.1 在CentOS 用docker发布 踩坑辛酸史
  19. 时评素材2019简短华为鸿蒙,2019社会热点话题时评素材:从网络热词看生活热度...
  20. 计算机专业大专毕业设计,大专计算机专业毕业论文设计.doc

热门文章

  1. python小代码_Python爬虫入门有意思的小长代码
  2. mysql 从库状态_大神教你自动发现监控mysql从库状态
  3. linux挂载cifs磁盘_linux使用windows磁盘,挂载共享目录
  4. 简要描述内部连接和外部连接之间的区别_创新性的M12推拉式连接器推拉标准—跨制造商自动化技术的里程碑...
  5. 计算机网络 --- 数据链路层CSMA/CD协议
  6. leetcode 3 --- 无重复字符的最长子串
  7. linux应用参数 冒号,Lua-面向对象中函数使用时冒号(:)和点(.)的区别
  8. key value vue 输出_Vue2.0 v-for 中 :key 到底有什么用?
  9. linux ns级定时器_linux用户空间获得ns纳秒级时间示例
  10. 大整数减法c语言_3.2 C语言运算符和表达式