Popsicle Stick Robotic Arm (Group A) (this tutorial is an ongoing experiment in layout/format)

Uncategorized

Learn how to build a simple Arduino-based robotic arm with a gripper using popsicle sticks and a few servos.

Materials

Tools

1

Align the Servos


  • 4 Micro Servos
  • 3 Two-Direction Horns
  • 1 One-Direction Horn
  • Small Screws
  • Small Screwdriver

A: Choose Horns for the Servos

Attach the horns (white wing attachments) to the servos by popping them on top of the servos.

Three of the servos need the horn that extends in two directions while one servo will need the horn that extends in just one direction.

B: Calibrate the Servos

Turn the horn counter-clockwise as far as it will go. Pop the horn off and then back on at the calibrated position. 

One of the servos with the two-direction horns needs to be calibrated parallel to the servo while the other three need to be perpendicular to the servos.

C: Screw in the Horns

Screw the horns securely in using the small screw and a screwdriver.

Back to Top >

2

Prepare Individual Parts


  • 4 Micro Servos
  • 14 Popsicle Sticks
  • Hot Glue Gun and Glue

A: Attach Parallel Popsicle Stick

For the servo that was calibrated so the horn is parallel to the servo, hot glue one end of the popsicle stick to the flat side of the horn.

B: Attach Perpendicular Popsicle Stick

For one of the two-direction horned servos that was calibrated so the horn is perpendicular to the servo, hot glue one end of the popsicle stick to the flat side of the horn.

C: Attach Base Popsicle Stick

For the other two-direction horned servo that was calibrated so the horn is perpendicular to the servo, hot glue the middle of the popsicle stick to the flat side of the horn.

D: Attach Gripper Popsicle Stick

This step is different, the popsicle stick it not on the flat side of the horn.

For the servo with the one-direction horn, hot glue one end of the popsicle stick to the thin clockwise side of the horn.

E: Create a Popsicle Stick Stack

Hot glue 4 popsicle sticks together so that they stack on top of one another. Glue the flat side of the stack to the bottom of the servo that was calibrated to be parallel to the servo. Tear off any excess glue around the edges so the stack can lay flat.

F: Build the Base for the Robot

Lay 3 popsicle sticks down in one direction and 3 popsicle sticks perpendicular to the first 3 to create a grid. Hot glue all the pieces together.

Back to Top >

3

Assemble the Structure


  • Previously Prepared Micro Servos
  • Previously Prepared Robot Base
  • Hot Glue Gun and Glue

A: Attach the Base Servo

Glue the bottom of the servo that has the middle of the popsicle stick attached to the servo to the base you just created.

B: Attach the Parallel Servo

Orient the servo with the stack of popsicle sticks attached so that the popsicle stick attached to the horn can rotate upwards into the air. Glue the side of the popsicle stick stack to the popsicle stick on the base servo.

C: Attach the last Two-Direction Horned Servo

Glue the last servo with a two-direction horn to the popsicle stick on the previous servo so that the popsicle stick rotates away from the center of the robot.

D: Attach the One-Direction Horned Servo

Glue the side of the last servo (as opposed to the bottom) to the popsicle stick on the previous servo so that when this servo rotates, the ends of the two popsicle sticks will close and act as a gripper.

Back to Top >

4

Wiring


  • Built Structure
  • 1 Arduino or equivalent
  • 1 Half Sized Breadboard
  • 4 Potentiometers
  • 26 Male to Male Jumper Wires

A: Build the circuit for one servo

Build the circuit shown. Important: pay attention to and match the colors for the battery pack and the servos!

After programming the Arduino, this allows one potentiometer to control one servo.

B: Build the entire circuit

Build the circuit shown. It’s essentially four iterations of the circuit from the previous step. After programming the Arduino, this will allow you to control each of the servos with the corresponding potentiometer.

Back to Top >

5

Code


  • Arduino
  • Arduino IDE
  • USB to Arduino Cable

A: Create a New Arduino Project

Open the Arduino IDE and create a new project. Delete all of the default content so you have a completely blank sketch.

B: Copy the Code

Copy the code below and paste into your project.

#include <Servo.h>

Servo servo1; // Servos
Servo servo2;
Servo servo3;
Servo servo4;

