×

亚博官网Sparkfun.com将于周三下午4点至4点15分进行定期维护。3月20日。因此,您可能会遇到临时中断。

使用这个DIY GPS湿度跟踪器,让您的身体变得沉重潮湿。

这是以科学的名义!不,真正地,它是,我发誓。

喜爱的 最喜欢的

取出烙铁,螺丝刀和电子表格,用于一些良好的老式数据收集。别担心,你不必是牛津或麻省理工学院的专家。我们将使用开放源代码部分和简单的数据点来进行一些测量,我们可以为科学做出贡献!我们头顶上是一个网络,将近50岁,放大以供公众使用。为什么很重要?好,问你的电话,船舶,或飞机。GPS只是一个免费供公众使用的坐标系统(有一个适当硬件的小障碍)。我们有几个博客和指南解释了什么是GPS,现在,我们要探索它可能是什么。

我在中西部长大,有时非常干燥。湿度,当大自然认为适当地使用它时,可以是一种拯救的恩典。所以,为什么不测量湿度?我们有工具;我们有技术,亚达·亚达·亚达。我们开始吧!

我把这个项目集中在亚博官网Si7021湿度和温度传感器GPS记录器屏蔽.Logger Shield有一个原型区,可以完美地安装传感器,做一个苗条的轮廓。模块必须足够小,以便在数据收集期间携带和/或连接。下面您可以找到开始时需要的部件:

装配

让我们组装零件,从湿度传感器开始,并拆下收割台。断开四个销。我们要把它们焊到电路板的底部,因此,集管的短插脚应该被电路元件撬起。跳个摇摆舞,然后放在一边。

现在,让我们将可堆叠的头段焊接到GPS屏蔽上。如果你没有焊接一个可堆叠的头罩,从一个标题集开始。从板的顶部穿过匹配的收割台孔。我喜欢做的是快速地取下我的熨斗,去掉一小滴焊料,然后快速地将其接触到针和焊盘上,就像一个焊点。希望这会将板设置为header。你可以回来,把那个别针完全焊接到一个好的贺喜吻上。旋转检查收割台是否笔直;根据需要进行焊接和调整。在其余的针和头上拉一些焊接魔法。

替换文本

现在让我们结合两个部分。我把湿度传感器对准了原型制作区最中间的位置。我有朝向GPS模块的标题,但你可以随心所欲地调整方向。下一步是有点棘手:把湿度传感器的长针焊接到防护罩的衬垫上,深度刚好能从另一面探出来。完成后,它看起来像一块跳水板。

替换文本

