(RB-13K079)AS-4WD超声波手势操控机器人

来自ALSROBOT WiKi
跳转至: 导航搜索
RB-13K07901.png

目录

产品概述

超声波作为智能车避障的一种重要手段,以其避障实现便,计算简单,易于做时控制,测量精度也能达到实用的要求,在未来汽车智能化进程中必将得到广泛。AS-4WD 超声波手势操控机器人采用4个RB-URF02 超声波传感器,对小车的方向进行控制,并使用蓝牙模块进行无线通信,实现无线控制4WD平台,本产品使用Carduino UNO控制器,此平台设计可以配合各个版本Arduino,例如:Arduino Due、Arduino Mega2560等,同样适合于树莓派控制器,为开发带来便利。产品为全铝合金车体,结实耐用,四个马达7.2V电压独立驱动,动力强劲,结构合理,便于扩展;独立散件包装,让您完全体验DIY的乐趣。

产品清单

RB-13K07902.png

技术参数

平台参数

  1. 车轮直径:65mm
  2. 车轮宽度:26mm
  3. 平台长度:206mm
  4. 平台宽度:200mm
  5. 平台高度:65mm
  6. 平台重量:620g
  7. 底盘距地面距离:13mm

平台尺寸图

RB13K00610.png

直流减速电机(1:48)

  1. 驱动电机齿轮箱减速比:1:48
  2. 无负载转速(3V):168RPM
  3. 无负载转速(6V):300RPM
  4. 无负载时电流(3V):90mA
  5. 无负载时电流(6V):100mA
  6. 扭矩大小 (3V): 0.04N.m
  7. 扭矩大小 (6V): 0.08N.m
  8. 尺寸大小:70.50 mm×27.00 mm×23.00 mm(长×宽×高)
  9. 重量大小: 约30g

电控部分资料

Carduino UNO控制器

Carduino UNO相关资料及使用方法

双H桥电机驱动板

双H桥电机驱动板相关资料及使用方法

传感器扩展板

V5.0传感器扩展板相关资料及使用方法

大按钮模块

按压式大按钮模块相关资料及使用方法

蓝牙模块

RB无线蓝牙模块相关资料及使用方法

超声波传感器

超声波传感器相关资料及使用方法

安装步骤

步骤1:充电接口拨动开关连接线制作

充电接口拨动开关连接线制作步骤详解

平台安装步骤

步骤1:平台侧板电机安装

两侧电机安装相同,注意安装前将电机接线用电烙铁焊接好,套上热缩管加热塑封。
使用零件:平台侧板*2个、直流减速电机*4个、M3*25螺丝*8个、M3六角螺母*8个

RB13K07403.png

步骤2:平台底板安装

使用零件:步骤1中安装好电机的侧板*2套、平台底板*1个、M3*6螺丝*4个

RB13K07404.png

步骤3:双H桥电机驱动板安装

驱动板安装方向随意,注意同侧电机接线方向顺序,保证同侧电机转向是相同的。
使用零件:步骤2中的组合体、双H桥直流电机驱动板*1个、M3*10尼龙柱*4个、M3六角螺母*4个、M3*6螺丝*4个

RB13K07405.png

步骤4:电池盒安装

电池盒可用双面胶固定,后轮电机接线需插入杜邦线帽,接入步进电机接口
使用零件:电池盒*1个或锂电池*1块

电池盒固定位置
锂电池固定位置

步骤5:4WD端板安装

使用零件:4WD端板*2个、步骤4中的组合体、M3*6螺丝*4个、M3六角螺母*4个

RB13K07407.png

步骤6:充电接口、拨动开关安装

使用零件:步骤1中制作好的充电开关接口连接线、4WD上板

RB13K07408.png

步骤7:Carduino UNO控制器安装

使用零件:步骤6中的组合体、Carduino UNO控制器*1个、M3*10尼龙柱*3个、M3*6螺丝*3个、M3六角螺母*3个

RB13K07409.png

步骤8:4WD上板安装

使用零件:4WD平台上板*1个、步骤5中的组合体*1套、M3*6螺丝*4个

RB13K07412.png

步骤9:4WD轮子安装

使用零件:步骤8中的组合体*1套、4WD轮子*4个

RB13K07413.png

步骤10:V5.0传感器扩展板插入

