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
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
Materials:
- Kitchen Scissors
- Raspberry Pi
- Raspberry Pi HQ Camera (note: this tutorial will not cover how to use the camera).
- Raspberry Pi Lens with C-Mount
- Motor Drivers (linked are the ones I used. But they only allow for one-way rotation. I would recommend using something like this instead).
- TT motors and Wheels
- TT Motor Brackets
- 12V 30RPM Gear Motor
- NeoPixel Strip
- 74AHCT125 Level Shifter
- DC-DC Buck Converter
- Assorted M4 Bolts and Nuts
- 5mm Flange Bearing
- 5mm Hub
- 8mm Hub
- 12V 3Amp Power Supply
- Assorted Building Materials: acrylic 3mm and 6mm, 5mm metal rod, electrical wire, spring, plastic spacers, PLA filament.
Tools:
- Laser Cutter
- 3D Printer
- Hand Tools: drill, pliers, crimps, soldering iron, Allen keys, screwdrivers.
Scissor Mechanism Design
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
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
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
Upon completion of the robot there are three main features I would want to improve in the future:
- Using Delrin or some other material to prevent cracks/shattering upon violent collision
- Use a bi-directional motor driver.
- 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.