一.简介

1.Ardunio:一款源自意大利的开放源代码硬件项目平台

2.LeArm:是幻尔科技旗下的一块产品,机身由六个舵机组成,的可编程机械臂

3.目的:实现电视遥控器控制机械臂移动和抓取

二.硬件

1.整体展示

2.控制设备

(突然想拿电视遥控器试试,没想到成功了)(数字控制移动,开关控制抓取)

3.接收装置和显示器

三.效果展示

1.预期效果

实现显示器展示遥控器输入的参数,实现机械臂可以移动至指定位置,实现机械臂的抓取动作和复位操作。

2.视频

这里我录了段视屏,发在动态里了。

点击这里​​​​​​​

四.实现步骤

1.算法思路

2.收录电视红外遥控的按键信息

#define R_ZERO     1886388479     //红外传感器的解码值
#define R_ONE      1886421119
#define R_TWO      1886404799
#define R_THREE    1886437439
#define R_FOUR     1886396639
#define R_FIVE     1886429279
#define R_SIX      1886412959
#define R_SEVEN    1886445599
#define R_EIGHT    1886392559
#define R_NINE     1886425199
#define R_Previous 1886406839
#define R_LAST     1886439479
#define ok_zhua    1886413469
#define over_ok    1886400719int CheckButton(uint32_t code)
{int ret;switch (code) {case R_ZERO:ret = 0;break;case R_ONE:ret = 1;break;case R_TWO:ret = 2;break;case R_THREE:ret = 3;break;case R_FOUR:ret = 4;break;case R_FIVE:ret = 5;break;case R_SIX:ret = 6;break;case R_SEVEN:ret = 7;break;case R_EIGHT:ret = 8;break;case R_NINE:ret = 9;break;case R_Previous:ret = -2;break;case R_LAST:ret = -3;break;case ok_zhua:ret = -4;break;case over_ok:ret = -5;break;default:ret = -1;break;}return ret;
}

3.控制舵机

myController.moveServo(6, 1500, 1000);
//(舵机号,移动的位置,移动指定位置花费的时间ms)

4.完整代码

