The Cumin Lander is a small planetary lander-inspired circuit sculpture that displays time, temperature, humidity, and pressure.

I had just finished building the BLE satellite sculpture and wanted to keep building with the Seeedstudio Xiao BLE dev board, designed around the nRF52840 BLE SoC. The form factor is very small (and hence the name, Xiao, which in Chinese means small/little!) and has a built-in regulator and a battery charger.

Instead of using a color IPS TFT display like my previous build, I decided to use a more simple and widely available monochrome 128×32 OLED display module. They only require a 3.3V power source and talk over I2C. I have previously used this display on my air quality measuring sculpture.

Parts list

Tools

  • Soldering Iron. Any good soldering iron above 60W will work. I recently started using Pinecil, and have been enjoying using it a lot. The Hakko FX888D is a solid choice as well, or a Weller.
  • Solder. I have not had good luck with lead-free solder.
  • Flux. I use this flux pen which is very convenient to dispense.
  • Flat needle nose pliers. These flat ones are awesome, while these thin ones are good for tighter bends.
  • Flush cutter. I like this one from Xuron
  • Steel wool to clean the joints.
  • Printer for printing templates

(*some of the product links include Amazon affiliate links)

Schematic

The OLED module and the BME280 sensor are connected in parallel to the Xiao’s I2C bus. You don’t need external pull-up resistors since these are built into the display module. The buzzer is directly connected to D0 pin which is PWMable. Ideally, you’d want to drive the buzzer via a transistor instead of directly hooking it up to the GPIO, but I was being lazy. An LED is connected to D6 via a 220 ohm resistor. On the actual lander, I used a 0805 ultrabright LED. I added an optional push-button between D1 (with its internal pull-up resistor enabled) and GND. The firmware currently does not make use of it. One feature I really like about Xiao is the integrated single-cell Li-Ion/Li-Po battery charger, with accessible pads on the underside. I attached a 14250 Li-Ion battery to these pads via an SPST power switch. The battery charges automatically whenever the Xiao is plugged over USB.

Display

The monochrome OLED modules are available in various sizes and configurations. I have opted for the widely-used 0.91″ 128×32 pixel model, which is based on the SSD1306 controller. It communicates via I2C and operates at 3.3V. For the Arduino platform, there is an abundance of firmware libraries compatible with these modules. I am utilizing the SSD1306 display library developed by Adafruit.

Sensor

I’m using a BME280 sensor that measures temperature, humidity, and pressure. There are lots of cheap breakout boards available for this sensor and they usually have onboard pull-up resistors for the I2C lines. I accidentally ordered the ones that were configured to use SPI instead of I2C, so I had to modify the setting by soldering in a jumper. So watch out for this when ordering.

Power

⚠ Please use these batteries with extreme caution as improper use will result in fire 🔥

The lander is primarily powered by a single 3.7V 300mAh 14250-sized (sometimes called ½ AAA) Li-Ion cell. The Xiao BLE has a built-in Li-Ion battery charger, so the cell is directly connected to its BAT+ pin on the back. The cell is charged by simply powering the Xiao over USB.

These batteries also do not have any protection circuit on them which means if there is an accidental short circuit, it will result in thermal runaway. If you are uncomfortable with working with these batteries just use USB for power or use a folded LiPo battery with build-in protection like this one.

Firmware

Complete source code for this project can be found on the project’s GitHub page.

Upon bootup, the lander initializes the GPIOs, BLE radio, display, and sensor. After that, it plays a little melody. Next, it fetches temperature, humidity, and pressure data from the BME280 sensor over I2C and displays it onto the OLED along with the current time. It will do this once every second in a loop.

I added a wireless functionality that lets you set its time over Bluetooth. You can do this by connecting to the lander using Adafruit’s Bluefruit Connect app. You set the time by sending a time string through its UART utility. For example, if you want to set the time to 7:45:33 PM, you would send 194533. The time is shown in a 12-hour format, but you send it in a 24-hour format to keep things simple.

There are more things you could add to make the lander better, like using the button to change its mode or setting an alarm through the wireless connection, which could then play a tune. I’ll let you decide what to add next!

Learn how to set up the Arduino IDE to work with the XIAO on Seeed Studio’s website here.

Construction

I tested and finalized the circuit on a breadboard. I had initially used the SHT31 sensor but then moved to the BME280, which measures temperature, humidity, and pressure. The OLED and the sensor talk over I2C and operate at 3.3V, making the connections to the Xiao quite simple.

I designed a printable template in Eagle to help guide the soldering of the frame and the actual circuit. Like most of my sculptures, the entire frame is connected to GND, which makes routing the power very easy.

The early prototype was made from 20AWG copper wire. I later decided to use brass.

Testing the OLED and the sensor before adding the rest.

 

The construction of the legs is the same as my previous Boron Lander. The landing pads are small 14mm brass discs that I purchased at an etsy shop. You can also make your own by punching discs out of 0.5mm thick brass or copper sheet. Remember to solder the pads at the very end of the build. If you do so in the beginning, you might end up with a wobbly sculpture!

I forgot to take stills during the build process, but hopefully, this timelapse video gives a good idea.

If you found this documentation useful, please consider supporting me on Patreon or buying me coffee! Thank you!