In October, I continued to refine the controller for the eye mechanism, started to prototype the puppet structures and brainstormed on how to build the puppeteer’s wearable. Overall, I am working towards prototyping a complete puppet.
In my previous entry, I shared how I had difficulties trying to resolve the staccato eye movements from the joystick mechanism. I first asked around to see if there was anyone who can help resolve this and was told to limit the joystick movement by adding a rubber band inside the joystick (I did not try this as that felt like a stopgap measure rather than resolving the issue itself). I later found that this lag time in the reading and the inaccurate movements of the servo motor was because I had added a delay function in my programming. I will elaborate in the paragraphs below.
Understanding Joystick Values
The 2-axis joystick generates a range of values from 0 to 1023. Each time you push the joystick to a position, it generates 2 values, one for x-axis, the other for y-axis. The programme then uses the joystick values to execute the pre-written commands. E.g. if you push the joystick forward in a game, the two values generated tells the character that you are playing to move forward. How the character moves will depend on the direction you push the joystick.
At its neutral position, the joystick values read 512 (both x and y-axis). Understanding the logic of the joystick helped me understand how to improve the coding.
Understanding Servo Motor Positions
There are two types of servo motors; the 180-degree servo motor and the 360-degree servo motor. For the eye mechanism, I am using the 180-degree servo motor. Since I discovered the CCPM Servo Consistency Master, I have been using it to calibrate my servo motors. (Refer to this video on how it is done) At its neutral position using the servo tester, the servo position should read 90 degrees. This position is also when the eyes are looking forward without titling to the side or up and down. A feedback I received from Daniel was that my eye mechanism rolls its eye too far back. To resolve this, I limited the range of values from the servo motor to 80 degrees and 110 degrees. I obtained the values through trial and error testing and found that the eye balls at servo motor positions of 80 and 110 degrees are just about right.
I referenced some of my codes from the site Maker.Pro and found that instead of writing fixed positions in my code, I can add ‘steps’ to the movement of the servo motor (you can read the explanation on the website for more details). Previously, pushing the joystick forward will cause a corresponding forward movement in the servo motor. If the joystick is pushed to the maximum forward position, the servo motor will also turn to its maximum forward position. With this new programme, pushing the joystick forward will cause the servo motor to move forward by a set number of ‘steps’. This change gives me greater control over the movement of the servo motor.
Previously, I had also encountered an issue of the servo motor returning to its neutral position when the joystick returns to its neutral position. This makes the eye movement jerky and does not allow the eye to stay at a fixed position away from neutral. To resolve this, I added a line to the programme such that the servo motor positions will constantly be recorded by Arduino and instead of going to back to neutral position each time I release my joystick, it will stay in place. This makes the controlling a lot more intuitive and the puppeteer can create more subtle movements.
Planning the Puppet Structure (Head and Eye Mechanism)
One of the goals this month was to design the size and the overall structure of the puppet. I started brainstorming on the chest structure first, which I will elaborate later. The following sketch is a sketch of how I want to house the eye mechanism. The structure of the puppet follows the design of a rod puppet. I chose a rod puppet structure as it is something familiar to The Finger Players. I would then be able to find help with the structure of the puppet should I run into problems in the near future.
The sketch eventually differed from the prototype I tried to make. Initially I made the head structure using foam sheets. I found a head template that is commonly used in creating muppet heads. I chose to follow this style of construction as I needed to make a hollow head to house the eye mechanism. These templates work best with sponges, but I used foam sheets as they were readily available in the workshop at the point of making and easy work with for initial prototyping.
In Figure 3, you can see that I tried using two different templates to build the head shape. However, the two foam structures I built was not ideal in terms of shape and the way I want to house the eye mechanism. The template I used was for a muppet head with a movable jaw while the other foam head I tried prototyping lacks the space and structure to incorporate the eye mechanism. I then decided to first use part of the foam sheet to create a rough shape of the head. For now, the main focus is still to see how the eye mechanism will affect the shape and the size of the head (see Figure 4).
I plan to build the joystick on the puppet rod for easy manipulation of the eyes (see Figure 5). I learnt that the rods on puppets are usually built right behind the eyes to help the puppeteer know which direction the puppet is looking at. This works to my advantage when I build the wiring (see Figure 5).
Planning the Puppet Structure (Chest and breath mechanism)
The following sketches show the thought processes I went through when designing the chest structure.
I built a few prototypes to help with my visualization of the chest structure.
The left image of Figure 8 shows my first try. I feel that the middle structure was built too small, so I made a second one that was larger and the servo motors’ positions further apart (right image of Figure 8).
I also built servo arm extensions using aluminum in the same method as the eye mechanism (see Figure 9). In my initial plan, I had wanted to use a material called boning to create the structure of the chest. However, it was too stiff and could not flex and bend smoothly with the movement of the servo motors (see Figure 10).
Daniel suggested I try wrapping the chest structure with sponge so that the extensions push against the sponge to create the up-down movement of the chest.
I wrapped the sponge around the entire body of the puppet. The aluminium arms of the servo motors will then push against the sponge to create the rise and fall of the chest.
Figure 14 shows the inside look of the chest before sealing. Video 2 is a first try on how the servo motors will behave when wired up. For prototyping purposes, I connected the servo motors to the CCPM to test the movement.
I like that the rise and fall of the chest movement is subtle and was happy that the chest mechanism turned out to be somewhat similar to what I had envisioned. However, I feel that the sponge material is currently absorbing most of the rise and fall movement, which makes it quite inefficient. The servo motors inside the chest are moving a lot more than what is seen from the outside. As such, I plan to look for a denser sponge or foam material for the exterior of the chest and line the parts in contact with the aluminum servo arms with the boning structure.
I am currently exploring how sensors can be worn on the puppeteer’s body. In addition, I am also having difficulties with the programming of the sensors. As there are different models of the flex sensor and accelerometer, I am having some difficulty trying to hook them up to my Arduino and finding out how to utilise the sensors well.
The accelerometer that I will be using is the SparkFun ADXL345 digital accelerometer. One of the difficulties was understanding the two types of communication methods (SPI and I2C) used by the accelerometer. I want to use the accelerometer as it can measure a wide range of movements like speed changes, detect vibrations, and movement. This wide range of readings equates to increased possibilities of building different variations in the chest movements of the puppet.
I am still figuring out the sensors and will post my findings and research materials in my next reflection entry.
A small lesson learnt – Not all are made equal (?)
While prototyping and sourcing for the different electronic parts, I noticed that different stores sell different types of the same sensor or equipment. I was introduced to two other stores at Sim Lim Tower selling items used in robotics (go to the third level). As I was working with the eye mechanism, I found that the joystick was a little stiff, especially on the x-axis (separate issue from what was mentioned above). This caused the eye’s up-down movement to be compromised. Similarly, I also faced random inconsistency with the performance of the servo motors. I have since replaced the joystick with a piece purchased from another store which works a lot better. The lesson learnt here is that different stores get their supplies from different manufacturers and not all parts are made equal. Sometimes, if something is not working, it might be a hardware problem and not just in the software. We would have to remember to consider all possibilities.
This article is a monthly reflection by Sim Xin Feng, the maker of our inaugural The Maker’s Lab as part of an ongoing 9-month experimental laboratory. The Maker’s Lab is curated and managed by Daniel Sim, a core team member of TFP. The ideas and reflections within the article are drawn from Xin Feng’s observations and discoveries as a maker, designer and researcher. Instead of being taken as conclusive, we hope that they serve to be a starting point for thought-provoking conversations and perhaps even debates. We would love to hear from you and can be reached at firstname.lastname@example.org. You can also share with your comments below.
If you wish to follow Xin Feng on her journey with The Maker’s Lab, click on the ‘Subscribe’ link below now!