#include <IRremote.h>
#include <U8g2lib.h>
#include <SoftwareSerial.h>
#include <LobotServoController.h>#define RxPin 9 //接受
#define TxPin 8  //发送
#define RECV_PIN   12
#define LED        13#define R_ZERO     1886388479     //红外传感器的解码值
#define R_ONE      1886421119
#define R_TWO      1886404799
#define R_THREE    1886437439
#define R_FOUR     1886396639
#define R_FIVE     1886429279
#define R_SIX      1886412959
#define R_SEVEN    1886445599
#define R_EIGHT    1886392559
#define R_NINE     1886425199
#define R_Previous 1886406839
#define R_LAST     1886439479
#define ok_zhua    1886413469
#define over_ok    1886400719uint8_t result;
uint8_t last_button;
uint8_t ok;
bool refreshNow = true;
bool ledON = true;
bool state = false;SoftwareSerial mySerial(RxPin, TxPin);
LobotServoController myController(mySerial);
U8G2_SSD1306_128X64_NONAME_1_HW_I2C u8g2(U8G2_R0, /* reset=*/ U8X8_PIN_NONE);
IRrecv irrecv(RECV_PIN); //Set an example of IRrecv
decode_results results;  //Set an example of decode_results, Results is used to save the decoding resultsvoid setup() {// put your setup code here, to run once:u8g2.begin();u8g2.setDisplayRotation(U8G2_R2);u8g2.setFont(u8g2_font_fub20_tr);u8g2.firstPage();do {u8g2.setCursor(22, 38);u8g2.println("LOBOT");} while ( u8g2.nextPage() );mySerial.begin(9600);Serial.begin(9600);pinMode(LED, OUTPUT);irrecv.enableIRIn();myController.moveServo(3, 600, 1000);myController.moveServo(4, 900, 1000);myController.moveServo(5, 1700, 1000);myController.moveServo(6, 1500, 1000);myController.runActionGroup(0, 1);delay(1500);
}void ledFlash() {static uint32_t timer;if (timer > millis())return;timer = millis() + 30;if (ledON) {digitalWrite(LED, HIGH);ledON = false;} else {digitalWrite(LED, LOW);}
}int CheckButton(uint32_t code)
{int ret;switch (code) {case R_ZERO:ret = 0;break;case R_ONE:ret = 1;break;case R_TWO:ret = 2;break;case R_THREE:ret = 3;break;case R_FOUR:ret = 4;break;case R_FIVE:ret = 5;break;case R_SIX:ret = 6;break;case R_SEVEN:ret = 7;break;case R_EIGHT:ret = 8;break;case R_NINE:ret = 9;break;case R_Previous:ret = -2;break;case R_LAST:ret = -3;break;case ok_zhua:ret = -4;break;case over_ok:ret = -5;break;default:ret = -1;break;}return ret;
}void irReceive()
{static uint32_t timer;static uint8_t step = 0;static uint16_t count = 0;int n;if (timer < millis()){switch(step){case 0: if (irrecv.decode(&results)) // 如果有接收到数据{state = false;n = CheckButton(results.value);//获取接收的数据Serial.println(n);if (n == -2)//如果是前一个按键n = last_button - 1;//将频道数减一if (n == -3)n = last_button + 1;if (n == -4)ok = 100;if ( n == -5)ok = 101;if (n >= 0 && n <= 99) {//如果频道数在0-99则显示last_button = n;result = n;refreshNow = true;}ledON = true;irrecv.resume();step = 1;}timer = millis() + 120;break;case 1:count ++;if (count >= 120){refreshNow = true;count = 0;state = true;step = 0;}if (irrecv.decode(&results)) {//如果在120ms内有按键被再次按下,如果是0-9的按键则显示前后两个按键的组合,如第一个按键是1,第二个按键是1,则显示11n = CheckButton(results.value);if (n >= 0 && n <= 9)  {result = last_button*10 + n;last_button = result;    refreshNow = true;}ledON = true;irrecv.resume();}timer = millis() + 1;break;}}
}//Screen drawing
void draw() {if (refreshNow ==  true){refreshNow = false;u8g2.firstPage();do {u8g2.setFont(u8g2_font_courB24_tf);u8g2.setCursor(110, 20);if (result > 9)u8g2.setCursor(90, 20);u8g2.println(result);  if (result == 8 && state == true){//如果频道数是8则显示LOBOT字样u8g2.setFont(u8g2_font_fub20_tr);  //More fonts can be found here. https://github.com/olikraus/u8g2/wiki/fntlistall//u8g2.setCursor(20, 38);//u8g2.println("LOBOT");}} while ( u8g2.nextPage());}
}void run_arm(){int pos;if( 0<last_button && last_button<=99 ){pos=last_button*30;myController.moveServo(6, pos, 1000);delay(1000);ok=0;}
}void zhua(){u8g2.setCursor(20, 38);u8g2.println("catch");myController.moveServo(1, 800, 1000);delay(1000);myController.moveServo(5, 1900, 1000);delay(1000);myController.moveServo(1, 1200, 1000);delay(1500);myController.moveServo(5, 1400, 1000);delay(1000);myController.moveServo(6, 2500, 1000);delay(1000);myController.moveServo(1, 800, 1000);delay(1000);myController.moveServo(5, 1500, 1000);myController.moveServo(6, 1500, 1000);ok=0;delay(1000);
}void loop()
{irReceive();draw();ledFlash();if( ok == 100 )run_arm();if( ok == 101 )zhua();
}

Ardunio-电视红外遥控,控制LeArm机械臂相关推荐

  1. ros melodic控制真实机械臂之获取moveit规划插补点

    关于该点可查看前辈博客.本文对其中不一致的地方进行记录,但为了查阅方便,该文也记录了完整的操作步骤. 1.demo.launch文件中参数fake_execution的值改为false <arg ...

  2. 机械臂C语言编程,ROS下C++控制UR机械臂

    描述 ROS系统下,使用moveit和gazebo搭建UR机械臂控制的仿真环境,并使用C++编写一个节点来控制UR机械臂的移动 ROS系统:kinetic UR5机械臂 电脑系统:Ubuntu16.0 ...

  3. 使用 Python 和可视化编程控制树莓派机械臂myCobot

    myCobot 280 Pi 是一款 6 自由度多功能桌面机械臂.它由大象机器人研发,使用 Raspberry Pi 作为主控制器.该机器人结构紧凑,运行稳定,非常适合新手入门.它还可以使用多种语言进 ...

  4. 基于Kinect体感器控制的机械臂项目记录

    基于Kinect体感器控制的机械臂 项目介绍 上位机代码说明 1.识别部分 1.1GetPosition.cpp 1.2 KinetJiointFilter.cpp 1.3 1.4 SerialPor ...

  5. ROS控制elfin5机械臂教程

    测试环境 电脑:DELL G7 7588 处理器: i5-8300H 显卡:GTX1060MQ 6G显存 已配置:ROS iai_kinect PCL 1 源代码下载 从 github上 https: ...

  6. 机器人学习必看系列:如何使用moveit控制真实机械臂?

    大家好,我是你们可爱的小鱼.最近关于moveit相关的问题感觉非常多,毕竟机械臂+视觉的应用的确是非常的火爆,小鱼都想直接开课教机械臂运动规划相关的了. 有的同学问小鱼,怎么使用moveit控制真实机 ...

  7. 机械臂控制C语言程序,ROS下C++控制UR机械臂

    描述 ROS系统下,使用moveit和gazebo搭建UR机械臂控制的仿真环境,并使用C++编写一个节点来控制UR机械臂的移动 ROS系统:kinetic UR5机械臂 电脑系统:Ubuntu16.0 ...

  8. matlab阻抗控制仿真,机械臂阻抗控制与仿真研究.PDF

    机械臂阻抗控制与仿真研究 机械臂阻抗控制与仿真研究 Manipulator impedance control and simulation 高添泉* 乔枫 周旋 赵雨 沈阳建筑大学 信息与控制工程学 ...

  9. 通过socket通讯控制ur机械臂

    通过socket通讯控制ur机械臂 1.socket客户端(连接机械臂) 2.控制机械臂运动(发送控制指令) 3. 实时 以前一直使用ros跟机械臂打交道,但在使用moveit控制机械臂运动的时候会出 ...

最新文章

  1. 初入react-redux (基于webpack babel的react应用框架)
  2. 简述Python中的break和continue的区别
  3. Java中的证书透明度验证
  4. Python:为什么必须在方法定义和调用中明确使用'self'?
  5. php 6位邮政编码,php / mysql邮政编码邻近搜索
  6. 如何使Android应用程序获取系统权限来修改系统时间
  7. Android View添加 Listener 小技巧示例
  8. HDMI和DVI的HDCP握手问题分析及其解决方案精粹
  9. spring boot2 坑 - 解决cros跨域问题
  10. Win10 IIS本地部署MVC网站时不能运行?
  11. java 数据库 模板_JAVA操作数据库的模板方法
  12. 8 随机积分与随机微分方程
  13. 我行我素购物管理系统
  14. Visual Studio介绍及安装
  15. 怎么把动图分解成图片?gif怎么拆分成几张?
  16. VirtualBox 虚拟机安装黑群晖
  17. 小学生计算机编程题,真题|小学组倒数第二道编程题,做不出来罚你点赞三遍!...
  18. 人人旗下风车网CEO的创业失败教训总结
  19. 覃超数据结构(二) 栈和队列
  20. 【打印机】argox入门

热门文章

  1. 中国信息化系统集成行业协会:企业信息化系统集成
  2. 可燃气传感器 android,可燃气体传感器工作原理,一文看懂!
  3. 基于stm32单片机一氧化碳可燃气体检测仿真(源码+仿真+参考论文)
  4. 计算机网络总复习(一)——选择篇
  5. 武汉“追风筝的人”:50年手工制作风筝3万余架
  6. 粒子说区块链7:产业链分析之硬件篇
  7. python完全卸载 重新安装
  8. 推荐个开源在线文档,助道友领悟 Django 之“道”
  9. 没有编程基础如何做安卓开发,试试这款简单易学的中文开发编程工具!
  10. 海信手机插上卡显示无服务器,海信电视机开不了机怎么回事 海信电视开不了机解决方法【详解】...