当前位置:   article > 正文

Arduino云台,关键是可以调角度!!!基于MPU6050,用卡尔曼滤波进行角度处理,保证你能一次过学会从硬件到软件的制做!!!(第一节)_esp32 mpu6050 卡尔曼滤波 输出角度

esp32 mpu6050 卡尔曼滤波 输出角度

哈哈哈,我又来啦!!!

   大家好啊!我是菜鸟啊啊啊,今天给大家带来的是Arduino云台,云台分为处理部分和执行部分,执行部分只需要用电机驱动就可以了,但是菜鸟这边只不过是用舵机就可以了因为经费这东西不支持我大手大脚,所以才选用了较为便宜的SG90舵机,下面是实物图:要是想要扭矩大一些的话可以选用右图的这种,因为它的规格是相同的所以他们是可以通用的之后我会吧之前设计的云台模型开源也是可以用的!但是假如你是想要超大扭矩的话,那可能无刷电机会更适合你!!!但是无刷电机也有不好的地方,就是它需要DC12V供电,还需要磁编码器来配合使用!!!(既然大家感兴趣我会专门出一篇文章来讲讲),而这里我推荐大家用MG90S舵机,因为它的齿轮是金属齿轮所以比较稳定,玩过航模的都知道扫齿之王是谁(MG90),但这里我只能说:各位看官自吧,因为萝卜白菜各有所爱!

 

讲完了执行部分,再让我们来看看舵机的控制原理;

其实舵机这样的伺服系统通常由小型电动机电位计嵌入式控制系统和变速箱组成,

电机输出轴的位置由内部电位计不断采样测量,并与Arduino设置的目标位置进行比较;

根据相应的偏差,控制设备会调整电机输出轴的实际位置,使其与目标位置匹配。这样就形成了闭环控制系统,总之就像一个电机在没有接入传感器前会不断的旋转下去,但当接入传感器后就可以控制电机想转到那就转到哪,随时控制转向和起停,当接入Arduino后甚至可以让它旋转到固定的角度。

那我们现在了解了舵机的控制原理,那就来看看怎么样Arduino控制舵机旋转吧,首先我们需要用的库只有<Servo.h>这是舵机库,因为考虑到有些人没有学过,或是自学不知道怎么下载库,就因为这一下就放弃了不干了,所以我找了两篇Arduino库的下载文章,不会的可以自己看一看,学一学,毕竟我之前也是自学的也有想放弃的念头。

Arduino老版本(1.9.8):Arduino库安装方法 - 哔哩哔哩

 Arduino IDE如何安装库文件_Madon_G的博客-CSDN博客_arduino安装库文件

Arduino新版本(2.0.1)安装方式和老版几乎一样但首次安装可能要调语言(有需要我会出教程)

Arduino一些官网没有的库安装过程:为Arduino IDE安装添加库 – 太极创客

好了现在现在我们讲讲Arduino控制舵机的程序部分,来来来就看一看,真的只是一点点,不是亿点点,如下:

  1. #include<Servo.h>//引用<Servo.h>库
  2. Servo myservo;
  3. void setup(){
  4. myservo.attach(A0);//设置舵机的(引脚端口)
  5. }
  6. void loop(){
  7. myservo.write(90);//让舵机旋转到90度
  8. delay(15);//等待舵机旋转到对应角度
  9. }

