要实现机械臂所需的功能,我们需要让机械臂能在三维空间中自由活动。
现在,使用4个舵机、mega2560和一些简单的材料就可以制作一台听从我们命令的次机械臂。
成品:
上位机使用visual studio。
设计界面:
vs的控制方式是手动选择角度后点确定,上位机就会将角度信息以串口形式发送给单片机。arduino在处理后控制舵机旋转。
上位机代码:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace jixiebi
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
serialPort1.PortName = "COM6";
serialPort1.BaudRate = 9600;
}
private void trackBar1_Scroll(object sender, EventArgs e)
{
}
private void button1_Click_1(object sender, EventArgs e)
{
serialPort1.Open();
serialPort1.Write("a");
trackBar1_Scroll(sender, e);
serialPort1.Write(trackBar1.Value.ToString());
serialPort1.Close();
}
private void trackBar2_Scroll(object sender, EventArgs e)
{
}
private void button2_Click_1(object sender, EventArgs e)
{
/*serialPort1.Open();
serialPort1.Close();*/
serialPort1.Open();
serialPort1.Write("b");
trackBar2_Scroll(sender, e);
serialPort1.Write(trackBar2.Value.ToString());
serialPort1.Close();
}
private void trackBar3_Scroll(object sender, EventArgs e)
{
}
private void button3_Click(object sender, EventArgs e)
{
serialPort1.Open();
serialPort1.Write("c");
trackBar3_Scroll(sender, e);
serialPort1.Write(trackBar3.Value.ToString());
serialPort1.Close();
}
private void button4_Click(object sender, EventArgs e)
{
serialPort1.Open();
serialPort1.Write("A");
serialPort1.Close();
}
private void button5_Click(object sender, EventArgs e)
{
serialPort1.Open();
serialPort1.Write("B");
serialPort1.Close();
}
private void button1_Click(object sender, EventArgs e)
{
}
}
}
接下来就是单片机了。因为是arduino作为单片机,可以直接使用其自带舵机控制函数。
代码如下:
//通过上位机控制多个舵机
//20度为间隔,0度至180度
#include <Servo.h>
#define def (1 - '1')
Servo duoji1;
Servo duoji2;
Servo duoji3;
Servo duoji4;
int data ;
void setup() {
Serial.begin(9600);
duoji1.attach(5);
duoji2.attach(6);
duoji3.attach(7);
duoji4.attach(2);
}
void loop() {
if(Serial.available() > 0){
char type = Serial.read();//舵机识别
if(type == 'a'){
data = ( Serial.read() + def )*20;
duoji1.write(data);
}
if(type == 'b'){
data = ( Serial.read() + def )*20;
for(int i = 0;i <= data;i++){
duoji2.write(data);
delay(10);
}
}
if(type == 'c'){
data = ( Serial.read() + def )*20;
duoji3.write(data);
}
if(type == 'A'){
duoji4.write(0);
}
if(type == 'B'){
duoji4.write(40);
}
}
delay(1000);
}
控制过程就是通过上位机依次控制关节舵机的角度,然后就可以捡垃圾啦!!!
效果如下:
加垃圾的机械臂