We have liftoff. My first Balloon Environmental Sensing test successfully “slipped the surly bonds of earth, and danced the skies on laughter-silvered wings” sending data back the whole time. First flight was at the Digital Naturalism Conference in Gamboa, Panama, featuring 10+ sensor values streaming from the balloon to an online data collection system and dashboard.

It was a big success!

This party-balloon platform is designed for inexpensive aerial environmental sensing. Balloon lofting is perfect for scientific research, educational programs, hacker workshops, technology art, as well as low-cost indoor or industrial monitoring. Is the humidity overhead the same as on the ground? Does wind speed change? Is it dusty up there? How much UV light penetrates the jungle canopy at different levels? These are all questions that can be answered with this platform.

Since advanced LTE wasn’t available in Panama and SigFox coverage was absent, I decided to use the Digital Naturalism Lab’s LoRaWAN gateway—long-range radio networking that uses very little battery power. The data collection firmware code was written in MicroPython running on a LoPy4 wireless microcontroller module from Pycom. This first set of tests used all the Pysense evaluation board sensors including light, temperature, altitude, humidity, pitch, roll and acceleration in three axis. This data was taken in real time at 30-second intervals and transmitted using LoRaWAN across Things Network servers to be displayed on a Cayenne dashboard. The Pybytes cloud platform appears promising too, I’m looking forward to exploring that more in later phases of the project.

Gamboa has one very small grocery store. It does not sell helium or any other noble gas. Luckily the generous David Bowen allowed our sensor package to hitch a ride on his drone during my first week, so up we went for initial testing. As is so often the case, even this partial test resulted in lots of changes. In this case I realized we needed a frame counter, better battery connections and voltage monitoring before flying again. A second shakedown flight on Bowen’s drone proved the value of these additions, and gave us an excellent sampling of the data to come. We also did a bunch of range testing work, which is covered in a separate blog post.

A taxi trip into Panama City brought us to Mundo de los Globos (World of Balloons) where helium tanks are available, along with 1-meter balloons in plenty of colors. With a full tank of the squeaky gas, we returned to Gamboa and I started inflating our ride to the sky.

The next morning it was time for the sensor package to take its first balloon ride, and up we went. Andy Quitmeyer got some amazing footage from his drone and Trevor Silverstein shot high-end video from the ground (coming soon). I could not have asked for a better documentation team. The balloon reached 60 meters (about 200 feet) above ground level, which was the limit of the reel line I was using for a tether.

We got great data back from this flight, and soon made a second one—this time in a large field away from balloon-eating trees. It was easy to get LoRaWAN signal from altitude since LoRa works best in line-of-sight conditions. We plan to do more with the Things Network to support the biology and ecology research in Gamboa that are spearheaded by the local Smithsonian Tropical Research Institute.

Here’s a screenshot of the data dashboard from the flight.

And a few graphs:

Another afternoon was set aside for a proper party-balloon experiment. Using a smaller battery I was able to loft the sensor package using 6 small balloons and the small amount of remaining helium. This worked too, though 7 balloons would have provided more lift and handled the wind better. Next time, more balloons!

Data from these flights can be downloaded, and the MicroPython code for the LoPy4 or FiPy can be found on my GitHub.

For the next version of the Balloon Environmental Testing platform, my plan is to explore other sensors and wireless links. I’m especially interested in UV light, air quality, wind speed and loudness. In Gamboa we talked about trying some sound recording too. As the balloon itself is silent, it’s the perfect place to record. For wireless links I’m itching to explore some new cellular low-bandwidth, low-cost protocols, LTE Cat-M and NB-IoT, because they don’t require any dedicated base stations and should work great at the altitudes needed for balloon flights. Additional plans include extended day-long flights, free flight with GPS, and maybe look at hydrogen gas but not near any kids!

The initial prototype goal was to see if the full system will work, and it does! Gamboa was a great success for this project, giving me the time, venue and documentation assistance to bring this idea to life. If you get a chance to attend the next Dinacon, I strongly recommend it. And if you’re interested in balloon sensing for any experiment, class or project, let me know!

