maker_王 发表于 2018-3-17 21:48:08

【MechBattle建造日志】捣鼓车间--金钟罩

本帖最后由 swanglei 于 2018-3-28 11:24 编辑

这次比赛相对于其他小伙伴来说,我们花费的时间和精力比较少,一方面没什么经验,另外一方面没那么多时间搞机,所以比赛结果也在预料之中,一轮游,哈哈http://v.youku.com/v_show/id_XMzQ5NjU3NzExNg==.htmlMechBattle首轮比赛视频由于这个机器人我主要负责电路和程序,结构和外形是茅教授设计的,所以呢,这篇文章我就总结一些电路和程序上的心得。还是先来看看茅教授的设计过程:
static/image/hrline/line5.png


原本的计划是用3D打印制作机身
static/image/hrline/line5.png


实际在测试过程中发现3D打印的机身承受不住撞击,所以后面我们用铝合金制作了一套,但是从比赛结果来看,还是承受不住撞击。
static/image/hrline/line5.png
好了,接下来我主要来说一下电路和程序上的细节。DF给参赛者提供了一对减速电机外加一块PMM信号控制的电机驱动板,由于手头上没有好的遥控,所以放弃使用了这块电机驱动板,在淘宝上淘到PWM的电机驱动板:可以在5A内稳定工作,基本上还是符合要求的。接下来是武器的电机:895有刷直流电机static/image/hrline/line5.png
这个电机足足一斤重,驱动方式是使用继电器作为开关(895电机启动电流要10A左右,而手上这块DF的继电器刚好最大电流是10A,所以就不去看其他的了)

至于电池的选择,我选择了一个12V,30C,2000mah的3S锂电池遥控模式我选择了PS2的无线遥控,自己用NANO搭建的无线通信系统PS2教程:http://bbs.elecfans.com/jishu_455271_1_1.html
PS2程序:#include <PS2X_lib.h>//for v1.6

#define LM1 3//PWM
#define LM2 2
#define LM3 4
#define LM4 5//PWM

#define RM1 6//PWM
#define RM2 7
#define RM3 8
#define RM4 9//PWM

#define Arms A0

PS2X ps2x; // create PS2 Controller Class

//right now, the library does NOT support hot pluggable controllers, meaning
//you must always either restart your Arduino after you conect the controller,
//or call config_gamepad(pins) again after connecting the controller.
int error = 0;
byte type = 0;
byte vibrate = 0;

void setup(){
Serial.begin(57600);

//CHANGES for v1.6 HERE!!! **************PAY ATTENTION*************

error = ps2x.config_gamepad(13,11,10,12, true, true);   //setup pins and settings:GamePad(clock, command, attention, data, Pressures?, Rumble?) check for error

if(error == 0){
   Serial.println("Found Controller, configured successful");
   Serial.println("Try out all the buttons, X will vibrate the controller, faster as you press harder;");
Serial.println("holding L1 or R1 will print out the analog stick values.");
Serial.println("Go to www.billporter.info for updates and to report bugs.");
}
   
else if(error == 1)
   Serial.println("No controller found, check wiring, see readme.txt to enable debug. visit www.billporter.info for troubleshooting tips");
   
else if(error == 2)
   Serial.println("Controller found but not accepting commands. see readme.txt to enable debug. Visit www.billporter.info for troubleshooting tips");
   
else if(error == 3)
   Serial.println("Controller refusing to enter Pressures mode, may not support it. ");
   
   //Serial.print(ps2x.Analog(1), HEX);
   
   type = 1;
pinMode(LM1,OUTPUT);
pinMode(LM2,OUTPUT);
pinMode(LM3,OUTPUT);
pinMode(LM4,OUTPUT);

pinMode(RM1,OUTPUT);
pinMode(RM2,OUTPUT);
pinMode(RM3,OUTPUT);
pinMode(RM4,OUTPUT);
ServoInint();

pinMode(Arms,OUTPUT);
digitalWrite(Arms,LOW);

}

