13227浏览
查看: 13227|回复: 18

漫威之激光“攻击”型履带机器人

[复制链接]
本帖最后由 安卓机器人 于 2017-5-18 11:34 编辑
漫威之激光“攻击”型履带机器人


    ~漫威~其实不怎么清楚【最近越来越喜欢系列】,但机器人我倒要一直玩下去!

漫漫长夜~我在这里: 码安卓代码、玩玩绿激光、指指星星...一张激光机器人蓝图渐渐清晰:
漫威之激光“攻击”型履带机器人图21

能看、能听、能说、录像、直播...当然肯定会跑(小小障碍不在话下)


最最重要是要有绿激光(522~542nm)夜晚光迹清晰,酷不酷自个玩吧!
漫威之激光“攻击”型履带机器人图24

比较以下三种“脚”还是全履带的性感;P
漫威之激光“攻击”型履带机器人图20

漫威之激光“攻击”型履带机器人图23

漫威之激光“攻击”型履带机器人图22






制作流程如下:
一、搭建“身体”结构框架
搭机器人支架,上电机【370】
漫威之激光“攻击”型履带机器人图1

漫威之激光“攻击”型履带机器人图2

漫威之激光“攻击”型履带机器人图3

漫威之激光“攻击”型履带机器人图4



连接履带或准备备用轮子
漫威之激光“攻击”型履带机器人图18

漫威之激光“攻击”型履带机器人图17

漫威之激光“攻击”型履带机器人图16

漫威之激光“攻击”型履带机器人图15

漫威之激光“攻击”型履带机器人图14

二、选择“大脑”~控制器
安装机器人控制板【Romeo】并先调试电机
漫威之激光“攻击”型履带机器人图13

三、安装+独立代码调试各个执行机构~~"手脚眼耳"及“武器”
1、安装两自由度云台+调试Arduino代码
2、安装能看会听会说的WIFI智能摄像机,及其手机APP(独立工作)
3、安装4个红激光一字头和1个绿激光一字头+代码调试
漫威之激光“攻击”型履带机器人图5

漫威之激光“攻击”型履带机器人图6

以下紧固件套装(铜柱/尼龙柱),立马解决了底舵机的安装固定问题
漫威之激光“攻击”型履带机器人图7

漫威之激光“攻击”型履带机器人图8

固定4个红光头+1个摄像头用泡棉胶~方便!
加入蓝牙模块+ARDUINO相应代码
漫威之激光“攻击”型履带机器人图12

四、电路图+调试+注入机器人全部”思想~~协调前面调试的独立代码为最终代码
漫威之激光“攻击”型履带机器人图25
[mw_shl_code=cpp,true]//  05/14/2017
//  函数 smoothAngle(int iniAngleOfUp,int iniAngleOfDown)用来平滑处理上下两个舵机到达初始目标位置参数
//  我的蓝牙HC-06(*4321*)手机端程序功能:

// 手机发送字母“S”,机器人蓝牙接收到后调用停止函数“carStop()”
// 手机发送字母“A”,机器人蓝牙 接收到后调用前进函数“carAdvance()”
// 手机发送字母“B”,机器人蓝牙接收到后调用后退函数“carBack()”
// 手机发送字母“L”,机器人蓝牙接收到后调用“carTurnLeft()”
// 手机发送字母“R”,机器人蓝牙接收到后调用“carTurnRight()”

// 默认调用前进函数“carAdvance()”

// 手机发送字母“H”,机器人蓝牙接收到后,使摄像机水平扫描0-180
// 手机发送字母“V”,机器人蓝牙接收到后,使摄像机垂直扫描60-180
// 手机发送字母“F”,机器人蓝牙接收到后,使摄像机看向正前方
// 手机发送字母“D”,机器人蓝牙接收到后,使摄像机看向正前方地面
// 手机发送字母“U”,机器人蓝牙接收到后,使摄像机看向正天顶
// 手机发送字母“Z”,机器人蓝牙接收到后,使摄像机看向正左方
// 手机发送字母“Y”,机器人蓝牙接收到后,使摄像机看向正右方
// 手机(长按APK )发送字母“G”,机器人蓝牙接收到后,仅激活 1 Green Laser
// 手机(长按APK )发送字母“E”,机器人蓝牙接收到后,激活 4 Red Lasers + 1 Green Laser
// 手机(长按APK )发送字母“C”,机器人蓝牙接收到后,关闭 5 Laser5

int speedPin_M1 = 5;     // M1 Speed Control
int speedPin_M2 = 6;     // M2 Speed Control
int directionPin_M1 = 4;     // M1 Direction Control
int directionPin_M2 = 7;     // M2 Direction Control

