./t20160331_321725_taonews.html
专题
首页  >  专题  >  媒体视点  >  名刊精选  >  《无线电》

《无线电》

开博时间:2016-07-01 14:43:00

1955年创刊,是国内电子科普领域创刊最早、发行量最大的知名杂志,累计发行量超过3亿册,倡导科普、兴趣、实作、分享的办刊理念。

文章数
分享到:

第三届开源硬件开发大赛优秀作品 低成本打造Booby家庭服务机器人

2016-03-31 17:04:45

我是大二的学生,偶然间接触了Arduino,从此一发不可收拾,做过激光雕刻机、智能小车等有意思的东西。大一下半学期的暑假是一个很好的机会,能够深入学习Arduino,于是我决定设计制作一种家庭服务机器人,恰逢Arduino中文社区举办了开源硬件开发大赛,我便报名参加了比赛。这款机器人的灵感来源于《机器人总动员》中的瓦力,作为家庭服务机器人,初步决定加入履带底盘、可夹持机械手、视频传输、语音识别与交流、短信报警、LED点阵眼睛等功能。

 

履带底盘的设计

为了适应家庭环境中可能出现的门槛、地毯和花园草地等环境,我决定采用全金属结构的底盘(见图1),这样底盘稳定一些,其他部件也都容易装配。金属结构的底盘在重量上也占有很大的优势,为了减少通过障碍时对车体本身的振动,我设计了一套悬挂系统来缓冲,悬挂系统由4个摇臂和弹簧构成,每个摇臂可以单独运动,类似于独立悬挂。

驱动采用履带传动,我比较了网上的各种玩具履带配件,发现普遍价格偏高且材质较脆,不适合大动力的驱动,于是采用了二手的汽车正时带作为履带,后来测试发现同步带作为履带行走起来十分稳定。

主动力为两个蜗轮蜗杆减速电机,动力十足,而且由于蜗轮、蜗杆自锁的特性,即使是45°斜坡也不会滑下,可以适应多种特殊路况,甚至是石子路等复杂路况。电机驱动板(见图2)采用继电器控制,因为普通的MOS管组成的H桥驱动电路输出电流太小且发热较严重,无法满足底盘的驱动要求,故采用继电器控制电路控制电机,每一路信号都做光耦隔离,同时成本低、易维护。

机械臂的设计

    为了实现抓取物品和动作交互娱乐等功能,我们制作了一种类似于桌面码垛机器人的机械手,采用舵机作为动力来源,使用Arduino进行控制。画好三维图纸,导出二维图纸,先用廉价的木板切了一套(见图3)验证效果,发现效果很好,于是换用亚克力板加工,一左一右共两只,镜像安装。对于机械臂的远程控制,采用2.4GHz无线控制,使用nRF2401模块传输数据。为了更方便控制机械臂,我制作了一个同步摇杆来控制机械手(见图4),这个摇杆就是缩小版的机械手,只是舵机的位置换成了电位器,其他的连杆结构的比例与机械臂基本相同,这样操控起来就比较简单。

机械臂测试程序

#include <Servo.h>
#include <
EEPROM.h>
Servo servo1;
Servo servo2;  
Servo servo3;
byte angle1;
byte angle2;
byte angle3;
int buffer1[3];
int rec_flag;
int serial_data;
int Uartcount;
unsignedlong Pretime;
unsignedlong Nowtime;
unsignedlong Costtime;
void setup() {
  
Serial.begin(9600);
  servo1.
attach(9);
  servo2.
attach(10);
  servo3.
attach(11);
  angle1=
EEPROM.read(0x01);
  angle2=
EEPROM.read(0x02);
  angle3=
EEPROM.read(0x03);
  servo1.
write(angle1);
  servo2.
write(angle2);
  servo3.
write(angle3);
}
void loop()
{
  
while(1)
  {
   Get_uartdata();  
//读取串口数据
  
//UartTimeoutCheck();
   }
}
void Communication_Decode()
{
if(buffer1[0]==0x01)//舵机命令
    {
      
if(buffer1[2]>180)return;
      
switch(buffer1[1])
      {
      
case 0x07:angle1=buffer1[2];servo1.write(angle1);return;
      
case 0x08:angle2=buffer1[2];servo2.write(angle2);return;
      
case 0x09:angle3=buffer1[2];servo2.write(angle2);return;
      
default:return;
       }
      }
      
elseif(buffer1[0]==0x32)//保存命令
      {
      
EEPROM.write(0x01,angle1);
      
EEPROM.write(0x02,angle2);
      
EEPROM.write(0x03,angle3);
      
return;
       }
}
void Get_uartdata()
{
  
staticint i;
  
if(Serial.available()>0)
  {
   serial_data=
Serial.read();
  
if(rec_flag==0)
   {
    
if(serial_data==0xff)//ff000100ff
    {
      rec_flag=1;
      i=0;
      }
    }
    
else
    {
      
if(serial_data==0xff)
      {
       rec_flag=0;
      
if(i==3)
       {
        Communication_Decode();
        }
        i=0;
       }
      
else
       {
        buffer1=serial_data;
        i++;
        }
      }
   }
  }

 


(未完。全文见《无线电》杂志2016年第3期)

上一篇: 用酸奶盒制作管道迷宫
下一篇: DIY空气净化器
©2011-2019 版权所有:中国数字科技馆
未经书面许可任何人不得复制或镜像
京ICP备11000850号 京公网安备110105007388号
信息网络传播视听节目许可证0111611号
国家科技基础条件平台