亿迅智能制造网
工业4.0先进制造技术信息网站!
首页 | 制造技术 | 制造设备 | 工业物联网 | 工业材料 | 设备保养维修 | 工业编程 |
home  MfgRobots >> 亿迅智能制造网 >  >> Manufacturing Technology >> 制造工艺

声变仪(超灵敏气压计)

组件和用品

SparkFun Arduino Pro Mini 328 - 3.3V/8MHz
× 1

关于这个项目

简介:

飞行员在飞行过程中使用的仪器 (滑翔机、滑翔伞、悬挂式滑翔机、气球等)帮助找到热气流的核心,更好地爬升空气。

简要说明:

这是一个非常灵敏的气压计,会发出声音 当攀爬(上升)和下沉(下降)时。声音是简单的哔哔声,每秒,或者在爬升期间每秒两次或更多次(更高的爬升率=更高频率的哔哔声):它非常敏感,它在每秒几厘米(!)后开始发出哔哔声; 你可以试着慢慢抬起你的手臂 手持 Vario 以获得声音。在下沉速率的情况下,它会以 -1 m/sec 或更多的速度发出长(连续)的蜂鸣声。

组件列表:

  • Arduino Pro Mini 3.3v 8 Mhz 作为 MCU
  • GY-63 (MS5611) 气压传感器 3.3v
  • 拨码开关 8
  • 蜂鸣器(使用内部振荡器激活)
  • 多路复用器 8x1 4051 3.3v
  • LiPo 电池 1s 3.7v 350mAh + 10cm 红/黑线和 M+F 连接器
  • 升压模块 + USB LiPo 充电器,来自 AZDelivery 的 TP5400;
  • 几个电阻器,8x4.7k 网络电阻,220、2x10k 和电容器 47uF、470uF
  • 自恢复保险丝 0.5A
  • 小塑料 ABS 黑盒子,尺寸 78x39x22 毫米
  • 滑动开关
  • 6 针插头母连接器(用于 FTDI)
  • 17 针公头(2x、2x、2x、2x、2x、4x、1x、1x 和 1x)
  • 4 针公头 90° 用于 P 传感器电路
  • 30 厘米硬线,塑料包覆,用于跳线和连接
  • 绿线

上面的Fritzing示意图显示了一切 你需要建立电路。请注意黑色开关正下方的棕色“陶瓷电容器”是一个自恢复保险丝(我还没有找到合适的设计)。我用一个电阻网络代替了 8 个电阻器,它包括 8 个 4.7K 欧姆,所有电阻都在里面;看下图找到了,很难找到,蓝色拨码开关顶部的黑色那个,它有九个引脚,一个公共的,其他八个为电阻器。供下载的 Fritzing 原理图文件如下。

拨码开关的含义:

我喜欢使用蓝色拨码开关 , 8 x 非常小的开/关开关在一个彩色外壳中,用于选择和更改 Vario 功能的参数。这是上面显示的这些参数的表格,在此解释如下:

  • 1 - 未使用
  • 2 - 音量低或高
  • 3 和 4 - 下沉警报米/秒:-999 -1 -2 -3
  • 5 和 6 - 蜂鸣频率 Hz:+1 +1.5 +2 +3
  • 7 和 8 - 灵敏度 m/sec:+0.0 +0.1 +0.2 +0.5

引脚 1 未使用 ,任何位置,开或关,都不会改变任何东西。

引脚 2 改变音量 蜂鸣器的;它是电动的:当引脚在它上面时,它会使与蜂鸣器串联的电阻短路,让更多的电流通过,以获得更高音量的蜂鸣声。

引脚 3 和 4 设置下沉电平 (向下)Vario 将在其下方播放 beeeeeeeeep;管脚为二进制码,2位,4个设置:00=0, 01=1, 10=2 11=3;您可以将下沉警报设置为 -999 m/sec(这意味着没有限制,它永远不会发出哔哔声),引脚 3=off 和 pin 4=off(二进制 00);您可以使用引脚 3=off/4=on、3=on/4=off 和 3=on/4=on 将其他值分别设置为 -1、-2 或 -3 m/sec。例如,在位置 2,Vario 只会在下沉速度超过 -2 m/sec 时发出哔哔声。为了进行测试,您应该尝试使用电梯……从 3 楼下降到 0 楼,或者快速运行梯级……

Pin 5 和 6 设置蜂鸣频率 ,它们作为二进制代码一起工作,如上面对其他几个引脚的解释;在相同的爬升速度下,设置为 +2Hz 将比设置为 +1Hz 更快。有些人喜欢发出缓慢的哔哔声和更少的“压力”:-)

