写在前面
本篇文章只介绍了小车的运动和使用蓝牙的控制,其他拓展功能以及传感器的连接在后续都可以拓展起来。
万事开头难,让我们先让小车动起来吧!
需要的设备
- RasPberryPi Pico 开发板
- Hc-06 蓝牙模块
- L298N 电机驱动模块
- 小车框架
- 杜邦线
- 电池
RasPberryPi Pico自己焊针脚的话大概20元,Hc-06比较好的要9元,L298N基本都是5元钱,小车框架看自己需求选择一个喜欢的
外表炫酷大概15元,我买的是20多元的四驱小车框架,电池2元钱。
接线细节
L298N与Pico的连接
L298N和pico的连接:L298N的IN1、IN2、IN3、IN4与pico的GPIO0、GPIO1、GPIO2、GPIO3分别相接,L298N的ENA和ENB与pico的GPIO5和GPIO4连接。
我对L298N的一个out输出控制两个电机,如果想要更大的动力,使用两块L298N,分别控制四个电机。
给使能端(ENA/ENB)输入PWM脉冲信号可以控制电机的转速,如果不使用使能的话,要将L298N的使能端各自短接,否则电机不转。
L298N给Pico供电
用电池(我的电池是7.8V)的正极和L298N的12V连接,GND和L298N的GND连接,这时候L298N的5V为输出电压,可以接到pico的VSYS,给Pico供电,Pico的地线也要和L298N的地线连接,这很重要!
HC-06与Pico的连接
Pico和HC-06是全双工串口通信,Pico的RXD、TXD和HC-06的TXD、RXD相连,注意是相互连接。HC-06的输入电压是3.3V直接用Pico的3.3v给它输入电压,地线也直接和Pico的地线连接,我用的是Pico的GPIO12和GPIO13,它们分别是TX0和RX0。
蓝牙模块HC-06还需要调试一下。
蓝牙模块HC-06的使用
HC-06是蓝牙2.0,iPhone手机由于安全性质,是无法连接HC-06的(我的手机就是iPhone的,连不上呜呜呜)。
我用了一个TTL转USB的工具和HC-06连接,在不配对的情况下,直接将USB插入电脑中就是进入了HC-06的AT模式,在AT模式我们就可以调试HC-06了。
常用的AT指令与调试
在电脑上下载一款串口调试软件,然后选择波特率为9600(HC-06默认的波特率),点击打开串口后就可以发送AT指令了,如果有响应就说明蓝牙模块没问题。
AT指令很多,可以网上搜一下。
指令 响应
AT -> OK
AT+BAUD6 -> OK38400 //这个是改波特率为38400
AT+NAMEname -> OKsetname //改蓝牙名称为name
AT+PIN1234 -> OKsetPIN //改蓝牙密码为1234(默认就是1234)
AT+ROLE=S -> OK+ROLE:S //设置模块为从模块,HC-06好像只能作为从机
建议在安卓手机上下一个e调试app,然后可以自定义按键给蓝牙模块发消息,可以定义一个Ui界面然后控制小车的前进后退。
有的安卓手机由于安全性能,也是无法和HC-06连接的(之前我就被室友的手机坑过,还以为是蓝牙模块坏了呢)
写代码的过程
我建议参考官方文档来写代码:MicroPython 库 — MicroPython中文 1.17 文档
有一个必须用到的库就是machine
,它是与硬件相关功能的库。
machine.PWM
:有关脉宽调制类
machine.UART
:全双工串行通信总线类
基本上结合下面的代码再参考官方文档就能读懂啦!
我觉得PWM的调制会比较难一点,下面是官方的示例代码:
from machine import PWM
pwm = PWM(pin) # create a PWM object on a pin
# 获取或设置 PWM 输出的当前占空比,作为 0 到 65535 范围内的无符号 16 位值
pwm.duty_u16(32768) # set duty to 50%
# reinitialise with a period of 200us, duty of 5us
pwm.init(freq=5000, duty_ns=5000)
pwm.duty_ns(3000) # set pulse width to 3us
pwm.deinit() # 禁用 PWM 输出。
有关Pico的upload经验
我是直接在vscode上下载了一个microPico的插件,所以可以在vscode写代码然后调试,vscode写代码是非常的爽,但是upload的时候得要注意了,先要调试好,保证程序没有问题再upload到Pico里面,不然会导致Pico死掉的!
我当时就大意把Pico玩死了,然后我一直连接不上板子了,只能重新把uf2删除再装一个。
有关电机运动的Car类
import machine
import utime
class Motor:
# speed_pin:用PWM控制小马达的引脚编号
def __init__(self, speed_pin, clockwise