void loop(){
   /* You must Read Gamepad to get new values
   Read GamePad and set vibration values
   ps2x.read_gamepad(small motor on/off, larger motor strenght from 0-255)
   if you don't enable the rumble, use ps2x.read_gamepad(); with no values
   
   you should call this at least once a second
   */
   


if(type==1){ //DualShock Controller

    ps2x.read_gamepad(false, vibrate);          //read controller and set large motor to spin at 'vibrate' speed
   
    if(ps2x.Button(PSB_START))                   //will be TRUE as long as button is pressed
      {
          Serial.println("Start is being held");
      }
    if(ps2x.Button(PSB_SELECT))
         Serial.println("Select is being held");
         
         
   if(ps2x.Button(PSB_PAD_UP)) {         //will be TRUE as long as button is pressed
       Serial.print("Up held this hard: ");
       Serial.println(ps2x.Analog(PSAB_PAD_UP), DEC);
      }
      if(ps2x.Button(PSB_PAD_RIGHT)){
       Serial.print("Right held this hard: ");
      Serial.println(ps2x.Analog(PSAB_PAD_RIGHT), DEC);
      }
      if(ps2x.Button(PSB_PAD_LEFT)){
       Serial.print("LEFT held this hard: ");
      Serial.println(ps2x.Analog(PSAB_PAD_LEFT), DEC);
      }
      if(ps2x.Button(PSB_PAD_DOWN)){
       Serial.print("DOWN held this hard: ");
   Serial.println(ps2x.Analog(PSAB_PAD_DOWN), DEC);
      }   

   
      vibrate = ps2x.Analog(PSAB_BLUE);      //this will set the large motor vibrate speed based on
                                              //how hard you press the blue (X) button   
   
    if (ps2x.NewButtonState())               //will be TRUE if any button changes state (on to off, or off to on)
    {
      if(ps2x.Button(PSB_L3))
         Serial.println("L3 pressed");
      if(ps2x.Button(PSB_R3))
         Serial.println("R3 pressed");
      if(ps2x.Button(PSB_L2))
         Serial.println("L2 pressed");
      if(ps2x.Button(PSB_R2))
         Serial.println("R2 pressed");
      if(ps2x.Button(PSB_GREEN))
         Serial.println("Triangle pressed");
         
    }   
         
   
    if(ps2x.ButtonPressed(PSB_RED))             //will be TRUE if button was JUST pressed
         {
          Serial.println("Circle just pressed");
         }
         
         
    if(ps2x.ButtonReleased(PSB_PINK))             //will be TRUE if button was JUST released
         {
          Serial.println("Square just released");   
          digitalWrite(Arms,HIGH);
         }
   
    if(ps2x.NewButtonState(PSB_BLUE))            //will be TRUE if button was JUST pressed OR released
         {
          Serial.println("X just changed");   
          digitalWrite(Arms,LOW);
         }
   
   
    if(ps2x.Button(PSB_L1) || ps2x.Button(PSB_R1)) // print stick values if either is TRUE
    {
      Serial.print("Stick Values:");
      Serial.print(ps2x.Analog(PSS_LY), DEC); //Left stick, Y axis. Other options: LX, RY, RX
      if(ps2x.Analog(PSS_LY)<127)Forward2(map(ps2x.Analog(PSS_LY),126,0,0,255));
      else if(ps2x.Analog(PSS_LY)>127)Back2();
      else Stop2();
      Serial.print(",");
      Serial.print(ps2x.Analog(PSS_LX), DEC);
      Serial.print(",");
      Serial.print(ps2x.Analog(PSS_RY), DEC);
      if(ps2x.Analog(PSS_RY)<127)Forward1(map(ps2x.Analog(PSS_RY),126,0,0,255));
      else if(ps2x.Analog(PSS_RY)>127)Back1();
      else Stop1();
      Serial.print(",");
      Serial.println(ps2x.Analog(PSS_RX), DEC);
    }
    else Stop();
   
   
}


delay(50);
   
}
void ServoInint()
{
digitalWrite(LM1,LOW);
digitalWrite(LM2,LOW);
digitalWrite(LM3,LOW);
digitalWrite(LM4,LOW);

digitalWrite(RM1,LOW);
digitalWrite(RM2,LOW);
digitalWrite(RM3,LOW);
digitalWrite(RM4,LOW);
}
void Forward1(int speed1)
{
analogWrite(LM1,speed1);
digitalWrite(LM2,LOW);
digitalWrite(LM3,LOW);
analogWrite(LM4,speed1);
}
void Forward2(int speed2)
{
analogWrite(RM1,speed2);
digitalWrite(RM2,LOW);
digitalWrite(RM3,LOW);
analogWrite(RM4,speed2);
}
void Back1()
{
digitalWrite(LM1,LOW);
digitalWrite(LM2,HIGH);
digitalWrite(LM3,HIGH);
digitalWrite(LM4,LOW);
}
void Back2()
{
digitalWrite(RM1,LOW);
digitalWrite(RM2,HIGH);
digitalWrite(RM3,HIGH);
digitalWrite(RM4,LOW);
}
void Stop()
{
Stop1();
Stop2();
}
void Stop1()
{
digitalWrite(LM1,HIGH);
digitalWrite(LM2,HIGH);
digitalWrite(LM3,LOW);
digitalWrite(LM4,LOW);
}
void Stop2()
{
digitalWrite(RM1,HIGH);
digitalWrite(RM2,HIGH);
digitalWrite(RM3,LOW);
digitalWrite(RM4,LOW);
}

在调试机器的过程中,发现NANO板发热,原因是整个机器只有一个电池供电,895电机和两个减速电机运行时电流比较大,产生的热量也比较大。最后还是将NANO板单独用一个9V电池供电(将锂电池的电压经过压降板供电也可以)。
static/image/hrline/line5.png

这里做一个个人小结,这次比赛准备相当不充分,整个机器人需要改进的地方很多,问题也很多。不过制作机器人也让我收获了一些东西,重新理解了格斗机器人的定义。很遗憾这次比赛没有去比赛现场,没能见识各位大佬的风姿,希望下次能有机会现场观看,大饱眼福。
附上30秒被KO的视频http://v.youku.com/v_show/id_XMzQ3MTcyODQ4OA==.html?spm=a2h3j.8428770.3416059.1*******************************************************************************************************************************************************************END!?留个彩蛋

