情仇 发表于 2015-12-8 16:15:32

手势控制的小车

本帖最后由 情仇 于 2015-12-21 17:14 编辑

Arduino+ Bluetooth + MPU6050 + L1298N的手势控制的小车。现在就差Bluetooth还没有接上了
Bluetooth应该怎么写呀?一个主一个从。



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

/**
* 定义小车操作函数
*/
void carBack(int carspeed);   //前进,带速度参数
void carGo(int carspeed);       //后退,带速度参数
void carStop();               //停止
void carLeft(int carspeed2);    //左转弯,带参数
void carRight(int carspend2);   //右转弯,带参数
/**
* 变量定义
*/
int carspeed2 = 3;
int carspeed = 30;
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 / 65);
    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);
}

ranqingfa 发表于 2015-12-8 16:54:42

不行吧:o:o

lm4766 发表于 2015-12-8 23:48:59

哈哈,楼主还没了解78M05是什么东东

Be1ieve 发表于 2015-12-9 00:07:17

楼主搞错主角了,主角是背著散热片那颗

老胖熊 发表于 2015-12-9 12:10:27

:L               

Hackerpro 发表于 2015-12-10 08:33:01

看到这个标题我就震惊了

164335413 发表于 2015-12-10 09:27:59

ranqingfa 发表于 2015-12-8 16:54 static/image/common/back.gif
不行吧

这个标题,我震惊了!

ranqingfa 发表于 2015-12-10 09:35:51

164335413 发表于 2015-12-10 09:27 static/image/common/back.gif
这个标题,我震惊了!

看来你也不太懂

164335413 发表于 2015-12-10 10:03:27

ranqingfa 发表于 2015-12-10 09:35 static/image/common/back.gif
看来你也不太懂

我都不知道楼主是怎么个控制法,发哥现在在南方可好?

ranqingfa 发表于 2015-12-12 09:14:24

164335413 发表于 2015-12-10 10:03 static/image/common/back.gif
我都不知道楼主是怎么个控制法,发哥现在在南方可好?

:lol看错了,以为你说我说的“不对吧”很震惊……

情仇 发表于 2015-12-16 20:14:21

呵呵,谢谢咯。现在做得差不多了

情仇 发表于 2015-12-22 08:13:44

ranqingfa 发表于 2015-12-8 16:54
不行吧

现在应该怎么玩?

ranqingfa 发表于 2015-12-25 11:36:44

情仇 发表于 2015-12-22 08:13 static/image/common/back.gif
现在应该怎么玩?

你不是电子专业的吧 或者没有搞过硬件电路吧

情仇 发表于 2015-12-25 12:31:40

怎么说呢?我电子信息的
页: [1]
查看完整版本: 手势控制的小车