极客工坊

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 13225|回复: 6

求助 基于手势控制的智能小车

[复制链接]
发表于 2015-12-27 17:38:10 | 显示全部楼层 |阅读模式
本帖最后由 情仇 于 2015-12-27 18:06 编辑

arduino+MPU6050+L298N+无线模块(蓝牙)+小车模型(两个马达,一个驱动,一个调向)
遇到问题: 1、怎么样才能让它以固定的速度驱动(调速)我想让它慢慢的走,
                  2、无线模块不会,一个发送一个接收,



#include "Wire.h"
#include "I2Cdev.h"
#include "MPU6050.h"
MPU6050 accelgyro;
/**
* 定义小车LN298N接线
*/
#define ENA_A 3       //后边的电机使能,可以通过PWM调速
#define IN1_A 5
#define IN2_A 6

#define IN3_B 9
#define IN4_B 10
#define ENB_B 11

/**
* 定义小车操作函数
*/
void carBack(int carspeed);     //前进,带速度参数
void carGo(int carspeed);       //后退,带速度参数
void carStop();                 //停止
void carLeft(int carspeed2);    //左转弯,带参数
void carRight(int carspend2);   //右转弯,带参数
/**
* 变量定义
*/
int carspeed2 = 1;
int carspeed = 10;
int temp, maxs;
int x, y, z;
int16_t ax, ay, az;
int16_t gx, gy, gz;
/**
* 初始设置函数
*/
void setup() {
  /**
  * 电机A控制引脚输出模式
  */
  pinMode(ENA_A, OUTPUT);
  pinMode(IN1_A, OUTPUT);
  pinMode(IN2_A, OUTPUT);
  pinMode(ENB_B, OUTPUT);
  pinMode(IN3_B, OUTPUT);
  pinMode(IN4_B, OUTPUT);
  Wire.begin();
  Serial.begin(38400);
  Serial.println("Initializing I2C devices...");
  accelgyro.initialize();
  Serial.println("Testing device connections...");
  Serial.println(accelgyro.testConnection() ? "MPU6050 connection successful" : "MPU6050 connection failed");
}

void loop() {
  accelgyro.getMotion6(&ax, &ay, &az, &gx, &gy, &gz);
  x = abs(ax);
  y = abs(ay);
  z = abs(az);
  temp = max(x, y);
  maxs = max(temp, z);//取出x,y,z轴,最大的是哪个就处于哪个状态
  if (maxs == y) {//y轴控制前进和后退ay最大16500 pwm范围0-255 16500/255=64.7
    Serial.print("the max is y:"); Serial.println(ay / 1650);
    delay(500);
    if (ay > 0) {//ay有正负,ay正的前进,负的后退,PWM调速值为abs(ay/65r)
      carGo(abs(ay / 65));
    } else {
      carBack(abs(ay / 65));
    }
  }
  else if (maxs == x){//控制小车转向
     Serial.print("the max is x:"); Serial.println(ax / 65);
     delay(500);
    if(ax>0){
      //ax有正负,ax正的左转,负的右转,PWM调速值为abs(ax/65r)
      carLeft(abs(ax/65));
      } else{
        carRight(abs(ax/65));
      }
    }
  else if (maxs == z) {//z轴控制小车停止
    Serial.print("the max is z:"); Serial.println(az / 65);
    delay(500);
    carStop();
  } else {
    Serial.print("the max is x:"); Serial.println(ax / 65);
  }
}
/**
* cargo(carspeed),carback(carspeed)
* 小车前进,后退,ENA高电平,
* IN1高电平,IN2低电平,电机正转
* IN1低电平,IN2高电平,电机反转
* PS:根据电机接线调整正反,正转可能是前进也可能是后退
*/
void carGo(int carspeed) {
  analogWrite(ENA_A, carspeed);
  digitalWrite(ENA_A, HIGH);
  digitalWrite(IN1_A, HIGH);
  digitalWrite(IN2_A, LOW);
}
void carBack(int carspeed) {
  analogWrite(ENA_A, carspeed);
  digitalWrite(ENA_A, HIGH);
  digitalWrite(IN1_A, LOW);
  digitalWrite(IN2_A, HIGH);
}
/**
* 小车停止
* ENA 高电平时,IN1与IN2相等,小车停止
* ENA 低电平时,IN1与IN2相等,IN1任意状态,小车停止
*/
void carStop() {
  digitalWrite(ENA_A, HIGH);
  digitalWrite(IN1_A, LOW);
  digitalWrite(IN2_A, LOW);
}

/**
* carLEft(carspeed2),carRight(carspeed2)
* IN3高电平,IN4低电平,电机正转
* IN3低电平,IN4高电平,电机反转
* PS:根据电机接线调整正反,正转可能是左转弯也可能是右转弯
*/
void carLeft(int carspeed2){
  digitalWrite(ENB_B,HIGH);
  digitalWrite(IN3_B,HIGH);
  digitalWrite(IN4_B,LOW);
  }

void carRight(int carspeed2){
  digitalWrite(ENB_B,HIGH);
  digitalWrite(IN3_B,LOW);
  digitalWrite(IN4_B,HIGH);
  }

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
回复

使用道具 举报

 楼主| 发表于 2015-12-27 17:59:07 | 显示全部楼层
小车能跑,速度太快
回复 支持 反对

使用道具 举报

发表于 2015-12-28 09:06:45 | 显示全部楼层
有例子学起来会很快,前提是知道其中的原理,明白自己想要达到此目的的不足之处。
1、速度太快的原因是没有采用PWM方式控制电机,只是开关量的输出而已;
2、或者用减速比更大的驱动电机也行,但就你目前的硬件足以,该几行程序就行把PWM加上就可以控制速度啦。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2015-12-28 23:01:48 | 显示全部楼层
本帖最后由 情仇 于 2015-12-28 23:04 编辑
PINKWALKMAN 发表于 2015-12-28 09:06
有例子学起来会很快,前提是知道其中的原理,明白自己想要达到此目的的不足之处。
1、速度太快的原因是没有 ...


我不会才来求助咯!大神帮帮忙咯,周四就要交了。呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜
回复 支持 反对

使用道具 举报

发表于 2015-12-29 07:56:49 | 显示全部楼层
情仇 发表于 2015-12-28 23:01
我不会才来求助咯!大神帮帮忙咯,周四就要交了。呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜

啊?不是吧。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2015-12-29 08:13:09 来自手机 | 显示全部楼层
本帖最后由 情仇 于 2015-12-29 08:58 编辑

真不会啊。老师居然要提前了结课了。
回复 支持 反对

使用道具 举报

发表于 2015-12-30 17:52:50 | 显示全部楼层
ENA,和,ENB接pwm脚,3.5.6.9.10.11,给pwm量,比如analogWrite(ENA,125);就可以了。pwm是0到255.速度自己实验要多少。
http://www.geek-workshop.com/for ... hlight=%D0%A1%B3%B5
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|联系我们|极客工坊

GMT+8, 2026-6-15 17:37 , Processed in 0.036533 second(s), 20 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表