原型区由隔离垫构成,我们可以用一些整齐的电线连接到我们需要的插脚上。第一,让我们拆下顶部的5伏跳线,GPS屏蔽的左下角。重新焊接焊盘,在3v3跳线上跨接。传感器工作电压为3.3V,所以我们不要炒了它。第二,带上你最喜欢的绞合线(或实心线,我不是在评判,连接电源脚和I2c脚。当这些都在一起时,我们的GPS/湿度屏蔽生物就准备好了!现在,我们编码!

代码

我从阅读示例草图和连接指南开始GPS记录器屏蔽以及Si7021湿度和温度传感器.

这些资源给了我深刻的见解,并且很容易从代码开始。本着学习的精神,亚博在线娱乐官网我保持简单。让我们把文件放在一起!我使用的两个文件是csv_logger_tinygpspplus.ino和sparkfun_si7021_breako亚博官网ut_example.ino。通过将代码与示例代码进行比较,可以引用每个文件中使用的部分。

/******************************************************************湿度和温度GPS记录器Brandon Williams@Sparkfun Electronics建立在Joel Bartlett“Sparkfun 亚博官网Si7021 Breakout”5月4日开发的源代码基础上,2016年2月9日Jim Lindblom csv_logger_tinygpspplus.ino,2016年,本项目简单介绍亚博官网了利用全球定位系统(GPS)利用地理坐标记录大气数据。我们将使用si7021 breakout库和tinygps++库。https://github.com/亚博官网sparkfun/si7021 oub/tree/master/libraries https://github.com/mikalhart/tinygpsplus/releases Arduino解析UART总线的GPS数据和I2c总线的湿度/温度数据。然后将数据保存在microsd卡上,以备日后检索。**注意**代码用于快速原型制作,可能有一些错误或错误!必须抓住他们。祝你好运,玩得开心!包括:
            
             包括:
             
              包括:
              
               包括:
               
                包括:
                
                 #define arduino_usd_cs 10 define log_file_prefix“gpslog”define max_log_files 100 define log_file_suffix“csv”char logfilename[13];define log_column_count 9char*log_col_name[log_column_count]=“经度”,“纬度”“高度”“速度”“当然”“日期”“时间”“卫星”“湿度”定义日志速率5000unsigned long lastlog=0;TinygpsPlus Tinygps;定义GPS波特率9600包括
                 
                  #定义Arduino_GPS_Rx 9定义Arduino_GPS_Tx 8软件串行SSGPS(Arduino_GPS_Tx,arduino_gps_rx);35; define gpsport ssgps define serialmonitor serialmfloat humidity=0;weather sensor;void setup()//sensor.begin();开始();serialmonitor.begin(9600)开始;gpsport.begin(GPS_baud);serialmonitor.println(“设置SD卡”);如果(!)sd.begin(arduino_usd_cs))serialmonitor.println(“初始化sd卡时出错”);}updateFileName();printHeader();void loop()getWeather();if((lastlog+log_rate)<=millis())if(tinygps.location.isUpdated())延迟(500);if(loggpsdata())serialmonitor.println(“GPS已记录”);lastlog=毫秒();}else serialmonitor.println(“未能记录新的GPS数据”);}}else serialmonitor.print(“无GPS数据。SATS:“”serialmonitor.println(tinygps.satellites.value());}}while(gpsport.available())tinygps.encode(gpsport.read());byte loggpsdata()file logfile=sd.open(logfilename,文件写入;//打开日志文件if(log file)log file.print(tinygps.location.lng(),6);logfile.print(“,”);logfile.print(tinygps.location.lat(),6);logfile.print(“,”);logfile.print(tinygps.altitude.feet(),1);logfile.print(“,”);logfile.print(tinygps.speed.mph(),1);logfile.print(“,”);logfile.print(tinygps.course.deg(),1);logfile.print(“,”);logfile.print(tinygps.date.value());logfile.print(“,”);logfile.print(tinygps.time.value());logfile.print(“,”);logfile.print(tinygps.satellites.value());logfile.print(“,”);logfile.print(湿度);logfile.println();logfile.close();返回1;}返回0;void printheader()file logfile=sd.open(logfilename,文件写入;如果(日志文件)int i=0;为(;i<log_column_count;i++)logfile.print(日志列名称[i]);if(i<log_column_count-1)logfile.print(',');else日志文件.println();}logfile.close();}}void updateFileName()int i=0;为(;i<max_log_文件;i++)memset(日志文件名,0,strlen(日志文件名));sprintf(日志文件名,“%s%d. %s”,日志文件前缀,我,日志文件后缀);如果(!)sd.exists(logfilename))中断;}else serialmonitor.print(日志文件名);serialmonitor.println(“存在”);}}serialmonitor.print(“文件名:”);serialmonitor.println(logfilename);void getweather()humidity=sensor.getrh();
                 
                
               
              
             
            

我的代码有几个关键部分。第一个亮点在第19行,接着是第23行include语句。确保包括SPI,SDTinyGPS ++SI7021突破库,软件序列和线库。SPI用于SD卡和SD库,线库主要用于与传感器的I2c通信。

第二个突出显示在第30行,是csv文件中的列数。我把它设为9,这是一个比Tinygps++示例多的例子来存储我的湿度值。我还为下一行的数组添加了一个“湿度”字符串。下一个亮点是我的代码的成败。在第53行,我有Wire.Begin()而不是Sensor.Begin()。当我有了sensor.begin(),我将在loggpsdata()中得到一个意外的整数返回。我没有深入调查找到确切的原因,但由于sensor.begin()只是一个初始化调用,我用wire.begin()替换了它,这似乎有效。接下来是第68行;我们只需要调用getWeather()方法。最后,只需将湿度值添加到要保存到csv文件的数据行中。我刚把它钉在末端。

下面是我从一些读数中得到的输出,所有这些都位于我们的蝙蝠洞。

替换文本

结论

我上传代码时遇到了两件事。第一件事是内部闪存将真正满了,IDE将提示您它真的满了。一切都应该继续工作,但可能会出现异常值。如果在操作过程中得到奇怪的数据或其他错误,请考虑到这一点。

第二,您可能会注意到,Si7021可以提供湿度和温度。我本来想要两个,但当我尝试在SD卡上写10个数据点时,我遇到了一个奇怪的失败。九个就行了,但我怀疑,如果你想更进一步,可以在sd库中找到答案。

就这样,这里有点弯曲,那里有点扭曲,我们有湿度跟踪器!我希望这能让你的脚被GPS弄湿,并有可能把它作为一个伟大的工具。寻找更多的GPS项目和产品来激发你的亚博官网下一个想法!

替换文本


评论9评论

  • 谢谢你寄这个布兰登。我有一个类似的项目正在进行中,我试亚博官网图测量很多东西,包括VOC,我的自行车从枪管通勤到南博尔德。我想评估骑自行车和开车的空气质量暴露,并在一天中的不同时间和季节创建一些地图。我的工作得到了CU的支亚博国际官网持。我真的很想找到一个紧凑的臭氧传感器,可以测量精度低于5ppb的臭氧。

    • 这是一个很棒的项目!亚博官网当我还在大学的时候,我为一个高级项目做过类似的工作。亚博官网我不完全确定我们是否有直接的臭氧产品,但我用了一个特殊的臭氧传感器。然而,我当时没有太多运气尝试把它集成到一个更大的电路中。我觉得这不符合你想要的容忍度,但如果你还没有的话,那是个好地方。

      祝你好运!

  • 你的文章很棒,我对GPS感兴趣。我还想发表一篇文章使用neo m8p与esprtk,我该如何发布一个像你这样的向导来激发兴趣?亚博官网

    • 我们正在为来宾贡献者制定流程,但仍在进行中;当我们把一切都确定下来的时候,我们会记住你的。注意更新。

  • 记录温度很重要,因为你可以很容易地用马格纳斯公式来计算露点,它是“绝对湿度”的度量单位,适用于各种温度变化。如果你需要限制柱子,我会更倾向于放弃速度和/或路线。

    关于全闪存的问题,您可以做的一件事是缩短serialmonitor.println()调用中的文本消息,例如,与27个字符的“初始化SD卡时出错”相比,“err1”只有4个字符。不是很多,但它可以起到作用。更好的是,在serialmonitor.println()语句周围放置“ifdef”“endif”对,或者只是把这些行注释掉。在过去的几年里,我不得不用这些技巧对付阿杜尼斯,虽然我不喜欢将它们与具有更多“程序内存”的处理器一起使用,例如。,覆盆子皮。(对于支持“单步”模式的IDE也不需要,亚博国际官网即使它通过大量的目标处理器“伪造”它,重写,因为“debug by writeln()”不是必需的。Arduino IDE的调试功能是所以70年代……)

    • 我还想说,这是一个整洁的项目!亚博官网从GPS获取时间/日期信息是获取数据记录高精度时间戳的有效方法,如果你只使用GPS,并且需要大量的录像机(而且它假设录像机有一个“天空视角”,可以接收GPS),那么它会稍微贵一些。

      顺便说一句,GPS有着非常有趣的历史。当军方第一次开发它的时候,他们预见到了可以只是一些非常有限的民用用途,他们认为这些用户帮助支付20颗卫星的发射费用是公平的。而不是对最终用户征收某种“持续”税,他们想出的办法是每名接收者支付50美元的“许可费”,由制造商支付。结果证明,平民的使用并不像他们最初预想的那样“有限”。它使五角大楼处于一个可以真正实现GPS系统盈利的位置——而五角大楼的会计系统根本无法处理“盈利”的概念,所以“问题”是通过降低许可费来“解决”的。

    • 谢谢您!我确实考虑过换一些东西来获得温度和湿度。除了更密集的调试之外,一个可以取代一个GPS数据点,比如速度,课程,或卫星。露点是一个很好的考虑因素,是一种值得用于环境和天气数据的测量方法。

      也,缩短打印语句或其他节省内存的技巧。如果我计划进一步阐述这个项目,我会这样做的。亚博官网这是一个小项目,我自己使用记录亚博官网器屏蔽和传感器的乐趣。我只是希望其他人可以把它用于实际科学,因为那太棒了!

      同时感谢您提供更多的历史信息。我知道一些,但不是全部。也许这就是为什么我们更喜欢GPS的原因,或多或少,开源本身。我还发现了两种不同的通信方式。Sirfstarv和NEMA协议。我觉得不管技术水平如何,每个人都有很多东西要学。亚博在线娱乐官网

      • 关于GPS的历史还有很多,和相似系统,但这方面的信息有很多来源。我总是对现代GPS模块的灵敏度感到惊讶——许多分贝在下面噪音水平!几乎同样令人惊讶的是,他们如何能够填塞所有的地图数据(包括许多像商店之类的“功能”放在汽车仪表盘上。

        顺便说一句,回到80年代早期,一家初创公司找我说罗兰C基础产品。经过调查,我决定我不想参与其中,虽然其中一个主要原因是我真的不喜欢从凤凰城搬到底特律。

相关帖子

Enginursday:点亮3D打印机的床

愚蠢的Arduinos:Redboard Pro Micro ATX

创建自定义倾斜传感器

与佛蒙特制造商Jenn Karson的问答

你能跑多低?

近期职位

MQTT的魔力

认识Nvidia Jetson!

阿杜诺日交易今晚结束!

星期五产品发布:3月的RFIDES

派日2019赠品

公开讨论:轻率行事

标签


所有标记