(SKU:KIT0071) MiniQ智能小车 探索套件

来自DFRobot Product Wiki
跳转至: 导航搜索
MiniQ智能小车 探索套件(SKU:KIT0071)

目录

简介

该套件是一款专门为教育,竞赛,娱乐设计的具有极强扩展性的小车套件。主要由miniQ桌面机器人底盘,Romeo V2多合一控制器,GP2Y0A21距离传感器等组成。套件配套的顶板直接兼容9克舵机,并带有超声波传感器,电池等固定孔,方便安装各类传感器。
小车采用DFRobot独家的RomeoV2控制器集成Arduino Leonardo、IO扩展板和电机驱动,具备强大的扩展和驱动能力,而且体积更小,是智能小车的绝配。 顶板自带洞洞板,可直接焊接直插或贴片的元器件,随时随地扩展你需要的功能,让你的机器人项目快速成型。装配好并下载好我们的样例代码即可实现避障功能。你可以把它作为教学用的套件,也可以自己玩,根据你能力往上加东西,组装一个独一无二的的机器小车!
另外告诉大家一个好消息:我们已经给电机焊好了线,打好了胶,大家再也不必为焊线烦恼了,到手即可组装哦。

性能参数

  • GP2Y0A21距离传感器技术规格
    • 信号类型:模拟输出
    • 探测距离:10-80cm
    • 工作电压:4.5-5.5V
    • 标准电流消耗:30 mA
    • 接口类型:PH2.0-3P
    • 最大尺寸:40x20x13.5 mm
  • 电机技术规格
    • 空载负载:13000 rpm
    • 齿轮箱减速比:50:16V
    • 转速:260 rpm6V
    • 电流:40mA6V
    • 堵转电流:360mA6V
    • 力矩:0.111kg/cm


使用教程

本教程将引导你如果组装和使用mini q小车。


组装教程


连线图

(注意:板子上S1-S5 switch开关要拨到OFF档位)

MiniQ智能小车 探索套件连线图


电机调试

使用贴士

如您是第一次使用Arduino的新手。请先尝试走一遍“新手村”任务。

新手任务1:安装Arduino驱动,点击驱动安装教程

新手任务2:下载Blink代码,点击Blink代码下载


将小车通过microUSB线接到电脑上,打开Arduino IDE界面,选择正确的板型(Arduino Leonardo)和串口,烧录附件中的test_motor的代码。

#include <math.h>                              

int E1 = 5;     //M1 Speed Control
int E2 = 6;     //M2 Speed Control
int M1 = 4;     //M1 Direction Control
int M2 = 7;     //M1 Direction Control

void stop(void)                    //Stop
{
  digitalWrite(E1,0); 
  digitalWrite(M1,LOW);    
  digitalWrite(E2,0);   
  digitalWrite(M2,LOW);    
}   
void advance(char a,char b)          //Move forward
{
  analogWrite (E1,a);      //PWM Speed Control
  digitalWrite(M1,LOW);    
  analogWrite (E2,b);    
  digitalWrite(M2,LOW);
}  
void back_off (char a,char b)          //Move backward
{
  analogWrite (E1,a);
  digitalWrite(M1,HIGH);   
  analogWrite (E2,b);    
  digitalWrite(M2,HIGH);
}
void turn_L (char a,char b)             //Turn Left
{
  analogWrite (E1,a);
  digitalWrite(M1,HIGH);    
  analogWrite (E2,b);    
  digitalWrite(M2,LOW);
}
void turn_R (char a,char b)             //Turn Right
{
  analogWrite (E1,a);
  digitalWrite(M1,LOW);    
  analogWrite (E2,b);    
  digitalWrite(M2,HIGH);
}


void setup()
{
  int i;
  for(i=4;i<=7;i++)
    pinMode(i, OUTPUT); 
  pinMode(2,OUTPUT);
  digitalWrite(E1,LOW);   
  digitalWrite(E2,LOW);
}
void loop()
{
   advance(80,80);delay(3000);
   back_off(80,80);delay(3000);
   turn_L(80,80);delay(3000);
   turn_R(80,80);delay(3000);
   stop();delay(3000);
}
电机有两个属性:转速和方向。我们这里定义E1和E2两个变量为电机的转速,M1和M2两个变量分别为电机的方向。正常连接电路的情况下小车会按照向前3秒,向后3秒,向左3秒,向右3秒,停止3秒的轨迹重复运行。
下面我们以前进的代码为例来了解一下电机的工作机制
void advance(char a,char b)          //Move forward
{
  analogWrite (E1,a);      //PWM Speed Control
  digitalWrite(M1,LOW);    
  analogWrite (E2,b);    
  digitalWrite(M2,LOW);
}  
我们首先定义了两个字符型变量a和b,用以存放从0~255的数据,这个数据是用控制电机运行的速度。接下来analogWrite(E1,a)就是将速度所对应的变量值赋给E1,根据前面的定义E1是数据口5口,即我们将速度对应的变量值写入数据口5中。而接下来的digitalWrite(M1,LOW)就是将低电平赋给数字口4口,来控制电机的正转和反转。根据我们的此次教程中的接法是LOW控制电机正转,HIGH控制电机反转。如果在这里将我们每个电机对应的电机驱动接线柱接线反接的话,程序对应的LOW就应该改为HIGH才是正转。

