-
Notifications
You must be signed in to change notification settings - Fork 1
Overview
This project is basically a homemade universal remote, using an Arduino as the IR controller. Access to this Arduino is made possible via an Ethernet connection (using the Arduino Ethernet Shield). The Arduino will host a simple web page, and also accept incoming data on a specific port. Through these input methods, a user can select from a hard-coded list of commands for a hard-coded list of devices. Specifically, a TV, a receiver, and a cable box.
The web-pages will be available for any device on the same network. The UDP Port access is intended for use with a custom Android application. That application will send specific data to that UDP port, which corresponds to the same commands selectable via the web interface.
There are no plans at this time for hardware inputs to the Arduino - the idea is that it is placed "out of the way", with Line-of-sight access to the controlled devices. This prevents the clutter from multiple remotes. In fact, it eliminates all remotes, under the assumption that the user at least has their smartphone or a web-connected device near them, like a laptop or tablet.
The intent with this project is to deploy it in multiple stages of increasing complexity and feature-richness.
The first phase is basically a proof-of-concept. This has all of the hardware pieces involved, and simply proves that the whole system can work together to perform the basic functions of at least turning IR controlled devices on and off. If that doesn't work, not much time has been spent, and the next phases can be scrapped.
If it does work, phase 2 is the next step, adding more features. In phase 2, the commands and devices will no longer be hard-coded, but programmable. The Arduino will be left with the IR receiver connected. Via the web interface, it can be put in "programmable" mode where it can receive a new IR command. This command can be associated with a new device, or as a new command for an existing device. Similarly, any currently programmed commands or devices on the Arduino can be deleted. It will use this "database" of devices and commands to build the web-pages for the web interface. The Android application will be re-designed at this point to be dynamic as well. The buttons, screens and command lists will no longer be hard-coded, but received dynamically through the UDP port from the Arduino. Some design will be used to send as little data as possible, and build the menus to look proper on the Android side. This is to test out client side / server side programming, as well as creating Android layouts dynamically from received data, and handling any issues associated with that (loss of connection, etc.).
The third phase of the project expands on the server side. The hosting capabilities of the Arduino are very limited, both by device memory and processing power. It is possible that for phase 2 even, memory will need to be added to the device. So phase 3 is about moving the server functionality off the Arduino and on to a desktop PC, or home server system. The Arduino software becomes much simpler in this phase - now it simply needs the UDP port to receive commands, and send a corresponding IR signal. It is possible even that the data to be sent over IR could be sent directly via UDP, and no custom "command protocol" would need to be written. All of the command data would live on the desktop server. This would serve data for the web pages as well as the Android app, and send the corresponding commands to the defined port on the Arduino. This allows for much richer web-pages, faster responses, and larger command data sets to be saved. One potential loss here is the ability to (quickly) add new commands on the fly - since the IR decoder would still be on the Arduino. But, by this phase, it is believed that most desired commands would already have been saved, and their data could simply be transferred from Arduino memory over to the desktop server system.
I'm not sure what phase this best falls in, but there is the added functionality of controlling a PlayStation 3 that I would like. I consider this an "optional" feature, since it does not have IR like all other devices, and thus mostly lies out of bounds of the rest of this project. However, adding in Bluetooth (or Ethernet control, if possible) for the PlayStation 3 would help eliminate one more remote from the plethora of remotes required. One option here might be the BlueBeam, but that is costly.
Another potential option is a JSON web-server on the Arduino, as the one used here. It uses the TinyWebServer library for Arduino, storing pages either in flash or on the SD card. If this is useful, it might make phase 3 unnecessary!