模吧

 找回密码
 立即注册

QQ登录

只需一步,快速开始

手机号码,快捷登录

5896查看 | 25回复

DIY基于arduino的气压式升降提示模块[转]

[复制链接]
发表于 2016-11-22 20:15:01 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
本帖最后由 Guc 于 2016-11-23 08:22 编辑

大家好,今天我是搬运工Guc。
在RC Groups看到这个DIY,觉得挺有意思的,所以转来与大家分享,原作者Kapteinkuk。
这个模块主要用于提示航模当前的升降状态,通过不同的声音回传,让操作者有直观的感受,以便更好的对航模进行操作。
主要用到:arduino nano、气压计模块ms5611、发射器AM-rt14-433、接收器RRQ3-433.92、电容若干、电阻若干、电源5v模块等。
先看个视频:

下面是DIY过程中的图片及电路图:
DIY基于arduino的气压式升降提示模块[转] DIY,接收器,Arduino模块,arduino,主要用于 作者:Guc 7508
做好的模块
DIY基于arduino的气压式升降提示模块[转] DIY,接收器,Arduino模块,arduino,主要用于 作者:Guc 902
机载模块和地面模块的电路图,电路图中注释了所需要的原件
DIY基于arduino的气压式升降提示模块[转] DIY,接收器,Arduino模块,arduino,主要用于 作者:Guc 7270
机载模块背面,使用了一个33uf的钽电容
DIY基于arduino的气压式升降提示模块[转] DIY,接收器,Arduino模块,arduino,主要用于 作者:Guc 817
气压计模块通过I2C通信
DIY基于arduino的气压式升降提示模块[转] DIY,接收器,Arduino模块,arduino,主要用于 作者:Guc 8956
机载发射模块
DIY基于arduino的气压式升降提示模块[转] DIY,接收器,Arduino模块,arduino,主要用于 作者:Guc 7562
发射模块背面
DIY基于arduino的气压式升降提示模块[转] DIY,接收器,Arduino模块,arduino,主要用于 作者:Guc 1770
地面模块
DIY基于arduino的气压式升降提示模块[转] DIY,接收器,Arduino模块,arduino,主要用于 作者:Guc 6013
地面模块背面
DIY基于arduino的气压式升降提示模块[转] DIY,接收器,Arduino模块,arduino,主要用于 作者:Guc 4543
5v供电和音频输出,原作者应该利用其他拆机设备

第一个视频可能看的不是很明白,不怕还有第二个视频:

我们来看看代码:
// All code by Rolf R Bakke, Oct 2012


#include <Wire.h>

const byte led = 13;

unsigned int calibrationData[7];
unsigned long time = 0;

float toneFreq, toneFreqLowpass, pressure, lowpassFast, lowpassSlow ;

int ddsAcc;


void setup()
{
  Wire.begin();
  Serial.begin(115200);
  setupSensor();

  pressure = getPressure();
  lowpassFast = lowpassSlow = pressure;
}


void loop()
{
  pressure = getPressure();

  lowpassFast = lowpassFast + (pressure - lowpassFast) * 0.1;
  lowpassSlow = lowpassSlow + (pressure - lowpassSlow) * 0.05;

  toneFreq = (lowpassSlow - lowpassFast) * 50;

  toneFreqLowpass = toneFreqLowpass + (toneFreq - toneFreqLowpass) * 0.1;

  toneFreq = constrain(toneFreqLowpass, -500, 500);

  ddsAcc += toneFreq * 100 + 2000;

  if (toneFreq < 0 || ddsAcc > 0)
  {
    tone(2, toneFreq + 510);  
  }
  else
  {
    noTone(2);
  }

  ledOff();
  while (millis() < time);        //loop frequency timer
  time += 20;
  ledOn();
}


long getPressure()
{
  long D1, D2, dT, P;
  float TEMP;
  int64_t OFF, SENS;

  D1 = getData(0x48, 10);
  D2 = getData(0x50, 1);

  dT = D2 - ((long)calibrationData[5] << 8);
  TEMP = (2000 + (((int64_t)dT * (int64_t)calibrationData[6]) >> 23)) / (float)100;
  OFF = ((unsigned long)calibrationData[2] << 16) + (((int64_t)calibrationData[4] * dT) >> 7);
  SENS = ((unsigned long)calibrationData[1] << 15) + (((int64_t)calibrationData[3] * dT) >> 8);
  P = (((D1 * SENS) >> 21) - OFF) >> 15;

  //Serial.println(TEMP);
  //Serial.println(P);

  return P;
}


long getData(byte command, byte del)
{
  long result = 0;
  twiSendCommand(0x77, command);
  delay(del);
  twiSendCommand(0x77, 0x00);
  Wire.requestFrom(0x77, 3);
  if(Wire.available()!=3) Serial.println("Error: raw data not available");
  for (int i = 0; i <= 2; i++)
  {
    result = (result<<8) | Wire.read();
  }
  return result;
}


