Scratch编程如何控制无人机实现创意飞行?

99ANYc3cd6 无人机 15

太棒了!用 Scratch 来编程无人机是一个非常有趣且富有创造性的想法,这不仅能让你学习编程逻辑,还能亲手控制现实世界的物体,成就感十足。

Scratch编程如何控制无人机实现创意飞行?-第1张图片-广州国自机器人
(图片来源网络,侵删)

下面我将为你详细拆解如何实现“Scratch 编程无人机”,包括核心原理、准备工作、具体步骤和项目案例


核心原理:Scratch 如何与无人机通信?

Scratch 本身是一个图形化编程环境,它不能直接通过 Wi-Fi 或蓝牙控制无人机,我们需要一个“中间人”“翻译官”

这个“翻译官”通常是一个微控制器,最常见的就是 ESP32 开发板,整个工作流程如下:

  1. 你在 Scratch 中编写程序:当按下“上箭头”键时,让无人机向上飞。
  2. Scratch 将指令发送出去:通过你的电脑或局域网,将“向上飞”这个指令打包成数据(通常是网络数据包)。
  3. ESP32 接收指令:ESP32 开发板连接到同一个 Wi-Fi 网络,像一个“网络服务器”一样,监听并接收来自 Scratch 的数据。
  4. ESP32 翻译并执行指令:ESP32 接收到指令后,会根据预设的协议,将其翻译成无人机遥控器(遥控器)能识别的信号(通常是红外信号 IR 或串口信号 Serial)。
  5. 无人机接收信号并行动:无人机的接收器(遥控器)接收到 ESP32 发来的信号,控制电机做出相应的动作(上升、下降、旋转等)。

准备工作:你需要什么硬件和软件?

硬件部分:

  1. 无人机

    Scratch编程如何控制无人机实现创意飞行?-第2张图片-广州国自机器人
    (图片来源网络,侵删)
    • 首选:支持红外遥控的玩具无人机,这种无人机通常使用红外信号控制,像电视遥控器一样,这是最简单的方案,因为 ESP32 可以轻松模拟红外信号。
    • 备选:支持串口通信的无人机,一些更高级的玩具无人机或 DIY 套件(如 Holybro 的 CADDX Turtle V2)会通过串口接收指令,这需要更复杂的硬件连接,但信号更稳定。
  2. 主控板:ESP32 开发板

    • 这是整个项目的核心,ESP32 便宜、功能强大,自带 Wi-Fi 和蓝牙,并且可以轻松编程来模拟红外信号,推荐使用 ESP32 DevKitC V4 这类常见的开发板。
  3. 红外发射管

    如果你的无人机是红外遥控的,你需要一个红外发射管,很多 ESP32 开发板已经集成了红外发射二极管,如果没有,你需要单独购买一个,并连接到 ESP32 的指定引脚。

  4. 连接线

    Scratch编程如何控制无人机实现创意飞行?-第3张图片-广州国自机器人
    (图片来源网络,侵删)

    杜邦线若干,用于连接红外发射管(如果需要)。

软件部分:

  1. Scratch 3.0

    • 可以是 Scratch 3.0 离线版在线版,为了与硬件通信,我们通常会使用一个特殊的 Scratch 扩展。
  2. Scratch Link (关键!)

    • 这是连接 Scratch 和硬件的桥梁,Scratch Link 是一个在你的电脑上运行的小程序,它会监听来自 Scratch 程序的网络请求,并通过蓝牙或 Wi-Fi 将这些请求转发给连接的设备(如 ESP32)。
    • 下载地址https://scratch.mit.edu/scratch-link
    • 注意:Scratch Link 主要支持蓝牙,但我们可以通过一些技巧(见下文)让它与 Wi-Fi 上的 ESP32 通信。
  3. Arduino IDE

    用于给 ESP32 编写和上传代码,你需要先安装 Arduino IDE,并添加 ESP32 的开发板支持。

  4. 无人机遥控器

    • 一个好的“信号源”,你需要先用手动遥控器“学习”“录制”下无人机的各种动作指令(如上升、下降、左飞、右飞、旋转等),然后将这些录制的信号数据存入 ESP32 的代码中。

详细步骤:从零开始搭建

第 1 步:为 ESP32 “学习”无人机指令