int redLaser1Pin = 2;
int redLaser2Pin = 3;
int redLaser3Pin = 11;
int redLaser4Pin = 12;
int greenLaserPin = 13;

#include <Servo.h>
Servo servoOfUp;  //  create servo object to control a servo
Servo servoOfDown;
//  twelve servo objects can be created on most boards

///////////////////////////////////////////////////////
void setup() {
  Serial.begin(9600);
  pinMode(greenLaserPin,OUTPUT);
  pinMode(redLaser1Pin,OUTPUT);
  pinMode(redLaser2Pin,OUTPUT);
  pinMode(redLaser3Pin,OUTPUT);
  pinMode(redLaser4Pin,OUTPUT);
  servoOfUp.attach(9);  
  servoOfDown.attach(10);
}
//////////////////////////////////////////////////////
//////////////////////////////////////////////////////
void loop() {
  while(Serial.available())
  {
    char c = Serial.read();
    switch(c)
    {
      case 'S':
        carStop();  // 仅当点击手机APP的“停止”按钮时,小车暂停共1.8秒
        for(int i=0;i<3;i++)
        {
          // digitalWrite(greenLaserPin,HIGH);
          delay(300);
          // digitalWrite(greenLaserPin,LOW);
          delay(300);
        }      
        break;
      case 'B':
        carBack(180,180);
//         delay(50);
        break;
      case 'L':
        carTurnLeft(200,200);
        delay(500);
        carAdvance(180,180);
        // c='A';
        break;
      case 'R':
        carTurnRight(200,200);
        delay(500);
        carAdvance(180,180);
        // c='A';
        break;
      case 'G':
        digitalWrite(greenLaserPin,HIGH);// 实际接3.3V电源,防止绿光灯烧毁
        break;
      case'E': // 长按APK LASER5 火力全开!
        digitalWrite(greenLaserPin,HIGH);
        digitalWrite(redLaser1Pin,HIGH);
        digitalWrite(redLaser2Pin,HIGH);
        digitalWrite(redLaser3Pin,HIGH);
        digitalWrite(redLaser4Pin,HIGH);
        break;
       case'C':
        digitalWrite(greenLaserPin,LOW);
        digitalWrite(redLaser1Pin,LOW);
        digitalWrite(redLaser2Pin,LOW);
        digitalWrite(redLaser3Pin,LOW);
        digitalWrite(redLaser4Pin,LOW);
        break;        
      case 'H':
        SweepHorizontal0_180();
        break;
      case 'V':
        SweepVertical60_180();
        break;
      case 'F':
        frontLocation();
        break;
      case 'D':
        frontDownLocation();
        break;
      case 'U':
        upLocation();
        break;
      case 'Z':
        leftLocation();
        break;
      case 'Y':
        rightLocation();
        break;
      default:
        carAdvance(180,180);
//         delay(50);
        break;
    }
  }
}
//////////////////////////////////////
//////////////////////////////////////
void carStop(){                 //   Motor Stop
  digitalWrite(speedPin_M2,0);
  digitalWrite(directionPin_M1,LOW);   
  digitalWrite(speedPin_M1,0);   
  digitalWrite(directionPin_M2,LOW);   
}   
//////////////////////////////
void carAdvance(int leftSpeed,int rightSpeed){         // Move forward
  analogWrite (speedPin_M2,leftSpeed);              // PWM Speed Control
  digitalWrite(directionPin_M1,HIGH);   
  analogWrite (speedPin_M1,rightSpeed);   
  digitalWrite(directionPin_M2,HIGH);
}
/////////////////////////////
void carBack(int leftSpeed,int rightSpeed){       // Move backward
  analogWrite (speedPin_M2,leftSpeed);
  digitalWrite(directionPin_M1,LOW);   
  analogWrite (speedPin_M1,rightSpeed);   
  digitalWrite(directionPin_M2,LOW);
}
/////////////////////////////////
void carTurnRight(int leftSpeed,int rightSpeed){           // Turn Right   
  analogWrite (speedPin_M2,leftSpeed);
  digitalWrite(directionPin_M1,LOW);   
  analogWrite (speedPin_M1,rightSpeed);   
  digitalWrite(directionPin_M2,HIGH);
}
//////////////////////////////
void carTurnLeft(int leftSpeed,int rightSpeed){          //Turn Left
  analogWrite (speedPin_M2,leftSpeed);
  digitalWrite(directionPin_M1,HIGH);   
  analogWrite (speedPin_M1,rightSpeed);   
  digitalWrite(directionPin_M2,LOW);
}
////////////////////////////////
void SweepHorizontal0_180(){    //  H 使摄像机垂直,水平扫描0-180范围
  smoothAngle(95,0); // 先平滑过渡到初始位置;使两个舵机平滑地到达初始角度的位置95,0
                      // 依据实际安装情况而调整的角度(如 95),以使摄像机垂直小车面
  for (int pos = 0; pos <= 180; pos += 1) {
    //  in steps of 1 degree
    servoOfDown.write(pos);            
    delay(20);                     
  }
  for (int pos = 180; pos >= 0; pos -= 1) {
    servoOfDown.write(pos);              
    delay(20);                       
  }
  smoothAngle(95,90);  // 扫描后恢复为正前方位置
}
/////////////////////////
void SweepVertical60_180(){     //  V 使摄像机从“朝向”正前方地面到“抬头望天顶”范围扫描120度
  smoothAngle(60,90);     // 上舵机初始位置60,下舵机初始位置定位于90
  for ( int pos = 60; pos <= 180; pos += 1) {
    //  in steps of 1 degree
    servoOfUp.write(pos);              
    delay(20);                       
  }
  for (int pos = 180; pos >= 60; pos -= 1) {
    servoOfUp.write(pos);              
    delay(20);                     
  }
  smoothAngle(95,90);  // 垂直扫描后恢复为正前方位置
}
//////////////////////////////
void frontDownLocation(){   //  D 使摄像机定住“朝向”正前下方地面
  smoothAngle(60,90);  // 平滑过渡到目标位置;110使摄像机镜头朝向前倾角度
}
//////////////////////////////
void frontLocation(){   //  F 使摄像机定住“朝向”正前方
  smoothAngle(95,90);  // 平滑过渡到目标位置;使摄像机镜头保持垂直小车面
}
//////////////////////////////
void upLocation(){    //  U 使摄像机定住“朝向”天顶
  smoothAngle(180,90); // 平滑过渡到目标位置
}
//////////////////////////////
void leftLocation(){    //  Z 使摄像机定住“朝向”小车正左方向
  smoothAngle(95,180);  // 平滑过渡到目标位置
}
//////////////////////////////
void rightLocation(){    //   Y 使摄像机定住“朝向”小车正右方向
    smoothAngle(95,0);  // 平滑过渡到目标位置
}
/////////////////////////////////////////////////////////////////////////////////////
void smoothAngle(int iniAngleOfUp,int iniAngleOfDown) // 平滑处理上下两个舵机到达初始目标位置参数
{  
  int nowAngleOfUp = servoOfUp.read(); // 读出当前两个舵机的位置角度
  int nowAngleOfDown = servoOfDown.read();
  
  if(nowAngleOfDown < iniAngleOfDown )     // 下舵机平滑过渡到初始目标位置角度 iniAngleOfDown
  {
    for(int i = nowAngleOfDown; i <= iniAngleOfDown;i++)
    {
      servoOfDown.write(i);
      delay(20);
    }     
  }else
  {
    for(int i = nowAngleOfDown; i >= iniAngleOfDown;i--)
    {
      servoOfDown.write(i);
      delay(20);      
    }
  }   // end if
//---------------------------------------------------------  
  if(nowAngleOfUp < iniAngleOfUp )     // 上舵机平滑过渡到初始目标位置角度 iniAngleOfUp
  {
    for(int i = nowAngleOfUp; i <= iniAngleOfUp;i++)
    {
      servoOfUp.write(i);
      delay(20);
    }     
  }else
  {
    for(int i = nowAngleOfUp; i >= iniAngleOfUp;i--)
    {
      servoOfUp.write(i);
      delay(20);      
    }
  }   // end if
}
///////////////////////////////////////////////////////////////[/mw_shl_code]

