RaeBot with Phone
Circuitry for controller hack
Controller with PCB. Note that the controller has analog sticks that just press down buttons, making this an analog to digital converter.
In today's world, extended business trips and leave of absences are a reality that many people face. As a result, they often are away from their family, friends, and co-workers. Luckily, through the power of the Internet, the distance between people can feel like it's next to none. Programs like Skype and Google Hangouts allow people to be face-to-face with one another, even halfway across the globe. However, the interaction is limited by the viewport of the cameras. RaeBot's objective is to provide users with the ability to maneuver a camera around a room to add an additional dimension to video calls to lessen the gap of separation.
What it does
RaeBot is a RC car that can be controlled with a web-interface. The RC car is equipped with a mount for a phone in which the user can run a video calling software of their choice with someone else. The person on the other end can then use the web-interface to control RaeBot around the room.
How I built it
The project started off with the RC car, and in particular, the controller. After taking off the protective shell of the controller, I discovered that the board had consisted of a series of buttons that were being pushed down by the analog sticks to control the wheels. This directed by development towards hacking into the controller in order to pilot the car. I figured the best way would be to solder into the pins for the buttons to emulate a button press. The Arduino uses two relays to direct input to rotate in the proper direction, with one relay for each wheel. The Arduino is then constantly waiting for a serial input. Once it receives an input, it would be parsed to determine the proper action it needs to take. These serial inputs are received from the web end of the project.
The web end was made using NodeJS, with ReactJS for the front-end, and ExpressJS and Socket.IO for the back-end. The front-end is rather simple, consisting of four buttons, one for each of the four commands (move forward, move backward, rotate left, and rotate right). That output is then sent to the back-end with Socket.IO, where the button data is parsed, and using the serialport node module, a message is sent to the Arduino.
Challenges I ran into
I first started with hacking into the controller, where I had issues emulating the button presses. First, I had the naive idea that I could just sent a digital-high value to one of the pins and call it a day. However, I was quickly proven wrong after I learned I was required to close the circuit. While playing around with this, I was able to get both of the wheels to either turn on or off, but could not manage the signal to control. In order to do this, I was suggested to use a relay, a hardware component I had not heard of before this hackathon. I had to spend a nice portion of time trying to figure it out, and determining the best way to build my circuit once I got it to be operational.
Accomplishments that I'm proud of
I've very proud that I was able to hack into the controller. Despite the challenges, I persevered and was able to get a properly working circuit capable of emulating regular use of the controller.
I'm also proud of completing the project as the full-stack. Being able to spend time working on the hardware provided a stark yet refreshing contrast to the programming portion of the project.
What I learned
I learned how to hack into an existing piece of hardware. I also learned how to use a relay in a circuit. I also learned how to control an Arduino with a website. I also got practice on my soldering ability.
What's next for RaeBot
A better control for the robot would be beneficial. The current controls are rudimentary at best, so a finer control would allow for more precise movements by the pilot.