Snippy: a Robotic Home Assistant… But With Scissors

by Will Donaldson in Circuits > Robots

2176 Views, 9 Favorites, 0 Comments

Snippy: a Robotic Home Assistant… But With Scissors

Meet Snippy: The Self-Destructing Scissor Robot

Forget Amazon Astro, Vector, and even the trusty Roomba. Snippy is a new robotic home assistant taking on Big Tech with a humble pair of scissors.

In a short product demo video (see above), with all the cliché trappings of an over-hyped startup, Snippy is unveiled to the world. Snippy promises to alleviate you from the mundane day-to-day problems that you didn’t know you wanted a solution to*.

Snippy is a remote control robot with a pair of functioning scissors for cutting up anything in its path. This Instructable will document how to build Snippy, also documented on my website.

Supplies

1.png
IMG_6264.JPG
IMG_6272.JPG

Materials:

Tools:

  • Laser Cutter
  • 3D Printer
  • Hand Tools: drill, pliers, crimps, soldering iron, Allen keys, screwdrivers.

Scissor Mechanism Design

side view snippy.png
IMG_6221.JPG
Scissors v8.png

The first image above is a side view of the CAD model for the scissor cutting mechanism. The scissors are mounted such that the tip of the bottom blade is always in contact with the ground while the upper blade rotates. This design was chosen (instead of the top blade being fixed and the bottom blade moving) so that the scissors could “scoop” up anything on the ground and “feed” it into the scissors for cutting.

The scissor is driven by a 3-arm “windmill” attached to a 12V 30RPM motor (resulting in 90 cuts per minute). The sprocket spins clockwise (when viewed from the perspective in the image below), lifting the blade of the scissor up until the arm rotates out of range and a spring pulls the scissor blade down to make contact with the next arm on the “windmill”.

In order to model the scissors in Fusion 360 I took a picture of the scissors and imported it as a canvas. From the canvas, the blade and handle can be modeled. See this tutorial for how to use a canvas in Fusion 360.

Fabrication

This step contains the SVG files for laser cutting. Due to the high forces required to cut certain materials with scissors, 6mm acrylic should be used, with the exception of the robot-base.svg and robot-top.svg which can be made out of thinner 3mm acrylic.

Four copies of the TT-bracket.3mf must be 3D printed for mounting the TT motors to the acrylic robot frame. No support structure is needed when printing.

Hardware Assembly

Assembly v35.png
Assembly v32.png

I modeled and laser-cut the acrylic frame with pre-planned M4 bolt holes and connected the components together with a variety of 3D printed brackets. The only critical dimensions are the placement of the scissors, both in relation to the floor, and the driving motor. These measurements were identified by modeling the scissors in Fusion 360 from a reference photograph. The rest of the dimensions are rather arbitrary and are driven primarily by aesthetics.

To assemble, start by bolting the 12V 30RPM motor to the robot-right-panel.svg, then assemble the white armature that will move the scissor and sandwich the mechanism as shown in the diagrams in between the robot-left-panel. The four TT-Brackets.3mf can be bolted directly to these panels with M4 bolts and then finally the robot base panel.

Unfortunately, the internal torsion spring of the scissors was so strong that when the scissor sprung open, the acrylic would shatter after just a few cycles. To overcome this I removed the scissors’ torsion spring and replaced it with a weaker tension spring as shown in the image below. One end of the tension spring is bolted to the underside of the robot frame and the other end to the moving scissor blade.

Ideally, I would have kept the scissors’ internal torsion spring but doing so would require building the robot frame out of less brittle material like Delrin, however, it’s an expensive material and I don’t want to deal with the toxic fumes when laser cutting Delrin.

Circuit

I have not drawn a circuit diagram (I may do this in the future). The 12V input supply connects directly to all 3 motor drivers: one motor driver for the left side wheels, one for the right, and one for the scissor motor. Note that the motor drivers I used (see material list) are not good as they only allow for one direction of rotation. As such, when I wanted to film the robot spinning around I had to manually rewire the motor driver to reverse polarity. Using a bi-directional PWM motor driver (like the L298N) would be superior.

The 12V power supply is also connected to a DC-DC buck converter to step the voltage down to logic 5V for powering the Raspberry Pi.

A strip of 16 NeoPixels is connected to each side of the robot’s underbelly. However, the GPIO pins on the Raspberry Pi are 3.3V whereas the NeoPixels require 5V. As such, I used a 74AHCT125 level shifter to convert the data signal between these two voltages.

Software Overview

IMG_6615.JPG

In order to drive the robot around, I used an Xbox One controller. I used its Bluetooth functionality and paired it with the Raspberry Pi by following this guide.

In the future, I will come back and post the code used for this robot, but essentially, by using the xboxdrv library in Python I was able to parse the data from the Bluetooth Xbox Controller and used the left joystick for moving the robot, the right bumper button for the speed of the scissor motor, and buttons A, B, X, Y for four different LED color patterns.

Attached are the four Python files to run the robot. The block of code displayed below is the main.py program, responsible for checking for user input and updating the NeoPixel LEDs and driving the motors.

# Program needs to run at root for NeoPixels to work
import xbox_one_controller
import robot
import time
import lights

# xbox controller key mappings
left_joy_x = 0
left_joy_y = 1
scissor_throttle = 4

def main():
    while True:
        lights.colours()
        setpoint_angle, magnitude = xbox_one_controller.check_joy(left_joy_x, left_joy_y)
        scissor_speed = xbox_one_controller.analog_trigger(scissor_throttle)
        robot.drive(setpoint_angle, magnitude)
        robot.cut(scissor_speed)
        time.sleep(0.05)

if __name__ == "__main__":
    main()

Hindsight

front shot.png
Meet Snippy: The Self-Destructing Scissor Robot

Upon completion of the robot there are three main features I would want to improve in the future:

  1. Using Delrin or some other material to prevent cracks/shattering upon violent collision
  2. Use a bi-directional motor driver.
  3. After upgrading to Delrin, replace the scissors’ original internal torsion spring.

If you enjoy this tutorial please consider supporting my work and the development of future projects through BuyMeACoffee.

Disclaimer: Links in this blog may be affiliate links. If you purchase a product or service through the links I provide I may receive a small commission. Affiliate links include no additional charge to you.