Last month we did range testing on a new LoRaWAN radio network installation in Gamboa, Panama. The network, which covers the entire center of town is part of the Digital Naturalism Lab’s commitment to supporting wildlife and environmental research. Gamboa, where the Smithsonian Tropical Research Institute’s laboratory is located, is surrounded by the Soberanía National Park, a large, intact tropical forest that’s jam-packed with rainforest wildlife and flora. Doctoral students and researchers laboriously visit multiple sites daily to collect data that could easily be transmitted in real time wirelessly at low cost over a public science data network. That’s our goal.

LoRaWAN is a long-range, low-bandwidth protocol that operates in the 915 MHz frequency range. We are using a MultiTech Conduit gateway that is configured to pass data through The Things Network, a community-supported global network for LoRaWAN data. To test this base station’s range I created a GPS-enabled signal strength measurement tool using a Pycom LoPy4 wireless microcontroller and Pytrack GNSS development board. The code, written in MicroPython, takes a GPS reading and transmits it to the base station, where the signal strength is measured and passed along with the location through TTN’s server. The resulting data was easily transformed into a map that shows the signal strength recorded at each location.

We compared two different setups:

  1. A smaller indoor antenna that came with the MultiTech Conduit gateway, located inside the house near a window on an upper floor. This was tested by walking at street level around Gamboa with the Pycom setup.
  2. A 2-meter-long roof antenna, held in the hot sun on the roof of the house. This antenna sourced from Alibaba is an outdoor antenna nominally for 900 MHz frequencies. We used a short 30 cm cable to connect it to the Conduit router, also located on the roof. The setup was also tested from street level, this time from the back of a pickup truck driving slowly around Gamboa.
Trucking around Gamboa with range testing in the back.

We got a surprise! The indoor setup with the small antenna worked significantly better than the large roof antenna. This is most likely due to degraded performance of the roof antenna itself, rather than its prime location or the short cabling. We are pretty convinced that the Alibaba antenna simply wasn’t up to snuff. For the moment, I’m recommending that we continue with the stock antenna in the current location until we can get an outdoor setup that can be proven superior.


Here’s our testing results. The number next to each is the received signal strength indicator (RSSI) in dBm. If you click on a test location you can also see the signal-to-noise ratio (SNR) listed below the RSSI number.

Interactive map: Indoor antenna test:

Interactive map: Outdoor antenna test:

These tests were a lot of fun to do and the results saved Dinalab from installing an antenna that would have reduced system performance, so they were a big success. The Pycom equipment was easy to set up and configure as usual. My MicroPython code and our raw data file results can be downloaded here.

Rust is gorgeous. We marvel at its endless shades of ochre, red, orange and sienna. We appreciate the organic shapes created as right angles collapse and edges decay into jagged landscapes. Rust is poetic, photogenic, artistic and melancholy. It grows on its own and famously, never sleeps.

As an agricultural species, we love to garden. We plant seeds outdoors, water them diligently, watch the miracle of life, trim, weed, and appreciate the lush green plantscape we’ve created. Gardening gets right at our souls. But why limit ourselves to plants?

Let’s garden with rust! Rust gardening is easy and the perfect way to exploit a “brown thumb.” In some ways it’s identical to growing a plant garden. In other ways it’s the polar opposite. A rust garden is created by “planting” metal pieces outdoors where they can weather organically. Patience is required, though the process can be sped up with regular watering, plus a few other tricks. You’ll eventually be rewarded with lush decay, in a myriad of sunset colors. Of course, your rusted wonder won’t bear anything edible, but it also won’t attract any pests. You might even extract a centerpiece-worthy “bouquet” from your rust garden, in leiu of a traditional harvest. Of course pesticides are unnecessary, and weeding is entirely optional.

For this year’s Dinacon I’m planting a rust garden outside of a home in Gamboa, Panama. Since I’ll only be there for two weeks, I’ve chosen to accelerate the initial rusting process using a household concoction of white vinegar, peroxide and table salt. The results are instant, but really just a head start on what promises to be a post-industrial patch of sepia-toned disintegration, offsetting the riot of tropical greenery.

