Concept
My final project was an interactive robot which someone can control. I was also inspired by the animation Despicable Me which can explain the design of my robot as a minion. The robot is a simple build with 4 tyres arranged in a + manner to allow the robot to move in all directions and also spin. It also has two hands which move up and down to depict the human hand movement. On movement of the robot the hands also move depending on the direction e.g when moving left the left hand rises. While creating the robot I had a dilemma on how to control the robot. However, I got inspired by previous students work which used the handspose library from ml5.js to control movement using hands. I went on to implement this to control my robot.
Interaction Design
The interaction was using ml5.js hanspose library which picks the users hands position to control the movement of the robot. I divided the screen into 4 sections such that having a hand in each section sends a certain command to Arduino to control the robot; a hand in the top left section moves the robot forward, top right section moves back, bottom left section turns left and bottom right turns right, to stop the robot one has to put both hands on the screen or remove all hands from the screen.
Arduino Code
My Arduino code included commands to control every movement of the robot; the motors, servos and LED’s. It receives data from p5 and depending on the data it executes the command on the robot.
p5 Code
My p5 code picks data from user to move the robot. Using the average position of the users hand key points, the code checks where the hands are positions and stores this in as a defined data text which is sent to Arduino. Through serial communication the Arduino is able to process commands on the robot based on what it gets from p5.
For the project I used the Adafruit motor shield for my connections as I initially wanted to use 4 motors. This component turned out to be very beneficial as it reduced the amount of wires that I needed to use if I would have opted for the small motor shield. I also didn’t have to use a breadboard which helped to minimise the size of my robot. I used KiCad to generate the schematic
Project Reflection and Future Improvements
Working on this project was a worthwhile experience. I was a good opportunity to put into work what I have learnt in the course. I had a couple of challenges while coming up with it. I initially wanted to use 4 DC motors for each individual wheel however this had a lot of issues as the robot couldn’t move in some directions. After spending a lot of time trying to fix this I finally got a solution by having to use only two motors and two support wheels which enabled the robot to move better. I also had an issue with picking commands from user. My initial idea was to have the user swipe the hands across the canvas but this had errors because the handspose library was too sensitive which resulted in clashing commands being picked. The project still has space for improvement especially in terms of the user interaction. The user experience can be enhanced by having both hands to control the movement since many users found it challenging to use only one hand. Everyone naturally started using two hands even after reading the instructions which might mean that including a two hand control would be better.All in all, I am proud of the whole project and how I was able to implement it.
User Testing Videos