ThankNeko's Blog ThankNeko's Blog
首页
  • 操作系统

    • Linux基础
    • Linux服务
    • WindowsServer笔记
    • Ansible笔记
    • Shell笔记
  • 容器服务

    • Docker笔记
    • Kubernetes笔记
    • Git笔记
  • 数据库服务

    • MySQL笔记
    • ELK笔记
    • Redis笔记
  • 监控服务

    • Zabbix笔记
  • Web服务

    • Nginx笔记
    • Tomcat笔记
  • 数据处理

    • Kettle笔记
  • Python笔记
  • Bootstrap笔记
  • C笔记
  • C++笔记
  • Arduino笔记
  • 分类
  • 标签
  • 归档
  • 随笔
  • 关于
GitHub (opens new window)

Hoshinozora

尽人事,听天命。
首页
  • 操作系统

    • Linux基础
    • Linux服务
    • WindowsServer笔记
    • Ansible笔记
    • Shell笔记
  • 容器服务

    • Docker笔记
    • Kubernetes笔记
    • Git笔记
  • 数据库服务

    • MySQL笔记
    • ELK笔记
    • Redis笔记
  • 监控服务

    • Zabbix笔记
  • Web服务

    • Nginx笔记
    • Tomcat笔记
  • 数据处理

    • Kettle笔记
  • Python笔记
  • Bootstrap笔记
  • C笔记
  • C++笔记
  • Arduino笔记
  • 分类
  • 标签
  • 归档
  • 随笔
  • 关于
GitHub (opens new window)
  • Python笔记

  • C笔记

  • C++笔记

  • Arduino笔记

    • Arduino介绍与环境搭建
    • Arduino编写程序
    • Arduino基本元器件
    • Arduino机械臂
      • MeArm机械臂
        • 介绍
        • 基本工作原理
        • 所需材料
        • 面包板电源模块
      • 直流伺服电机
        • 介绍
        • 作用
        • 原理
        • 示例
      • HC-06蓝牙模块
        • 介绍
        • 通信方式
        • 示例
    • Arduino智能应用
  • Dev
  • Arduino笔记
Hoshinozora
2025-03-23
目录

Arduino机械臂

# MeArm机械臂

# 介绍

MeArm是一款开源的桌面级机械臂套件,专为机器人教育和创客项目设计,自2014年发布以来经过多次迭代,成为全球广泛使用的入门级机器人教学工具。

# 基本工作原理

MeArm机械臂是通过四个电机来控制机械臂运动的,电机又由Arduino板来控制以实现我们想要的动作。

如图中,1号电机用于控制机械臂底座的左右转动,2号电机用于控制机械臂前臂的上下运动,3号电机用于控制机械臂后臂的前后运动,4号电机用于控制机械臂钳子的开合。

image-20250327105848898

# 所需材料

材料 数量 作用
Arduino Uno R3 1 作为控制器使用。
面包板 1 作为电路连接的载体。
面包板电源模块 (5V/3.3V电源输出) 1 为MeArm单独供电。
充电器/充电宝 + 公对公USB线 1 连接电源模块来供电,有其他供电方式也行。
杜邦线、面包板条线 若干 连接电路。
meArm机械臂散件 1 用于拼装出机械臂。
直流伺服电机(舵机) 4 启动驱动机械臂。
HC-06无线蓝牙串口透传模块 1 用于蓝牙控制机械臂。
10k + 20k 欧姆电阻 各1个 保护HC-06蓝牙模块。

# 面包板电源模块

面包板的电源模块用于给用电器供电使用,将面包板两边的供电引脚,根据面包板正负极以正确的方向插入进面包板。并且一定要将电源模块、开发板、其他元器件进行共地,也就是将负极连接在一起。

注意使用时一定不能将电源模块的正负极连接在一起,否则可能烧坏电源模块或供电设备。

建议在搭建电路时先不要通电,等搭建好之后,再检查一下电路的正负极有没有接错到一起,等检查完之后再通电。

通电后要注意鼻子闻,如果有异味要立马要断电,并检查哪里烧了,如果供电是充电宝则需要格外小心。

image-20250327184213957

# 直流伺服电机

# 介绍

直流伺服电机又称舵机,其中直流指使用的是直流电,伺服(servo)指根据指令进行工作,电机是能把电能转换成机械能的一种设备。

# 作用

伺服电机通过闭环控制系统来执行我们的指令,比如我们想让伺服电机的转子转到90度。发送90度指令后,伺服电机会将转子旋转一个固定角度,然后电机会将当前角度和目标角度进行比对,判断是否完成我们指令的要求,完成则结束,没有完成则继续旋转,直到完成为止。

每次旋转的角度,是根据电机型号而定的。

image-20250327111545120

# 原理

伺服电机的控制电路接收到指令后,伺服电机会比对当前的转子角度和目标角度。如果不一致则驱动内部的直流电机,电机会带动齿轮组旋转,从而控制转子(输出轴)旋转。

因为转子和电位器是连接在一起的,所以不同的角度对应着电位器不同的电压,控制电路就能通过读取模拟信号得到当前转子的角度。接着控制电路会继续比对角度,不一致则继续旋转,直至达到我们指令要求的角度。

image-20250327112432400