Here’s how to make your own rust garden:

  1. Pick a patch of ground outdoors. You can also set up an indoor planter box or humidity-rich terrarium.
  2. Gather some scrap iron or steel. If it’s already rusting, so much the better.  Painted or coated metals won’t rust quickly. Strip the paint and sand the metal for best results. If you’re not sure a metal will rust, try it anyway. Experimentation is a terrific way to learn, and the artist’s favored tool.
  3. You can leave the metal to rust on its own outdoors, or water it regularly to accelerate the decay.
  • If you’re an impatient gardener, it’s easy to get some rust going immediately. Pour some white vinegar into a plastic spray bottle and mist your metal scraps until they are thoroughly moistened. Wait for the vinegar to dry, around 15 minutes. Next, in another spray bottle, mix:
    • two cups of hydrogen peroxide
    • four tablespoons of white vinegar
    • one-and-a-half teaspoons of table salt (why salt?)

Swirl the mixture until the salt has dissolved. Spray it onto your metal scraps and they will turn rusty as you watch. Allow the rusty metal to dry, then repeat as desired.* Careful with this mixture, it will rust anything it contacts, instantly!

“Plant” other metal scraps as often as desired to create a variety of rusty delights. You can include non-ferrous metals like copper which will grow a green patina for contrast. Rust gardens are perfect for photography, try a macro lens for the most beautiful corrosion close-ups.

* Rust recipe inspired by Bob Vila.

It’s easy to do environmental sensing at ground level. But how about up in the air over our heads? If we could somehow reach it inexpensively and safely, can we directly explore what lies above, perhaps making our own discoveries?

One of my projects for Dinacon 2019 will create a party-balloon platform for inexpensive aerial environmental sensing. Everyday balloons offer a number of advantages. They are readily available and very safe to fly. They don’t cost much or require any licensing, training or piloting skills. Balloons don’t use any fuel or batteries, yet they can stay aloft for days at a time, silently. When tethered, it’s easy to control their height and position in space and they’re quite environmentally friendly. Balloon lofting is perfect for children’s science programs, hacker workshops, citizen science research, digital naturalism, technology art, and low-cost indoor or industrial monitoring.

My initial ballooning prototype will explore a variety of sensors to see what kind of aerial data is interesting. For motion we will use an accelerometer, gyroscope and GPS unit to tell us where our sensing station is and measure how it is moving in space. We will also get airborne data on temperature, pressure and humidity since we know these vary interestingly with altitude. Many more sensors are available to be tried. UV sensing, air quality, dust levels, light, carbon dioxide, and wind are all on our list. I’ll be using Pycom’s Pysense and Pytrack shields, augmented by Grove sensors.

There are many platforms for obtaining and transmitting sensor data. For this project I’m experimenting with the remarkable FiPy module from Pycom. It has a ton to offer! There’s plenty of I/O to support our sensors, an ESP32 processor running my favorite MicroPython development environment, and no less than FIVE radio options, all onboard. The FiPy can communicate locally using WiFi and Bluetooth, or long-range with LoRa, SigFox and mobile LTE (Cat-M/NB-IoT). This means a single hardware platform can easily travel between different countries and environments, using the best communications method for the job at hand. So far the FiPy has been very easy to set up and use. I’ve needed to do a bit of updating the sample code for non-European frequencies and radio frameworks. With those set, I’ve been successful in transmitting on all five protocols. There’s even a cloud platform Pybytes to manage incoming data and remotely update devices in the field. And Pybytes is just one option. The FiPy module will communicate with Things Network for LoRa, Cayenne for data display, AWS, Azure, Watson, and many other IoT platforms.

Pycom’s FiPy module with Wi-Fi, Sigfox, LoraWAN, Bluetooth and Cellular radios.

Looking forward to building this at the second annual Dinacon Digital Naturalism Conference, a month-long hackathon where biologists, technologists and artists gather in the jungle to use our skills together far from the comfort of our labs. As a node-leader for the conference I’m also planning to run a 4-in-4 fast prototyping workshop, and perhaps plant a rust garden. Those projects to be covered in upcoming posts.

The Problem with Time & Timezones

Maybe you’ve struggled with coding for time zones, local calendars or historical time changes. Or perhaps you’ve wondered why a software developer went pale when you asked them to add local time calculations to an app and wondered why?