void setupSensor()
{
  twiSendCommand(0x77, 0x1e);
  delay(100);

  for (byte i = 1; i <=6; i++)
  {
    unsigned int low, high;

    twiSendCommand(0x77, 0xa0 + i * 2);
    Wire.requestFrom(0x77, 2);
    if(Wire.available()!=2) Serial.println("Error: calibration data not available");
    high = Wire.read();
    low = Wire.read();
    calibrationData = high<<8 | low;
    Serial.print("calibration data #");
    Serial.print(i);
    Serial.print(" = ");
    Serial.println( calibrationData );
  }
}


void twiSendCommand(byte address, byte command)
{
  Wire.beginTransmission(address);
  if (!Wire.write(command)) Serial.println("Error: write()");
  if (Wire.endTransmission())
  {
    Serial.print("Error when sending command: ");
    Serial.println(command, HEX);
  }
}


void ledOn()
{
  digitalWrite(led,1);
}


void ledOff()
{
  digitalWrite(led,0);
}

arduino固件下载: DIY基于arduino的气压式升降提示模块[转] DIY,接收器,Arduino模块,arduino,主要用于 作者:Guc 5434 sailplane-variometer.zip (1.18 KB, 下载次数: 1)
原链接:https://www.rcgroups.com/forums/showthread.php?t=1749208
这个模块我也没有做过,因为用到的东西卖的有点贵,有想法用图传的音频通道来实现该功能,敬请期待!
发表于 2016-11-22 20:17:22 | 显示全部楼层
顶贴是一种美德
发表于 2016-11-22 20:31:03 | 显示全部楼层
感谢楼主分享                                         
发表于 2016-11-22 21:01:26 | 显示全部楼层
看不懂還是感谢楼主分享
发表于 2016-11-22 22:55:12 | 显示全部楼层
这个貌似有用哦
发表于 2016-11-23 00:21:44 | 显示全部楼层
路过顶起
发表于 2016-11-23 00:55:35 | 显示全部楼层
666666666666666666666666666
发表于 2016-11-23 06:55:09 | 显示全部楼层
感谢,学习一下。
发表于 2016-11-23 08:04:00 | 显示全部楼层
路过,学习了。
发表于 2016-11-23 08:31:00 | 显示全部楼层
楼主辛苦,谢谢分享。
发表于 2016-11-24 00:08:09 | 显示全部楼层
不懂帮顶
 楼主| 发表于 2016-11-24 08:33:23 | 显示全部楼层
笑里藏刀 发表于 2016-11-22 20:15 DIY基于arduino的气压式升降提示模块[转] DIY,接收器,Arduino模块,arduino,主要用于 作者:Guc 6032
顶顶顶,发发发

谢谢捧场
 楼主| 发表于 2016-11-24 08:34:18 | 显示全部楼层
tjcdq 发表于 2016-11-24 00:08 DIY基于arduino的气压式升降提示模块[转] DIY,接收器,Arduino模块,arduino,主要用于 作者:Guc 8521
不懂帮顶

感谢帮顶
 楼主| 发表于 2016-11-24 08:34:54 | 显示全部楼层
独行者 发表于 2016-11-23 08:31 DIY基于arduino的气压式升降提示模块[转] DIY,接收器,Arduino模块,arduino,主要用于 作者:Guc 6805
楼主辛苦,谢谢分享。

一起分享
 楼主| 发表于 2016-11-24 08:35:12 | 显示全部楼层
hhy19791010 发表于 2016-11-23 00:55 DIY基于arduino的气压式升降提示模块[转] DIY,接收器,Arduino模块,arduino,主要用于 作者:Guc 9379
666666666666666666666666666

66666666666666666
 楼主| 发表于 2016-11-24 08:35:31 | 显示全部楼层
武杰杰 发表于 2016-11-23 00:21 DIY基于arduino的气压式升降提示模块[转] DIY,接收器,Arduino模块,arduino,主要用于 作者:Guc 2306
路过顶起

谢谢帮顶
发表于 2016-11-24 09:24:11 | 显示全部楼层
牛逼d(^_^o)
 楼主| 发表于 2016-11-24 09:36:58 | 显示全部楼层
m9595 发表于 2016-11-24 09:24 DIY基于arduino的气压式升降提示模块[转] DIY,接收器,Arduino模块,arduino,主要用于 作者:Guc 6748
牛逼d(^_^o)

外国模友确实厉害
发表于 2017-2-16 16:06:20 | 显示全部楼层
有创意,
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|关于模吧|APP下载|广告报价|小黑屋|手机版|企业会员|商城入驻|联系我们|模吧 ( 冀公网安备13080502000084号 )

© 2013-2020 Moz8.com 模吧,玩出精彩!