2-5、6 控制伺服电机(meArm机械臂)

2-5、6 控制伺服电机(meArm机械臂)

2-5 控制伺服电机1

学习如何用arduino控制伺服电机

以及如何用arduino进行串口通讯

此节如何通过串口通信利用arduino控制伺服电机

效果演示

使用arduino串口接收器,输入一个数值,点击发送,

Arduino收到信号后会根据数值,用来控制伺服电机转动角度

注意首先打开面包板的电源模块

当led灯亮的时候就给面包板供电了

点击发送180,那么伺服电机就会转动到180度的位置


点击发送0,就会转到0的位置

面包板电源模块

有两个输入端,都可以接入电源

USB口公对公的,另一端可以插入电脑、充电器、充电宝等

开关可以控制面包板电源模块的供电(常用电源口(USB))

反面有4个插针,进行供电,配合插在面包板上

注意正负极与面包板对应

边缘输出旁边有两个黄色跳线,用来控制两端输出电源高度的

电压模块有两种一种正5V,一种3.3v

如何设置输出是+5v

将跳线插在5V的那个位置即可

若插在面包板电源模块的3.3V的位置,电压输出就是3.3v

我们的MeArm机械臂就是5v的,要设置成5V

还有额外的插针可以进行3.3v及5v的输出

电路

电路连接如上,正负极如上,注意电源模块、电机、arduino都是共地的

注意面包板电源的正极与负极千万不要连接在一起,会烧毁电路

搭建电路时不要带电作业,最后检查正负极是否误接

都是弱电装置,危险系数较低

充电宝供电及其小心,充电宝的电池短接会极度危险

示例程序

作用简单,只是一部分内容

Arduino在接收到串口数据时,是把字符的ASCII码进行处理的

使用Serial.parseint() 进行分析串口数据里面,看里面有没有整数信息,若有自动将整数信息提取出来赋值给 int变量pos

测试,输入的字符中一部分是数字,一部分是其余字符

可以自动将整数信息提取出来

实际演示程序

接下来实验演示代码程序

/*
Serial-Servo-1
by太极创客(2016-06-2)
www.taichi-maker.com
 
本示例程序为配合太极创客制作的《零基础入门学用Arduino教程-MeArm篇使用》
本示例程序旨在演示如何通过串口监视器控制1个伺服电机(舵机)。
 
有关电路连接以及其他相关内容,请参见太极创客网站关于本示例程序的相关页面。
This example code is in the public domain.
*/
 
#include <Servo.h>
 
Servo myServo;         //创建Servo对象myServo
 
int dataIndex = 0;     //创建整数型变量,存储输入数据序列号
void setup() {
  myServo.attach(6);
  Serial.begin(9600); //启动串口通讯,传输波特率9600
  Serial.println("Please input serial data.");
}
 
void loop() {          // 检查串口缓存是否有数据等待传输 
  if ( Serial.available()>0 ) {  
    dataIndex++;       // 处理数据序列号并通过串口监视器显示
    Serial.print("dataIndex = ");
    Serial.print(dataIndex);
    Serial.print(" , ");      
    
    int pos = Serial.parseInt();   // 解析串口数据中的整数信息并赋值给变量pos
    Serial.print("Set servo position: ");
    Serial.println(pos);           // 通过串口监视器显示变量pos数值
    myServo.write(pos);             // 使用pos变量数值设置伺服电机
    delay(15);
  }
}

下节课将使用串口通讯控制4个伺服电机

2-6 控制伺服电机2

四个电机就可以控制Mearm机械臂动起来了

四个电机共地,VCC接在+5v电源(面包板电源上的)

信号控制线,分别连接在了arduino的6、9、10、11号引脚

给电机分别编号

C控制钳子

F控制前臂

R控制后臂

B控制底盘

效果演示

下面如何通过arduino的串口通信控制4个电机

通过arduino的串口监视器,给arduino发送一条指令

Arduino接收到指令后,会根据指令对电机进行相应的调整

B字母电机转动到180度

给R电机转动到0度

给R电机转动到0度