maker_王 发表于 2018-3-19 15:20:08

1973742214 发表于 2018-3-18 10:25
如果转速太快,可能车的灵活性会降低,但转速不快,攻击力又会降低,你难道不觉得这个武器容易被打断吗大神 ...

这个结构确实对整体的平衡要求很高,重量分布不均匀,运行起来晃得厉害,很容易翻车,这次的武器是我们自己欠考虑了,把小伙伴们的攻击想的太简单了,所以上场就被秒,这是个致命伤,另外就是整体的设计也有很大的问题。

maker_王 发表于 2018-3-20 19:07:43

swanglei 发表于 2018-3-19 16:32
技术谈不上?。。。。。。。。。。。你参加一次比赛了看你还这么说不

这是实话,看着其他小伙伴们都紧张准备当中,我也想多花时间去搞机,奈何被各种事情缠身,所以这次的机器人有点吃老本的味道,谈不上学习到技术,不过下次比赛在8月份,这段时间我也在规划,要花时间和精力好好搞机一次:lol

maker_王 发表于 2018-3-19 15:26:54

swanglei 发表于 2018-3-19 00:24
其实技术细节其实想说的太多了~~~   不知道你自己有没有从这次比赛当中,学到些什么,不管怎么说,八月份的 ...

怎么说呢,这次比赛,个人觉得获得更多的是教训,技术还谈不上,比赛的话当然想参加,能够看看各个领域的大佬的风姿{:5_132:}

1973742214 发表于 2018-3-18 10:25:08

如果转速太快,可能车的灵活性会降低,但转速不快,攻击力又会降低,你难道不觉得这个武器容易被打断吗大神?

hnyzcj 发表于 2018-3-18 12:45:53

其实我也有这个想法,像做这个模式的

hnyzcj 发表于 2018-3-18 12:46:57

效果怎么样?

lkl0305 发表于 2018-3-18 14:45:00

感觉块头挺大的

Ao 发表于 2018-3-18 23:54:13

hnyzcj 发表于 2018-3-18 12:46
效果怎么样?
武器连接不牢,连接的拐角点直接被打断了

swanglei 发表于 2018-3-19 00:24:59

其实技术细节其实想说的太多了~~~   不知道你自己有没有从这次比赛当中,学到些什么,不管怎么说,八月份的比赛欢迎你,希望造一台更漂亮更具有科技感的机器人~

jarvis_chan 发表于 2018-3-19 13:09:11

彩蛋哈哈哈

maker_王 发表于 2018-3-19 15:21:44

hnyzcj 发表于 2018-3-18 12:46
效果怎么样?

就像一楼所说,转速高了,车就不太好控制,转速低了,攻击没效果,另外武器的硬度也是一个关键问题

maker_王 发表于 2018-3-19 15:28:19

lkl0305 发表于 2018-3-18 14:45
感觉块头挺大的

事实证明块头大,没什么用,哈哈;P

maker_王 发表于 2018-3-19 15:29:36

Ao 发表于 2018-3-18 23:54
武器连接不牢,连接的拐角点直接被打断了

不仅仅武器断了,内部也是一团糟::'(

swanglei 发表于 2018-3-19 16:32:02

maker_王 发表于 2018-3-19 15:26
怎么说呢,这次比赛,个人觉得获得更多的是教训,技术还谈不上,比赛的话当然想参加,能够看看各个领域的 ...

技术谈不上?。。。。。。。。。。。你参加一次比赛了看你还这么说不

Ash 发表于 2018-3-19 18:38:17

原来你是捣鼓车间的呀~人太多 都没看到你

hnyzcj 发表于 2018-3-19 23:33:25

maker_王 发表于 2018-3-19 15:21
就像一楼所说,转速高了,车就不太好控制,转速低了,攻击没效果,另外武器的硬度也是一个关键问题 ...

我看你的车转速上去以后车还怪稳定的

maker_王 发表于 2018-3-20 19:00:40

hnyzcj 发表于 2018-3-19 23:33
我看你的车转速上去以后车还怪稳定的

主要中间的859重,足足一斤,其实有几次开启武器后自己就翻车了,调整了几次就好多了

maker_王 发表于 2018-3-20 19:01:24

Ash 发表于 2018-3-19 18:38
原来你是捣鼓车间的呀~人太多 都没看到你

:lol:lol:lol:lol:lol:lol:lol:lol:lol:lol:lol

swanglei 发表于 2018-3-20 19:30:35

maker_王 发表于 2018-3-20 19:07
这是实话,看着其他小伙伴们都紧张准备当中,我也想多花时间去搞机,奈何被各种事情缠身,所以这次的机器 ...

欢迎来战,哈哈哈哈

maker_王 发表于 2018-3-20 20:58:28

swanglei 发表于 2018-3-20 19:30
欢迎来战,哈哈哈哈

还希望各位大佬下手轻点:P
页: [1] 2
查看完整版本: 【MechBattle建造日志】捣鼓车间--金钟罩