Chauncey the Flower Care Bot with CLUE and Bonsai Buckaroo
2024-05-03 | By Adafruit Industries
License: See Original Project 3D Printing
Courtesy of Adafruit
Guide by John Park
Overview
Chauncey is a Wrylon Robotical Flower Care Robot designed by Barry McWilliams and built by John Park. Due to certain regrettable events, full-scale production of the FLORABOT 3L-1G model, a.k.a. Chauncey, ceased in 1913. However, do not despair -- you can build your own fully functional, 3D-printed Chauncey.
Mk. Plans for building Chauncey were published in the excellent 3D Printing Projects book from Maker Media.
Now, this updated Mk. II Chauncey can be created using a CLUE microcontroller board running CircuitPython and the Bonsai Buckaroo add-on board to sense soil moisture levels and water your flower or plant using a small, submersible pump.
Parts
- Adafruit CLUE - nRF52840 Express with Bluetooth LE
- Adafruit Bonsai Buckaroo - micro:bit & CLUE Plant Care Helper
- Submersible 3V DC Water Pump with 1 Meter Wire - Horizontal Type
- Tubing for Submersible Pumps - PVC 6mm ID - 1 Meter Long
- Small Alligator Clip Test Lead (set of 6)USB A/Micro Cable - 2m
- USB A/Micro Cable - 2m
Materials & Tools
In addition to the parts above, you'll also need:
- A 3D printer or have it printed by a 3D printing service
- 2 ea. galvanized nails
- A small glass jar
- CA glue (a.k.a. "super glue")
- A handheld rotary tool
Optional:
- Acrylic craft paint & brushes
- Acrylic paint spray sealer
Code the CLUE
In order to code the Gardner, first follow these instructions on getting CircuitPython and the necessary libraries installed on your CLUE board.
Once you've gotten the board set up, click Download: Project Zip below in the code guide. From the .zip file drag the two .bmp images to your CLUE's CIRCUITPY drive via USB.
Then, copy the code from the code-block below and paste it into the Mu editor and save it to your CLUE as code.py (or copy code.py from the zip file and place on the CIRCUITPY drive.)
Your CLUE's CIRCUITPY drive should look like this.
# SPDX-FileCopyrightText: 2020 John Park for Adafruit Industries
#
# SPDX-License-Identifier: MIT
# Bonsai Buckaroo + CLUE Plant Care Bot
import time
import board
from digitalio import DigitalInOut, Direction
from analogio import AnalogIn
from adafruit_clue import clue
from adafruit_display_text import label
import displayio
import terminalio
import pwmio
moist_level = 50 # adjust this value as needed for your plant
board.DISPLAY.brightness = 0.8
clue.pixel.fill(0) # turn off NeoPixel
clue_display = displayio.Group()
# draw the dry plant
dry_plant_file = open("dry.bmp", "rb")
dry_plant_bmp = displayio.OnDiskBitmap(dry_plant_file)
# CircuitPython 6 & 7 compatible
dry_plant_sprite = displayio.TileGrid(
dry_plant_bmp,
pixel_shader=getattr(dry_plant_bmp, "pixel_shader", displayio.ColorConverter()),
)
# CircuitPython 7 compatible
# dry_plant_sprite = displayio.TileGrid(
# dry_plant_bmp, pixel_shader=dry_plant_bmp.pixel_shader
# )
clue_display.append(dry_plant_sprite)
# draw the happy plant on top (so it can be moved out of the way when needed)
happy_plant_file = open("happy.bmp", "rb")
happy_plant_bmp = displayio.OnDiskBitmap(happy_plant_file)
# CircuitPython 6 & 7 compatible
happy_plant_sprite = displayio.TileGrid(
happy_plant_bmp,
pixel_shader=getattr(happy_plant_bmp, "pixel_shader", displayio.ColorConverter()),
)
# CircuitPython 7 compatible
# happy_plant_sprite = displayio.TileGrid(
# happy_plant_bmp, pixel_shader=happy_plant_bmp.pixel_shader
# )
clue_display.append(happy_plant_sprite)
# Create text
# first create the group
text_group = displayio.Group(scale=3)
# Make a label
title_label = label.Label(terminalio.FONT, text="CLUE Plant", color=0x00FF22)
# Position the label
title_label.x = 10
title_label.y = 4
# Append label to group
text_group.append(title_label)
soil_label = label.Label(terminalio.FONT, text="Soil: ", color=0xFFAA88)
soil_label.x = 4
soil_label.y = 64
text_group.append(soil_label)
motor_label = label.Label(terminalio.FONT, text="Motor off", color=0xFF0000)
motor_label.x = 4
motor_label.y = 74
text_group.append(motor_label)
clue_display.append(text_group)
board.DISPLAY.root_group = clue_display
motor = DigitalInOut(board.P2)
motor.direction = Direction.OUTPUT
buzzer = pwmio.PWMOut(board.SPEAKER, variable_frequency=True)
buzzer.frequency = 1000
sense_pin = board.P1
analog = AnalogIn(board.P1)
def read_and_average(ain, times, wait):
asum = 0
for _ in range(times):
asum += ain.value
time.sleep(wait)
return asum / times
time.sleep(5)
while True:
# take 100 readings and average them
aval = read_and_average(analog, 100, 0.01)
# calculate a percentage (aval ranges from 0 to 65535)
aperc = aval / 65535 * 100
# display the percentage
soil_label.text = "Soil: {} %".format(int(aperc))
print((aval, aperc))
if aperc < moist_level:
happy_plant_sprite.x = 300 # move the happy sprite away
time.sleep(1)
motor.value = True
motor_label.text = "Motor ON"
motor_label.color = 0x00FF00
buzzer.duty_cycle = 2 ** 15
time.sleep(0.5)
# always turn off quickly
motor.value = False
motor_label.text = "Motor off"
motor_label.color = 0xFF0000
buzzer.duty_cycle = 0
if aperc >= moist_level:
happy_plant_sprite.x = 0 # bring back the happy sprite
Assemble the Bonsai Buckaroo
Wiring up your Bonsai Buckaroo
For this project, you'll need a Bonsai Buckaroo, a CLUE, a water pump, some tubing, alligator clips, and two nails (or something else conductive will work too!). It's super simple to connect them up.
Here are the basic steps -- you can then use the photos below for more detail.
- Mount the Bonsai Buckaroo to the CLUE using the included mounting hardware.
- Connect the red wire of the water pump to the top of the motor controller terminal.
- Connect the black wire of the water pump to the bottom of the motor controller terminal.
- Connect an alligator clip to the 3V pad on the Bonsai Buckaroo.
- Connect an alligator clip to the PIN#1 pad of the Bonsai Buckaroo.
- Connect the other end of the alligator clip wires to nails stuck into the soil of your plant.
- Connect the tubing to the water pump.
- Place the other end of the tubing in the soil of the plant.
Fasten
First, use the included screws to fasten the CLUE board to the Bonsai Buckaroo.
Wire
The Bonsai Buckaroo has a motor driver built in to run the DC pump.
To wire it, place the red wire in the top terminal and the black wire in the bottom one.
Push down the tabs with a screwdriver as you insert each wire to get a solid connection.
Tubing
Press fit the tubing onto the pump outlet.
For and extra secure connection, you can use a zip tie like a hose clamp. Pull it tight and trim off the excess.
Probes
To make the soil moisture probes, simple clip one end of each lead to a nail.
Push the nails deep into your flowerpot soil.
You will then connect the other ends to 3V and Pin 1 connections on the Bonsai Buckaroo.
Pump and Water
Now, to use the watering feature of the project, you'll need a container of water into which you can you submerse the pump.
Make sure the tubing is positioned over the flowerpot and then turn it on.
If the soil is moist, you'll see a happy plant graphic and the percentage displayed.
When the soil becomes dry over time, the display will show the percentage reading, and if it gets below 50%, the dry plant graphic will be shown, the motor will start pumping, and the buzzer will sound until the moisture level is back above 50%.
Build Chauncey the Flower Care Bot
Model Files
Download the model files from the link below. You'll need to open the .stl model files into your slicer of choice (I used Cura) and prep them for printing. In general, a 0.4mm nozzle with 0.2mm layer height and 10% infill works well for these parts.
Big Creations from Small Printers
Chauncey’s parts have been carefully designed to print on a small desktop 3D printer with a build area of roughly 6″x6″x6″. The assembled final robot is much larger than one that could be printed in a single pass on most printers.
Print and Assemble the Legs and Feet
Print three copies of the fBot_foot.stl file.
You can pick specific filament colors, or if you want to paint them later, color won't matter, so you have a chance to use up some colors you don't always use!
Print three each of the lower socket fBot_lowSocket.stl, and upper leg fBot_legBend.stl.
Assemble the legs by pushing the lower sockets into the tops of the feet, and the bends into the lower sockets.
Print the Body
In order to create a body larger than the build platform of many printers, Chauncey’s body is printed in four sections and later assembled.
Print one copy of the fBot_bodyFL.stl, fBot_bodyFR.stl, fBot_bodyBL.stl, and fBot_bodyBR.stl files.
(In the photo, you will note that the front left body section is blue and white, due to a mid-print filament switch.)
Before joining the body parts, print the three leg sockets - fBot_legSocketCenter.stl, fBot_legSocketLeft.stl, and fBot_legSocketRight.stl, and the eye tube fBot_eyeTube.stl.
Assemble the Body
In order to assemble the body parts, we’ll use a dual-bonding technique of gluing and friction welding.
The glue creates a bond to hold the parts together temporarily, but it’s the friction welding that creates the real strength, since the friction-heated PLA plastic bonds the parts together. This method also has the benefit of filling in any gaps between parts.
To begin assembling the body, place a small amount of superglue on the clean surface of one of the two parts to be joined.
Press the parts together for 30 seconds as shown here.
Follow the directions on the superglue container as to safety. Wear eye protection and do not touch glue to skin.
Friction-Welding Technique
Chuck the free end of a PLA filament spool into your rotary tool and tighten the chuck. Then use diagonal end cutters to snip off the PLA filament—leaving about 1/2″ of filament protruding from the tip.
Turn the rotary tool up to a 25,000–30,000 RPM setting. Moving in small circles, push the filament tip into the seam or gap you wish to weld, moving back and forth and overlapping across to both sides of the seam.
Press hard enough that you see the PLA melt a bit as it heats up. Note the small circles in the plastic seam.
Use eye protection to avoid injury from flying plastic bits!
The filament bit will get used up as you work. Turn off the tool, waiting for it to stop spinning. Loosen the rotary tool chuck, pull out another 1/2″ length, re-tighten, and turn the tool back on to continue welding. Repeat this until you have to refill the tool with a new length of PLA from the spool.
Welds can take 10 to 20 seconds to fully cool. You can take advantage of this by adjusting the fit of some parts while the weld is still warm.
Assemble the Leg Sockets and Eye Tube
Once the body welds are made, glue the center leg socket to the back right panel. The glue will help with holding the pieces in place when you later friction-weld the seams.
Let this part dry, then fit and glue the back right and back left body quarters to the socket. Once these have dried, you’ll use the friction-welding technique to permanently bond the parts as shown.
Proceed in this manner, gluing and welding the left leg socket to the front left body quarter, and the right leg socket to the front right body quarter.
These two quarters will be closed around the eye tube before gluing and welding. Some small tack welds will be enough to keep the eye tube in place.
Add the Eye
Print the fBot_iris.stl and fBot_pupil.stl parts and then fit the iris into the eye tube from the back, and the pupil into the iris from the front.
Deck Rim
The top of the ‘Bot has a deck rim running all the way around it to hold the deck in place. Print four copies of fBot_rim.stl, then glue and weld them to the top of the ‘Bot’s body.
If there are any gaps between sections, these can be filled in with friction welds, for that time-worn, hard-working robot look!
Railings
Print four copies of the safety railing model, fBot_railing.stl, and then join them together with a bit of glue.
The railing goes on top of the deck rim; you can glue it on before or after painting, or not glue it down at all.
Stovepipe
Print the two parts of the stovepipe, and then glue them together.
Once dry, push the stovepipe assembly into the port hole in the body to check the fit.
We’ll be priming and painting it separately, then reinserting it later.
Test Fit the Legs
The legs of the ‘Bot can be placed into the sockets without permanently adhering them, just to check the fit. We’ll assemble it again later after priming and painting.
Priming
If you haven’t printed your parts in their final colors, this is a good time to paint the robot.
Use a fine, white spray primer, such as Tamiya model primer or automotive primer. Follow the directions on the can and prime in a well-ventilated area.
Let the first coat dry, and prime with a second coat for best coverage.
Painting
You can then use acrylic craft paint and brushes to paint the robot in your favorite color scheme—even using techniques such as ink washes and dry-brushing highlights.
There are many good resources on the internet on painting models, so we won’t go into too many details here.
The basic technique used here was to start with a few coats of a base color, and then add a darker wash later to add some patina.
Seal It
Once the Flower ‘Bot is painted and has dried, glue the stovepipe in place.
Then seal the paint with a matte finish spray sealer to prevent the paint from chipping.
Deck Build
This updated Mk. II version of Chauncey has a different deck design than the Mk. I -- this one allows for different sized pots to be set into it and does not require access for below-deck components. The CLUE, water vessel, and pump will all remain above deck.
Print the fBot_deck.stl file. You can optionally paint it at this point (I decided to leave this one its natural 3D filament color.)
Pump Cup
To keep the pump secured, we'll print the fBot_pump_cup.stl
It has notches built into the bottom to hold the pump in place. Since 3D printed cups can be difficult to make perfectly watertight (any gaps will be found by water!) this short cup is made to be placed inside a larger vessel, such as a medium sized glass jar.
Setup
This is where it all comes together! First, set the deck onto the top of the 'Bot.
Place the pump you prepared earlier with the tubing and optional zip tie, into the pump cup.
Set the pump cup inside the glass jar, and fill with water.
Place your flowerpot in one of the deck holes. It's best to use a closed bottomed pot so no leaking will occur.
As before, the motor and probes should be connected to the Bonsai Buckaroo, with the probe nails embedded in the soil.
Power on the CLUE using USB or battery power.
Have questions or comments? Continue the conversation on TechForum, DigiKey's online community and technical resource.
Visit TechForum