智能小车

更新时间Invalid date

概况

​近年来,随着人们生活水平的提高,不少人开始养宠物。养宠物不仅可以起到减压的作用,也能作为一种精神寄托,使我们的生活更加丰富和快乐。但随之而来的问题是我们平时上班,照顾不到宠物,又想了解他们的状态,该怎么办呢?下班了,想快速见到它们,又该怎么办呢?我们做了一款智能小车,能帮你快速了解宠物的动态,随时随地关注它们。

步骤

功能

  • App 远程控制
  • 实时监控画面
  • 速度多档调节

硬件框图

image.png

硬件方案

​基于涂鸦智能开发的 Wi-Fi&BLE 音视频核心板(BK7256 音视频核心板)设计了智能小车,外设资源丰富。除音视频功能外,还提供 UART、IIC、SPI、PWM 等外设,并预留 LCD 屏(8080 或 RGB565)接口,SD 卡接口。可以根据场景需求,调用外围接口。

智能小车主要分为主控部分(BK7256 音视频核心板)、摄像头采集电路和电机驱动部分。更多信息,可参考 BK7256 音视频核心板资料

主控板设计

原理图

BK7256 是一颗高性能同时支持 Wi-Fi 6 和蓝牙的芯片。使用 32 位双 RISC-V 作为内核,最大时钟 320M。集成音频 ADC/DAC、CMOS 摄像头接口、16bit RGB 显示屏、8080 显示屏接口,支持硬件 jpeg 编解码。内置 512K 内存,8M PSRAM 和 4M flash。工作电压支持 2.7V~5V 宽电压范围。

涂鸦智能三明治 Wi-Fi&BLE 核心板 BK7256 的原理图如下图所示:

image.png

PCB

涂鸦智能三明治 Wi-Fi&BLE 核心板 BK7256 的 PCB 如下图所示:

image.png

电机驱动扩展板设计

原理图

image.png

PCB

image.png

动力系统分析

电源系统

​智能小车采用了锂电池供电的方式,特点是工作噪音小、运行平稳、环保节能、价格便宜。使用输出电压 12V 左右的锂电,比如 3S 或 4S 航模电池,放电可达 15C 甚至 20C 以上,动力强劲。非航模锂电池组也可以,这类价格会低一些,而且使用寿命长,安全性好。选型时,最大输出电流建议选择 5A 以上。

​由于各个系统会用到各种不同的电压,因此,除了电池之外,还需要准备降压模块。模块上的降压芯片推荐 LM2596S,支持可调节输出,以便通过调节模块上的电位器,获取任意需要的电压值。LM2596S 输入电压范围高达 40V,输出电压范围从 1.2V 至 37V,在各种线路和负载条件下的最高电压容差为 ±4%,输出负载电流可达 3A,效率高,具有热关断和电流限制保护功能。更多信息,可参考 LM2596S 数据手册

dcdc

说明:电机驱动扩展板上使用以上两个降压模块(LM2596S),一块把 12V 电压稳压到 5V,另外一块把 5V 稳压到 3.3V。

减速电机

​减速电机就是在直流电机基础上,增加一个高精密的减速器。一般直流电机的转速都是一分钟几千上万转,增加减速器可以降低电机转速,增加电机扭矩,使得可控性更强。选择减速电机时,电机的额定电压需要和选择的电池相匹配,常见的 12V 额定电压电机供电范围在 11~16V 之间,12V 最佳。

推荐一款 MG513P60_12V 电机,这款电机额定电压为 12V,1:60 的减速比,额定输出电流为 0.36A,减速后空载转速为 183RPM 左右,扭矩达 2kg*cm,最大负载能力高达 6kg。再搭配 65mm 直径轮胎,速度大概 0.5m/s,完全满足智能小车的运动需求。这款电机搭配了霍尔编码器,通过磁感应的原理,可以检测电机转速,从而实现速度检测和里程距离统计。

MOT

电机驱动

​电机驱动采用 TB6612FNG 驱动芯片,这是东芝半导体公司生产的一款直流电机驱动器件。它具有大电流 MOSFET-H 桥结构,VM 电源电压最大支持 15V,输出平均电流可达 1.2A,峰值电流允许 3.2A,导通电阻也只有 0.5 欧姆,内置过热保护和低压检测电路,PWM 信号输入频率可允许 100KHz。

相比 L298N 的热耗性和外围二极管续流电路,TB6612FNG 无需外加散热片,外围电路简单,只需外接电源滤波电容就可以直接驱动电机,利于减小系统尺寸。TB6612FNG 驱动芯片双通道电路输出,可同时驱动 2 个电机。智能小车使用了两个电机加上一个万向轮,因此,我们只需要 1 片该芯片就可以。

