本帖最后由 xmile 于 2015-5-8 19:58 编辑
一、前言
那个mini小四轴被我玩坏了,第一次试飞的时候由于那个蓝牙响应不知为何突然抽风了,搞得我以为马力不足,于是一下子推高了油门,结果它一下子飞到很高的地方,然后又失速掉了下来,把那个盖子摔坏了。
所以我觉得,这个落地应该自动控制,万一蓝牙突然又抽风了,那也不至于把飞机搞坏
二、设计
其实也没什么,就是加了个超声波模块而已
连线的话
超声波模块
VCC————————>电源正极
GND————————>电源负极
ECHO————————>D12
TRIG————————>D4
VCC和GND都很好连接,
数字输入引脚D4也比较好找,
数字输入引脚D12
最后至于那个超声波模块怎么固定上去呢就见仁见智,我是用橡皮筋的
本人才疏学浅,九月份才开始玩arduino,所以编程有什么不对望指出
// 设定SR04连接的Arduino引脚
const int TrigPin = 4;
const int EchoPin = 12;
float last_distance,now_distance;
void setup()
{
pinMode(TrigPin, OUTPUT);
pinMode(5, OUTPUT);
pinMode(6, OUTPUT);
pinMode(9, OUTPUT);
pinMode(10, OUTPUT);
// 要检测引脚上输入的脉冲宽度,需要先设置为输入状态
pinMode(EchoPin, INPUT);
// 产生一个10us的高脉冲去触发TrigPin
digitalWrite(TrigPin, LOW);
delayMicroseconds(2);
digitalWrite(TrigPin, HIGH);
delayMicroseconds(10);
digitalWrite(TrigPin, LOW);
// 检测脉冲宽度,并计算出距离
last_distance = pulseIn(EchoPin, HIGH) / 58.00;
delay(500);
}
void loop()
{
// 产生一个10us的高脉冲去触发TrigPin
digitalWrite(TrigPin, LOW);
delayMicroseconds(2);
digitalWrite(TrigPin, HIGH);
delayMicroseconds(10);
digitalWrite(TrigPin, LOW);
// 检测脉冲宽度,并计算出距离
now_distance = pulseIn(EchoPin, HIGH) / 58.00;
if((last_distance-now_distance)>20 and (last_distance-now_distance)<50)//计算下落距离
{
analogWrite(5,127);
analogWrite(6,127);
analogWrite(9,127);
analogWrite(10,127);
}
if((last_distance-now_distance)>50)//计算下落距离
{
analogWrite(5,255);
analogWrite(6,255);
analogWrite(9,255);
analogWrite(10,255);
}
now_distance=last_distance;
delay(500);
}
视频补上:
关于视频我要说明一下,由于不知道为什么换了两次电机总是有一个转速比另外三个慢,所以导致飞的时候总往一边偏
本来理想的情况是它掉下去的一段距离后电机转动减缓下降速度,最理想的是在空中定一段时间,在下降,再定一段时间
以下是完成实物图
|