mirror of
https://github.com/m1ngsama/robot_arm.git
synced 2026-03-25 19:53:49 +00:00
Add main.ino firmware and update docs
This commit is contained in:
parent
865957604d
commit
c7828ea914
3 changed files with 101 additions and 1 deletions
11
README.md
11
README.md
|
|
@ -12,6 +12,17 @@
|
|||
* **麦克风**: 任意USB麦克风或电脑内置麦克风。
|
||||
* **计算设备**: 建议配备 NVIDIA 显卡的 Windows/Linux 电脑(用于加速 YOLO 和 LLM 推理)。
|
||||
|
||||
### 1.1 固件烧录 (Firmware)
|
||||
本项目包含下位机控制代码 `main.ino`,适用于 ESP32 开发板。
|
||||
* **开发环境**: Arduino IDE 2.x
|
||||
* **开发板管理器**: ESP32 by Espressif Systems (建议版本 3.0.0+)
|
||||
* **烧录步骤**:
|
||||
1. 使用 USB 数据线连接 ESP32 到电脑。
|
||||
2. 打开 `main.ino` 文件。
|
||||
3. 选择开发板型号(如 "ESP32 Dev Module")和端口。
|
||||
4. 上传代码。
|
||||
5. 记下端口号(如 `COM3`),后续需在 `voice_main.py` 中配置。
|
||||
|
||||
## 2. 软件环境搭建 (Software)
|
||||
|
||||
### 2.1 基础环境
|
||||
|
|
|
|||
88
main.ino
Normal file
88
main.ino
Normal file
|
|
@ -0,0 +1,88 @@
|
|||
/*
|
||||
* ESP32 原生硬件 PWM 控制程序 (适配 Core 3.x 版本)
|
||||
* 解决 'ledcSetup' was not declared 报错问题
|
||||
*/
|
||||
|
||||
// --- 1. 引脚定义 ---
|
||||
const int PIN_X = 14;
|
||||
const int PIN_Y = 4;
|
||||
const int PIN_Z = 5;
|
||||
const int PIN_B = 18;
|
||||
const int PIN_G = 23;
|
||||
|
||||
// --- 2. PWM 参数 (舵机标准) ---
|
||||
const int freq = 50; // 频率 50Hz (周期 20ms)
|
||||
const int resolution = 12; // 分辨率 12位 (数值范围 0-4095)
|
||||
|
||||
// 舵机角度对应的占空比数值 (12位分辨率)
|
||||
// 0.5ms (0度) -> 约 102
|
||||
// 1.5ms (90度) -> 约 307
|
||||
// 2.5ms (180度) -> 约 512
|
||||
|
||||
void setup() {
|
||||
Serial.begin(115200);
|
||||
delay(1000);
|
||||
|
||||
Serial.println("\n--- 使用 ESP32 Core 3.x LEDC 驱动初始化 ---");
|
||||
|
||||
// 在新版 Core 中,直接使用 ledcAttach(引脚, 频率, 分辨率)
|
||||
ledcAttach(PIN_X, freq, resolution);
|
||||
ledcAttach(PIN_Y, freq, resolution);
|
||||
ledcAttach(PIN_Z, freq, resolution);
|
||||
ledcAttach(PIN_B, freq, resolution);
|
||||
ledcAttach(PIN_G, freq, resolution);
|
||||
|
||||
// 初始归中
|
||||
writeAngle(PIN_X, 90); delay(500);
|
||||
writeAngle(PIN_Y, 90); delay(500);
|
||||
writeAngle(PIN_Z, 90); delay(500);
|
||||
writeAngle(PIN_B, 90); delay(500);
|
||||
writeAngle(PIN_G, 90); delay(500);
|
||||
|
||||
Serial.println("--- 5轴硬件 PWM 初始化完成 ---");
|
||||
}
|
||||
|
||||
void loop() {
|
||||
if (Serial.available() > 0) {
|
||||
String cmd = Serial.readStringUntil('\n');
|
||||
cmd.trim();
|
||||
|
||||
// 根据指令解析并控制
|
||||
if (cmd.startsWith("Servo_ArmX")) writeAngle(PIN_X, extractAngle(cmd, "Servo_ArmX"));
|
||||
else if (cmd.startsWith("Servo_ArmY")) writeAngle(PIN_Y, extractAngle(cmd, "Servo_ArmY"));
|
||||
else if (cmd.startsWith("Servo_ArmZ")) writeAngle(PIN_Z, extractAngle(cmd, "Servo_ArmZ"));
|
||||
else if (cmd.startsWith("Servo_ArmB")) writeAngle(PIN_B, extractAngle(cmd, "Servo_ArmB"));
|
||||
else if (cmd.startsWith("Servo_Gripper")) {
|
||||
int a = extractAngle(cmd, "Servo_Gripper");
|
||||
if (a != -1) {
|
||||
writeAngle(PIN_G, a);
|
||||
Serial.print("夹爪已转动至: "); Serial.println(a);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 核心控制函数
|
||||
* pin: 控制的引脚号
|
||||
* angle: 目标角度 (0-180)
|
||||
*/
|
||||
void writeAngle(int pin, int angle) {
|
||||
if (angle < 0) angle = 0;
|
||||
if (angle > 180) angle = 180;
|
||||
|
||||
// 线性映射计算占空比
|
||||
// 0度 = 102, 180度 = 512
|
||||
int duty = (angle * (512 - 102) / 180) + 102;
|
||||
|
||||
// 在新版 Core 中,ledcWrite 直接接收引脚号和数值
|
||||
ledcWrite(pin, duty);
|
||||
}
|
||||
|
||||
// 提取命令中的数字
|
||||
int extractAngle(String cmd, String prefix) {
|
||||
int prefixLen = prefix.length();
|
||||
String valPart = cmd.substring(prefixLen);
|
||||
if (valPart.length() > 0) return valPart.toInt();
|
||||
return -1;
|
||||
}
|
||||
3
使用说明书.md
3
使用说明书.md
|
|
@ -8,7 +8,8 @@
|
|||
## 二、快速开始
|
||||
|
||||
### 2.1 启动程序
|
||||
请确保已连接好 USB 摄像头和 ESP32 控制板(串口默认为 COM3),然后在终端运行:
|
||||
1. **硬件准备**:插入 USB 摄像头,连接 ESP32 控制板(请确保已烧录 `main.ino` 固件,其串口默认为 COM3)。
|
||||
2. **运行命令**:在终端输入:
|
||||
|
||||
```powershell
|
||||
python voice_main.py
|
||||
|
|
|
|||
Loading…
Reference in a new issue