近年来,随着人们生活水平的提高,不少人开始养宠物。养宠物不仅可以起到减压的作用,也能作为一种精神寄托,使我们的生活更加丰富和快乐。但随之而来的问题是我们平时上班,照顾不到宠物,又想了解他们的状态,该怎么办呢?下班了,想快速见到它们,又该怎么办呢?我们做了一款智能小车,能帮你快速了解宠物的动态,随时随地关注它们。
基于涂鸦智能开发的 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 的原理图如下图所示:
涂鸦智能三明治 Wi-Fi&BLE 核心板 BK7256 的 PCB 如下图所示:
智能小车采用了锂电池供电的方式,特点是工作噪音小、运行平稳、环保节能、价格便宜。使用输出电压 12V 左右的锂电,比如 3S 或 4S 航模电池,放电可达 15C 甚至 20C 以上,动力强劲。非航模锂电池组也可以,这类价格会低一些,而且使用寿命长,安全性好。选型时,最大输出电流建议选择 5A 以上。
由于各个系统会用到各种不同的电压,因此,除了电池之外,还需要准备降压模块。模块上的降压芯片推荐 LM2596S,支持可调节输出,以便通过调节模块上的电位器,获取任意需要的电压值。LM2596S 输入电压范围高达 40V,输出电压范围从 1.2V 至 37V,在各种线路和负载条件下的最高电压容差为 ±4%,输出负载电流可达 3A,效率高,具有热关断和电流限制保护功能。更多信息,可参考 LM2596S 数据手册。
说明:电机驱动扩展板上使用以上两个降压模块(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,完全满足智能小车的运动需求。这款电机搭配了霍尔编码器,通过磁感应的原理,可以检测电机转速,从而实现速度检测和里程距离统计。
电机驱动采用 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 数据手册。
参考原理图如下:
智能小车采用了 Y05-GC0328C-V5 摄像头模组采集图像(30 万像素)。GC0328C 是一款 VGA CMOS 图像传感器芯片,通过它可以实时采集图像。
GC0328C 摄像头连接到 CN1 接口上。
App 端功能 | 描述 |
---|---|
小车行进方向控制 | 前进、后退、向左、向右。 |
显示摄像头画面 | 实时监控。 |
设备端功能 | 描述 |
---|---|
配网模式 | 上电,设备进入配网状态,指示灯快闪。配网成功,指示灯常亮。 |
移除配网 | 长按按键 5s,移除配网。(主控板:KEY 按键) |
复位按键 | 短按复位按键,程序复位。(主控板:RST 按键) |
智能小车用到了宠物喂食器的面板,因此,在创建产品时选择 小家电 品类下面的 宠物喂食器,通讯协议:WiFi-蓝牙。功耗类型:标准功耗。
可以选择全部的功能点(请勿随意删除,可能会导致面板数据丢失或无法打开面板等情况)。同时,需要在 自定义功能 里添加一个 DP 点,用于控制小车的行进方向。面板选择宠物公版面板。在 硬件开发 中,没有 BK7256 芯片可以选择,此时可以借助 BK7252 Wi-Fi & Bluetooth 芯片即可,主要是为领取激活码用于后续开发。
注意:高级功能中 IPC 能力以及 RTC 能力必须选择,用于实时显示视频。
烧录授权接线:通过 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 |
直流电机的转动
直流电机的转速
当 PWM 输出最大占空比的时候,电机全速转动。
注意事项
小车转向
在 device_init()
函数里面对电机进行初始化
小车前进运动,除了前进按键,其它任意控制方向的按键可以停止小车前进。
枚举小车行进方向。
App 控制小车运动。
控制小车行进方向。
在 device_init()
函数里,对摄像头服务进行初始化。
创建线程,采集摄像头数据。
视频流获取任务。
读上来的图片都是存放到 PSRAM 中的,在 PSRAM 中开了两个 100K 的缓存区。
用缓存区用完之后要释放。
在 device_init()
函数里,对推流服务进行初始化。
创建推流服务线程。
推流服务线程,等联网成功后进行推流网关的初始化。
设置推流网网关图片缓存区大小,max_frame_size
缓存区大小。
获取推流网关注册接口,SetMediaSetting
网关基础信息配置,RegisterCb
网关回调注册,FillSkill
能力值初始化。
将通过 FillSkill
接口初始化的能力值上报给云端,gw_if.id
设备网关 ID,skill_info
具体能力值。
__get_frame_cb
是推流网关的取图回调函数。推流网关通过该回调获取音视频数据。
判断一帧数据的首尾 4 个字节,防止错误的帧。
采用分段加密的方法可以节省内存,节省一张图片(640*480)的大小(30K 左右)。
注意:PSRAM 中写操作是按 4 字节对齐的,读取按字节对齐即可。
拷贝数据到推流网关中。
释放缓存区。
小车行进控制
实时监控画面
App 面板上可以实时监控画面,每隔两分钟云端会自动断开。单击一下,会重新获取视频流。
至此智能小车样机就完成了,可以用 App 远程控制小车行进,实时监控画面。同时,您可以基于涂鸦 IoT 开发平台丰富它的功能,也可以更加方便地搭建更多智能产品原型,加速智能产品的开发流程。下一期将会继续丰富小车的功能,敬请期待!
该内容对您有帮助吗?
是我要提建议