风洞稳定小球系统(一)----- 基于MATLAB实现的Kalman filter滤波距离检测
手上在做一个风洞
让个乒乓球悬浮在固定位置

大家好我就是那个灵魂画师
总的来说里面要用到测距,Kalman filter,
然后是PID,输出用PWM驱动,
还得加一块驱动板,听起来是蛮简单的
希望不要烂尾。
对了这次用arduino,毕竟第一次用。
好我们开始制作
一、传感器
这里是第一步
我挑好了传感器SRF05超声波
连接就是
VCC ------------5V
GND ------------GND
PIN ECHO -----D4
PIN TRIG ----- D5
int inputPin=4; // define ultrasonic signal receiver pin ECHO to D4 int outputPin=5; // define ultrasonic signal transmitter pin TRIG to D5 void setup() { Serial.begin(9600); pinMode(inputPin, INPUT); pinMode(outputPin, OUTPUT); } void loop() { 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.println(distance); //Ourput distance delay(50); }
然后串口传给我了数据,我得测试一下

看起来效果还是有的
存到ss.txt里
二、kalman filter
ex=importdata('ss.txt')
plot(ex)
prevData=0.0;
p=10;
q=0.0001;
r=0.05;
kGain=0;
outData=[];
for i=1:length(ex)
p=p+q;
kGain=p/(p+r);
temp=ex(i);
temp=prevData+(kGain*(temp-prevData));
p=(1-kGain)*p;
prevData=temp;
outData(i)=temp;
end
plot(outData);
plot(ex);

plot(outData);

感觉参数调整好了,使图像状态曲线平滑了
写到arduino里。
不想做机器学习的硬件工程师不是好的CCIE
浙公网安备 33010602011771号