Maker.io main logo

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

 

bot_1

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.‎

water_2

 

Parts

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

clue_3

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.‎

drive_4

Download Project Bundle

Copy Code
# 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

View on GitHub

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.‎

copy_5

Fasten

First, use the included screws to fasten the CLUE board to the Bonsai Buckaroo.‎

fasten_6

fasten_7

fasten_8

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.‎

wire_9

wire_10

wire_11

wire_12

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.‎

tubing_13

tubing_14

tubing_15

tubing_16

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.‎

probes_17

probes_18

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.‎

water_19

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%.‎

display_20

Build Chauncey the Flower Care Bot

bot_21

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.‎

model_22

Chauncey 3D Model files

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_23

print_24

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.‎

assemble_25

assemble_26

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.)‎

body_27

body_28

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.‎‎ ‎

join_29

join_30

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.‎

assemble_31

assemble_32

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.‎

weld_33

weld_34

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.‎

leg_35

leg_36

leg_37

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.‎

eye_38

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!‎

deck_39

deck_40

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.‎

 

railings_41

railings_42

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.‎

stovepipe_43

stovepipe_44

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.‎

test_45

test_46

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.‎

priming_47

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.‎

painting_48

painting_49

painting_50

painting_51

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.‎

seal_52

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.)‎

deck_53

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.‎

pump_54

pump_55

pump_56

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.‎

setup_57

 

clue_58

制造商零件编号 4500
CLUE NRF52840 EXPRESS
Adafruit Industries LLC
¥365.90
Details
制造商零件编号 4534
BONSAI BUCKAROO PLANT CARE HELPE
Adafruit Industries LLC
¥40.29
Details
制造商零件编号 4546
SUBMERSIBLE 3VDC HORIZONTAL PUMP
Adafruit Industries LLC
¥24.86
Details
制造商零件编号 4545
TUBING PVC 8MM ID X 1 METER
Adafruit Industries LLC
¥13.28
Details
制造商零件编号 4100
SMALL ALLIGATOR CLIP TEST LEAD (
Adafruit Industries LLC
¥24.01
Details
制造商零件编号 2185
CABLE A PLUG TO MCR B PLUG 6.56'
Adafruit Industries LLC
¥40.29
Details
Add all DigiKey Parts to Cart
TechForum

Have questions or comments? Continue the conversation on TechForum, DigiKey's online community and technical resource.

Visit TechForum