五、利用可视化编程环境APPINVENTOR开发的人类控制机器人的手机控制器
根据蓝牙通讯的ARDUINO代码指令去开发安卓手机APP
安装名称:激光机器人控制器【APK下载附件Laser_robot02.zip
漫威之激光“攻击”型履带机器人图19

打开APP如下:
最上面是手机蓝牙与机器人蓝牙模块连接;
红色部分是控制电机(机器人)运动;
【安全警报】英文部分三键均必须“长按”操作 【防止小朋友误操作伤眼】:
打开1个绿激光头、打开5个激光头、关闭激光头;
英文下面是两自由度云台操作。
漫威之激光“攻击”型履带机器人图9

手机操控,夜晚试了下光路,实际效果佳
漫威之激光“攻击”型履带机器人图11

悟:
核心是创意【永远保持好奇心】;
难点是代码及调试【每一个电子积木搞透】;
其它都不是事【再见】


hnyzcj  版主

发表于 2017-5-16 14:31:18

沙发
回复

使用道具 举报

luna  初级技神

发表于 2017-5-16 17:36:14

最后的感悟好霸气~~最后配的被激光锁定的图片更赞`
回复

使用道具 举报

安卓机器人  中级技神
 楼主|

发表于 2017-5-17 00:03:47

为了更有力爬坡,替换电机同型号满格电源时,把板载电机驱动L298P烧毁了:'((很快想起是几天前更改了两个同型电源中的一个电源接口,另一个没有同步更改造成极性相反~)
好在ROMEO板子上的UNO仍能继续工作,加入一个L298N电机驱动模块,现在已经恢复正常:victory:
回复

使用道具 举报

安卓机器人  中级技神
 楼主|

发表于 2017-5-17 00:11:52

luna 发表于 2017-5-16 17:36
最后的感悟好霸气~~最后配的被激光锁定的图片更赞`

