Embedded Systems Design
Here are some suggestions for projects. As well as providing ideas for projects, they also give guidance to the expected complexity level for a project.
The projects offer a range of challenges in terms of hardware and software, and in implementation some are more open ended than others. You should also consider the extent to which you will be able to work incrementally, or whether everything must work before you can get a useful outcome.
In some cases something similar has been been attempted before, but in others the idea is untried. In this case, there is no guarantee that the project will actually meet its specifications. You are expected to evaluate options and do calculations to check the limits of what is possible before starting implementation.
To make writing your report easier, take notes in a lab book as you progress, including feasibility calculations (for example how much storage is needed), design options, preliminary designs, tests of intermediate steps, and also what didn't work as expected, and why.
Owing to time constraints, not all of the features of the ATMEGA series of devices have been specifically covered in the workbooks, for example:
However they may prove invaluable either in the suggested projects or if you have an idea for a project you would like to try.
When people try to use the projectors in the Lecture Theatre from their laptop, there are inevitably problems with trying to get the signal from the laptop onto the right connector. When nothing happens it is never clear which part isn't working.
Create a battery powered signal generator to generate a test signal on a VGA connector. It should ideally have a switch to select between 1280x1024 and 1024x768 resolutions, at 60Hz, meeting the timing requirements of the relevant standards. Although the microcontroller cannot keep up with the high bitrate needed for a proper signal, a low resolution chequerboard pattern is sufficient for testing. A high clock rate and some careful choice of instructions, or maybe the use of embedded assembler will be needed. See: http://en.wikipedia.org/wiki/Video_Graphics_Array#Signal and http://www.tinyvga.com/vga-timing/1280x1024@60Hz
How do you diagnose whether an RS232 signal is working as expected, if the baud rate is not known ?
Create a device to sample a bidirectional serial signal, deduce the baud rates from the pulse widths observed within the signal, decode the traffic and display it on a 2 line LCD, for example top line transmit, bottom line receive. There is a PCB available to do the voltage conversion part of the RS232 interfacing.
One unusual sensor we have (TCS230) has 3 different colour detectors on a small chip. See: http://www.cl.cam.ac.uk/teaching/0910/P31/docs/TCS230.pdf The outputs from the device are 3 frequencies, one each for Red,Green,Blue. This allows a high dynamic range, but means the device is most suitable for colour measurements, rather than following a change in colour.
Can you think of an interesting way of making use of this sensor, for example by comparing the results of a colour chart such as http://www.w3schools.com/Html/html_colors.asp across a range of LCD displays.
We have made a lens controller PCB with all the hardware in place to control the lens zoom, focus and iris. The PCB uses the ATMEGA168 as its controller. Software was written for one particular application but it could do with being written in a more general purpose way.
Write control software for the microcontroller to receive commands via RS232 and to control the lens functions.
Some microcontrollers (eg ATTINY45) have temperature sensors built in. They need to be calibrated, but once that is done, they are accurate to within 1 or 2 C. Between 4 and 6 sensors need to be deployed in a PC to find where the heat flows are within the case, and which parts get hot in use.
Combine several microcontrollers to find the hot spot in a PC. One might be a master, and communicate with several others over a shared serial line, or they might each have a simple SPI type interface back to the master.
We have sensors which are very sensitive to movement. Make a data logger to detect human movement and log it to decide whether the wearer has an active lifestyle. See: http://www.cl.cam.ac.uk/teaching/0910/P31/docs/MS24.pdf
Consider whether it is more efficient to log start/stop times, or active/inactive every second. Use sleep mode extensively to extend the battery life. How long can the device work from a miniature coin cell. Consider how the data might be stored and later offloaded, and how to tell the wearer whether they are being fit or a couch potato.
We have a server room which occasionally suffers from overheating.
Make a mains powered (with battery backup) device to measure the temperature and mains status in the room, and both log them to memory with a timestamp, and make them available via a web server (tuxgraphics.org make an ATMEGA328 based web server board)
A temperature reading every minute is required and the mains detection needs to use something like a no-volt switch to detect brief failures. The device should offload its data via serial on demand.
The device should also issue an alert when its battery is getting low, and also if there has been a mains failure, and should have a readable status indicating whether there is currently a problem, and whether a problem has occurred since the last device reset.
Use 2 microcontrollers and a radio transmit/receiver chip such as the ER900TRS to make a radio link, which would work as a serial extender. Investigate latency/power tradeoffs using batching at the microcontroller. See: http://www.cl.cam.ac.uk/teaching/0910/P31/docs/ER900TS.pdf
We have a draughts playing robot which uses stepper motors and a rack and pinion mechanism to create the X-Y movements, and move pieces using an electromagnet. The X-Y mechanism is mechanically rather bulky, and a system based on two rotation points would be much better. As an example, think of how you would draw a straight line if your wrist was in a plaster cast and you could only move your elbow and shoulder joints. The mechanical parts and stepper motor drive electronics are complete for the rotation based robot.
Program a microcontroller to take in movement commands via serial, and execute smooth* linear movement for the arm and magnet assembly, by issuing appropriate stepper motor control signals.
You might want to look at both the cartesian and rotation mechanisms, and talk to Brian Jones about stepper motors before deciding to undertake this project.
*OK, maybe not that smooth when operating at the limit of reach.
Using a GPS receiver, and a motion sensor, infer the mode of transport being used, and estimate CO2 consumed. This has been tried before (there are a number of papers published on the subject) with varied success rates. We have a Phd student who is keen to supervise/assist with this one as it overlaps with his Phd work.
We have a logger originally developed to log GPS and a CO2 sensor in a light aircraft at 1 second intervals. The logger is about 190x130x30mm without the CO2 part, so a bit big to carry around, except perhaps on a bike.
Take the existing code and modify it to carry out logging of cycle routes, for example swerves and stops measured by acceleration in the horizontal plane, quality of road surface measured by vibration/movement sensor. The device should automatically go into sleep mode when the bike isn't being used.
Make a sensor whose purpose is to log when it was moved, for security purposes. It should be as small as possible. It needs to be battery powered, and run for as long as possible using as small a battery as possible. There needs to be a way of interrogating it in place, to see if it has been moved. If it has, then it can be taken elsewhere to offload the data. There also needs to be a way of resetting it once it is in in place, perhaps using a reed switch.
Make a recorder for sound which adapts its sample rate to match the frequency of the sound being sampled. For example the flow of water in a pipe will produce a characteristic sound, and if it is assumed that the rate will not suddenly change, the recorder can adapt the sample rate to minimise the memory required to store the samples.
Some of the roadside cabinets for telecommunications are fitted with shock sensors to detect attempts at forcible entry. To avoid the alarm going off during authorized entry, the engineer might be required to enter a characteristic sequence of taps to the cabinet to disable the alarm. See: http://www.cl.cam.ac.uk/teaching/0910/P31/docs/MS24.pdf for details of a suitable shock sensor.
Make a sensor whose purpose is to detect a characteristic pattern of taps.
We want to deploy 50 or so data loggers which have a single button, and which record when the button was pressed. The application is to monitor how often equipment such as photocopier, printer etc is used but on a corridor-wide scale. Data would be collected over say a 5 day period, then the loggers would be collected back in, and the data copied from a Flash RAM device in the logger to a PC.
Devise a cheap, battery powered logger which records button presses with some sort of timestamping. The key factor here is cost, including the printed circut board, so this project is perhaps more of a product engineering task and less of a programming one.
Design a microcontroller program to monitor the voltage on a battery for a radio controlled car. Sample the voltage using the ADC, and output the result via serial every 30 seconds. To prevent the microcontroller from running the battery voltage down, use sleep mode in between readings, and provide a signal to power up the serial voltage level converter only when needed.