而下面的analogWrite (E2,b)和digitalWrite(M2,LOW)就是控制另一个电机同时正转。

舵机调试

将小车通过microUSB线接到电脑上,打开Arduino IDE界面,选择正确的板型(Arduino Leonardo)和串口,烧录附件中的test_servo的代码。
#include <Servo.h>
Servo irservo;
byte Angle = 90;
// Setup function
void setup(){
irservo.attach(9);
// move servos to center position -> 90°
irservo.write(Angle);
delay(2000);
} // The loop remains empty
void loop(){
}
烧入代码之后,舵机会自动调整到90°的位置,这时如果舵盘没有在90°的位置上,请取下舵盘,重新安装舵盘到舵机上。

小车玩法


/*
 # This Sample code is for testing the MiniQ Discovery Kit.
   
 # Editor : Phoebe
 # Date   : 2014.6.19
 # Ver    : 0.1
 # Product: MiniQ Discovery Kit
 # SKU    : KIT0071
   
 # Description:     
 # Obstacle avoidance function of MiniQ Discovery Kit
   
 */
 
#include <math.h>                              
#include <Servo.h>                                //Include Servo library
Servo irservo;                                    // create servo object to control a servo 
 
#define Svo_Pin 9
 
int posnow;
 
int E1 = 5;     //M1 Speed Control
int E2 = 6;     //M2 Speed Control
int M1 = 4;     //M1 Direction Control
int M2 = 7;     //M1 Direction Control
 
void stop(void)                    //Stop
{
  digitalWrite(E1,0); 
  digitalWrite(M1,LOW);    
  digitalWrite(E2,0);   
  digitalWrite(M2,LOW);    
}   
void advance(char a,char b)          //Move forward
{
  analogWrite (E1,a);      //PWM Speed Control
  digitalWrite(M1,LOW);    
  analogWrite (E2,b);    
  digitalWrite(M2,LOW);
}  
void back_off (char a,char b)          //Move backward
{
  analogWrite (E1,a);
  digitalWrite(M1,HIGH);   
  analogWrite (E2,b);    
  digitalWrite(M2,HIGH);
}
void turn_L (char a,char b)             //Turn Left
{
  analogWrite (E1,a);
  digitalWrite(M1,LOW);    
  analogWrite (E2,b);    
  digitalWrite(M2,HIGH);
}
void turn_R (char a,char b)             //Turn Right
{
  analogWrite (E1,a);
  digitalWrite(M1,HIGH);    
  analogWrite (E2,b);    
  digitalWrite(M2,LOW);
}
 
 
void setup()
{
  int i;
  for(i=4;i<=7;i++)
   pinMode(i, OUTPUT); 
//  pinMode(2,OUTPUT);
//  Serial.println("Run keyboard control");
  digitalWrite(E1,LOW);   
  digitalWrite(E2,LOW);
  irservo.attach(Svo_Pin);                         //attaches the servo on pin 9 to the servo object 
  Serial.begin(19200);                            //Set Baud Rate
  advance(80,80);
}
 
int pos=0;                                        // variable to store the servo position 
float distance;
 
void loop()
{
//  digitalWrite(2,HIGH); 
  for (int i=0;i<180;i++)          
  {
    irservo.write(i);
    int x=analogRead(0);                   // connect the GP2Y0A21 distance sensor to Analog 0
    Serial.println(x);                    // print distance 
    if(x>350)
    {
//      digitalWrite(2,LOW);delay(100); digitalWrite(2,HIGH); delay(100); 
      if(i<135)                           
      {
        back_off(80,80);delay(300);
        turn_L(80,80);delay(300);
      }
      else
      {
        back_off(80,80);delay(300);
        turn_R(80,80);delay(300);
      }
      advance(80,80);
    }
    delay(4);
  } 
  for(int i=180;i>0;i--)
  {
    irservo.write(i);
    int x=analogRead(0);
    Serial.println(x);                    // print distance 
    if(x>350)
    {
//      digitalWrite(2,LOW);delay(100); digitalWrite(2,HIGH); delay(100); 
      if(i<135)
      {
        back_off(80,80);delay(300);
        turn_L(80,80);delay(300);
      }
      else
      {
        back_off(80,80);delay(300);
        turn_R(80,80);delay(300);
      }
      advance(80,80);
    }
    delay(4);
  }
}
注:
RoMeo集成了5个按键S1~S5,通过模拟端口0控制。使用模拟按键时,需把开关拨到"ON"状态。当前我们使用模拟端口0采集红外传感器的数据,因此需把开关拨到"OFF"状态。
程序分析:
for (int i=0;i<180;i++)   
for(int i=180;i>0;i--)       
我们通过上面两行代码控制舵机从0~180°重复摆动,检测周边是否有障碍物。
if(x>350)
这行代码,变量x读取的是红外传感器的值,x值的变化范围是0~1024,x>350转化成国际长度单位就是距离小于大概6厘米,也就是说设置6cm以内前方有障碍物。
如果想要了解红外传感器读取的值与实际距离的换算,请单击下面链接:
SHARP GP2Y0A41SKOF 红外距离传感器 (4-30cm)
这个时候就通过舵机的角度控制:
if(i<135)

如果舵机角度小于135,那么小车后退并且向左转,否则向右转。


Nextredirectltr.pngGo Shopping MiniQ智能小车 探索套件

个人工具
名字空间

变换
操作
导航
工具箱