安卓机器人 发表于 2017-5-15 23:54:02

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

本帖最后由 安卓机器人 于 2017-5-18 11:34 编辑

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

    ~漫威~其实不怎么清楚【最近越来越喜欢系列】,但机器人我倒要一直玩下去!{:5_144:}
漫漫长夜~我在这里: 码安卓代码、玩玩绿激光、指指星星...一张激光机器人蓝图渐渐清晰:

能看、能听、能说、录像、直播...当然肯定会跑(小小障碍不在话下)
激光“攻击”型履带机器人之动感http://v.youku.com/v_show/id_XMjc2Njg2ODAwNA==.html
最最重要是要有绿激光(522~542nm)夜晚光迹清晰,酷不酷自个玩吧!

比较以下三种“脚”还是全履带的性感;P




激光“攻击”型履带机器人之作者视角http://v.youku.com/v_show/id_XMjc2NjQxOTEyOA==.html

激光“攻击”型履带机器人之第一视角http://v.youku.com/v_show/id_XMjc2NjQyMjc0MA==.html

制作流程如下:一、搭建“身体”结构框架搭机器人支架,上电机【370】








连接履带或准备备用轮子








二、选择“大脑”~控制器安装机器人控制板【Romeo】并先调试电机

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


以下紧固件套装(铜柱/尼龙柱),立马解决了底舵机的安装固定问题


固定4个红光头+1个摄像头用泡棉胶~方便!加入蓝牙模块+ARDUINO相应代码。
四、电路图+调试+注入机器人全部”思想“~~协调前面调试的独立代码为最终代码
//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
}
///////////////////////////////////////////////////////////////

五、利用可视化编程环境APPINVENTOR开发的人类控制机器人的手机控制器根据蓝牙通讯的ARDUINO代码指令去开发安卓手机APP安装名称:激光机器人控制器【APK】
打开APP如下:最上面是手机蓝牙与机器人蓝牙模块连接;红色部分是控制电机(机器人)运动;【安全警报】英文部分三键均必须“长按”操作 【防止小朋友误操作伤眼】:打开1个绿激光头、打开5个激光头、关闭激光头;英文下面是两自由度云台操作。
手机操控,夜晚试了下光路,实际效果佳

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

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
指星笔,点烟器, 能打气球吗

{:5_176:}指星没问题;其它的估计不行

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创客商城-个人中心 ...

灰常感'蟹'。再接再厉,{:5_197:}新帖快马加鞭中...

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

漫威之激光“攻击”型履带机器人
页: [1]
查看完整版本: 漫威之激光“攻击”型履带机器人