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

MeArm 机器人的操纵杆控制器 - 记录坐标

组件和用品

Arduino UNO
× 1
模拟操纵杆(通用)
× 2
电阻 10k ohm
× 2
电阻 680 ohm
× 1
5 毫米 LED:红色
× 1
微伺服SG90
× 4

应用和在线服务

Arduino IDE

关于这个项目

用于机械臂 (MeArm®) 的 Arduino Uno 操纵杆控制器,可记录坐标。允许在按钮单击或重复时重复记录的坐标。使用 Arduino Uno 基板,无需额外的板。需要 USB 连接 (2A) 或 6V/2A 电源。使用四舵机SG90测试。

按下操纵杆 1 上的按钮开始记录坐标。按下操纵杆 1 上的按钮结束坐标记录。

按下操纵杆 2 上的按钮开始回放记录的坐标。按下操纵杆 2 上的按钮停止回放记录的坐标。按住操纵杆 2 上的按钮,开始自动循环回放记录的坐标。

备注:我们还制作了这个软件的更简单版本,不需要额外的电阻和 LED 二极管:MeArm Robot - Recording of Coordinates (Minimalized Version)

如果您有 MeArm 操纵杆板,这里有一个适合您的版本:MeArm 1.6.1 机器人操纵杆板记录运动 (IR)

代码

  • 用于记录坐标的 MeArm ® 机器人的 Arduiono 操纵杆控制器。 (版本 1.3.1)
