回到首页 返回首页
回到顶部 回到顶部
返回上一页 返回上一页
best-icon

Beetle 树莓派RP2350:造车计划(二) 简单

头像 豆爸 2025.05.21 36 0

上一篇,我们的造车计划完成了基础版双区差动转向小车。此次,我们对小车继续进行升级改造,本次改造计划将小车升级为四驱,并增加控制功能。

材料清单

  • Beetle RP2350 X1 链接
  • Robot:bit 扩展板 X1
  • N20减速电机 X4 链接
  • Gravity: IR kit红外遥控套件 X1 链接

硬件简介

1、Beetle RP2350

Beetle RP2350 是一款基于RP2350芯片设计的高性能迷你体积的开发板,该开发板仅硬币大小(25*20.5mm),专为对空间有要求的嵌入式应用设计。

2、Robot:bit

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

22.png
robotbit-1.png

3、IR Receiver Module红外无线遥控套件

IR kit红外遥控套件

4、N20减速电机

接线图

接线图.png

搭建

7520f178b6bc0f90066031f8bb638c7.jpg

程序编写

1. Arduino IDE安装Beetle RP2350 开发板

步骤 1:添加开发板管理器网址

打开 Arduino IDE 后,点击菜单栏中的 文件 -> 首选项。

在弹出的 首选项 窗口中,找到 附加开发板管理器网址 输入框。

输入 Beetle RP2350 开发板的支持包链接。通常可以在开发板的官方文档或者社区中找到对应的链接。对于 RP2350 开发板,一般使用的链接是 https://github.com/earlephilhower/arduino-pico/releases/download/global/package_rp2040_index.json。

点击 确定 保存设置。

image-20250516074502812.png

步骤 2:安装 Beetle RP2350 开发板支持

点击菜单栏中的 工具 -> 开发板 -> 开发板管理器,在开发板管理器窗口中,等待索引更新完成。

在搜索框中输入 RP2350。

在搜索结果中找到 Raspberry Pi Pico/RP2040/RP2350 并点击 安装 按钮。

image-20250516073904537.png

等待安装过程完成,这可能需要一些时间,具体取决于你的网络速度。

步骤 3:选择 Generic RP2350 开发板

安装完成后,点击菜单栏中的 工具 -> 开发板,在开发板列表中选择 Generic RP2350。

4E885EEB-63FA-4447-A72E-A208DD093520.png

步骤 4:选择端口

将 Beetle RP2350 开发板通过 USB 线连接到计算机。点击菜单栏中的 工具 -> 端口,选择与开发板对应的端口。

完成以上步骤后,你就可以在 Arduino IDE 中使用 Beetle RP2350 开发板进行编程和开发了。你可以编写代码并上传到开发板上运行。

2、安装IRremote库

打开 Arduino IDE 软件。

点击菜单栏:工具 → 管理库…。

在库管理器的搜索框中输入 IRremote搜索。

选择 Arduino IRremote(作者:Shirriff, Ken 等)。

点击 安装 按钮,等待安装完成。

1747801922632.png

主要程序代码及说明

代码
#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);

}

评论

user-avatar