这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 嵌入式开发 » STM32 » 【原创】STM32+K210视觉避障小车零基础学习--from毅

共1条 1/1 1 跳转至

【原创】STM32+K210视觉避障小车零基础学习--from毅

工程师
2026-05-20 01:07:45     打赏

K210:视觉大脑,负责识别障碍物 + 判断位置 / 距离,把结果发给 STM32

STM32:运动控制核心,负责接收指令 + 驱动电机,执行避障动作

全程分硬件搭建→软件编程→联调避障三步,新手也能快速上手

一、整体系统架构

K210视觉模块 ←(摄像头采集图像)→ 识别障碍物 →(串口通信)→ STM32 → 电机驱动 → 小车避障

核心逻辑:K210 看不到障碍物→发直行指令;看到障碍物→发左转 / 右转 / 后退指令,STM32 执行动作。

二、硬件清单

image.png

K210 ↔ STM32 串口通信(核心数据通道)

    • K210 TX → STM32 RX(PA3)

    • K210 RX → STM32 TX(PA2)

    • K210 GND → STM32 GND(共地必须接,否则通信失败

      STM32 ↔ 电机驱动(控制电机)

    • 左电机:PB0、PB1

    • 右电机:PB2、PB3

      电源接线

    • 锂电池→电机驱动、稳压模块

    • 稳压模块 3.3V→K210、STM32

三、软件环境搭建1. K210 编程环境(MaixPy,新手零门槛)

下载 MaixPy IDE

K210 烧录MaixPy 固件(官网下载对应型号固件)

用 IDE 连接 K210,即可运行 Python 视觉代码

2. STM32 编程环境

Keil5 + STM32CubeMX(图形化配置,不用手写寄存器)

基础:会用 GPIO、串口、PWM 电机控制即可

四、第一步:K210 视觉避障编程(核心!)新手优先学 **【颜色块识别避障】**(最简单、最稳定),进阶再学 AI 物体识别。原理

用 K210 识别指定颜色的障碍物(比如黑色 / 红色方块),通过色块大小判断距离,位置判断左右,通过串口发指令给 STM32。

# K210 视觉避障:颜色块识别障碍物 + 串口发指令 import sensor, image, lcd, time from machine import UART # 1. 初始化串口(和STM32波特率一致:115200) uart = UART(1, baudrate=115200, tx=33, rx=32) # K210串口1 # 2. 初始化摄像头 sensor.reset() sensor.set_pixformat(sensor.RGB565) # 彩色模式 sensor.set_framesize(sensor.QVGA)   # 分辨率320×240 sensor.skip_frames(time = 2000)     # 跳过初始帧 sensor.set_auto_gain(False)         # 关闭自动增益(识别更稳定) sensor.set_auto_whitebal(False)      # 关闭自动白平衡 # 3. 初始化LCD屏幕(实时看识别效果) lcd.init() lcd.rotation(2) # 旋转屏幕 # 4. 障碍物颜色阈值(新手调试:黑色阈值,可改红色/蓝色) # 格式:(L最小值, L最大值, A最小值, A最大值, B最小值, B最大值) BLACK_THRESHOLD = (0, 30, -128, 127, -128, 127) OBSTACLE_AREA = 500 # 障碍物最小面积(面积越大=距离越近) # 5. 主循环 while(True):    img = sensor.snapshot() # 抓拍图像    # 查找黑色色块(障碍物)    blobs = img.find_blobs([BLACK_THRESHOLD], pixels_threshold=200, area_threshold=200)        cmd = 0x00 # 默认指令:0x00=无障碍物,直行    if blobs:        # 取最大的色块(最靠近的障碍物)        max_blob = max(blobs, key=lambda b: b.pixels())        img.draw_rectangle(max_blob.rect()) # 框出障碍物        img.draw_cross(max_blob.cx(), max_blob.cy()) # 中心点                # 判断障碍物位置 + 发送指令        if max_blob.area() > OBSTACLE_AREA: # 距离过近,触发避障            if max_blob.cx() < 100: # 障碍物在左侧                cmd = 0x01                lcd.draw_string(10,10,"LEFT OBSTACLE", lcd.RED, lcd.WHITE)            elif max_blob.cx() > 220: # 障碍物在右侧                cmd = 0x02                lcd.draw_string(10,10,"RIGHT OBSTACLE", lcd.RED, lcd.WHITE)            else: # 障碍物在正前方                cmd = 0x03                lcd.draw_string(10,10,"FRONT OBSTACLE", lcd.RED, lcd.WHITE)        uart.write(bytearray([cmd])) # 串口发送1字节指令给STM32    lcd.display(img) # 显示图像

指令定义(简单易记)
  • 0x00:无障碍物 → 直行

  • 0x01:左侧有障碍物 → 右转

  • 0x02:右侧有障碍物 → 左转

  • 0x03:正前方有障碍物 → 后退 + 左转


五、第二步:STM32 运动控制编程STM32 只做两件事:接收 K210 指令 + 控制电机避障1. STM32CubeMX 配置(图形化)

开启USART2(波特率 115200,和 K210 一致)

开启 4 个 GPIO(推挽输出)控制电机正反转

开启 2 路 PWM(调速,可选)

2. STM32 核心控制代码(Keil)

// 接收K210的指令 uint8_t uart_cmd; // 电机控制函数(简化版,根据驱动修改引脚) void Motor_Forward(void);  // 直行 void Motor_Back(void);     // 后退 void Motor_Left(void);     // 左转 void Motor_Right(void);    // 右转 void Motor_Stop(void);     // 停止 // 串口中断回调函数(接收K210指令) void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart) {    if(huart->Instance == USART2)    {        uart_cmd = USART2->DR; // 读取指令        HAL_UART_Receive_IT(&huart2, &uart_cmd, 1); // 开启下一次接收    } } // 主循环避障逻辑 while(1) {    switch(uart_cmd)    {        case 0x00: Motor_Forward(); break; // 无障直行        case 0x01: Motor_Right();   break; // 左障右转        case 0x02: Motor_Left();    break; // 右障左转        case 0x03:                 // 前障:后退1秒+左转            Motor_Back();            HAL_Delay(1000);            Motor_Left();            break;        default: Motor_Forward(); break;    } }

六、第三步:整车联调(必做步骤)

单独测试 K210:打开 MaixPy IDE,看屏幕是否能框出黑色障碍物,串口是否发送正确指令。

单独测试 STM32:用串口助手发指令,看小车是否正常直行 / 左转 / 右转。

硬件连接:K210 和 STM32 接好串口 + 共地,上电。

实物测试:在小车前方放黑色障碍物,看是否自动躲避。

七、新手必看避坑指南

串口通信失败:99% 是GND 没共地,或波特率不一致。

K210 烧屏 / 损坏严禁接 5V,必须用 3.3V 稳压。

识别不稳定:关闭 K210 自动增益 / 白平衡,调整颜色阈值。

电机干扰:电机电源和主控电源分开布线,加滤波电容。

八、进阶升级(学会基础后再学)

AI 通用障碍物识别:K210 跑 YOLO2 模型,识别人、车、箱子等任意障碍物,不用限定颜色。

单目视觉测距:通过色块大小精准计算距离,避障更智能。

循迹 + 避障融合:小车既能循迹,又能躲避突发障碍物。

总结

核心分工:K210 管视觉识别,STM32 管电机控制,串口传指令。

入门首选颜色块识别,代码简单、调试快,1 天就能跑通避障。

联调先分模块测试,再整车组合,快速定位问题





共1条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]