亿迅智能制造网
工业4.0先进制造技术信息网站!
首页 | 制造技术 | 制造设备 | 工业物联网 | 工业材料 | 设备保养维修 | 工业编程 |
home  MfgRobots >> 亿迅智能制造网 >  >> Manufacturing Technology >> 制造工艺

Arduino + 蓝牙掌控乐高 Power Functions 电机与舵机

项目简介

利用 Arduino UNO、L293D 双 H 桥驱动芯片与 HC-05 蓝牙模块,配合 MIT App Inventor 开发的安卓手柄 App,实现对乐高 Power Functions (PF) 电机与舵机的无线比例控制。以乐高 9398 4×4 爬行车为例(双 L 电机驱动 + 1 舵机转向),零剪切原厂线缆,适合亲子制作与机器人入门。

核心原理

PF 线缆接口定义 (Extension Wire 8886)

剪开延长线制作“断出线”,保留乐高插头一端,另一端焊排针:

L293D 双 H 桥驱动拓扑

单片 L293D 内含两路 H 桥:

硬件清单

组件数量关键规格
Arduino UNO1
L293D (DIP-16, 长引脚版)1非贴片版,便于插面包板
面包板1
9V 电池盒转 DC 插头1给 Arduino 供电 (Vin)
乐高 PF 延长线 (8886)3剪开做断出线
HC-05 蓝牙模块1主从一体,3.3V 电平
1kΩ 电阻3蓝牙 RX 分压用

引脚分配表

功能Arduino 引脚L293D 引脚备注
电机方向 1AD21A (Pin 2)
电机方向 2AD52A (Pin 7)
电机使能 EN1,2 (PWM)D9 ~EN1,2 (Pin 1)PWM 调速
舵机方向 3AD63A (Pin 10)
舵机方向 4AD84A (Pin 15)
舵机使能 EN3,4 (PWM)D3 ~EN3,4 (Pin 9)PWM 控制转向角度
蓝牙 TXDD0 (RX)—硬件串口,上传代码时须断开
蓝牙 RXDD1 (TX) → 分压 → 蓝牙—3.3V 电平需分压 (3×1kΩ)

Arduino 固件核心逻辑

全局变量与初始化


// 电机控制引脚
const int controlPin1A = 2, controlPin2A = 5, ENablePin = 9;
// 舵机控制引脚
const int controlPin3A = 6, controlPin4A = 8, servoENablePin = 3;

// 运行时变量
int motorSpeed = 0;       // 0-255
int motorDirection = 1;   // 1=前进, 0=后退
int steering = 0;         // 0-255
int steeringDirection = 0;// 0=左, 1=右

void setup() {
  Serial.begin(9600);
  pinMode(controlPin1A, OUTPUT); pinMode(controlPin2A, OUTPUT); pinMode(ENablePin, OUTPUT);
  pinMode(controlPin3A, OUTPUT); pinMode(controlPin4A, OUTPUT); pinMode(servoENablePin, OUTPUT);
  digitalWrite(ENablePin, LOW); digitalWrite(servoENablePin, LOW);
}

电机/舵机控制子程序


void SetMotorControl() {
  // 电机方向
  if (motorDirection == 1) { digitalWrite(controlPin1A, HIGH); digitalWrite(controlPin2A, LOW); }
  else { digitalWrite(controlPin1A, LOW); digitalWrite(controlPin2A, HIGH); }
  analogWrite(ENablePin, motorSpeed);

  // 舵机方向
  if (steeringDirection == 0) { digitalWrite(controlPin3A, HIGH); digitalWrite(controlPin4A, LOW); }
  else { digitalWrite(controlPin3A, LOW); digitalWrite(controlPin4A, HIGH); }
  analogWrite(servoENablePin, steering);
}

蓝牙指令解析主循环


#define INPUT_SIZE 30

void loop() {
  char input[INPUT_SIZE + 1];
  byte size = Serial.readBytesUntil('\n', input, INPUT_SIZE);
  input[size] = 0; // C 字符串终止

  // 协议格式: "RC,steering,speed\n"  steering/speed: -100..100
  char* cmd = strtok(input, ",");
  char* RCsteering = strtok(NULL, ",");
  char* RCspeed = strtok(NULL, ",");

  int iRCsteering = atoi(RCsteering);
  int iRCspeed = atoi(RCspeed);

  // 映射到硬件变量
  steeringDirection = (iRCsteering > 0) ? 1 : 0;
  steering = int(2.55 * abs(iRCsteering)); // 100 → 255
  motorDirection = (iRCspeed > 0) ? 1 : 0;
  motorSpeed = int(2.55 * abs(iRCspeed));

  SetMotorControl();
}

MIT App Inventor 手柄 App 开发

设计器界面

核心逻辑 (Blocks 视图)

  1. Ball.Dragged 事件持续触发,获取手指坐标 currentX, currentY
  2. 限制在圆形触控区内,计算 steering (X 轴) 与 speed (Y 轴),范围 -100..100
  3. 拼接指令字符串:"RC," & steering & "," & speed & "\n"
  4. BluetoothClient.SendText 发送,同步显示在屏幕上

蓝牙配对步骤

  1. 手机开启蓝牙,搜索 "HC-05",配对码 1234
  2. App 中点击 "Bluetooth connect" 选择已配对设备
  3. 状态显示 "connected" 绿色即可操控

进阶与安全建议

资源链接

制造工艺

  1. 提升动力传输组件可靠性:矿山、制造与工业运营的实证策略
  2. 电力与暖通租赁方案:应对突发与计划性气候控制需求的最优选择
  3. 避孕药:历史、获益、风险与生产
  4. 推土机技术:设计、制造与未来创新
  5. 风力发电:将空气运动转化为清洁电能
  6. 电气控制柜:安全与投资回报的设计要点
  7. 英国制造商因自动化设计错误年均损失250万英镑
  8. 诊断修复过程控制系统的八大实证步骤
  9. 掌握卷材张力控制核心组件:关键要素详解
  10. 自然底数 e 的指数函数求导详解
  11. 指数幂函数原函数的求法
  12. 驾驭SaaS:在拥抱云端的同时保持掌控的策略