How Snippy Was Built
Before reading this tutorial I’d recommend checking out the previous blog post exploring the motivation behind Snippy.
Snippy is a remote control robot with a pair of functioning scissors for cutting up anything in its path. Like many fraudulent Kickstarter product launches, some of the advertised features in the demo video have not been implemented yet… and probably never will be. This tutorial is simply how to build a robot car with a pair of scissors.
No artificial intelligence.
No natural language processing.
No remote surveillance camera and microphone.
Just 4 wheels and a pair of 3-inch stainless steel blades.
Materials
Raspberry Pi HQ Camera (note: this tutorial will not cover how to use the camera).
Motor Drivers (linked are the ones I used. But they only allow for one-way rotation. I would recommend using something like this instead).
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
Below 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 modelled. See this tutorial for how to use a canvas in Fusion 360.
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 were the placement of the scissors, both in relation to the ground 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.
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.