另外,当 STBY 处于高电平时,可利用芯片上的 IN1 和 IN2 这两个输入信号,选择正转、反转、短路制动和停机四种模式的其中一种模式,真值表如下:

AIN1 AIN2 模式
0 1 反转
1 0 正转
1 1 短路制动
0 0 停机

更多信息,可参考 TB6612FNG 数据手册

参考原理图如下:

drv_sch

摄像头采集

原理图

智能小车采用了 Y05-GC0328C-V5 摄像头模组采集图像(30 万像素)。GC0328C 是一款 VGA CMOS 图像传感器芯片,通过它可以实时采集图像。

实物图

image.png

驱动电路

GC0328C 摄像头连接到 CN1 接口上。

image.png

产品创建

功能需求

App 端功能 描述
小车行进方向控制 前进、后退、向左、向右。
显示摄像头画面 实时监控。
设备端功能 描述
配网模式 上电,设备进入配网状态,指示灯快闪。配网成功,指示灯常亮。
移除配网 长按按键 5s,移除配网。(主控板:KEY 按键)
复位按键 短按复位按键,程序复位。(主控板:RST 按键)

环境搭建

产品创建

智能小车用到了宠物喂食器的面板,因此,在创建产品时选择 小家电 品类下面的 宠物喂食器,通讯协议:WiFi-蓝牙。功耗类型:标准功耗。

image.png

可以选择全部的功能点(请勿随意删除,可能会导致面板数据丢失或无法打开面板等情况)。同时,需要在 自定义功能 里添加一个 DP 点,用于控制小车的行进方向。面板选择宠物公版面板。在 硬件开发 中,没有 BK7256 芯片可以选择,此时可以借助 BK7252 Wi-Fi & Bluetooth 芯片即可,主要是为领取激活码用于后续开发。

注意:高级功能中 IPC 能力以及 RTC 能力必须选择,用于实时显示视频。

image.png

image.png

设备连线

烧录授权接线:通过 USB 接口直接烧录授权(串口 1)。

核心板引脚 烧录工具引脚 烧录工具
TX1 USB-RX(跳帽连接)
RX1 USB-TX(跳帽连接) MICROUSB 数据线接 P7
3.3V 3.3V
GND GND

电机接线

电机 GPIO
左边直流减速电机控制脚 P16、P15、P24
右边直流减速电机控制脚 P22、P45、P25

软件方案

代码结构

* 涂鸦应用入口文件,原厂 main() -> user_main() -> pre_app_init() -> tuya_iot_init() -> app_init() -> pre_deivce_init() -> device_init()。
* 对于每一个芯片平台,存在一些差异性,此处可以对差异性进行处理。应用的特殊处理应该放到应用预留接口里实现。应用预留接口包括:
* pre_app_init():用于系统初始的前置准备工作,此时涂鸦 Device OS 尚未启动。
* app_init():用于应用初始化,此时涂鸦 Device OS 已经初始化。
* pre_device_init():设备功能启动前置准备工作,此时设备功能尚未启动。
* device_init():设备功能启动,完成之后设备进入正常工作状态。

智能小车软件代码结构如下:

└──tuyaos-iot-standard-demo
├── apps
├── tuyaos_demo_quickstart_car
│ │ ├── include
│ │ │ ├── openssl_aes_cbc.h
│ │ │ ├── openssl_encrypt.h
│ │ │ ├── tuya_app_control.h
│ │ │ ├── tuya_app_key.h
│ │ │ ├── tuya_device.h
│ │ │ ├──tuya_dp_process.h
│ │ │ ├──tuya_ipc_encrypt.h
│ │ │ ├──tuya_ipc_media.h
│ │ │ ├── tuya_ipc_packager.h
│ │ │ ├──tuya_ipc_streamer.h
│ │ │ ├──tuya_push_stream_service.h
│ │ │ ├── tuya_push_thread.h
│ │ │ ├──tuya_tal_2_tkl.h
​ │ │ │ └──tuya_video_service.h
​ │ │ ├── src
​ │ │ │ ├── openssl_aes_cbc.c
​ │ │ │ ├── openssl_encrypt.c
​ │ │ │ ├── tuya_app_control.c
​ │ │ │ ├── tuya_app_key.c
​ │ │ │ ├── tuya_device.c
​ │ │ │ ├──tuya_dp_process. c
​ │ │ │ ├──tuya_ipc_encrypt.c
​ │ │ │ ├── tuya_ipc_packager.c
​ │ │ │ ├── tuya_ipc_streamer.c
​ │ │ │ ├──tuya_push_stream_service
​ │ │ │ ├── tuya_push_thread.c
​ │ │ │ └── tuya_video_service.c