用于记录坐标的 MeArm ® 机器人的 Arduiono 操纵杆控制器。 (版本 1.3.1)Arduino
使用 Arduino IDE 通过 USB 端口对 Arduiono UNO 基板进行编程。
/* meArm 模拟操纵杆版本 1.3.1 - UtilStudio.com 2018 年 12 月使用两个模拟操纵杆和四个舵机。在 1.3 版中改进了坐标记录。一些错误被删除。第一个操纵杆向前、向后、向左和向右移动夹具,按钮开始/停止记录位置。第二个操纵杆向上、向下移动抓手,关闭和打开,按钮开始/停止播放录制的位置。按住按钮 2 秒自动播放。引脚: Arduino Stick1 Stick2 Base 肩部肘部夹持器 Record/ GND GND GND Brown Brown Brown 自动播放 5V VCC VCC Red Red Red Red LED A0 HOR A1 VER PD2 BUTT A2 HOR A3 VER PD3 BUTT 11 Yellow 10 Yellow 9 Yellow 6 Yellow PD4 X */#include bool repeatePlaying =false; /* 重复运行记录周期 */int delayBetweenCycles =2000; /* 周期之间的延迟 */int basePin =11; /* 基本伺服 */int 肩针 =10; /* 肩部伺服 */int 肘销 =9; /* 弯头伺服 */int gripperPin =6; /* 抓手伺服 */int xdirPin =0; /* 基础 - 游戏杆 1*/int ydirPin =1; /* 肩部 - 操纵杆 1 */int zdirPin =3; /* 肘部 - 操纵杆 2 */int gdirPin =2; /* 夹持器 - 游戏杆 2 *///int pinRecord =A4; /* 按钮记录 - 向后兼容 *///int pinPlay =A5; /* 按钮播放 - 向后兼容 */int pinRecord =PD2; /* 按钮记录 - 推荐(不推荐使用 A4,将用于额外的操纵杆)*/int pinPlay =PD3; /* 按钮播放 - 推荐(不推荐使用 A5,将用于额外的操纵杆)*/int pinLedRecord =PD4; /* LED - 指示录音(亮)或自动播放模式(闪烁一)*/bool useInternalPullUpResistors =false;const int buffSize =512; /* 记录缓冲区大小 */int startBase =90;int startShoulder =90;int startElbow =90;int startGripper =0;int posBase =90;int posShoulder =90;int posElbow =90;int posGripper =0;int lastBase =90;int lastShoulder =90;int lastElbow =90;int lastGripper =90;int minBase =0;int maxBase =150;int minShoulder =0;int maxShoulder =150;int minElbow =0;int maxElbow =150;int minGripper =0;int maxGripper =150;const int countServo =4;int buff[buffSize];int buffAdd[countServo];int recPos =0;int playPos =0;int buttonRecord =HIGH;int buttonPlay =HIGH;int buttonRecordLast =LOW;int buttonPlayLast =LOW;bool record =false;bool play =false;bool debug =false;String command ="Manual";int printPos =0;int buttonPlayDelay =20;int buttonPlayCount =0;bool ledLight =false;伺服舵机;伺服舵机肩部;伺服舵机弯头;伺服伺服夹具;无效设置(){Serial.begin(9600); if (useInternalPullUpResistors) { pinMode(pinRecord, INPUT_PULLUP); pinMode(pinPlay,INPUT_PULLUP); } else { pinMode(pinRecord, INPUT); pinMode(pinPlay,输入);引脚模式(xdirPin,输入); pinMode(ydirPin,输入); pinMode(zdirPin,输入); pinMode(gdirPin,输入); pinMode(pinLedRecord,输出);伺服Base.attach(basePin);伺服肩。附加(肩钉);伺服Elbow.attach(elbowPin);伺服夹具.attach(夹具销);起始位置();数字写入(pinLedRecord,高);延迟(1000); digitalWrite(pinLedRecord, LOW);}void loop() { buttonRecord =digitalRead(pinRecord); buttonPlay =digitalRead(pinPlay); // Serial.print(buttonRecord); // Serial.print("\t"); // Serial.println(buttonPlay); // 用于测试目的 if (buttonPlay ==LOW) { buttonPlayCount++; if (buttonPlayCount>=buttonPlayDelay) { repeatePlaying =true; } } else buttonPlayCount =0; if (buttonPlay !=buttonPlayLast) { if (record) { record =false; } if (buttonPlay ==LOW) { play =!play;重复播放 =假;如果(播放){ StartPosition(); } } } if (buttonRecord !=buttonRecordLast) { if (buttonRecord ==LOW) { record =!record;如果(记录){播放=假;重复播放 =假; recPos =0; } else { if (debug) PrintBuffer(); } } } buttonPlayLast =buttonPlay; buttonRecordLast =buttonRecord; float dx =map(analogRead(xdirPin), 0, 1023, -5.0, 5.0); float dy =map(analogRead(ydirPin), 0, 1023, 5.0, -5.0); float dz =map(analogRead(zdirPin), 0, 1023, 5.0, -5.0); float dg =map(analogRead(gdirPin), 0, 1023, 5.0, -5.0);如果 (abs(dx) <1.5) dx =0;如果 (abs(dy) <1.5) dy =0;如果 (abs(dz) <1.5) dz =0;如果 (abs(dg) <1.5) dg =0; posBase +=dx; posShoulder +=dy; posElbow +=dz; posGripper +=dg; if (play) { if (playPos>=recPos) { playPos =0;如果(重复播放){ 延迟(延迟之间);起始位置(); } else { 播放 =假; } } bool endOfData =false; while (!endOfData) { if (playPos>=buffSize - 1) break;如果(playPos>=recPos)中断; int data =buff[playPos]; int 角度 =数据 &0xFFF; intservoNumber =数据 &0x3000; endOfData =数据 &0x4000; switch (servoNumber) { case 0x0000:posBase =angle;休息;案例 0x1000:posShoulder =角度;休息;案例 0x2000:posElbow =角度;休息;案例 0x3000:posGripper =角度; dg =posGripper - lastGripper;休息; } playPos++;如果 (posBase> maxBase) posBase =maxBase;如果 (posShoulder> maxShoulder) posShoulder =maxShoulder;如果(posElbow> maxElbow)posElbow =maxElbow;如果 (posGripper> maxGripper) posGripper =maxGripper;如果 (posBase  0) { posGripper =maxGripper; waitGripper =真; }servoGripper.write(posGripper);如果(播放 &&waitGripper){ 延迟(1000); } if ((lastBase !=posBase) | (lastShoulder !=posShoulder) | (lastElbow !=posElbow) | (lastGripper !=posGripper)) { if (record) { if (recPos  

示意图

用于记录坐标的 MeArm ® 机器人的操纵杆控制器 - 示意图 仅连接两个舵机的测试板。见示意图连接4个伺服电机。

制造工艺

  1. Arduino 游戏控制器
  2. MeArm 机械臂 - 你的机器人 - V1.0
  3. 操纵杆控制的遥控车
  4. 线跟随机器人
  5. 简单的 UNO 计算器
  6. 语音控制机器人
  7. 视觉的坚持
  8. Arduino Joystick
  9. Arduino DMX-512 测试控制器
  10. 智能手机上的温度监控
  11. 廉价的 Arduino 呼吸控制器(USB-MIDI)
  12. 超酷室内导航机器人