R2D2 themed Desk companion that provides updates from various internet sources.
Unfortunately, due to a few unfortunate unexpected time constraints, at this stage we do not look like completing R2 by close of competition.
Hardware-wise a few components we had ordered didn't arrive on time, and a faulty voltage regulator and dc motor made for a few unneeded delays.
Software-wise, it really just came down to a bad estimate of available time, perhaps a just tiny bit of scope creep too.
We will continue to work on this project regardless of that fact however.
So far, we have:
We still have yet to complete:
Serial Comms: Connect to, send structured packets to, and receive responses from the hardware is completed.
A packet structure class was defined that allows for easily creating correctly formed messages to send to the hardware A small wrapper class that uses the Microsoft serial port library takes care of sending and receiving messages. providing a method to send and wait for a response, or send and provide a call-back for later processing of response. serial receive occurring in a separate thread.
Serial Messages: Create all required message types has been completed.
A base class that defines how messages are formed and responded to. Also providing base functionality for xmlSerialisation for saving configuration.
Each message type that is sent to the hardware implements the base class, overriding the data component of the message and adjusts its parameters to suit.
Plugin framework: Allow alerts to be pulled from any source is completed.
Using .net MEF, loading a folder full of dll's was actually quite a straightforward task.
An interface is defined requiring:
Configuration storage: Reading and writing configuration data to xml has been 70% completed.
A class storing all of the applications configuration was created.
Using xmlSerialisation, the above structure is read and written to/from an xml file. The functionality to do the serialisation was completed, however only half of the rest of the code was modified to be correctly serialised.
Plugins: very little completion. A pop3 plugin was written, but not tested or completed.
The above code was unit tested to as great an extent as was possible.
A basic routine was written to perform serial initialisation, load config and begin polling for updates. a lot of error handling and tweaking is required before I would call this complete.
So i am 90% complete on the laser scanner component of the project. unfortunately time is running out and the firmware still needs a little work. two rotating hubs were machined on my 3 axis router out of plastic. 6 mirrors were then glued to these hubs and press fitted to the motors. IR reflectance sensors detect the motor speed and position for calibrating with the laser control. This was all taped into place for positioning and then epoxied in place. Hackaday style if i ever saw it.
The laser shines on the horizontal mirror assembly first which scans slowly (1 revolution for every six frames). this is then reflected onto the high speed mirror which scans at a much faster rate. this allows the laser to be toggled to produce a picture on a nearby wall. Hurrah.
Last night i routed the PCB on my 3 axis CNC. Overall i am pretty happy with the results for a first time effort. Now to add some components and start debugging the firmware! Hurrah, progress.
So after a week or two of breadboarding and ratsnesting, I am pretty happy with the circuit design and am currently working on a pcb. Due to time constraints, i am going to route the Pcb on my 3 axis cnc router. I have also been making good progress on the firmware for the atmega. As we want this to be an open platform for future use, there is a fair amount of work in the software/firmware to create a framework that makes future expansion easy. Screencaps of progress on pcb and schematic below.
In addition, the laser and mirrors have arrived, so i can start the mechanical design of the rotating assemblies for the laser projector.
Our plan is to create an easily extensible project so that we, or others, can refine and further extend R2 in the future.
To this end our initial design was to create a multipurpose hardware platform for configurable information reporting, with a view to basic human interaction in the future.
First we came up with a list of features we wanted to implement, discussed various feasibility issues then settled on a list of components that would make it into the first iteration of R2.
Below is a list of features that will make up R2 version one.
Hardware will include:
Software implementation will include the following components:
This week Kensbey will tackle some initial hardware tests, whilst Cognismith will complete design stage for each software component, and create some test framework for serial com and the plugin system.
The initial specs are mostly a product a tight time frame, and far from what we want to see as a complete R2Desk2.
Although we can't add all of our ideas to the initial build, we will be
designing R2 to be as modular and upgradeable as possible.
It also goes without saying, we will completely open sourcing our hardware and software, so that other hackers will be able create and improve on R2.
Below is a list of additional functionality we want to give R2 after the completion of the Iteration 1.