使用零件:V5.0传感器扩展板*1个、步骤9中安装好的平台*1套

RB13K07415.png

步骤11:蓝牙模块插入

注意:蓝牙模块插入前要对控制器进行程序上传,若插上蓝牙模块进行程序上传操作,会造成程序上传不成功问题。
使用零件:步骤10中的组合体*1套、蓝牙模块*1个

RB-13K07903.png

整机测试

接线说明

  • 数字口2→接超声波
  • 数字口10→接RB-421舵机
  • 数字口5→接双H桥驱动板的EB
  • 数字口6→接双H桥驱动板的I4
  • 数字口7→接双H桥驱动板的I3
  • 数字口8→接双H桥驱动板的I1
  • 数字口9→接双H桥驱动板的I2
  • 数字口11→接双H桥驱动板的EA

方向盘端制作

使用零件

  • Carduino UNO 控制器*1个
  • Arduino传感器扩展板 V5.0*1个
  • 超声波传感器*4
  • 大按钮模块*1
  • 蓝牙模块*1
  • 3P杜邦线*5

制作步骤

1.盘体制作:首先我们截取一块边长为20cm左右的正方形雪弗板(材料可自行选取)。
2.大按钮模块固定:用螺丝将大按钮模块固定在雪弗板的中间位置用来启动方向盘。
3.超声波传感器固定:分别用螺丝将4个超声波传感器固定在雪弗板的4个直角上,用来识别手势,超声波与大按钮模块摆放如下图所示,也可根据实际情况去摆放,一定要标明方向。

RB-13K07904.png

方向盘接线

超声波传感器采用单线模式

  • UP超声波传感器接数字口2,用于识别前进的手势。
  • Down超声波传感器接数字口3,用于识别后退的手势。
  • Left超声波传感器接数字口4,用于识别左转手势。
  • Right超声波传感器接数字口5,用于识别右转手势。
  • 大按钮模块接数字口6,用于启动方向盘。

测试程序

方向盘端程序

int Button=6;               //定义Button为数字口6
int z;                      //定义变量z
int b;
int duration_1;             //定义变量duration_1用来存储脉冲
int distance_1;             //定义变量distance_1用来存储距离值
int srfPin_1 = 2;           //定义srfPin_1为数字口2
int val1;
int duration_2;             //定义变量duration_2用来存储脉冲
int distance_2;             //定义变量distance_2用来存储距离值
int srfPin_2 = 3;           //定义srfPin_2为数字口3
int val2;
int duration_3;             //定义变量duration_3用来存储脉冲
int distance_3;             //定义变量distance_3用来存储距离值
int srfPin_3 = 4;           //定义srfPin_3为数字口4
int val3;
int duration_4;             //定义变量duration_4用来存储脉冲
int distance_4;             //定义变量distance_4用来存储距离值
int srfPin_4 = 5;           //定义srfPin_4为数字口5
int val4;
void setup()
{
  		Serial.begin(115200);     //设定波特率为115200  
  		pinMode(srfPin_1,OUTPUT);  //定义srfPin1为输出模式
  		pinMode(srfPin_2,OUTPUT);  //定义srfPin1为输出模式
  		pinMode(srfPin_3,OUTPUT);  //定义srfPin1为输出模式
  		pinMode(srfPin_4,OUTPUT);  //定义srfPin1为输出模式
  		pinMode(Button,INPUT);     //定义Button为输入模式
}
void loop()
{
 		if(LOW == digitalRead(Button))
    		b=1;
    	else
    		b=0;
  
while(b)
{
val1=Ultrasonic_1(z);        //前超声波返回距离值赋值给val1
val2=Ultrasonic_2(z);        //后超声波返回距离值赋值给val2
      val3=Ultrasonic_3(z);        //左超声波返回距离值赋值给val3
      val4=Ultrasonic_4(z);        //右超声波返回距离值赋值给val4
      if((val1>15)&&(val2>15)&&(val3>15)&&(val4>15))
      	Serial.print('T');
if((val1<15)&&(val3<15))
      	Serial.print('x');
      else if((val1<15)&&(val1<val3)&&(val3<val4))
      	Serial.print('q');
      if((val3<15)&&(val4>15)&&(val3<val1)&&(val3<val2))      
         Serial.print('l'); 
      if((val1<15)&&(val4<15))
         Serial.print('y');
      else if((val1<15)&&(val1<val4)&&(val4<val3))
         Serial.print('q');
      if((val4<15)&&(val3>15)&&(val4<val1)&&(val4<val2))      
         Serial.print('r'); 
     if((val2<15)&&(val3<15))
         Serial.print('m');
      else if((val2<15)&&(val2<val3)&&(val3<val4))
         Serial.print('h');
      if((val2<15)&&(val4<15))
         Serial.print('n');
      else if((val2<15)&&(val2<val4)&&(val4<val3))
         Serial.print('h');
      if((val3<15)&&(val4<15))
         Serial.print('T');
      if((val1<15)&&(val2<15))
         Serial.print('T');
    }
}