多谢鼓励!乐活乐玩
回复

使用道具 举报

XCY  学徒

发表于 2017-5-17 11:07:04

指星笔,点烟器, 能打气球吗:curse:
回复

使用道具 举报

安卓机器人  中级技神
 楼主|

发表于 2017-5-17 14:58:02

XCY 发表于 2017-5-17 11:07
指星笔,点烟器, 能打气球吗

指星没问题;其它的估计不行
回复

使用道具 举报

Ash  管理员

发表于 2017-5-25 18:23:30

恭喜获得漫威主题创客作品征集大奖:DF创客商兑换代金券1000元 已发放至作者账户,请至DF创客商城-个人中心-余额 查看。
回复

使用道具 举报

安卓机器人  中级技神
 楼主|

发表于 2017-5-26 07:55:09

Ash 发表于 2017-5-25 18:23
恭喜获得漫威主题创客作品征集大奖:DF创客商兑换代金券1000元 已发放至作者账户,请至DF创客商城-个人中心 ...

灰常感'蟹'。再接再厉,新帖快马加鞭中...
回复

使用道具 举报

gray6666  初级技神 来自手机

发表于 2017-5-29 09:03:18

有意思,顶一个。。。。。
回复

使用道具 举报

安卓机器人  中级技神
 楼主|

发表于 2017-5-29 16:43:38

gray6666 发表于 2017-5-29 09:03
有意思,顶一个。。。。。

’蟹蟹‘兄弟!:handshake
回复

使用道具 举报

948579771  中级技师

发表于 2017-9-10 10:58:28

楼主啊~请问这种摄像头是什么型号的啊?有连接吗?
回复

使用道具 举报

安卓机器人  中级技神
 楼主|

发表于 2017-9-12 21:34:07

948579771 发表于 2017-9-10 10:58
楼主啊~请问这种摄像头是什么型号的啊?有连接吗?

小蚁智能摄像机;WIFI可以连接手机,远程监控也行
回复

使用道具 举报

pATAq  版主

发表于 2017-9-16 13:19:47

不错不错,也准备弄个履带车啦
回复

使用道具 举报

安卓机器人  中级技神
 楼主|

发表于 2017-9-16 18:46:40

pATAq 发表于 2017-9-16 13:19
不错不错,也准备弄个履带车啦

实话实说,塑料轮芯的确不行
回复

使用道具 举报

pATAq  版主

发表于 2017-9-17 00:29:22

安卓机器人 发表于 2017-9-16 18:46
实话实说,塑料轮芯的确不行

df买的那个怎么样
回复

使用道具 举报

安卓机器人  中级技神
 楼主|

发表于 2017-9-18 10:47:52

pATAq 发表于 2017-9-17 00:29
df买的那个怎么样

金属的应该没问题吧
回复

使用道具 举报

gada888  版主

发表于 2019-7-15 10:26:13

好牛的装备
回复

使用道具 举报

一地鸡毛  中级技师

发表于 2024-1-19 15:57:45

漫威之激光“攻击”型履带机器人
回复

使用道具 举报

高级模式
B Color Image Link Quote Code Smilies |上传

本版积分规则

为本项目制作心愿单
购买心愿单
心愿单 编辑
[[wsData.name]]

硬件清单

  • [[d.name]]
btnicon
我也要做!
点击进入购买页面
上海智位机器人股份有限公司 沪ICP备09038501号-4

© 2013-2024 Comsenz Inc. Powered by Discuz! X3.4 Licensed

mail