假如是两个舵机就是这样子(和上面的几乎一样只不过是增加了一个引脚端口和对另外一个 舵机的定义;如下

  1. #include<Servo.h>//引用<Servo.h>库
  2. Servo myservo;
  3. Servo myservo_1;
  4. void setup(){
  5. myservo.attach(A0);//设置舵机的(引脚端口)
  6. myservo_1.attach(A1);//设置舵机的(引脚端口)
  7. }
  8. void loop(){
  9. myservo_1.write(90);//让舵机旋转到90度
  10. myservo.write(90);//让舵机旋转到90度
  11. delay(15);//等待舵机旋转到对应角度
  12. }

好了这就是舵机的控制代码,也是最简单的,你可以通过自己的改动来慢慢学习舵机,慢慢的增加舵机数量,实现不同的功能;

下面是重点:

执行部分我们已经讲完了,下面来讲讲主控部分的算法和姿态的解析;

首先让我们来看看arduino是怎么去和电脑通信的,怎么把传感器读取的数据显示在电脑上的,首先我们要明白什么是串口通信;这里运用到CSDN博主「TonyIOT」博主的话(如有侵权,马上删除)

在PC机上最常见的串行通讯协议是RS-232串行协议,而各种微控制器(单片机)上采用的是TTL串行协议,两者电平不同,需要经过相应电平转换才能进行相互通讯。

Arduino Uno R3开发板上,硬件串口位于Rx(0)和Tx(1)引脚上,Arduino的USB口通过转换芯片与这两个引脚连接。该转换芯片会通过USB接口在PC机上虚拟出一个用于Arduino通讯的串口,我们下载程序也是通过串口进行的。

其实串口通信是很简单的东西只不过是它所包含的东西比较多,可以实现的功能比较多而已,只要我们把它所包含的基础东西搞懂后,就可以灵活运用好它;

因为他所包含的基础性东西实在太多所以在这里我推荐大家去看看CSDN博主「TonyIOT」博主的串口通信的基础性文章,网址:Arduino基础入门篇23—串口通讯_TonyIOT的博客-CSDN博客_arduino串口通信

因为在这单单的举一个例子没有太大的意义所以我将结合下文的读取电位器来帮助大家理解代码!

首先我们要知道电位器是什么电位器其实就是电阻,但电阻的阻值是固定的而电位器的电阻值是可以调的,但就是因为电位器的特性是这样所以我们可以用Arduino的A0-A5引脚(A0-A5一般都可以读取模拟量的值)来读取电位器的模拟量,因为大家有可能都有不同的Arduino主板,所以我把市面上比较主流的开发板的引脚图都放出来;如图所示

左边为ArduinoNUOR3,右边为ArduinoNANO

 

代码非常简单我结合了串口通信的程序,大家可以慢慢了解了解,最后读取的模拟量的值需要我们打开串口监视器来观看,代码如下:

  1. #include<Servo.h>
  2. int val;//定义函数值val
  3. void setup() {
  4. Serial.begin(115200);//设置串口通信频率为115200
  5. }
  6. void loop() {
  7. val = analogRead(A1);//设置引脚A1读取的值为val
  8. val = map(val, 0, 1023, 0, 180);//把A1读取的值赋值给val
  9. //这里需要大家自己测量编码器的最大电阻值和最小电阻(0,1023,0,180)分别对应的是(Rmin,Rmax,角度min,角度max)
  10. Serial.print(val);//串口监视器打印val的值
  11. }

把舵机和电位器结合到一起就可以用电位器控制舵机了,代码如下:

  1. #include <Servo.h>
  2. int val;
  3. Servo myservo;
  4. void setup() {
  5. myservo.attach(A0);
  6. Serial.begin(115200);
  7. }
  8. void loop() {
  9. val = analogRead(A1);
  10. val = map(val, 0, 1023, 0, 180);
  11. myservo.write(val);
  12. delay(15);
  13. }

经过学习我相信大家应该可以理解了吧,那我就不加注释了!!!

好了,本章节到此先告一段落,这期我们讲到了执行端的执行器的选择,和执行器的控制方法,还讲到了什么是串口通信,以及怎么去读取模拟量显示在电脑上,和怎么去通过电位器去控制舵机旋转,这就是本章节的所有内容了,喜欢的话可以点赞,收藏,转发,订阅

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Gausst松鼠会/article/detail/575002
推荐阅读
相关标签
  

闽ICP备14008679号