引脚 7 和 8 设置仪器灵敏度 :+0.0 表示上升运动时的最大灵敏度,需要小于 10cm/sec 的速度才能发出哔哔声;在这个位置,仪器有时会发出哔哔声,甚至稳定到位,捕捉到非常小的压力变化(即关闭房间的门可以稍微增加气压);它也能捕捉到正常的电子“噪音”,但非常稳定和有用。在第 4 个位置,我们有 +0.5 m/sec 的灵敏度,对气压变化的敏感度明显较低,您需要“更多”的速度上升爬升高度以获得哔哔声。为了进行测试,您应该尝试使用电梯...从 0 层到 3 层...

从电子电路的角度来看,引脚1和3-8通过多路复用器4051芯片类比读取,然后软件决定是否打开或关闭,值> 512或不:它有8个输入到1个公共连接到 Arduino 的端口作为输入。为了选择 8 个端口中的哪一个读取拨码开关的开/关位置,MCU (Arduino) 在输出中设置 3 个您已经知道的位:000、001、010、011、100、101、110, 111(0、1、2、3、4、5、6、7 =8 个端口 =8 个开/关开关)。查看“readDIPswitch()”函数的代码。

注意电池:

两个 10k 电阻与 47uF 电容器一起用作分压器来测试电池电压。 众所周知,锂聚合物电池在低于 3.3v 放电时很重要 出于这个原因,每 10 秒(BATTinterval)调用函数“checkBATT()”,如果电压低,蜂鸣器会在一秒钟内发出 6 声短促的蜂鸣声通知您。不用等太久就关机,赶紧充电!

记住在盒子上至少打一个孔让空气通过以改变传感器压力是非常重要的。如图所示,我做了两个孔:一个用于聆听蜂鸣器的哔哔声,一个用于查看连接到 micro USB 电缆和充电器时的充电状态。啊,是的,它也是微型 USB 的另一个孔。有孔的变率计不再防水......

绿色绳索是为了安全地将它挂在船上的某个地方:绝对不要松开它!

印刷电路板:

由于这个原因,我使用了单面 PCB,我不得不包括一些跳线 (虚线的)来解决整个电路的路线。在这里是组件面,但在下面有文件、组件和焊接面,镜像,用于通过激光打印机在“黄色”或“蓝色”纸张上下载和打印。我用的是黄色的,但他们说蓝色更好(价格更高)。打印时记得禁用省墨设置,改用 1200 dpi 分辨率以获得真正的深黑色效果。从魔术贴到PCB的碳粉转移过程是通过使用热铁完成的......印刷两个PCB面使项目变得“专业”。

使用了十几个 Arduino 引脚。 不需要焊接未使用的引脚 并且不需要:让他们自由。将 6 针母头放在 Mini Pro 的上表面,以便将来需要时连接 FTDI 接口以进一步更新软件。

USB 升压电源电路 倒置放置。为了将其固定到位,请使用两个坚固的针脚,用于 Arduino 的普通公针脚,但没有塑料带,在写有“电源 USB”的 USB 连接器旁边:使用焊料将它们放在一起,两个针脚和 USB 连接器。 3 根线将 Gnd-、Batt+ 和 Out+ 端子连接到该电路。

气压传感器:

GY-63(MS5611)气压传感器,PCB上的P-Sensor,封装在一个小电路板中,Arduino通过i2c总线与它通信。使用很简单,里面还有一个我没用过的温度传感器。

程序调用作为软件核心的“readPSensor()”函数。我们需要的是相对变化 高度,函数多次读取 每秒并在 PrexTotal 中收集;每半秒 (PrexInterval) 计算高度的平均变化并继续发出哔哔声 或长 beeeeeeeep 考虑拨码开关设置。这种简单的数据过滤方式就足够了;我尝试了有趣的卡尔曼滤波方式,以及复杂的 Madgwick 和 Mahony 滤波算法,但对这个项目没有明显的好处。

更新/提示:

仅此而已。 我真的很喜欢这个项目!也这样做! :-)

马可·宗卡

代码

  • 声变仪代码