这是最关键的一步,目的是让 ESP32 知道“上升”这个动作对应怎样的红外信号数据。

  1. 准备硬件

    • 将红外接收头连接到 Arduino 上(VCC, GND, DATA)。
    • 将无人机遥控器和红外接收头都对准,确保它们之间没有障碍物。
  2. 使用 Arduino 库录制信号

    • 在 Arduino IDE 中,安装 IRremoteESP8266 库(它也支持 ESP32)。
    • 打开 IRrecvDumpV2 示例程序(在库的示例中可以找到)。
    • 上传代码到 ESP32。
    • 打开 Arduino IDE 的 串口监视器(波特率设置为 115200)。
    • 按下遥控器上的“上升”按钮,串口监视器会打印出一长串数据(类似 Protocol NEC Address: 0x10 Command: 0xE01F Bits: 32)。
    • 记录下所有你需要的指令(上升、下降、左、右、前、后、起飞、降落等)的 AddressCommand 值。

第 2 步:编写 ESP32 发射代码

你将使用上一步记录的数据,编写一个能让 ESP32 发射红外信号的代码。

  1. 创建一个新的 Arduino 程序。
  2. 引入 IRremoteESP8266.h 库。
  3. 定义红外发射引脚(#define IR_LED 4)。
  4. 创建一个 IRsend 对象。
  5. setup() 函数中,初始化串口,用于接收来自 Scratch 的指令。
  6. loop() 函数中,使用 if (Serial.available()) 来检查是否有数据从串口传来。
  7. 根据收到的不同字符('U' 代表 Up, 'D' 代表 Down),调用 irsend.sendNEC() 函数,并传入你之前记录的 AddressCommand

示例代码框架:

#include <Arduino.h>
#include <IRremoteESP8266.h>
#include <IRsend.h>
#define IR_LED 4  // 定义红外发射引脚
IRsend irsend(IR_LED); // 创建 IRsend 对象
void setup() {
  Serial.begin(115200); // 初始化串口,与电脑通信
  Serial.println("ESP32 IR Transmitter Ready!");
}
void loop() {
  if (Serial.available() > 0) { // 检查是否有数据传入
    char command = Serial.read(); // 读取一个字符
    // 根据不同指令发送不同的红外信号
    switch (command) {
      case 'U': // Up
        Serial.println("Sending UP signal...");
        irsend.sendNEC(0x10E01F, 32); // 替换为你录制的地址和命令
        break;
      case 'D': // Down
        Serial.println("Sending DOWN signal...");
        irsend.sendNEC(0x10D02F, 32);
        break;
      case 'L': // Left
        Serial.println("Sending LEFT signal...");
        irsend.sendNEC(0x10C03F, 32);
        break;
      case 'R': // Right
        Serial.println("Sending RIGHT signal...");
        irsend.sendNEC(0x10B04F, 32);
        break;
      case 'T': // Takeoff
        Serial.println("Sending TAKEOFF signal...");
        irsend.sendNEC(0x10A05F, 32);
        break;
      case 'L': // Land
        Serial.println("Sending LAND signal...");
        irsend.sendNEC(0x10906F, 32);
        break;
      default:
        Serial.print("Unknown command: ");
        Serial.println(command);
        break;
    }
  }
}

将这段代码上传到你的 ESP32。

第 3 步:配置 Scratch 和 Scratch Link

这是连接虚拟世界和现实世界的桥梁。

  1. 启动 ESP32 的 TCP 服务器

    • 上述代码只监听串口,为了让 Scratch 能找到它,我们需要在代码中加入一个简单的 TCP 服务器功能,这会让事情变得复杂一些,有现成的库可以帮助你实现。
    • 一个更简单的方法是使用 BlynkMQTT 等物联网平台,但这超出了基础教程的范围。
    • 简化方案:直接使用 USB 串口通信,如果你将 ESP32 通过 USB 连接到电脑,Scratch 可以通过一个名为 Serial 的扩展直接向串口发送字符,这是最直接、最稳定的方式,但缺点是线缆限制了无人机的活动范围。
  2. 安装 Serial 扩展

标签: Scratch无人机编程创意飞行 Scratch控制无人机飞行教程 Scratch无人机编程创意项目

抱歉,评论功能暂时关闭!