A Jetson Nano Ambient Weather Station — Part 2

SmartCow
5 min readAug 13, 2021

--

This is Part 2 of an eventual four part series on developing an ambient weather station based around a Jetson Nano 2GB Developer Kit from NVIDIA. For context and some insight on the sensors we are using for this project, check out part 1.

As a little teaser, here’s what we’ll be working towards in this post.

Spoilers! The first prototype of the ambient weather station.

Electronics & Enclosures

While the demos in the previous vlog post used a single OLED display, I’m adding a secondary display for the ambient weather station, giving it the ability to show more data to the user. The particular OLED modules I’m using can have either one of two I2C addresses, selected by swapping the position of an SMD resistor on the rear of module. This gives us the ability to connect the two displays to the same bus but have them display different data.

Connecting the modules to the Nano using individual jumper cables would be quite time consuming and likely result in a wrong connection somewhere, which has a very high chance of causing the modules to release their magic smoke. Instead I prototyped a small breakout board using some board headers and a veroboard.

The breakout board used for this project, having a 40-pin header at the rear to interface with the Nano, and 4-pin headers to connect to the Air530, OLEDs, HM3301, BME680, rotary encoder and a mystery component.

This will not only make wiring a lot simpler and neater, but also avoids creating Frankenstein’s monster-esque connectors to share the Jetson’s 3.3V supply between the modules.To connect the breakout board to the Nano, I’m making use of 40 way ribbon cable and two female IDC headers I got from a local electronics shop, which I cut and crimped together to create a suitable cable. The process is super simple and leaves a very professional looking connector.

A 40 way ribbon cable crimped with IDC headers on both ends. A neat way to interface between high pin count components.0

How about an enclosure? I found this beautifully designed enclosure for the Jetson Nano by ecoiras, which I then remixed so that the new enclosure correctly fits the modified front connectors of the Nano 2GB development kit. ecoiras used Autodesk’s Fusion 360 CAD software to design their case, which made the remix a lot simpler as I could use the software’s timeline feature to roll back the design and edit the initial sketch.

An enclosure for the Jetson Nano 2GB development kit, remixed from ecoiras’ original design.

As the weather station is a custom one, I had to design its enclosure from scratch. This involves creating basic 3D models of the sensors, displays and breakout board, from which I could then build a case around. Here’s what I came up with;

An enclosure to house the ambient weather station’s modules and breakout board. The sensors are placed on stilts to which they can be mounted to using a set of small self-tapping screws.

I’m not completely satisfied with the current design as the walls are a bit too thick, which while making it very strong, requires a larger amount of material to print as well as making the clips to secure the two halves prone to snapping off. I’ll be creating an improved version of the case for later blog posts.

Files for the Jetson Nano 2GB and ambient weather station enclosures can be found on our Thingiverse page.

Software

Since writing the first post for this series, I’ve had more time to experiment with Adafruit’s awesome CircuitPython library, which has made interfacing with multiple sensors a breeze. Most of the sensors we’re using in this project are already fully supported by the library, with the exception of the HM3301 PM sensor and Air530 GPS module.

I coded a custom CircuitPython-compatible class to interface with the HM3301, allowing us to easily read the PM readings from the sensor. I then modified the CircuitPython GPS class , allowing it to decode ZDA messages transmitted by the Air530 module, giving the weather station the ability to read the UTC date and time as measured by the GPS.

I’ve also rewritten the demo programs so that they make full use of the CircuitPython library. The demos can be accessed from the relevant GitHub repo; remember to run the library installer script before trying out the programs to automatically setup the required libraries.

Joining Everything Together

Let’s build this weather station! I first attached the Grove sensors and breakout board to the bottom case with small self tapping screws to secure them in place. The GPS antenna fits neatly into a small indent in the walls on the top case, as do the two OLED displays and the rotary encoder. I also got a knob to place on the encoder’s shaft, making it much easier for the user to turn it. The last mounting point next to the displays is for a mystery component; we’ll get back to that in later blogs.

Setup for the weather station, with the environment sensors mounted on the bottom half of the board and the GPS antenna, OLEDs and rotary encoder mounted to the top half.

The last step is then to create a program that can gather data from all of the sensors and display it on the OLED screens. The communication buses are first initialised, after which the Nano polls the sensors once per second to gather updated readings about the ambient weather conditions. As the resolution of the OLED displays is not large enough to view all of the gathered data simultaneously, the rotary encoder allows the user to select which data to display on the screens.

The first complete prototype of the ambient weather station, controlled by a Jetson Nano 2GB.
Some overheads in the developed code result in a not perfectly constant refresh rate for the displays, leading to the visual artifacts when recording the displays on a camera. The route I’ll be taking to remove this is by using an internal timer to ensure the refresh rate remains constant.

Conclusion

And there we have it, an ambient weather station that can gather and display local environmental conditions. I’m quite happy with how this project turned out. This was my first time seriously using a 3D printer and CAD software to design and print the enclosures, and ended up learning a lot on how to use these tools.

In the next post, we’ll add a WiFi dongle to the Jetson Nano 2GB so that it can automatically pull and display local weather data from the internet.

About the Author

Ryan Agius is an AIoT Engineer working with SmartCow AI Technologies Ltd. at their Malta office in the Balluta area. Before starting at his current position, Ryan worked as an Engineering intern with CERN as part of his thesis for a Masters in ICT (Signal Processing & Machine Learning) course.

--

--

SmartCow

SmartCow is an AI engineering company that specializes in advanced video analytics, applied artificial intelligence & electronics manufacturing.