const int pot1 = A0; // Attach potentiometers
const int pot2 = A1; 
const int pot3 = A2;
const int pot4 = A3;

void setup() {
  // Set up everything and will run once
  
  servo1.attach(5); // Attach servos and define the pin modes
  servo2.attach(6);
  servo3.attach(9);
  servo4.attach(10);
}

void loop() {
  // put your main code here, to run repeatedly:
  
  int pot1Value = analogRead(pot1); // Read the values of the potentiometers
  int pot2Value = analogRead(pot2);
  int pot3Value = analogRead(pot3);
  int pot4Value = analogRead(pot4);
  
  int pot1Angle = map(pot1Value, 0, 1023, 0, 179); // Map the values of potentiometers (0-1023) to angles that the servo can read (0-179 degrees)
  int pot2Angle = map(pot2Value, 0, 1023, 0, 179);
  int pot3Angle = map(pot3Value, 0, 1023, 0, 179);
  int pot4Angle = map(pot4Value, 0, 1023, 0, 179);
  
  servo1.write(pot1Angle); // Make the servos move to the mapped angles
  servo2.write(pot2Angle);
  servo3.write(pot3Angle);
  servo4.write(pot4Angle);
}

C: Connect Arduino and Select Port

Connect you Arduino to your computer via a USB cable. Go to Tools > Board and make sure “Arduino/Genunio Uno” is selected. Then go to Tools > Port and select the appropriate port. The correct port might contain: “USB”, “COM”, “Arduino”. If you are struggling with this step, you may reach out to us.

D: Upload the Code

Upload the code to your Arduino by clicking the arrow button on the top left of the editor. If there are any errors, delete everything and re-copy paste. If there are still errors, make sure you have the right board and port selected.

Back to Top >

6

We’re Done!


To use, simply turn a potentiometer to turn one joint in the robotic arm! The gripper can only turn about halfway so make sure you don’t try to turn the servo further than it should!

Back to Top >

Troubleshooting

A: Nothing is Moving

  • Make sure the battery pack is on and the Arduino is plugged in.
  • Double check the circuit to make sure everything is connected correctly.

B: A servo isn’t Working

  • Try pressing the reset button on the Arduino. Sometimes the servo stops working if its been pushed too far.
  • The servo may be dead, try replacing the wires with the wires of a working servo to see if this servo is working.

C: A Servo is Jittery

  • The servo may be bearing too much weight. Try adding a capacitor to the wiring of the servo.

Popsicle Stick Robotic Arm (Group B) (this tutorial is an ongoing experiment in layout/format)

Uncategorized

Learn how to build a simple Arduino-based robotic arm with a gripper using popsicle sticks and a few servos.

Materials

  • 14 Popsicle Sticks
  • 4 Micro Servos
  • 4 Rotary Potentiometers
  • 1 Half Size Breadboard
  • 1 Arduino Uno
  • 1 6-Volt Battery Pack
  • 26 Jumpers Cables

Tools

  • Hot Glue Gun + Hot Glue Sticks
  • Precision Screwdriver or Other Small Screwdriver
  • Arduino IDE (download this)
  • USB to Arduino Cable

1

Align the Servos

Attach the horns (white wing attachments) to the servos by popping them on top of the servos. Three of the servos need the horn that extends in two directions while one servo will need the horn that extends in just one direction. Turn the horn counter-clockwise as far as it will go. Pop the horn off and then back on at the calibrated position. One of the servos with the two-direction horns needs to be calibrated parallel to the servo while the other three need to be perpendicular to the servos. Finally, Screw the horns securely in using the small screw and a screwdriver.

2

Prepare Individual Parts

For the servo that was calibrated so the horn is parallel to the servo, hot glue one end of the popsicle stick to the flat side of the horn.

For one of the two-direction horned servos that was calibrated so the horn is perpendicular to the servo, hot glue one end of the popsicle stick to the flat side of the horn.

For the other two-direction horned servo that was calibrated so the horn is perpendicular to the servo, hot glue the middle of the popsicle stick to the flat side of the horn.

(The following servo is a little different, read carefully). For the servo with the one-direction horn, hot glue one end of the popsicle stick to the thin clockwise side of the horn.

