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
制造商零件编号 4534
BONSAI BUCKAROO PLANT CARE HELPE
Adafruit Industries LLC
制造商零件编号 4546
SUBMERSIBLE 3VDC HORIZONTAL PUMP
Adafruit Industries LLC
制造商零件编号 4545
TUBING PVC 8MM ID X 1 METER
Adafruit Industries LLC
制造商零件编号 4100
SMALL ALLIGATOR CLIP TEST LEAD (
Adafruit Industries LLC
制造商零件编号 2185
CABLE A PLUG TO MCR B PLUG 6.56'
Adafruit Industries LLC
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