int Ultrasonic_1(int distance_1)
{ 
  		digitalWrite(srfPin_1, LOW);            //高电平触发前发送2微秒的低电平
  		delayMicroseconds(2);                   //确保在发送高电平
  		digitalWrite(srfPin_1, HIGH);           //发送10微秒的高电平开始检测
  		delayMicroseconds(10);
  		digitalWrite(srfPin_1, LOW);            //等待脉冲返回前发送一个低电平
  		pinMode(srfPin_1, INPUT);
  		duration_1 = pulseIn(srfPin_1, HIGH);   //从URF02读取脉冲
  		distance_1 = duration_1/58;             //除以58得到距离值
  		return distance_1;
}

int Ultrasonic_2(int distance_2)
{   
  		digitalWrite(srfPin_2, LOW);            //高电平触发前发送2微秒的低电平
  		delayMicroseconds(2);
  		digitalWrite(srfPin_2, HIGH);           // 发送10微秒的高电平开始检测
  		delayMicroseconds(10);
  		digitalWrite(srfPin_2, LOW);            //等待脉冲返回前发送一个低电平
  		pinMode(srfPin_2, INPUT);
  		duration_2 = pulseIn(srfPin_2, HIGH);   //从URF02读取脉冲
  		distance_2 = duration_2/58;             //除以58得到距离值
  		return distance_2;
}
int Ultrasonic_3(int distance_3)
{   
  		digitalWrite(srfPin_3, LOW);            //高电平触发前发送2微秒的低电平
  		delayMicroseconds(2);
 		digitalWrite(srfPin_3, HIGH);           //发送10微秒的高电平开始检测
  		delayMicroseconds(10);
  		digitalWrite(srfPin_3, LOW);            //等待脉冲返回前发送一个低电平
  		pinMode(srfPin_3, INPUT);
  		duration_3 = pulseIn(srfPin_3, HIGH);   //从URF02读取脉冲
  		distance_3 = duration_3/58;             //除以58得到距离值
  		return distance_3;
}
int Ultrasonic_4(int distance_4)
{   
  		digitalWrite(srfPin_4, LOW);            //高电平触发前发送2微秒的低电平
  		delayMicroseconds(2);
  		digitalWrite(srfPin_4, HIGH);           //发送10微秒的高电平开始检测
  		delayMicroseconds(10);
  		digitalWrite(srfPin_4, LOW);            //等待脉冲返回前发送一个低电平
  		pinMode(srfPin_4, INPUT);
  		duration_4 = pulseIn(srfPin_4, HIGH);   //从URF02读取脉冲
  		distance_4 = duration_4/58;             //除以58得到距离值
  		return distance_4;     
}

平台端程序

void setup()
{
  		Serial.print('a');
  		Serial.begin(115200); //设定波特率为115200
  		pinMode(8,OUTPUT);     //定义I3接口
  		pinMode(9,OUTPUT);     //定义I4接口
  		pinMode(10,OUTPUT);    //定义EB(PWM调速)接口
  		pinMode(5,OUTPUT);     //定义EA(PWM调速)接口
  		pinMode(6,OUTPUT);     //定义I2接口
  		pinMode(7,OUTPUT);     //定义I1接口
}

void loop()
{      
   switch(Serial.read())
      {
			case 'h': Back();	break;
			case 'q': Goahead();	break;
			case 'l': Turn_left();	break;
			case 'r': Turn_right(); break;
         case 'T': Stop();	break;
         case 'x': Goahead1();	break;
         case 'y': Goahead2();	break;
         case 'm': Back1();	break;
         case 'n': Back2();	break;
      }
}

