描述
硬件构建
这个怎么运作
HuskyLens 是一款人工智能机器视觉传感器,用于检测和跟踪线路。赫斯基镜头的数据为我们提供了是否检测到线条的详细视图。如果检测到,则提取 (x, y)。有了这些数据,CH32V307 开发板就被编程为使用电机驱动器屏蔽来控制电机。这篇博客解释了使用 CH32V307 开发板和 HuskyLens 制作基于视觉的线追随者。
基本硬件组件
CH32V307开发板
成套工具
CH32V307V-EVT-R1
CH32V307V-EVT-R1 是一款基于 WCH CH32V307 RISC-V 微控制器的开发板,具有以太网端口、USB Type-C 端口和八个可通过接头访问的 UART 接口。
WCH 设计的 RISC-V4F 32 位 RISC-V 内核高达 144MHz,支持单周期乘法和硬件除法,以及硬件浮点单元 (FPU)。它具有高达 64KB 的 SRAM 内存,可存储高达 256KB 的 Flash。
该开发板具有网络 - 千兆以太网 MAC、10 Mbps PHY、USB - 1x USB 2.0 OTG 全速接口、1x USB 2.0 主机/设备接口,内置 480 Mbps PHY、8x USART、2x CAN 接口、2 线调试接口, SDIO, FSMC 内存接口, DVP 数字视频接口, 80x GPIO 端口, 16 个外部中断, 2x I2C, 3x SPI, 2x I1S, 2x 12-bit DAC, 2-unit 16-channel 12-bit ADC, 16 -通道 TouchKey,10 个定时器,2 个通用 DMA 控制器,总共 18 个通道,4 个放大器。
CH32V307 具有电源管理功能,可提供以下封装:LQFP64M 和 LQFP100。
这是开发板的很多规格。
赫斯基镜头
HuskyLens 是一款易于使用的 AI 机器视觉传感器。具备人脸识别、物体追踪、物体识别、线路追踪、颜色识别、标签(二维码)识别等多种功能。
您可以从https://www.dfrobot.com/product-1989.html购买赫斯基镜头?
赫斯基镜头
第 1 步:开始使用 CH32V307
首先,我们使用此链接下载 MounRiver Studio (MRS) 。
新建Mounriver工程,选择CH32V307 [RISC-V]系列,模板类型选择RT-Thread ,点击finish。
设置 RT-Thread Studio
在开发 Mounriver IDE 时,我遇到了正式支持 WCH 板和其他开发板的 RT-Thread Studio。出于这个原因,我以后将在这个项目中使用RT-Thread Studio 。
首先,从这里下载 IDE并将其安装在您的 PC 上。
打开RT-Thread SDK Manager,在WCH平台下安装CH32V307V-R1。这可能需要一些时间。
安装后,创建一个新项目。将文件命名为 LFR,选择 Board CH32v307V-R1和 RT-thread 为最新。单击完成按钮。
我们编写了一个基本程序来切换内置 LED。
GPIO_ResetBits(GPIOA,GPIO_Pin_0); while(1) { GPIO_SetBits(GPIOA,GPIO_Pin_0); rt_thread_mdelay(500); GPIO_ResetBits(GPIOA,GPIO_Pin_0); rt_thread_mdelay(500); }
1 / 2 • LED1 关闭
第 2 步:连接 HuskyLens
使用 K-Flash将固件更新到HUSKYLENSWithModelV0.4.9Class.kfpkg 。
安装 HUSKYLENS 库
首先,首先下载并安装 HUKYLENS 库。
将“HUSKYLENS”复制到我们的项目目录下如下图
连接图
CH32V307 USART3 引脚为 PB10 和 PB11。这些用于与 HuskyLens 通信。如图所示,L293D 电机驱动器屏蔽连接到 Arduino 接头。
CH32V307 -> 赫斯基镜头
Vcc -> Vcc
接地 -> 接地
USART3_Tx(PB10) -> RX
USART3_Rx(PB11) -> TX
如上所述进行连接。
与赫斯基镜头接口
HuskyLens 协议设置 您需要设置 HuskyLens 的协议类型。协议应为“序列号 115200”。当然也可以采用Auto Detect协议,简单易用。
您可以在下面找到用于与 Huskylens 交互的示例代码。
int main(void) { for(char s=0; sUSART2 */ { USART_SendData(USART3, TxBuffer[TxCnt++]); while(USART_GetFlagStatus(USART3, USART_FLAG_TXE) == RESET); /* waiting for sending finish */ } Delay_Ms(100); while(!Rxfinish); /* waiting for receiving int finish */ printf("RxBuffer:%s\r\n", RxBuffer); while(1) { while(TxCnt < TxSize) /* USART3--->USART2 */ { USART_SendData(USART3, TxBuffer[TxCnt++]); while(USART_GetFlagStatus(USART3, USART_FLAG_TXE) == RESET) ; } Delay_Ms(1000); } }
回复
while (!huskylens.begin(USART3)) { printf("Begin failed!\n"); printf("1.Please recheck the \"Protocol Type\" in HUSKYLENS (General Settings>>Protocol Type>>Serial 9600)\n"); printf("2.Please recheck the connection.\n"); Delay_Ms(1000); } Delay_Ms(100); while(1) { if (!huskylens.request()) printf("Fail to request data from HUSKYLENS, recheck the connection!"); else if(!huskylens.isLearned()) printf("Nothing learned, press learn button on HUSKYLENS to learn one!"); else if(!huskylens.available()) printf("No block or arrow appears on the screen!"); else { printf("###########"); while(huskylens.available()) { HUSKYLENSResult result = huskylens.read(); printResult(result); } } } void printResult(HUSKYLENSResult result){ if (result.command == COMMAND_RETURN_BLOCK){ Serial.println(String()+F("Block:xCenter=")+result.xCenter+F(",yCenter=")+result.yCenter+F(",width=")+result.width+F(",height=")+result.height+F(",ID=")+result.ID); } else if (result.command == COMMAND_RETURN_ARROW){ Serial.println(String()+F("Arrow:xOrigin=")+result.xOrigin+F(",yOrigin=")+result.yOrigin+F(",xTarget=")+result.xTarget+F(",yTarget=")+result.yTarget+F(",ID=")+result.ID); } else{ Serial.println("Object unknown!"); } }
操作与设置
向左或向右拨动功能键,直到屏幕顶部显示“线路跟踪”字样。
长按功能键进入线跟踪功能的参数设置。
向右或向左拨动功能键,直到选中“学习多个”,然后短按功能键,向左拨动关闭“学习多个”开关,即进度条上的方形图标转动向左转。然后短按功能键即可完成此参数。
您也可以通过设置“LED 开关”来打开 LED。这在黑暗的环境中非常有用。
向左拨功能键,直到选中“保存并返回”,短按功能键保存参数,参数自动返回。
线学习:建议在 HuskyLens 的视野范围内,保持内联学习,没有交叉线。将“+”符号指向该行。然后 HuskyLens 会自动检测线条,屏幕上会出现一个白色箭头。此时,短按“学习键”即可完成学习过程。屏幕上会出现一个蓝色的路线方向箭头。
火车
线预测:当 HuskyLens 检测到已学习的线时,屏幕上会自动出现一个蓝色箭头。箭头的方向表示线的预测方向。
预测
现在设备已准备好进行线路检测。
线检测 - 图像
第 3 步:连接电机驱动器
由于 CH32V307 板具有 Arduino 兼容接头,因此我购买了一个 L293D 双电机驱动器扩展板,可以轻松插入开发板。
CH32V307板+电机驱动
我们为电机 1 和电机 2 分配和配置 PWM 引脚,其中引脚 PA8 和 PA0 分配给电机 1,引脚 PB6 和 PB8 分配给电机 2。
电机测试使用以下代码完成。
/* * Pin PA8 and PA0 - Motor 1 * Pin PB6 and PB8 - Motor 2 */ u8 speed = 100; // -255 to +255 int main(void) { USART_Printf_Init(115200); printf("Speed Control"); TIM1_PWMOut_Init( 100, 48000-1, speed, speed); // fwd delay(5000); TIM1_PWMOut_Init( 100, 48000-1, -speed, -speed); // rev while(1); }
第 4 步:框图
完整的连接可以按照框图完成,看起来像这样。
框图
第 5 步:外壳设计
我花了 4 美元从当地商店买了一个标准的机器人底盘。我们在底盘的左右两侧安装了 BO 电机和一个用于平衡重量的滚珠脚轮。
带 BO 电机和车轮的底盘
接下来,我们用给定的 L 夹安装赫斯基镜头,它会像这样转动。
HuskyLens - 线跟随器
现在我们将 CH32V307 和电机驱动器添加到机箱中。我有 2 个锂离子电池来运行这个机器人。这些电池串联以提供 7.4V。这也可以用锂聚合物电池代替。
第6步:让我们看看它是否有效
最后,是时候运行机器人了。我运行 HuskyLens 传感器并连续打印计算出的速度,这就是我得到的。
线检测 - 图像
虽然它不是一个完美的线路跟随器,但通过校准 PID 常数,我们可以实现更平滑的运行。
如果您在构建此项目时遇到任何问题,请随时问我。请建议您希望我接下来做的新项目。
如果它真的对您有帮助,请竖起大拇指,并关注我的频道以获取有趣的项目。:)
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
全部0条评论
快来发表一下你的评论吧 !