After Phase 1: Low-Fidelity Prototyping, I continued to develop the rest of the project for Phase 2: Mid-Fidelity Prototyping for 27 October (Week 11).
Here is the planned production schedule:
As I share my documentation, we will see that this planned production schedule will be revised due to previously overlooked logistical and hardware considerations, and most importantly to accommodate a better, complete outcome for Final Showcase.
1.Controlling 1 servo motor with 1 10kΩ potentiometer on Master Arduino
It was quite straightforward to establish control of 1 potentiometer on the Master Arduino to control 1 servo motor on the same Master Arduino. (Essentially like a normal circuit, not using I2C at this point)
Here is the outcome:
Here is the code for the above:
2.Using 1 10kΩ potentiometer to control 1 servo motor each on Master and Slave
As mentioned, the above was a basic circuit with no I2C. The challenge for I2C is getting 1 potentiometer on the Master to simultaneously control 1 servo each on Master and Slave.
Below is my code that I have attempted, operating on logic based on what was working previously (ie Button input > LED output):
ATTEMPT NOT SUCCESSFUL: The result of compiling this code is such that the potentiometer controls the servo on the Master, but does nothing to the servo on Slave.
Since the parameters for potentiometer/servo is different from button/led, I was thinking if the potentiometer/servo parameters were the cause of the servo not reacting on the Slave.
Since the button/led code worked well and worked on much simpler HIGH/LOW principles, I tried to backtrack to simplify the parameters by using a simple switch button to control a servo instead (ie eliminating and isolating where the problem is).
3.Using 1 momentary push button to control 1 servo motor on Master
I took a step back and tried a basic button-servo circuit with no I2C.
Here is the outcome:
Before I could continue establishing an I2C, I had to make sure the servo was functioning as intended on the basic circuit.
Problem identified: The servo arm sweeps back and forth, which is not intended. This is becasue the feature of the switch button used is a momentary push one. Meaning, only upon user push it identifies as “HIGH” and if user lets go the state returns to “LOW”; user has to constantly push down on the button for the state to remain “HIGH”.
To try and rectify this first hurdle, I tried to replace the momentary push button for a switch push button.
4.Using 1 push button to control 1 servo motor on Master
Here is the working set-up:
Here is the code (non-I2C):
While it seems to be working relatively well on a basic circuit, I tried incorporating I2C to control the servo on the Slave as well.
Here is the code:
Here is the (unsuccessful) outcome of the attempt:
Problem identified: Servo on Slave (Right side) is jumpy and reacts inconsistently. Servo on Master (Left side) has smooth sweeping motion. Servo on Slave (Right) does one 90° motion and stays there until button press is triggered again. Servo on Master (Left) does a back and forth sweeping motion with 1 button press. This was weird as the codes written for both were similar.
I tried to seek advice and help from online forums and code samples. Most to all of the suggestions warn not to use Arduino’s 5V to power servos as it will damage the board. Some also mentioned the power supplied may not be enough for the servo to perform. Thus, instead of using 5V from Arduino, I replaced the power with an external power supply using 4xAA batteries to see if limited power was the reason for this inconsistency in servo performance.
5.Using 4xAA batteries to power servo motors on Master and Slave
ATTEMPT NOT SUCCESSFUL: The result of working with this new circuit is such that somehow both servo motors are not responding entirely. I made sure the batteries used were new from a fresh pack, wiring were all stable and connected. I attempted rewiring and checking my circuit multiple times to no avail.
At this point, whether the code works or not, the circuit set-up is starting to look too complicated and difficult to be neatly packaged for Final Showcase. I am reconsidering a better-reworked plan here ***.
*** Not only on an aesthetic front, but more importantly the 3D printed ‘container’/device needed to have detailed measurements to be able to fit wirings and hold up buttons/servo arms/LEDs with allowance for servo arm sweeps, etc and I unfortunately am not trained in product/industrial design area to be able to successfully design the components in Rhino. It is technically possible, but would require way more time (weeks, months!) than what’s left for the assignment.
*** As advised previously, due to time, budget, hardware constraints for this project, I should focus on key parts of the device to sell the idea and make them work well rather than try to fulfil multiple areas that do not add any extra value.
The initial plan was to have 2 ‘dolls’ devices that relayed real-time interactions via LED/touch and servo arm movement/potentiometers. This was to mimic a distant body’s yearning for human touch and physical interaction.
An overview of the original plan can be viewed below:
During this time, I had to take a step back and reevaluate the feasibility of the project. I had to discern what was necessary from what I wanted to ideally include. I came to the conclusion that even without the moving interactions, the concept of my project would still be relayed through the LED/buttons interaction, which is relaying real time human connections.
An overview of the revised working plan can be viewed below:
7.Development of Device container (hardware)
Now that I had a better, clearer end goal to work towards, I continued working on figuring out how I should construct the Device/Doll model to house my components and optimise whatever material/space I can.
All of my development sketches here:
After finalisng what I wanted my Device to look like, I made finer adjustments according to accurate measurements of components in the construction and assembly plan below:
8.Fully completed circuit set-up
With my new revised plan, I completed the final circuit with all working components involved.
x2 touch sensors
x3 momentary push buttons
x10 LED pins
I2C on Arduino Uno
1. User taps either head or chest area > area lights up
2. User long presses either head or chest area > area blinks to indicate more attention
2. User presses either 1 of 3 buttons to indicate mood > corresponding light lights up
Here is the full circuit in action:
//End of Mid-Fidelity Prototyping documentation