声变仪代码Arduino
/* 此草图用作滑翔伞的变量计,作者 Marco Zonca,2020 Arduino MiniPro 3.3 作为 CPU、GY-63 (MS5611) 气压传感器、8 x 拨码开关、蜂鸣器、Mux 4051、lipo 1s 3.7v 350mA、3.7 v -> 5v 升压 + lipo usb 充电器; DipSwitch:1=未使用 2=hw 低/高蜂鸣器音量 3=\ sink 警报:OFF -1.0 -2.0 -3.0 m/sec 4=/ 5=\ 频率蜂鸣声:+1.0 +1.5 +2.0 +3.0 Hz 6=/ 7=\ 灵敏度:+0.0 +0.1 +0.2 +0.5 m/sec 8=/ */#include #include const int muxIOpin =15;const int vbattPin =14;const int muxbit0 =4;const int muxbit1 =5;const int muxbit2 =6;const int buzzerPin =7;const int DIPSWinterval =5000;const int BATTinterval =10000;const int PrexInterval =500;const boolean isDebug =5;float ];浮动频率[5];浮动sinkalarm[5];long n=0;boolean dipswitch[9];String dips;unsigned long prevDIPSWmillis =0;unsigned long prevBATTmillis =0;float n1=0;float n2=0; float SensorVBatt=0;double referencePressure =0;unsigned long prevPrexMillis =0;unsigned long currPrexMillis =0;double realPressure =0;float absoluteAltitude =0;float relativeAltitude =0;float avgAltitude =0;float avgPrevAltitude =0;long PrexCounter =0;float PrexTotal =0;float PrexVario =0;boolean 是FirstCalc =true;MS5611 psensor; // 压力sensorvoid setup() { Serial.begin(9600); pinMode(muxbit0,输出); pinMode(muxbit1,输出); pinMode(muxbit2,输出); pinMode(蜂鸣器Pin,输出);感性[4]=0;感性[3]=0.5;感性[2]=0.2;感性[1]=0.1;感性[0]=0.0;频率[4]=0;频率[3]=3.0;频率[2]=2.0;频率[1]=1.5;频率[0]=1.0;下沉警报[4]=0; sinkalarm[3]=-3.0; sinkalarm[2]=-2.0; sinkalarm[1]=-1.0; sinkalarm[0]=-999.9;读取拨码开关(); psensor.begin();参考压力 =psensor.readPressure(); if (isDebug ==true) Serial.println("Vario is on"); NewTone (buzzerPin,4);延迟(750); noNewTone();} // 结束 setup()void loop() { readPSensor(); if ((prevDIPSWmillis+DIPSWinterval) =PrexInterval) { avgAltitude =PrexTotal / PrexCounter; // 平均值 if (isFirstCalc ==true) { avgPrevAltitude=avgAltitude; isFirstCalc=false; } PrexVario=(avgAltitude-avgPrevAltitude) * (1000/PrexInterval); // vario mSec if ((PrexVario <=sensibility[4]) &&(PrexVario>=sinkalarm[4])) { noNewTone(); } if ((PrexVario> sensibility[4])) { // 解除哔哔声 + NewTone (buzzerPin,((int)(PrexVario+frequency[4]))); } if ((PrexVario  512)dipswitch[n]=false; // 读取选定的端口 else dipswitch[n]=true; if (isDebug ==true) { if (dipswitch[n]==false) Serial.print("0");否则 Serial.print("1"); } } // 结束 if (isDebug ==true) Serial.println(""); s=0;如果 (dipswitch[7]==true) s =s + 2;如果 (dipswitch[8]==true) s =s + 1;感性[4]=感性[s]; if (isDebug ==true) { Serial.print("Sensibility="); Serial.println(敏感性[4]); } s=0;如果 (dipswitch[5]==true) s =s + 2; if (dipswitch[6]==true) s =s + 1;频率[4]=频率[s]; if (isDebug ==true) { Serial.print("Frequency="); Serial.println(频率[4]); } s=0;如果 (dipswitch[3]==true) s =s + 2;如果 (dipswitch[4]==true) s =s + 1; sinkalarm[4]=sinkalarm[s]; if (isDebug ==true) { Serial.print("SinkAlarm="); Serial.println(sinkalarm[4]); }} // 结束 readDIPswitch()void checkBATT() { // 检查 lipo/liion 电池电压 n1 =analogRead(vbattPin); n2=(((6.60 * n1) / 1023.00)); SensorVBatt=(n2 + ((n2 * 0.0) /100)); // 任意校正(未激活 =0.0%) if (SensorVBatt <=3.4) { NewTone (buzzerPin,6,1000); } if (isDebug ==true) { Serial.print("VBatt="); Serial.println(SensorVBatt); }} // 结束 checkBATT()

定制零件和外壳

示意图

vario_R1XzPifiX4.fzz

制造工艺

  1. 使用 Secret Manager 存储和管理敏感数据
  2. 灵敏电压检测器
  3. 敏感音频检测器
  4. 无液气压计
  5. 检测晶体管缺陷的灵敏方法
  6. 超薄高灵敏度应变传感器
  7. 空间敏感光接收器
  8. Amstrong® Ultra 650MC
  9. Amstrong® Ultra 650MCT
  10. Amstrong® Ultra 700MC
  11. Amstrong® Ultra 700MCT
  12. 超高纯铬 (UHP Cr)>99.95%