前言
最近小学期接触了STM32,要求开发一个简单的超声波+红外避障+红外循迹的小车。笔者正好手头有一个闲置的树莓派4B和usb摄像头,就想着要不要搞一个简单的上位机,跑跑视觉识别看。
硬件介绍
先上张图:(请忽略这粗犷的接线,小车不是自己的不敢大改)
可以看到底层硬件就是淘宝随处可见的小车套件,核心板是STM32F103rct,其他的这里就不赘述
树莓派部分考虑到安全性没有直接从电池引电,而是使用了一个树莓派专用的电源(3.7v 300mAh),测试下了也还能用。
数据传输部分使用USB转TTL模块,摄像头使用了一个usb免驱摄像头,效果也还行,跑简单的识别算法够了。
软件部分
设计思路
基本的思路就是STM32负责小车的底盘驱动和实现其他传感器的信号处理,树莓派负责处理图像,并给下位机传输运动指令。上、下位机通过UART通信。
底层实现
底层程序主要是实现PWM调速和USART口的数据收发。关于PWM调速的部分网上的资料也比较全了,这里也就不再赘述,主要贴一下关于数据收发的部分吧。当然因为收发的数据比较简单(通常就是一个字母代表小车的运动),所以这部分程序实际上也比简单。
#ifndef __BLE_COM_H
#define __BLE_COM_H
#include "stm32f10x.h"
#define USART2_GPIO_TX_PIN GPIO_Pin_2
#define USART2_GPIO_TX_PORT GPIOA
#define USART2_GPIO_TX_CLK RCC_APB2Periph_GPIOA
#define USART2_GPIO_RX_PIN GPIO_Pin_3
#define USART2_GPIO_RX_PORT GPIOA
#define USART2_GPIO_RX_CLK RCC_APB2Periph_GPIOA
#define USART1_GPIO_TX_PIN GPIO_Pin_9
#define USART1_GPIO_TX_PORT GPIOA
#define USART1_GPIO_TX_CLK RCC_APB2Periph_GPIOA
#define USART1_GPIO_RX_PIN GPIO_Pin_10
#define USART1_GPIO_RX_PORT GPIOA
#define USA