瑞萨MCU杯第八届立创电子设计开源大赛正式落幕,最终获奖项目正式出炉!本文介绍的是:本届大赛三等奖项目《ESP32-C3蓝牙小车)》。
本文作者:瑞萨MCU杯第八届立创电子设计开源大赛选手@PY学习笔记,禁止商用,未经许可禁止转载。
目前网络上智能小车方案非常多,大多采用的是主控芯片ESP32,电机驱动L298N,单路电源供电等方案,成本较高、体积较大、稳定性较差。
本项目基于合宙的ESP32-C3开发板、DRV8833、麦克纳姆轮、锂电池等元件,采用两路电源供电,避免小车四轮启动时,ESP32-C3开发板电流不足重启;主板尽可能采用较少的贴片电子元器件,方便焊接、组装;整套成本不足50元,具有成本低、体积小、稳定性高等特点,适合中小学生学习、二次开发。
本项目的硬件采用低成本方便,锂电池使用小米电动牙刷拆下来的小电池,整套小车成本不超过50元。
1、主控芯片:采用合宙ESP32-C3开发板,价格12.9元。支持以下功能:
——1路SPI FLASH,板载4MB,支持最高 16MB
——2路UART接口,UART0~UART1,其中下载口为UART0
——5 路 12 比特 ADC,最高采样率 100KSPS
——1路低速SPI接口,支持主模式
——1路IIC控制器
——4路PWM接口,可使用任意GPIO
——GPIO外部管脚15路,可复用
——2路贴片LED指示灯
——1路复位按键+1路BOOT按键
——1路USB转TTL下载调试口
——2.4G PCB板载天线
2、电机驱动:两块国产小体积DRV8833电机驱动模块,价格1.8元/块。每个模块可驱动2个直流减速电机。
3、电源方案:采用两路电源方案,一路为ESP32-C3供电,一路为电机供电,避免互相干扰。ESP32-C3的供电采用一个3.7V锂电池通过LDO(HT7333-A)降压稳压到3.3V供电。电机供电采用一个3.7V锂电池通过DRV8833直接供电。如果要让小车的速度更快,可以考虑采用2个3.7V锂电池供电,7.4V的电压能让小车速度更快。
4、设计的主板
主板尽可能采用较少的贴片电子元器件,成本详见BOM表。ESP32-C3、DRV8833等模块采用2.54排针固定,电池、电机采用XH2.54插件连接,方便焊接、组装,以及元件重复利用。
主板原理图如下:
初学PCB设计,画得丑了点。
PCB图
效果图
实物图:
焊接图
PCB板只有HT7333-A和3个贴片电容比较难,其他都简单。
5、电机和麦克纳姆轮
某宝上买的成套材料,25元。结果发过来2个电机是坏的,重新买的2个颜色和速度还和前面的不一样,导致小车横向行走有点弯。
6、遥控器
手机APP,节省成本。
7、成果图
组装好的成品
背面
小车加上舵机和超声波模块:
合宙ESP32-C3支持Lua、MicroPython、乐鑫IDF等开发方式,本项目采用MicroPython开发。
1、手机蓝牙APP
蓝牙区分为经典蓝牙(Classic Bluetooth)和低功耗蓝牙(BLE),低功耗蓝牙一般为蓝牙4.0及以上的。合宙ESP32-C3配备的蓝牙5.0属于BLE,不向下兼容经典蓝牙。所以要通过手机蓝牙APP遥控ESP32-C3小车,则需要支持BLE的APP,我测试了好多APP才找到这个可用的。(iOS请自搜)
Bluefruit Connect:https://cnas.lanzoum.com/ivoGu0pre7xc,密码:4phz
注:文件为Android/HarmonyOS版,IOS版请自行搜索。这个APP有提供四向按键,且按下按键和放开均有发送消息。
2、蓝牙遥控原理
要通过手机蓝牙APP控制ESP32-C3小车,原理分三步:
① 实现蓝牙广播和连接。
② 手机蓝牙APP按下按键,通过蓝牙向ESP32-C3发送数据,需要测出每个按键发送的数据。
③ 蓝牙发送的数据被存入到BLE_MSG全局变量中,根据BLE_MSG决定小车行动(前后左右停止)。
3、测试轮子转向
小车每个轮子由两个引脚控制,通过引脚的高低电平控制轮子转动的方向。编写代码前,需要先测试,出每个轮子的转向。测试代码如下:
from machine import Pin
from time import sleep_ms
# 定义GPIO引脚,L表示左,R表示右,fw表示前轮,bw表示后轮,1表示向前,0表示向后
Lfw1 = Pin(10,Pin.OUT) # GPIO10引脚,左前轮电机向前
Lfw0 = Pin(7,Pin.OUT) # GPIO7引脚,左前轮电机向后
Rfw1 = Pin(19,Pin.OUT) # GPIO19引脚,右前轮电机向前
Rfw0 = Pin(8,Pin.OUT) # GPIO8引脚,右前轮电机向后
Lbw1 = Pin(3,Pin.OUT) # GPIO3引脚,左后轮电机向前
Lbw0 = Pin(2,Pin.OUT) # GPIO2引脚,左后轮电机向后
Rbw1 = Pin(6,Pin.OUT) # GPIO6引脚,右后轮电机向前
Rbw0 = Pin(18,Pin.OUT) # GPIO18引脚,右后轮电机向后
Lfw1.value(1)
Lfw0.value(0)
Rfw1.value(1)
Rfw0.value(0)
Lbw1.value(1)
Lbw0.value(0)
Rbw1.value(1)
Rbw0.value(0)
4、完整代码
详见我们的微X公众号文章:基于MicroPython的蓝牙遥控小车2.0来了!
UT890C/万用表 | 99 | |
DL241025/螺丝批套装 | 18.22 | |
DP-366D/吸锡器/吸锡线 | 17.21 | |
BK881/热风拆焊台 | 368.85 | |
STM8L051F3P6TR/单片机(MCU/MPU/SOC) | 2.2 | |
207112/防静电刷子 | 5.58 | |
DP-366P/吸锡器/吸锡线 | 27.61 | |
PM-905F/斜嘴钳 | 37.35 | |
CA-IS3720LS/数字隔离器 | 0.7648 | |
CA-IS3722HS/数字隔离器 | 77.6 |
50万+现货SKU
品类不断扩充中
科技智能大仓储
最快4小时发货
正品有保障
物料可追溯
明码标价节省时间
一站式采购元器件