码迷,mamicode.com
首页 > 其他好文 > 详细

风洞稳定小球系统(二)----- 基于Arduino实现的PID距离PWM控制

时间:2016-06-28 21:53:27      阅读:299      评论:0      收藏:0      [点我收藏+]

标签:

Arduino真的是好用,

已经上瘾。

这次做的是风洞稳定小球系统

一、元件模块

技术分享

Arduino正面

技术分享

Arduino引脚接线

技术分享

驱动板,反正是freescale小破车上用的那款

技术分享

电源。

 技术分享

风洞

技术分享

风扇型号

二、Arduino代码

一言不合就上代码

#include <PID_v1.h>

      int inputPin=4;  // define ultrasonic signal receiver pin  ECHO to D4
      int outputPin=5; // define ultrasonic signal transmitter pin  TRIG to D5
      int pwm = 6;  //pwm输出D6
      int dis=0;
      double  Setpoint, Input, Output;
      PID myPID(&Input, &Output, &Setpoint,0.7,5.3,0.8, DIRECT);
      void setup()
      {
        Serial.begin(9600);
        pinMode(inputPin, INPUT);
        pinMode(outputPin, OUTPUT);
        pinMode(pwm, OUTPUT);
        Setpoint=160;
        Input=150;
        myPID.SetMode(AUTOMATIC);
       }
       
     void loop()
       {
        dis=distanceM();
        Input=255-map(dis,0,45,20,200);
        myPID.Compute();
        analogWrite(pwm, Output);
        Serial.print("  ");
        Serial.print(Input);
        Serial.print("  ");
        Serial.println(Output);
      }

     int distanceM()
     {
        digitalWrite(outputPin, LOW);
        delayMicroseconds(2);
        digitalWrite(outputPin, HIGH); // Pulse for 10μs to trigger ultrasonic detection
        delayMicroseconds(10);
        digitalWrite(outputPin, LOW);  
        int distance = pulseIn(inputPin, HIGH);  // Read receiver pulse time
        distance= distance/58;   // Transform pulse time to distance
        Serial.print(distance);   //Ourput distance                
        delay(50); 
        return distance;
      }

 

之前已经说过连接了

再发一遍

传感器SRF05超声波

 VCC ------------5V

 GND  ------------GND

 PIN  ECHO -----D4
 PIN  TRIG ----- D5

 代码里使用了一个自带库PID_v1.h

myPID(&Input, &Output, &Setpoint,0.7,5.3,0.8, DIRECT);

输入,输出,稳定收敛位置点,Kp,Ki,Kd,直接方式。

 

Input=255-map(dis,0,45,20,200);

这里是一个映射,因为我的传感器放在了风洞的上端

这样距离顶端越近数值就越小,所以需要改个符号。

让它的数值和高度成正比。

而PWM正好是0-255的数值,所以这样改。

PWM的输出脚是D6,

频率是1kHz,虽然频率低了但是还够用。

 

三、参数调试

技术分享

 

接下来用串口数据来看

分别是距离,input,output。

技术分享

 

技术分享

 

我把数据拿下来用matlab来plot

技术分享

 

红色代表高度,还是比较稳定的

黄色就是PWM的值。

因为之前测试传感器非常稳定,

所以数据输入我并没有用Kalman filter来处理。

技术分享

被风扇砍了一刀,

综上,没有烂尾,万岁!

风洞稳定小球系统(二)----- 基于Arduino实现的PID距离PWM控制

标签:

原文地址:http://www.cnblogs.com/MnsterLu/p/5624933.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!