上一篇,我们的造车计划完成了基础版双区差动转向小车。此次,我们对小车继续进行升级改造,本次改造计划将小车升级为四驱,并增加控制功能。
硬件简介
1、Beetle RP2350
Beetle RP2350 是一款基于RP2350芯片设计的高性能迷你体积的开发板,该开发板仅硬币大小(25*20.5mm),专为对空间有要求的嵌入式应用设计。


2、Robot:bit
Robotbit是增强Micro:bit实用性能、丰富其使用场景的优秀解决方案,作为Micro:bit的扩展板,Robotbit自身带有电机舵机驱动芯片。


3、IR Receiver Module红外无线遥控套件
4、N20减速电机

接线图

搭建

程序编写
1. Arduino IDE安装Beetle RP2350 开发板
步骤 1:添加开发板管理器网址
打开 Arduino IDE 后,点击菜单栏中的 文件 -> 首选项。
在弹出的 首选项 窗口中,找到 附加开发板管理器网址 输入框。
输入 Beetle RP2350 开发板的支持包链接。通常可以在开发板的官方文档或者社区中找到对应的链接。对于 RP2350 开发板,一般使用的链接是 https://github.com/earlephilhower/arduino-pico/releases/download/global/package_rp2040_index.json。
点击 确定 保存设置。

步骤 2:安装 Beetle RP2350 开发板支持
点击菜单栏中的 工具 -> 开发板 -> 开发板管理器,在开发板管理器窗口中,等待索引更新完成。
在搜索框中输入 RP2350。
在搜索结果中找到 Raspberry Pi Pico/RP2040/RP2350 并点击 安装 按钮。

等待安装过程完成,这可能需要一些时间,具体取决于你的网络速度。
步骤 3:选择 Generic RP2350 开发板
安装完成后,点击菜单栏中的 工具 -> 开发板,在开发板列表中选择 Generic RP2350。

步骤 4:选择端口
将 Beetle RP2350 开发板通过 USB 线连接到计算机。点击菜单栏中的 工具 -> 端口,选择与开发板对应的端口。
完成以上步骤后,你就可以在 Arduino IDE 中使用 Beetle RP2350 开发板进行编程和开发了。你可以编写代码并上传到开发板上运行。
2、安装IRremote库
打开 Arduino IDE 软件。
点击菜单栏:工具 → 管理库…。
在库管理器的搜索框中输入 IRremote搜索。
选择 Arduino IRremote(作者:Shirriff, Ken 等)。
点击 安装 按钮,等待安装完成。

主要程序代码及说明
#include <Adafruit_PWMServoDriver.h>
#include <IRremote.h>
// 创建对象
Adafruit_PWMServoDriver pwm1 = Adafruit_PWMServoDriver(0x40);
IRrecv irrecv_8(8);
// 主程序开始
void setup() {
pwm1.begin();
pwm1.setPWMFreq(50);
irrecv_8.enableIRIn();
Stop();
}
void loop() {
bool commandReceived = false;
if (irrecv_8.decode()) {
struct IRData *pIrData = &irrecv_8.decodedIRData;
unsigned long ir_item = pIrData->decodedRawData;
Serial.println(ir_item, HEX); // 直接打印键值(十六进制)
// 判断红外码并打印方向
switch (ir_item) {
case 0xE718FF00: // 前
Serial.println("前");
Forward();
break;
case 0xAD52FF00: // 后
Serial.println("后");
Backward();
break;
case 0xF708FF00: // 左
Serial.println("左");
TurnLeft();
break;
case 0xA55AFF00: // 右
Serial.println("右");
TurnRight();
break;
default:
//
break;
}
irrecv_8.resume(); // 准备接收下一个信号
}
}
void Forward(){
pwm1.setPWM(1, 0, 2048);
pwm1.setPWM(0, 0, 0);
pwm1.setPWM(3, 0, 2048);
pwm1.setPWM(2, 0, 0);
pwm1.setPWM(5, 0, 2048);
pwm1.setPWM(4, 0, 0);
pwm1.setPWM(7, 0, 2048);
pwm1.setPWM(6, 0, 0);
delay(2000);
Stop();
}
void Backward(){
pwm1.setPWM(0, 0, 2048);
pwm1.setPWM(1, 0, 0);
pwm1.setPWM(2, 0, 2048);
pwm1.setPWM(3, 0, 0);
pwm1.setPWM(4, 0, 2048);
pwm1.setPWM(5, 0, 0);
pwm1.setPWM(6, 0, 2048);
pwm1.setPWM(7, 0, 0);
delay(2000);
Stop();
}
void TurnLeft(){
pwm1.setPWM(1, 0, 2048);
pwm1.setPWM(0, 0, 0);
pwm1.setPWM(7, 0, 2048);
pwm1.setPWM(6, 0, 0);
pwm1.setPWM(2, 0, 2048);
pwm1.setPWM(3, 0, 0);
pwm1.setPWM(4, 0, 2048);
pwm1.setPWM(5, 0, 0);
delay(500);
Stop();
}
void TurnRight(){
pwm1.setPWM(0, 0, 2048);
pwm1.setPWM(1, 0, 0);
pwm1.setPWM(6, 0, 2048);
pwm1.setPWM(7, 0, 0);
pwm1.setPWM(3, 0, 2048);
pwm1.setPWM(2, 0, 0);
pwm1.setPWM(5, 0, 2048);
pwm1.setPWM(4, 0, 0);
delay(500);
Stop();
}
void Stop(){
pwm1.setPWM(1, 0, 0);
pwm1.setPWM(0, 0, 0);
pwm1.setPWM(7, 0, 0);
pwm1.setPWM(6, 0, 0);
pwm1.setPWM(3, 0, 0);
pwm1.setPWM(2, 0, 0);
pwm1.setPWM(5, 0, 0);
pwm1.setPWM(4, 0, 0);
}
评论