In this classic review, Tom Scott explains how a seemingly simple measurement calculation becomes a “twisty-turny thing” that takes software developers down a path to madness.

I’ve been writing hands-on examples for using MicroPython on XBee radios. MicroPython is an open-source programming language based on Python 3, modified to fit on small devices, and optimized for microcontrollers. By using MicroPython, an easy-to-learn scripting and programming language, you can rapidly prototype intelligent behaviors at the edges of your network. Cryptic sensor readings can be transformed into useful data, excess transmissions can be intelligently filtered out, and modern sensors and actuators can be employed directly. Here’s the examples thus far:

Here’s a fun project I created for Digi International a while back. I just wrote up for them as an Instructable so that anyone can make their own. All materials, steps, diagrams and necessary code are included in the instructions. You can get started right away.

The Digi XBee3 Cellular SMS ActivityBot is an educational robot that can be controlled with text messages from any cell phone, anywhere in the world. The ActivityBot, made by Digi’s friends at Parallax Inc. is designed for first-time robot-builders and is widely used in technology and engineering education.

SMS text messages sent to the robot can command it to drive forward, back, or the left or right. It has a built in roaming mode where it becomes self-driving, using two “whisker” sensors to detect obstacles to the right or left. The ActivityBot uses the Digi XBee3 Cellular module to report back what it’s sensing in real time. For example, any time one of the “whisker” sensors is triggered, that event is immediately reported back to the cell phone as a text. (Of course, only robots should text and drive.) You can see all of these behaviors in the video below, then build your own using these complete instructions.

Technology separates us from nature, but does it need to? I used some of my stay at the Digital Naturalism Conference in Thailand to prototype a clock that determines local time of day from sunlight to promote a natural sense of timekeeping.

By using technology to encourage human relationships with nature, I hope to highlight that machines can encourage us to be *more* human and organic rather than slowly making people irrelevant. As a counterpoint to consuming industrialized time we can also obtain time from scratch, regaining control of the very pacing that drives our lives. The Sun Set Clock uses local solar time, therefore noon is when the sun is at apogee at our location. This is how time used to be measured, before telegraphs and transcontinental trains required a move to time zones, where the clock and the sun no longer match. This system isn’t concerned with exactitude–there’s plenty of systems to do that if you need it. Instead this clock can be used to mark the general progress of the day rather than creating anxiety around how every minute is used.

Sun Set Clock in its natural environment

The initial prototype uses light level changes to detect sunrise and sunset, with local noon being the point exactly between these two events. When the clock starts, it makes its best estimate of the time. For example, if it’s dark at startup, the clock assumes that it’s midnight because that’s the best guess you can make without more information. At sunrise, this corrects to 6 am (a higher-quality guess) and then at sunset it will correct to the proper local time (not time zone time but astronomical time at your precise location). All of this works, although it’s still a bit fragile–operating best in full view of the sky on a relatively sunny day. Dark clouds, deep shadows and porch lights can confuse it, so these will need to be addressed in a future version. For now, I’m enjoying what I think of as “some time of my own.” I hope you enjoy it too.


Sun Set Clock – Instructions for Use


Spent much of June on a jungle island in Thailand, attending a biology-art-hackathon-“un-conference” to build electronics projects that interact with nature. The first-ever Digital Naturalism Conference on Koh Lon island ran for six weeks of arty, ant-licking, bio-mimicking, data logging, fruit roasting, butane soldering fun that pushed my limits and reminded me how outstanding and wildly creative the maker community can be. More will be written about this but special thanks to Andy, Tasneem and Yannick for their extraordinary efforts to create a wilderness community out of thin air and coconut rope.

Here’s some photos I took during my time on Koh Lon with ~100 motivated makers:

Supply boat to Koh Lon

The island appears

The island appears

The Diva, our floating makerspace

Registration booth

Examining insects


New cellular protocols rolling out in 2017 will provide low power and low cost cellular connectivity for industrial Internet of Things applications. In this new video for Digi International, I explain the LTE-M and NB-IoT low bandwidth protocols by breaking down the differences between the two and sharing some examples of their use in industrial applications.