void Back()//  
{  
     analogWrite(5,90);      //输入模拟值进行设定速度
     digitalWrite(6,LOW);    //使直流电机(左)逆时针转
     digitalWrite(7,HIGH);
     analogWrite(10,105);    //输入模拟值进行设定速度
     digitalWrite(8,LOW);    //使直流电机(右)顺时针转
     digitalWrite(9,HIGH);
}
void Back1()//  
{  
     analogWrite(5,80);    //输入模拟值进行设定速度
     digitalWrite(6,LOW);   //使直流电机(左)逆时针转
     digitalWrite(7,HIGH);
     analogWrite(10,50);   //输入模拟值进行设定速度
     digitalWrite(8,LOW);   //使直流电机(右)顺时针转
     digitalWrite(9,HIGH);
}

void Back2()//  
{  
     analogWrite(5,50);    //输入模拟值进行设定速度
     digitalWrite(6,LOW);   //使直流电机(左)逆时针转
     digitalWrite(7,HIGH);
     analogWrite(10,105);   //输入模拟值进行设定速度
     digitalWrite(8,LOW);   //使直流电机(右)顺时针转
     digitalWrite(9,HIGH);
}

void Goahead()//前进
{
     analogWrite(5,90);    //输入模拟值进行设定速度
     digitalWrite(6,HIGH);  //使直流电机(左)顺时针转
     digitalWrite(7,LOW);  
     analogWrite(10,105);   //输入模拟值进行设定速度
     digitalWrite(8,HIGH);  //使直流电机(右)逆时针转
     digitalWrite(9,LOW);   
}

void Stop()//停止
{
     digitalWrite(6,HIGH);  //使直流电机(左)制动
     digitalWrite(7,HIGH);
     digitalWrite(8,HIGH);  //使直流电机(右)制动
     digitalWrite(9,HIGH);   
}

void Turn_right()           //右转    
{
     analogWrite(5,155);    //输入模拟值进行设定速度
     digitalWrite(6,LOW);   //使直流电机(左)逆时针转
digitalWrite(7,HIGH);  
     analogWrite(10,140);   //输入模拟值进行设定速度
     digitalWrite(8,HIGH);  //使直流电机(右)逆时针转
     digitalWrite(9,LOW);   
}

void Turn_left()//左转
{
     analogWrite(5,140);    //输入模拟值进行设定速度
     digitalWrite(6,HIGH);   //使直流电机(左)逆时针转
     digitalWrite(7,LOW);  
     analogWrite(10,155);   //输入模拟值进行设定速度
     digitalWrite(8,LOW);   //使直流电机(右)顺时针转
     digitalWrite(9,HIGH);  
}
void Goahead1()//前进
{
     analogWrite(5,130);    //输入模拟值进行设定速度
     digitalWrite(6,HIGH);  //使直流电机(左)顺时针转
     digitalWrite(7,LOW);  
     analogWrite(10,60);   //输入模拟值进行设定速度
     digitalWrite(8,HIGH);  //使直流电机(右)逆时针转
     digitalWrite(9,LOW);   
}
void Goahead2()//前进
{
     analogWrite(5,60);    //输入模拟值进行设定速度
     digitalWrite(6,HIGH);  //使直流电机(左)顺时针转
     digitalWrite(7,LOW);  
     analogWrite(10,130);   //输入模拟值进行设定速度
     digitalWrite(8,HIGH);  //使直流电机(右)逆时针转
     digitalWrite(9,LOW);   
}

演示视频

4wd shou shi cao kong 01.png
4wd ding ju 01.png


产品相关推荐

Erweima.png

产品购买地址

AS-4WD超声波手势操控机器人

周边产品推荐

Arduino 4WD铝合金移动平台车灯套件
Arduino 光电码盘 光电测速传感器

相关问题解答

AS-4WD 碰撞机器人如何安装
4wd 红外线巡线壁障车调试助手没有反应

相关学习资料

视频:机器人调试助手无线操控AS-4WD轮式机器人
视频:Arduino-4WD移动机器人寻线功能演示
视频:Arduino-4WD移动机器人碰撞功能演示
视频:Arduino-4WD移动机器人追光功能演示
视频:Arduino-4WD移动机器人寻线与避障功能演示
视频:Arduino-4WD移动机器人侦测避障功能演示
视频:直流减速电机驱动实例
奥松机器人技术论坛