Hot glue 4 popsicle sticks together so that they stack on top of one another. Glue the flat side of the stack to the bottom of the servo that was calibrated to be parallel to the servo. Tear off any excess glue around the edges so the stack can lay flat.Lay 3 popsicle sticks down in one direction and 3 popsicle sticks perpendicular to the first 3 to create a grid. Hot glue all the pieces together.

3

Assemble the Structure

Glue the bottom of the servo that has the middle of the popsicle stick attached to the servo to the base you just created. Orient the servo with the stack of popsicle sticks attached so that the popsicle stick attached to the horn can rotate upwards into the air. Glue the side of the popsicle stick stack to the popsicle stick on the base servo. Glue the bottom of the servo that has the middle of the popsicle stick attached to the servo to the base you just created. Glue the last servo with a two-direction horn to the popsicle stick on the previous servo so that the popsicle stick rotates away from the center of the robot. Glue the side of the last servo (as opposed to the bottom) to the popsicle stick on the previous servo so that when this servo rotates, the ends of the two popsicle sticks will close and act as a gripper.

4

Wiring

Build the circuit shown. After programming the Arduino, this will allow you to control each of the servos with the corresponding potentiometer.

5

Code

Open the Arduino IDE and create a new project. Delete all of the default content so you have a completely blank sketch. Copy the code below and paste into your project. Connect you Arduino to your computer via a USB cable. Go to Tools > Board and make sure “Arduino/Genunio Uno” is selected. Then go to Tools > Port and select the appropriate port. The correct port might contain: “USB”, “COM”, “Arduino”. If you are struggling with this, you may reach out to us. Finally, upload the code to your Arduino by clicking the arrow button on the top left of the editor. If there are any errors, delete everything and re-copy paste. If there are still errors, make sure you have the right board and port selected.

#include <Servo.h>

Servo servo1; // Servos
Servo servo2;
Servo servo3;
Servo servo4;

const int pot1 = A0; // Attach potentiometers
const int pot2 = A1; 
const int pot3 = A2;
const int pot4 = A3;

void setup() {
  // Set up everything and will run once
  
  servo1.attach(5); // Attach servos and define the pin modes
  servo2.attach(6);
  servo3.attach(9);
  servo4.attach(10);
}

void loop() {
  // put your main code here, to run repeatedly:
  
  int pot1Value = analogRead(pot1); // Read the values of the potentiometers
  int pot2Value = analogRead(pot2);
  int pot3Value = analogRead(pot3);
  int pot4Value = analogRead(pot4);
  
  int pot1Angle = map(pot1Value, 0, 1023, 0, 179); // Map the values of potentiometers (0-1023) to angles that the servo can read (0-179 degrees)
  int pot2Angle = map(pot2Value, 0, 1023, 0, 179);
  int pot3Angle = map(pot3Value, 0, 1023, 0, 179);
  int pot4Angle = map(pot4Value, 0, 1023, 0, 179);
  
  servo1.write(pot1Angle); // Make the servos move to the mapped angles
  servo2.write(pot2Angle);
  servo3.write(pot3Angle);
  servo4.write(pot4Angle);
}

6

We’re Done!

To use, simply turn a potentiometer to turn one joint in the robotic arm! The gripper can only turn about halfway so make sure you don’t try to turn the servo further than it should!

Troubleshooting

Nothing is Moving

  • Make sure the battery pack is on and the Arduino is plugged in.
  • Double check the circuit to make sure everything is connected correctly.

A Servo isn’t Working

  • Try pressing the reset button on the Arduino. Sometimes the servo stops working if its been pushed too far.
  • The servo may be dead, try replacing the wires with the wires of a working servo to see if this servo is working.

A Servo is Jittery

  • The servo may be bearing too much weight. Try adding a capacitor to the wiring of the servo.

Sunbot Swarm Test 3

Plantbots

The third test of the Sunbot Swarm occurred this past weekend, March 9th, 2019. A few important changes have occurred in the design:

  1. Switched to an acrylic chassis for greater stability
  2. Added plastic domes to enclose the bots. With that, I had to consider how to attach the domes in a way that made them stable, but also easy to open and modify. I used long threaded rods and nuts. Working on a new tutorial to reflect these changes, with pictures.

