臭氧层是大气中富含臭氧(O3)的部分,这个部分的存在对于地球上的生命至关重要,通过查阅资料知“臭氧层的最大浓度通常发生在平流层的半径20至30公里的范围内,被称为臭氧层最大浓度区。这个区域也被称为臭氧层峰值区”我现在将测量所在地区臭氧峰值的准确高度,则通过GPS模块和MQ131臭氧传感器完成。那为什么要执着计算臭氧层的峰值高度?臭氧峰值高度越低,代表着臭氧层的厚度减少,会导致更多的紫外线辐射到达地表,可能对生物和生态系统造成危害。最近化学课有提及此知识,也引起了本人的兴趣。
作为航空爱好者,总是对天空有着执着。本人现在有一定的单片机基础,理论知识储备相较以前也更加充足......所以,我打算在寒假放飞一个重达1kg,可飞31km的气象气球,主要目的为了探测大气上层臭氧浓度的高低,还有获取影像资料。在这里我借鉴了“星火计划”其中的气象气球尺寸一览表,原文地址星火计划 (用了一个寒假发射的探空气球) - 科创网 (XXXXXXXXXXXX),这是多次修改后的计划流程:
计算参数预估价格→建模仿真计算 →进行设计布局组装→检查气密性,保温性→电路焊接,开发板编程→检查焊线牢固,程序稳定→确定量程范围确定相机画质及位数/角度→确定GPS→确定电源容量(考虑温度,气等因素)→寻找最佳地点→报备当地空管→确认飞行日期→确认气象→到达放地方放行根据GPS,蜂鸣器等回收
1.首先进行大体的计算,了解气球飞行的质量高度等等,方便后面针对这些进行合理化设计
从图中得知总举力F浮=25N
然后由
F=ρVg
得V气=F浮/ρg
最后带入算出V气≈2.5m3
当时我计算止步于此了,居然没有考虑氦气的自身重量等其他因素...
好在最后问了客服,充氦气要4.5m3
探测设备质量不超过1kg即可,降落伞材质选取尼龙的,尼龙的阻力系数取0.3,伞的直径为1.5m就可以了,开伞的想法很简单,我参考了“星火计划”,将降落伞与气球绳索串联起来(如上图),气球炸裂后降落伞受空气作用自动展开,这不但方便,而且开伞率几乎为100%,这种串联的方式还不用担心降落伞给气球带来的阻力
2.获取上层的环境数据影像资料以及找回
这是臭氧传感器器MQ131,通过臭氧的含量(mg/m3)可测出某时刻臭氧浓度的峰值,如下图
商家没有更详细的资料我就自己找到了原厂的说明书↓
平流层臭氧的峰值浓度可高达几百ppm,而MQ131测量范围一般为10-1000ppm,相应的高度通过GPS定位模块得出(精度在10m以内),然后结合同一时刻的GPS测量的高度数据即可测出峰值高度,接下来就改模拟制作一个数据存储装置了:于是我用一块arduino nano,mpu6050(先暂时用mpu6050测验一下,总体换汤不换药),sd读卡模块和一张SD卡组成一个离线记录的装置,最后我会将mpu6050换成测量MQ131臭氧的传感器
先接线,sd卡槽模块接线参考这张图
mpu6050接线就是SCL接A5,SDA接A4,SD内存卡内存是2GB的
这是大体的布局,先这么接着,方便后期调试
总体原理就是由arduino nano读取mpu6050的数据,并且将数据以excl表格格式通过读卡模块保存在sd卡中
经过多次调整,最后总算可以正常地保存在内存卡中了
这是最后得到的数据,我通过折线图表示出来
测试代码如下
#include <Wire.h>
#include <Adafruit_Sensor.h>
#include <Adafruit_MPU6050.h>
#include <SD.h>
Adafruit_MPU6050 mpu;
File dataFile;
void setup() {
Serial.begin(115200);
if (!SD.begin(SS)) {
Serial.println("Failed to initialize SD card.");
while (1);
}
dataFile = SD.open("data.csv", FILE_WRITE);
if (dataFile) {
dataFile.println("倾角X, 倾角Y, 倾角Z, X轴加速度, Y轴加速度, Z轴加速度, 温度℃");
dataFile.close();
} else {
Serial.println("Error opening data.csv");
}
}
void loop() {
sensors_event_t a, g, temp;
mpu.getEvent(&a, &g, &temp);
dataFile = SD.open("data.csv", FILE_WRITE);
if (dataFile) {
dataFile.print(a.acceleration.x);
dataFile.print(", ");
dataFile.print(a.acceleration.y);
dataFile.print(", ");
dataFile.print(a.acceleration.z);
dataFile.print(", ");
dataFile.print(g.gyro.x);
dataFile.print(", ");
dataFile.print(g.gyro.y);
dataFile.print(", ");
dataFile.print(g.gyro.z);
dataFile.print(", ");
dataFile.println(temp.temperature);
dataFile.close();
} else {
Serial.println("Error opening data.csv");
}
delay(50);
}
然后就是数据的回传了,计划在天空端用arduino nano通过lora无线模块,结合21cm胶棒天线同时进行经纬度 臭氧浓度数据传输,在地面端通过lora模块和转接器结合MagicalANT Yagi-U 手持八木天线接收到笔记本上,我参考了lora模块的卖家资料。
增益天线最后计划用Yagi的,支持420MHz-450MHz增益最高6dBi,空中天线裸露安装在泡沫箱侧端偏下,地面通过手持方式对准 ↓
此外需要GPS定位模块,基站传回的那种↓(开机状态工作时长7-10天)
影像记录的要求要高一点,上Gopro4
落地后用蜂鸣器的声音吸引人的注意,这个我在火箭代码的基础上稍微修改一下时间间隔就OK了,差不多是这样的:
744ABB511606DCB1805A9253ABDFAB5C.mp4 点击下载
蜂鸣器用这个是远远不够的,所以我又买了个9V的高分贝蜂鸣器,计划用arduino和继电器控制蜂鸣器的电路,为此提前写了代码,通过计算得到气球上升速度5m/s,降落速度3m/s,根据当地的平均风速0-3.6m/s,高度取38000m,最后估出间隔时间为20266s(5小时)即20266000ms,同时也修改了代码的参数
验证无误,这是代码
const int relayPin = 2;
void setup() {
pinMode(relayPin, OUTPUT); // 设置继电器引脚为输出模式
}
void loop() {
digitalWrite(relayPin, LOW); // 默认情况下,继电器为关闭状态
delay(20266000); //程序等待20266秒
digitalWrite(relayPin, HIGH); // 经过20266秒后打开继电器
delay(100); // 等待一个较短的时间,以确保继电器稳定打开
3.总体布局规划
然后就该设备的布局安排了,确认泡沫箱的尺寸
然后打算将电子设备模块化,加装在泡沫箱中,便于组装且一定程度上提高了密封性,最后的建模打印以实际尺寸,最后还要测试电源能给各部分电子设备的供电时间,为了方便开关,我打算将所有开发板并联在一个大电源上,10000毫安的电量
一块arduino nano工作时电流为30mA,电压是3.7V,所以可以计算出:
电池电量(mAh)/ 总功率消耗(W)=电池可供电时间(小时)
即:
10000mAh / (2 x 0.074W) ≈ 67.6小时(两三天的时间)
4.确定放飞地点
放飞地就选在河北张家口—张北草原,很幸运我就在张家口,地理位置还是很友善的,另外4KG以下的气球放飞无需资质,报备即可,这是今年的气象气球升放管理条例:
另外参考一下风场的气象图↓
我这里的风向是西北吹向东南,降落地点大致在北京到天津一带
至于气球空中横漂距离,我后期会进行实地探测的。再结合风向图,最后可能落在北京或者天津秦皇岛等城市,宽广人多便于找回。