我们可以控制哪个电机

示例程序

/*
Serial-Servo-2
by太极创客(2016-06-03)
www.taichi-maker.com
本示例程序为配合太极创客制作的《零基础入门学用Arduino教程-MeArm篇》使用
本示例程序旨在演示如何通过串口监视器控制4个伺服电机(舵机)。
有关电路连接以及其他相关内容,请参见太极创客网站关于本示例程序的相关页面。
This example code is in the public domain.
*/
#include <Servo.h>
 
Servo base, fArm, rArm, claw;  //建立4个电机对象
 
int dataIndex = 0;
void setup() {
  base.attach(11);     // base 伺服电机连接引脚11 电机代号'b'
  rArm.attach(10);     // rArm 伺服电机连接引脚10 电机代号'r'
  fArm.attach(9);      // fArm 伺服电机连接引脚9  电机代号'f'
  claw.attach(6);      // claw 伺服电机连接引脚6  电机代号'c'
  Serial.begin(9600);
  Serial.println("Please input serial data.");
}
 
void loop() {
  if (Serial.available()) {  // 检查串口缓存是否有数据等待传输 (b180)
    char servoName = Serial.read();   //获取电机指令中电机编号信息(Serial.read()返回的是接收的第一个字节的信息,就是b字符)
 
    Serial.print("servoName = ");
    Serial.print(servoName);    		//b
    Serial.print(" , ");      
    
    int data = Serial.parseInt();   //获取电机指令中电机角度信息(就是数字180)
 
    switch(servoName){ //根据电机指令中电机信息决定对哪一个电机进行角度设置
      case 'b':   // 电机指令b,设置base电机角度
        base.write(data);
        Serial.print("Set base servo value: ");
        Serial.println(data);
        break;
      case 'r':  // 电机指令r,设置rArm电机角度  
        rArm.write(data);
        Serial.print("Set rArm servo value: ");
        Serial.println(data);
        break;
      case 'f':   // 电机指令f,设置fArm电机角度  
        fArm.write(data);
        Serial.print("Set fArm servo value: ");
        Serial.println(data);
        break;
      case 'c':   // 电机指令c,设置claw电机角度  
        claw.write(data);  
        Serial.print("Set claw servo value: ");
        Serial.println(data);
        break;
    }
  }
}

Char


不能存储字符串的

多个字符串是使用双引号进行的

相关推荐
SRA.12 分钟前
STM32——HAL库开发笔记22(定时器3—呼吸灯实验)(参考来源:b站铁头山羊)
笔记·stm32·嵌入式硬件
SRA.13 分钟前
STM32——HAL库开发笔记21(定时器2—输出比较)(参考来源:b站铁头山羊)
笔记·stm32·嵌入式硬件
日记成书3 小时前
详细介绍嵌入式硬件设计
嵌入式硬件·深度学习·学习
wenchm3 小时前
细说STM32F407单片机1个ADC使用DMA同时采集3个输入通道的方法
stm32·单片机·嵌入式硬件
SRA.3 小时前
STM32——HAL库开发笔记23(定时器4—输入捕获)(参考来源:b站铁头山羊)
笔记·stm32·嵌入式硬件
打酱油的工程师4 小时前
w803|联盛德|WM IoT SDK2.X测试|window11|TOML 文件|外设|TFT_LCD|测试任务|(5):TFT_LCD_LVGL示例
单片机·物联网·lcd·tft·w80x
广药门徒4 小时前
(200): error: #29: expected an expression error: #40: expected an identifier
嵌入式硬件
沐欣工作室_lvyiyi5 小时前
基于物联网的家庭版防疫面罩设计与实现(论文+源码)
人工智能·stm32·单片机·物联网·目标跟踪
苏慕TRYACE8 小时前
RT-Thread+STM32L475VET6——USB鼠标模拟
stm32·单片机·嵌入式硬件·计算机外设·rt_thread
楼台的春风14 小时前
【MCU驱动开发概述】
c语言·驱动开发·单片机·嵌入式硬件·mcu·自动驾驶·嵌入式