伺服电机的三条引线中,其作用如下:

伺服电机引线 作用
红色线 - VCC 供电,连接正5V引脚。
棕色线 - GND 接地,连接GND引脚。
橙色线 - PWM控制信号 控制信号,连接PWM模拟输出引脚。

# 示例

// 导入Servo伺服电机库,ArduinoIDE中已经内置该库。
#include <Servo.h>

// 创建Servo对象用以控制舵机。
Servo myservo;

// 存储舵机角度信息。
int pos = 0;

void setup() {
  // 将Servo对象连接到9号PWM引脚。
  myservo.attach(9);
  Serial.begin(9600);
}

void loop() {
  // 控制舵机从0度到180度,每次加45度。
  for (pos = 0; pos <= 180; pos += 45) {
    // 发送控制信号,控制舵机转动到指定角度,最大角度取决于舵机参数。
    myservo.write(pos);
    //输出角度变量。
    Serial.println(pos);
    // 等待1秒以确保舵机可以达到目标角度。
    delay(1000);
  }

  // 控制舵机从180度到0度。
  for (pos = 180; pos >= 0; pos -= 45) {
    myservo.write(pos);
    Serial.println(pos);
    delay(1000);
  }
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
#include <Servo.h>

Servo myServo;

// 存储通信序号
int serialIndex = 0;

void setup(){
  Serial.begin(9600);
  myServo.attach(9);
  Serial.println("串口通信启动成功。");
  Serial.println("请输入需要的角度: ");
}

void loop() {

  if (Serial.available() > 0) {
    
    serialIndex++;
    Serial.print("[ ");
    Serial.print(serialIndex);
    Serial.print(" ] ");

    int pos = Serial.parseInt();

    if ((pos < 0) || (pos > 180)) {
      Serial.println("你输入的值超出范围。");
    } else {
      Serial.print("设置伺服电机角度为: ");
      Serial.println(pos);

      myServo.write(pos);
      delay(15);
    }
    Serial.println("请输入需要的角度: ");
  }
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37

‘image-20250327153248726

# HC-06蓝牙模块

# 介绍

HC-06蓝牙模块的全称是HC-06无线蓝牙串口透传模块,其中串口的意思是串口通信。而透传的意思是透明传输,蓝牙传输数据的过程中,数据是不发生任何形式改变的,数据原封不动地从发送者到接受者。

HC-06是一款应用广泛且配置比较简单的蓝牙模块,虽然并非最先进的,但作为学习使用是刚好的。

# 通信方式

HC-06蓝牙模块由于使用串口模式进行通信,因此Arduino板的TX需要连接HC-06的RX,Arduino板的RX需要连接HC-06的TX,并且两者GND共地。

注意:在我们通过USB连接Arduino串口上传程序时,Arduino板的RX和TX引脚不能插任何东西。

该模块背面的LEVEL3.3V表示串口通信时,HC06模块的RX引脚高电平为3.3V,因此我们必须使用分压电阻去降低流向该引脚的电压(5V→3.3V)。

image-20250328153941160

image-20250328160759982

# 示例

// 导入软件串口库
#include <SoftwareSerial.h> 

// 建立软件串口对象,将2设为RX引脚,将3设为TX引脚。
// 设定的软件串口RX和TX需要与蓝牙模块的RX和TX交叉连接。
SoftwareSerial BTserial(2, 3);

void setup() 
{
  // 设定硬件串口的波特率。
  Serial.begin(9600);
  Serial.print("HC-06 DEMO ");

  // 设定软件串口(BTserial对象)的波特率。
  BTserial.begin(9600);
  // 通过TX引脚3发送数据给蓝牙HC06模块的RX。
  // 如果发送时蓝牙模块已经建立连接,则蓝牙主端会收到这条信息。
  // 如果发送时蓝牙模块没有建立连接,则蓝牙模块会处理该条AT指令。
  BTserial.print("AT+VERSION");
  // 测试用的灯
  pinMode(11, OUTPUT);
} 
void loop() 
{
  // 通过BTserial串口接收数据并进行处理。
  if(BTserial.available()){

    // 将BTserial串口(蓝牙设备)发送的信息输出给硬件串口(串口监视器)。
    char BTserialData = BTserial.read();
    Serial.write(BTserialData);

    // 判断收到1则开灯,0则关灯。
    if(BTserialData == '1'){
      digitalWrite(11, HIGH);
    }else if(BTserialData == '0'){
      digitalWrite(11, LOW);
    }
  }
  // 通过硬件Serial串口接收数据并进行处理。
  if(Serial.available()){
    // 将硬件串口(串口监视器)发送的信息输出给BTserial串口(蓝牙设备)。
    char serialData = Serial.read();
    BTserial.write(serialData);
  }
} 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45

image-20250328155156215

#Arduino#机械臂
Arduino基本元器件
Arduino智能应用

← Arduino基本元器件 Arduino智能应用→

最近更新
01
二〇二五年四月十七日随笔
04-17
02
二〇二五年四月十六日随笔
04-16
03
二〇二五年四月九日随笔
04-09
更多文章>
Theme by Vdoing | Copyright © 2022-2025 Hoshinozora | MIT License
湘ICP备2022022820号-1
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式