功能部分

资源介绍

资源使用&引脚分配
资源使用 资源类型 备注
直流减速电机方向控制*2 P16,P15;P22,P45(GPIO) 需要 4 个 IO 口
直流减速电机速度控制*2 P24,P25(PWM4,PWM5) 需要 2 个 PWM 外设
摄像头 DVP GC0328
按键 P9(GPIO) 移除配网按键(低电平有效)
指示灯 P6(GPIO) 配网指示灯(高电平点亮)
小车行进档位
档位 PWM 占空比
零档 0
二档 20%
二档 50%
三档 70%
四档 90%
五档 100%
自定义功能
DP 名称 DP ID 功能点名称 数据传输类型 数据类型 功能点属性
小车行进 111 control 可下发可上报(rw) 枚举型(Enum) go,back,right,left

功能分析

电机驱动部分

image.png

图2-1 电机模块驱动图

直流电机的转动

  • PIN正 引脚输出高电平,PIN负 引脚输出低电平,电机即可正转。
  • PIN正 引脚输出低电平,PIN负 引脚输出高电平,电机即可反转。

直流电机的转速

PWM 输出最大占空比的时候,电机全速转动。

注意事项

  • 频繁切换电机的转向,可能会烧坏直流减速电机驱动器。
  • 直流减速电机是相对安装的。对于小车来说,一个电机正转,一个电机反转,才是正转。

小车转向

  • 左边电机前进,右边电机后退,小车右转。
  • 左边电机后退,右边电机前进,小车左转。

device_init() 函数里面对电机进行初始化

image.png

image.png

image.png

小车前进运动,除了前进按键,其它任意控制方向的按键可以停止小车前进。

image.png

枚举小车行进方向。

image.png

App 控制小车运动。

image.png

控制小车行进方向。

image.png

摄像头采集部分
  1. device_init() 函数里,对摄像头服务进行初始化。

    image.png

  2. 创建线程,采集摄像头数据。

    image.png

  3. 视频流获取任务。

    image.png

  4. 读上来的图片都是存放到 PSRAM 中的,在 PSRAM 中开了两个 100K 的缓存区。

    image.png

  5. 用缓存区用完之后要释放。

    image.png

摄像头推流部分
  1. device_init() 函数里,对推流服务进行初始化。

    image.png

  2. 创建推流服务线程。

    image.png

  3. 推流服务线程,等联网成功后进行推流网关的初始化。

    image.png

    image.png

    image.png

    1. 设置推流网网关图片缓存区大小,max_frame_size 缓存区大小。

      image.png

    2. 获取推流网关注册接口,SetMediaSetting 网关基础信息配置,RegisterCb 网关回调注册,FillSkill 能力值初始化。

      image.png

    3. 将通过 FillSkill 接口初始化的能力值上报给云端,gw_if.id 设备网关 ID,skill_info 具体能力值。

      image.png

    4. __get_frame_cb 是推流网关的取图回调函数。推流网关通过该回调获取音视频数据。

      image.png

    5. 判断一帧数据的首尾 4 个字节,防止错误的帧。

      image.png

    6. 采用分段加密的方法可以节省内存,节省一张图片(640*480)的大小(30K 左右)。

      image.png

      注意:PSRAM 中写操作是按 4 字节对齐的,读取按字节对齐即可。

  4. 拷贝数据到推流网关中。

    image.png

  5. 释放缓存区。

    image.png

App 控制部分

小车行进控制

image.png

  • App 面板控制小车一共有 4 个按键:前进按键、后退按键、左转按键和右转按键。
  • 小车一共有 5 个状态:前进状态、后退状态、左转状态、右转状态和停止状态。
  • 小车停止状态,是通过判断当前状态是否是面板按下的状态来实现的。例如,小车现在是前进状态,按下后退、左转、右转按键,即可使小车进入停止状态。
  • 小车还可以加速,同样是通过判断当前状态是否是面板按下的状态来实现的。例如,小车现在是前进状态,按下前进按键,小车加速。

实时监控画面

App 面板上可以实时监控画面,每隔两分钟云端会自动断开。单击一下,会重新获取视频流。

image.png

小结

​至此智能小车样机就完成了,可以用 App 远程控制小车行进,实时监控画面。同时,您可以基于涂鸦 IoT 开发平台丰富它的功能,也可以更加方便地搭建更多智能产品原型,加速智能产品的开发流程。下一期将会继续丰富小车的功能,敬请期待!