I like the domes a lot. Visually, they begin to take the bots into a more playful place. They reference spacesuits and cyborgs. Practically, they allow the robots to be outside in cooler weather, and in theory, to survive in a greater range of ecosystems.

Things that are working well:

They are much more stable and exhibited some interesting behavior in terms of sometimes flocking together (perhaps amplified by infrared communication, the bots start emitting if they have enough light), and sometimes widely dispersing. They became much more active later in the afternoon. One of the ivy bots was satisfied with lower light levels, I need to check the sensors on that one, but it is a bit of an anomaly in the video, always hanging out in shade, though perhaps appropriate to an ivy. The rest performed pretty well. They generated a massive response from bystanders, lots of good conversations were had.

Highlights:

-A man asked if they were controlled by turtles. And then a child suggested they were robotic. We had a good chat altogether based on this.

-A man told me about his most beloved plant, the “people” plant, which attracts visitors to his home, sometimes too many (in-laws). Lots of discussion of our love for plants overall.

-Many people asked whether the plant itself was “controlling” the movement or acting as a sensor, which is a great question.

Things that need more iteration:

Airholes

One thing I was uncertain of, was how much air-flow the plants would need. A few of the plants did steam up which seemed to indicate they needed more air holes. I wedged some sticks into the seam of the plastic dome to allow more air flow for those. For now, I am just leaving them in the enclosures for tests and documentation, and I take them out afterward (inside). I need to research more into terrarium/greenhouse design, to determine the right amount of air holes, that won’t let too much cool air in.

The other good thing about air holes is that it would allow rain water to get in, but I do have the issue of needing to drain the water to the sides, to avoid draining directly onto the electronics. That issue was better resolved in my original design for the Sunbots, the structure of which was meant to be vacuum-formed, and was prompted by an invited proposal for a installation in a public square in New York:

But this design became very expensive, when considering making multiples. So the DIY explorations reflected throughout this site have been taking a more piece-meal approach––solving one problem at a time. But the benefit of making and testing them this way, is that they are low-cost and easy to replicate, making it a more potentially open project, and also allows things to evolve in a more a natural way, such as with the addition of the dome.

Solar Panels

I designed the lower half of the Sunbot with an overhang, in part to make space for a solar panel to sit there. But I need to modify the dimensions somewhat to get a better fit for a bigger panel.

Sustainable Material Exploration

I’d love to incorporate materials with an even lower environmental footprint into the design, such as mycelium and bio plastic. Explorations ongoing.

Plants as Sensors

A great comment from bystanders and something I’ve been meaning to explore in any case, reading the electrical impulses in plants and trying to determine whether those can be used to map movement, in lieu of or in combination with light sensors.

 

 

 

Sunbot Swarm Test 2

Plantbots

Laser cut bodies made for more stability, but also a but more of a boring performance than the crazy garbage bots (version 1).

Findings/limitations:

-In good light, they are pretty still. Some minor self-adjustments.
-Some anomalies, if one sensor loses light the bots begin to turn, turning may cause the other sensor to lose light as well and send it driving in wrong direction all together.
-Cardboard chassis are not quite stable enough, wheels on some are bowing. Need to replace with acrylic
-Unclear how or if IR communication is effecting behavior.
-Need to test in a more complicated lighting condition.

 

Sunbot Swarm Test 1

Plantbots

Sunbot swarm uses a slightly more complex circuit than the first Sunbot. A motor driver IC (L293D) as opposed to a transistor circuit allows the wheels of the bot to move backwards, which allows for greater navigational abilities and turning. An ultrasonic sensor is designed to help it avoid obstacles, though as the video shows, when the bots are different sizes and the sensors are in different places, they don’t “see” each other well. The bots also have IR emitters and receivers, in order to help them communicate if they’ve found an adequate amount of sun. However, in the conditions of this test, where the sunny area was limited, they in a sense competed for that small area. Next test will be to see if standardized bodies and sensor heights + changes to the code, can help prevent them from mauling each other.

The robots in this video were assembled by participants in a workshop at Open Source Gallery in Brooklyn, using recycled materials for the bodies.

Some photos from the workshop: