基于STM32的智能小车避障与循迹实战(江科大标准库开发)

1. 项目概述与硬件准备

如果你已经学完了江科大的STM32入门教程,却不知道下一步该做什么,那么这个智能小车项目绝对是你的不二之选!我自己在做完这个项目后,对STM32的各种外设和编程逻辑有了更深刻的理解。今天我就把自己在实现过程中的经验分享给大家,包括避障、循迹等核心功能的实现方法。

智能小车项目需要的硬件其实并不复杂,下面是必备清单:

  • 主控芯片:STM32F103C8T6最小系统板(核心板)
  • 电机驱动:TB6612模块(1-2个,根据电机数量决定)
  • 舵机:SG90(用于超声波模块的旋转扫描)
  • 传感器:HC-SR04超声波模块(避障)、TCRT5000红外模块(循迹)
  • 通信模块:HC-04蓝牙模块(手机控制)
  • 车体框架:某多多上搜索"STM32智能小车框架"(自带四个直流电机)
  • 烧录器:ST-LINK V2
  • 其他:导线若干、面包板或洞洞板(建议用洞洞板,更稳定)

我在第一次组装时犯了个错误,没有先测试电机就直接焊接了,结果发现有个电机是坏的,不得不重新拆焊。所以强烈建议大家先测试所有元件再组装!

2. 电机驱动与PWM控制

2.1 TB6612电机驱动详解

TB6612是东芝公司生产的直流电机驱动芯片,我用下来感觉比L298N效率高很多,发热量也小。这个芯片有双通道输出,可以同时驱动两个直流电机,每个通道能提供1A的连续电流,峰值可达2A。

关键引脚功能:

  • VM:电机驱动电压(3V-13.5V)
  • VCC:逻辑电平输入(2.7V-5.5V)
  • STBY:待机控制(高电平正常工作)
  • AO1/AO2、BO1/BO2:两路电机输出
  • PWMA/PWMB、AIN1/AIN2、BIN1/BIN2:控制信号输入

接线时要注意,电机驱动电压最好单独供电,不要和STM32共用电源,否则电机启动时可能会造成电压波动导致单片机复位。

2.2 PWM驱动程序实现

PWM控制是让电机转起来的关键,我使用的是TIM2的通道1和通道2:

#include "stm32f10x.h" void PWM_Init(void) { // 开启GPIOA和TIM2时钟 RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE); RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2, ENABLE); // 配置GPIOA_Pin0和Pin1为复用推挽输出 GPIO_InitTypeDef GPIO_InitStructure; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0 | GPIO_Pin_1; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(GPIOA, &GPIO_InitStructure); // 配置时基单元 TIM_TimeBaseInitTypeDef TIM_TimeBaseInitStructure; TIM_TimeBaseInitStructure.TIM_ClockDivision = TIM_CKD_DIV2; TIM_TimeBaseInitStructure.TIM_CounterMode = TIM_CounterMode_Up; TIM_TimeBaseInitStructure.TIM_Period = 100 - 1; // ARR TIM_TimeBaseInitStructure.TIM_Prescaler = 72 - 1; // PSC TIM_TimeBaseInitStructure.TIM_RepetitionCounter = 0; TIM_TimeBaseInit(TIM2, &TIM_TimeBaseInitStructure); // 配置输出比较通道 TIM_OCInitTypeDef TIM_OCInitStructure; TIM_OCStructInit(&TIM_OCInitStructure); TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1; TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High; TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable; TIM_OCInitStructure.TIM_Pulse = 0; // 初始占空比为0 TIM_OC1Init(TIM2, &TIM_OCInitStructure); // 通道1 TIM_OC2Init(TIM2, &TIM_OCInitStructure); // 通道2 TIM_Cmd(TIM2, ENABLE); } // 设置比较值函数 void PWM_SetCompare1(uint16_t Compare) { TIM_SetCompare1(TIM2, Compare); } void PWM_SetCompare2(uint16_t Compare) { TIM_Se

Read more

本地服务器用 OpenClaw + Open WebUI 搭建企业多部门 AI 平台(附 Docker 避坑指南)

本地服务器用 OpenClaw + Open WebUI 搭建企业多部门 AI 平台(附 Docker 避坑指南)

