天气历史

0 723 中等的

衡量天气并了解气候变化!

项目图

这个项目中使用的东西

硬件组件

硬件列表
1 12V铅酸电池的Dfrobot太阳能电源经理
1 18V太阳能电池板
1 Raspberry Pi 4型B
1 Arduino MKR WiFi 1010
1 Adafruit BME280
1 12V铅酸电池3.4 AH
1 雨量计RG-11型
1 CALT风传感器
1 ASI290mm单声道相机

软件应用和在线服务

格拉法纳

TensorFlow

Arduino IDE

mqtt

手动工具和制造机

钻 /驱动器,无绳

故事

关于

有没有想知道外面的天气如何?好奇气候变化如何影响您当地的天气?您想知道以前的天气记录是什么吗?我已经做了一个天气历史来找出答案!

我想制作一个天气历史,使我们想起历史性的当地状况并记录日常气候变化。很难看到我们气候的变化。通过建造气象站和天气历史,我不仅可以记录每日温度数据,而且可以监视数十年来天气的变化。

我的天气年鉴有三个部分。首先,我建造了一个具有温度,湿度,雨,雪和风传感器的气象站。气象站配有太阳能电池板,以确保我可以连续监视当地的天气。其次,我通过从服务器下载并通过电子邮件将其发送给我自己以与当今数据进行比较来收集历史天气数据。第三,我配置了一个Raspberry Pi All Sky Camera在白天拍摄图像,并利用机器学习来识别云盖。这可以在将来使用,以通过确保我们仅比较天气年鉴电子邮件中的类似情况来改善历史天气数据。我的天气历史的各个方面为我所在地区提供了过去和现在的天气。

tl; dr

直接进入代码并调整您的情况

第一部分:气象站

首先,我想用Arduino MKR WiFi 1010测量所有天气数据。我感兴趣的测量天气场是温度 +湿度 +气压 +气压压力(BME280传感器),雨(RG-11传感器)和风(CALT风传感器)。我还希望气象站始终在外面运行,因此我设置了一个18V太阳能电池板和12V 3.4 AH铅酸电池,以供电。我选择的雨传感器以12V的速度运行,而Arduino MKR WiFi则以5V为单位。幸运的是,使用Dfrobot太阳能电池板管理电路,我能够使用太阳能电池板 +管理电路 +铅酸电池组合提供12V和5V。

***注意:先前安装了BME280以及在测量积雪深度的超声传感器以及超声波传感器,并进行了更多讨论这里这里。***

我首先在室内测试天气传感器,然后在外面测试。我学会了如何使用MQTT协议通过一些以前的项目发送天气数据从事。

对于RG-11雨传感器,我将电线连接到传感器的传感器中,该电缆腺内置在传感器中。将其密封并连接到我的Arduino MKR WiFi 1010后,我将此传感器添加到数字IO PIN中,并使其成为一个中断的例程:

代码
//将雨引脚配置为中断低功率。

通过中断将其连接起来后,我写下了以下中断程序,并使用我在雨传感器上使用的适当桶尺寸。

