云天 发表于 2020-3-12 14:31:33

【自制无人机】“辛”路历程(七)L289N_PWM MPU6050模块

【前言】
由于淘的桨叶还没有到, 就不用无刷电机来试了。准备用普通电机+L289N电机驱动板+闺女的玩具无人机上的桨叶(无人机已被我偷偷拆了,拆解视频以后放出,上面的飞控还没有研究)。
关于 L289N的使用,请参考下面的帖子:
Arduino利用三种方法产生PWM波使用L298N驱动电机(附电路连接图和pwm详解)

【测试一】


利用角度传感器,测试Leonardo+L289N,利用PWM控制电机转速。

https://v.youku.com/v_show/id_XNDU4NDExNDU3Mg==.html

(一只手操作,我好难!)

int input1 = 5; // 定义uno的pin 5 向 input1 输出
int input2 = 6; // 定义uno的pin 6 向 input2 输出
int enA = 10; // 定义uno的pin 10 向 输出A使能端输出
int val;
void setup() {   
   pinMode(input1,OUTPUT);
   pinMode(input2,OUTPUT);
   pinMode(enA,OUTPUT);
   Serial.begin(9600);
}

void loop() {
   digitalWrite(input1,HIGH); //给高电平
   digitalWrite(input2,LOW);//给低电平
   val=analogRead(A0);

   val=map(val,0,1023,0,254);
   analogWrite(enA,val);
   Serial.println(val);
}

【测试二】

Arduino Leonardo与Arduino Uno外形相同。Arduino Uno配备的是ATmega385芯片,而Leonardo配备了atmega32u4芯片。它有20个数字输入/输出引脚,20个引脚中,7个引脚可作为PWM输出,12个引脚可作为模拟输入,同时它板载了一个微型USB接口,一个电源插口,一个ICSP端口和一个复位按钮。

连接Arduino Leonardo和MPU6050


Arduino uno与mpu6050接线图

https://www.arduino.cn/data/attachment/forum/201809/07/123835jtflk2qq9zz9g9ma.jpg
//calibrate_air_mouse
#include <Wire.h>
#include <I2Cdev.h>
#include <MPU6050.h>

MPU6050 mpu;
int16_t ax, ay, az, gx, gy, gz;
int vx, vy;
void setup() {
Serial.begin(9600);
Wire.begin();
mpu.initialize();
if (!mpu.testConnection()) { while (1); }
}
void loop() {
mpu.getMotion6(&ax, &ay, &az, &gx, &gy, &gz);
vx = (gx+300)/150;// change 300 from 0 to 355
vy = -(gz-100)/150; // same here about "-100"from -355 to 0
Serial.print("gx = ");
Serial.print(gx);
Serial.print(" | gz = ");
Serial.print(gz);

Serial.print("      | X = ");
Serial.print(vx);
Serial.print(" | Y = ");
Serial.println(vy);



delay(20);
}
使用MPU6050模块,如果arduino编译时 找不到I2Cdev.h,一直提示出现说fatal error: I2Cdev.h: No such file or directory,请按如下方法处理:
1、在github上下载并解压i2cdevlib后打开文件夹
2、打开里面的arduino文件夹
3、在那个arduino文件夹里还有一个名字叫i2cdev的文件夹,那个才是真正的库
4、把那个库添加到arduino的库里就能用了


编译时 找不到MPU6050.h同理

如果网站github访问不了或比较慢,可以使用修改Hosts方法,根据以下目录,用记事本打开hosts文件,将--------下面的内容粘贴到文件中,保存后,在运行(win键+R),输入CMD,命令行中输入ipconfig /flushdns,回车,完成刷新DNS网页缓存:
Windows hosts目录:C:\windows\system32\drivers\etc\
DNS网页缓存刷新CMD指令:ipconfig /flushdns
----------------------------------------------------------------------------
# Github
192.30.253.113 github.com
151.101.185.194 github.global.ssl.fastly.net
203.98.7.65 gist.github.com
13.229.189.0 codeload.github.com
185.199.109.153 desktop.github.com
185.199.108.153 guides.github.com
185.199.108.153 blog.github.com
18.204.240.114 status.github.com
185.199.108.153 developer.github.com
185.199.108.153 services.github.com
192.30.253.175 enterprise.github.com
34.195.49.195 education.github.com
185.199.108.153 pages.github.com
34.196.237.103 classroom.github.com





【测试三】
可以测试一下,它提供的MPU6050有线控制电脑鼠标。代码测试有效。
//calibrate_air_mouse
#include <Wire.h>
#include <I2Cdev.h>
#include <MPU6050.h>
#include <Mouse.h>
MPU6050 mpu;
int16_t ax, ay, az, gx, gy, gz;
int vx, vy;
void setup() {
Serial.begin(9600);
Wire.begin();
mpu.initialize();
if (!mpu.testConnection()) { while (1); }
}
void loop() {
mpu.getMotion6(&ax, &ay, &az, &gx, &gy, &gz);
vx = (gx+300)/150;// change 300 from 0 to 355
vy = -(gz-100)/150; // same here about "-100"from -355 to 0
Serial.print("gx = ");
Serial.print(gx);
Serial.print(" | gz = ");
Serial.print(gz);

Serial.print("      | X = ");
Serial.print(vx);
Serial.print(" | Y = ");
Serial.println(vy);

Mouse.move(vx, vy);

delay(20);
}

DFHk-0ykaN8 发表于 2020-3-12 18:26:08

沙发不错真香

wangyirun 发表于 2020-3-13 15:03:01

这个电机太大太重了吧

云天 发表于 2020-3-13 17:43:01

wangyirun 发表于 2020-3-13 15:03
这个电机太大太重了吧
测试用,旧电机,好像原来是一个刮胡刀上的。

wangyirun 发表于 2020-3-14 09:49:51

云天 发表于 2020-3-13 17:43
测试用,旧电机,好像原来是一个乱胡刀上的。

哦,好的,谢谢!

gada888 发表于 2020-3-25 14:37:54

支持

20060606 发表于 2020-10-5 07:45:23

太重了,可能飞不起来
页: [1]
查看完整版本: 【自制无人机】“辛”路历程(七)L289N_PWM MPU6050模块