引言: 最近在尝试使用 OpenClaw,发现这个 AI 个人助理框架非常有意思。于是团队里就有人提出:能不能为公司的多个部门,分别搭建专属的 OpenClaw 服务器? 诚然,现在有钉钉、飞书等成熟的办公软件可以接入 AI,但对于一些尚未全面普及此类协作软件的企业(或者需要绝对私有化部署的团队)来说,独立搭建一套内部 AI 门户依然是刚需。 起初,我们考虑直接让大家通过 OpenClaw 自带的 Web 界面进行跨电脑访问。但实操后发现这存在致命缺陷: 1. 权限越界:自带的 Web 端拥有底层的配置编辑权限,暴露给普通员工极其不安全。 2. 无法溯源:多终端共用一个 Web 界面,根本无法追溯对话是由谁发起的。 3. 缺乏隔离:无法按部门精细化分配 API 额度或限制特定部门只能访问特定的 OpenClaw 节点,无法实现业务隔离。 为了解决这些痛点,我们最终确定了这套架构方案:

By Ne0inhk

深入浅出 B/S 架构:从原理到实践,解锁 Web 应用开发核心

作为一名长期深耕开发领域的技术人,我们每天打交道的网页、管理系统、在线工具,几乎都构建在 B/S 架构 之上。它凭借跨平台、易维护、低成本的优势,成为互联网时代应用开发的主流范式。本文将从核心概念、架构原理、技术栈选型到实战案例,带你全面吃透 B/S 架构。 一、B/S 架构是什么?定义与核心特征 B/S 架构,全称 Browser/Server(浏览器 / 服务器)架构,是一种基于互联网的分布式计算架构。它的核心逻辑是:客户端仅需安装浏览器,所有业务逻辑、数据存储、计算处理均在服务器端完成,浏览器通过 HTTP/HTTPS 协议与服务器交互,实现数据的请求与展示。 1.1 与 C/S

By Ne0inhk

网络设备探测与安全工具从入门到精通:探索scan-for-webcams的实战指南

网络设备探测与安全工具从入门到精通:探索scan-for-webcams的实战指南 【免费下载链接】scan-for-webcamsscan for webcams on the internet 项目地址: https://gitcode.com/gh_mirrors/sc/scan-for-webcams 工具概述:揭开网络摄像头探测的神秘面纱 在数字化时代,网络摄像头已成为物联网生态中不可或缺的组成部分,但同时也带来了潜在的安全风险。作为一名安全探索者,你是否曾好奇如何在复杂的网络环境中精准定位这些设备?scan-for-webcams正是为解决这一问题而生的开源安全工具。这款基于Python开发的网络摄像头探测框架,通过整合Shodan API的网络扫描能力与多协议识别技术,为安全研究人员提供了一扇观察网络摄像头生态的窗口。 图1:scan-for-webcams工具标志,象征着网络中摄像头设备的互联互通与探测能力 该工具的核心价值在于其跨协议探测引擎与本地AI分析能力的独特组合。不同于传统端口扫描工具,scan-for-webcams专注于摄像头设备特有的通信模式

By Ne0inhk

GLM-Image WebUI使用教程:正负向提示词编写技巧与常见错误避坑

GLM-Image WebUI使用教程:正负向提示词编写技巧与常见错误避坑 1. 引言:为什么你的AI绘画总是不对味? 你有没有过这样的经历?在GLM-Image WebUI里输入了“一只可爱的猫”,结果生成了一只看起来像外星生物的奇怪生物。或者想要“夕阳下的海滩”,却得到了一个色彩诡异、构图混乱的画面。 问题往往不在模型本身,而在于你输入的提示词。 GLM-Image作为智谱AI推出的强大文本生成图像模型,能力毋庸置疑。但就像给一位顶级画家下指令,如果你只说“画个美女”,他可能画出蒙娜丽莎,也可能画出二次元萌妹。关键在于你怎么描述。 今天这篇文章,我要和你分享的,就是如何用正确的“语言”和GLM-Image沟通。我会从最基础的提示词结构讲起,一步步带你掌握正负向提示词的编写技巧,并帮你避开那些新手最容易踩的坑。 学完这篇教程,你将能够: * 理解提示词的基本结构和作用原理 * 掌握编写高质量正向提示词的具体方法 * 学会使用负向提示词精准排除不想要的元素 * 避免常见的提示词编写错误 * 通过实际案例提升你的生成效果 准备好了吗?让我们开始吧。 2.

By Ne0inhk