代码
void callback(){//此功能将在设备唤醒中调用一次//您可以在此处执行一些小操作(例如,更改循环中使用的变量)//请避免调用delay()和长期运行函数由于此功能在中断上下文序列上执行。Begin(9600);延迟(10);// #############################= 0.01;//为您的传感器配置此功能// #####################################################降雨=降雨 +桶;serial.println(“运行中断代码”);serial.print(“雨量为:”);Serial.print(降雨);serial.println(“ in”); }

接下来,我将雨传感器连接到Arduino MKR WiFi,然后用一些水和水桶测试雨传感器。成功测试后,我将该传感器放在气象站围墙上。

安装了RG-11


RG-11雨传感器连接

RG-11测试

接下来是风传感器和BME280温度,湿度,压力和高程传感器连接,我将它们与以下现有示例联系起来。

测试风传感器

连接的风传感器

连接的BME传感器

所有这些传感器均由12V铅酸电池和18V太阳能电池板通过太阳能电池板电源管理电路供电。

连接电源组件

12V铅酸电池

18V太阳能电池板

该代码的其余部分测量其他传感器,将天气数据发送到运行MQTT的Linux服务器,然后将Arduino放入睡。

数据显示在Grafana Cloud仪表板中,链接到我的帐户,可以通过Internet从任何地方读取。这就是我的仪表板的样子:

第二部分:历史天气数据

对于测量数据同样重要的是总结历史数据。感谢Los Alamos国家实验室,我真的很幸运能拥有很棒的数据。这是我正在使用的天气数据:https://weathermachine.lanl.gov/。

首先,我将过去的数据读为Python数据框架:

代码
inputData = pd.read_table(“ RAW_LAARC_24_194001010000.TXT”,delim_whitespace = true,skiprows = 6)df = dataframe(inputdata)

我确定目前是哪一天,然后在整个历史上删除这一天的所有数据,并计算一些摘要统计信息:

代码
#确定天气计算一年的一天day_of_year = dateTime.dateTime.now()。timetuple()。tm_yday#从dataframe daytemp = np.array(df2.loc [(df2.ddd = = day_of_of_year)),'deg-c'])))yeNtemp = np.array((df2.loc [(df2.ddd == day_of_year),'yyyy']))daytempnums = pd.to_numeric(dayTemp)

我对雨水数据也这样做。然后,我将1980年之前和之后的历史温度数据分开,以便我可以看到最近和更晚的极端温度。

代码
#查看1980年之前和之后,看看它是否已更改compyear = np.argmin(abs(YearTemp -1980))早期meantemp = round(np.nanmean(convtemp [0:compyear]),1)latemeantemp = round(np。nanmean(Convtemp [compyear:-1]),1)早期maxtemp = round(np.nanmax(convtemp [0:compyear]),1)latemaxtemp = round(np.nanmax(np.nanmax(convtemp [compyear:-1]),1),1),1),1),1),1),1),1),1)

接下来,我阅读了前一天的数据,以便我可以看到我的测量内容,因此可以补充历史数据。为此,我将天气数据存储到SQLite数据库中。每次Linux计算机接收MQTT消息时,计算机都会将数据保存到SQLite数据库中。然后每天阅读一次这些值,并随着历史天气数据发送。

要发送历史天气数据和昨天的数据,我使用Python发送自动电子邮件。我已经编辑了Linux计算机的系统,每天始终在当地时间上午7点运行我的天气年鉴计划,以告诉我有关天气历史和天气测量的信息。这样,我总是想起我们每天生活的哪些条件。

天气年鉴电子邮件

这是我当前发送的消息的一个示例:

“历史上的这一天:温度平均温度为:82.3f最高温度为:1980年最小温度的93.9f:1995年期间的60.1f

将温度数据分开以上和低于1980年,以查看最近与过去的局部极端:在1980年之前,平均温度和最高温度为:82.1F和91.0FAFTER 1980平均温度和最大温度为:83.1F和93.9F

最大降雨量是:1.1英寸1944年降雪为:nan期间0.0英寸这是昨天实际发生的事情:平均温度为:69.44F

最高温度为:82.74f最小温度为:52.68f降雨为:0.0昨天多云。”

天气之后的天气

是的天气历史!由于我经历的时间长度,可能很难意识到气候变化对我的环境的直接影响。天气历史和我的气象站为我提供了有形,定量的提醒,确保我一直记得。

虽然通常我不会注意到华氏1-2度的变化,但每天向我报告它会提醒我。即使我只能访问的温度数据是在1900年代,我也有足够的数据来查看1980年之前和之后的更改。

第三部分:通过机器学习的云覆盖数据

我的最后一部分天气历史是建造一个云传感器。我想确保我报告的天气天历数据正在比较温度和降水数据的类似情况。目前,我的天气年鉴数据还不是数据丰富的,因此我决定暂停过滤我的天气年鉴数据以获取云覆盖范围,但我仍然想从光学数据中识别云或清除天空。我有一个覆盆子Pi在当晚拍摄所有天空照片。我遵循了这个例子关于如何配置所有天空摄像头和Raspberry Pi。我在白天保存图像,每天每天下午3点(15:00)将图像转移到Linux盒子,我必须确定它是否多云。

我决定将图像传递给我为目的修改的TensorFlow程序。我密切关注这个例子用于图像分类。我已经建立了两个图像类别,即清晰而多云。

清除所有天空图像

多云的所有天空图像

我在清晰和多云的条件下,在所有天空摄像头收集的图像上训练了该模型。训练模型后,我使用以下Python函数将图像与机器学习分类。

代码
def Identionclouds(myfile,型号,class_names):###################################################################选项下面的选项fullPath = os.path.abspath(“ ./ data/data/toidfiles/” + myfile)#获取keras命令command image_path的完整路径)img = tf.keras.utils.load_img(image_path,target_size =(img_height,img_width))img_array = tf.keras.utils.img_to_array(img)。),100 * np.max(分数)))返回(class_names [np.argmax(score)])

到目前为止,该模型在识别我喂养的图像中识别云或没有云方面非常有效。该结果将改善天气年鉴如何返回与当天天气状况相似的历史价值。

Weather Almanac Almanac Collection,Arduino气象站和Raspberry Pi All Sky Camera都有助于可视化天气数据,并教育用户有关当地气候变化的影响。这个项目

- 在天气和云中创造每日体验 - 高光的温度在1980年之前/之后变化 - 是一种教育工具,讲述了最近历史上天气如何变化

原理图

气象站

电路组件如何连接的填充图。我的风传感器以5V功率发挥作用,随后被缓冲到Arduino的IO引脚之前。

图标 weatherstation_iqvtjagnou.zip 42kb 下载(0)

代码

天气历史

气象站代码,机器学习代码和电子邮件并阅读旧的气象数据代码

图标 韦尔曼纳克 - 齐普 21kb 下载(0)

该文章首次发表在骇客,2022年6月30日

CR:https://www.hackster.io/akendrick/weather-almanac-56af10

作者:亚历克斯·肯德里克(Alex Kendrick)

执照
所有权利
预订的
许可
0