arduino的入门作品——简单的记忆机器人

arduino的入门作品——简单的记忆机器人

作为新手小白但却有这一颗激情与热爱的心的我,在昨天上午看到一个记忆机械手的视频后实在是按耐不住自己的浮躁之心。连夜赶工,费时12个小时终于把“记忆机器人完成了”。虽然做工极其的“烂”,但是也算是完成了一个让自己还算是满意的作品。

零件

1:一块大塑料板(用来做塑料模型机器人)
2:四个电位器(装在塑料机器人上)
3:一个四个舵机的机器人
4:ardiuon nano板
5:玻璃胶
5:杜邦线
6:外接电源
7:两个按键开关

开始制作

  1. 四个舵机的机器人:嘿嘿嘿,这个我用的时候就是成型的一个作品,大家如果有条件可以试着自己动手做一个(注意初始舵机角度一定要是90度也就是中间值为了能让腿脚能达到最大的活动范围)
    arduino的入门作品——简单的记忆机器人_第1张图片
    2.塑料模型机器人:如下,看是不是如我所说特别的“烂”,但是自我感觉还是无伤大雅的(反正又不当产品卖),哈哈哈如果有细心的小伙伴可以做到更加漂亮一(是个人就做的比我漂亮了)。做这个塑料模型机器人的大小和电位器的位置和真机器人的基本一致(差不多啦)。注意:电位器也要转到中间角度再装上去,我是用了一个简单的串口通讯算出了电位器的中间角度的模拟值是457,并把电位器都转到了模拟值为457这个角度。串口通讯的代码如下:
void setup() {
  Serial.begin(9600);
}
void loop() {
int n=analogRead(A0);
Serial.println("n");
}

arduino的入门作品——简单的记忆机器人_第2张图片在用玻璃胶把电位器粘到塑料板上之前角度确实调好了,但是粘完之后以为各种的误差原因,所以我装好之后又测了一下各个电位器的模拟值。我发些模拟值的大小误差在457±84,这种误差还是可以接受的哈哈哈,之后我用了代码的算法改变尽量消除了值的误差。

接线问题

1:开始时我用电位器的四个GND线接在一起,舵机的四个GND线接在一起,电位器的四个VCC线接在一起,舵机的四个VCC线接在一起。然后都接在了arduion的5v和GND上。这时我发现机器人乱动,塑料机器人也是控制不了那个机器人了。我觉得可能是电压问题,小arduion nano板提高不了良好的电压值,所以我用了一个外部电源。把四个舵机的GND和VCC接在了外部5.5v左右的电源上。用外部电源给机器人供电,电脑的端口给arduion供电,塑料模型机器人的电位器还是接在了板子上。

2,按键的接线:按键的接线方法非常的简单了就,我放一个图在下面大家就明白了哈哈哈哈。我是把两个按键分别接在了D3和D4管脚,一个起到了记忆动作的作用,一个可以开始做记忆的动作。

arduino的入门作品——简单的记忆机器人_第3张图片

代码

1.首先是塑料模型机器人控制机器人做同样动作(包含头文件和变量),这个很简单,原理其实就是电位器控制舵机的转动。只要把电位器的模拟量分成180等份,每一份就代表舵机的一个度数,下面是我改的零误差的代码,大家可以根据自己的误差大小进行相应的调整。

 #include <Servo.h> //调用舵机的头文件
  Servo zuojiao;
  Servo youjiao;
  Servo zuogebo; 
  Servo yougebo;
  int anjian=3;        //记忆动作的按键
  int kaiguan=4;        //做出记忆动作的按键
  int zuojiaojiyi[30];
  int youjiaojiyi[30];
  int zuogebojiyi[30];
  int yougebojiyi[30];    //保存记忆动作的数组,最多三十个动作
  int p=0,w=0;
  void setup() {  
     Serial.begin(9600);  
     zuojiao.attach(10); 
     youjiao.attach(11);  
     zuogebo.attach(8);  
     yougebo.attach(9); 
     pinMode(anjian, INPUT);          
     pinMode(kaiguan, INPUT);  
                  } 
void loop()
{
    
  int f=914/180;                  //一度表示的模拟值大小
 int zuojiaomo=analogRead(A0);   //读取电位器模拟值
  int youjiaomo=analogRead(A1);
  int zuogebomo=analogRead(A2);
  int yougebomo=analogRead(A3);
  zuojiao.write(zuojiaomo/f);
  youjiao.write(youjiaomo/f);
  zuogebo.write(180-zuogebomo/f);    //这个用180-是因为方向的问题 大家可以根据做的时候出现的现象改变
  yougebo.write(180-yougebomo/f);
  }

2.记忆按键:我做的这个按键仅仅是记忆当前的位置,大家可以做做改进比如记下动作的途径和时间的间隔。我用的方法计时把当前的动作储存在一个数组中,也就是当前的电位器的模拟值。代码如下:

 if(digitalRead(anjian)==HIGH)
  {
       delay(200);   //简单消抖
       zuojiaojiyi[w]=zuojiaomo;
       youjiaojiyi[w]=youjiaomo;
       zuogebojiyi[w]=zuogebomo;
       yougebojiyi[w]=yougebomo;
       w++;
    }

3.接下来也就是最后一步了,把记在数组中的动作做出来,也就是D4管脚上的按键,只要调用数组即可

if(digitalRead(kaiguan)==HIGH)
  {
       for(p=0;p<w;p++)
       {
         zuojiao.write((zuojiaojiyi[p]/f));
         youjiao.write((youjiaojiyi[p]/f));
         zuogebo.write(180-(zuogebojiyi[p]/f));     
         yougebo.write(180-(yougebojiyi[p]/f);
         delay(1000);
         
        }
        w=0;         //恢复初始值
       
    }

哈哈哈哈哈一个有点弱智的记忆机器人就做好了,还挺好玩的哈哈哈哈哈。想看效果视频的小伙伴可以点一下云盘连接链接:https://pan.baidu.com/s/1jqnVDSY_5Hbc10EMciis0g
提取码:yyuh 因为什么什么维护,只能带提取码分享了,大家见谅啊

你可能感兴趣的:(arduion,单片机)