Embedded Systems Design
Firstly, if you have an idea for a project, then talk to the demonstrators, partly to see if they think you will be able to complete it in the time available, and also to check that we can source any equipment required.
For some interesting sensors, have a look at www.sparkfun.com
Here are some ideas for projects. As well as providing some suggestions, 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 the project has been been attempted before, but in others the idea is untried. We expect you to do preliminary calculations to see if what you hope to do is possible, but you won't be penalised if the project doesn't work fully due to something you couldn't have forseen (for example a sensor not working as well as the manufacturer claims).
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.
Consider at the design stage how you will test that your project is working as expected. Measurements or graphs of parameters like current consumption will allow you to show an expected battery lifetime for battery powered devices.
So far you have used prototyping boards, plus a printed Circuit Board (PCB) to interface to the LCD. Many of the projects require the same set of basic parts, so we have made a PCB available. Details are available here: http://www.cl.cam.ac.uk/teaching/1112/P31/docs/project_pcb.pdf
Owing to time constraints, not all of the features of the ATMEGA series of devices have been specifically covered in the workbooks, for example:
I2C peripherals, such as fast AtoD converters, memory, sensors. There is library support for I2C available.
Pulse Width Modulation, often used to control servos.
However they may prove invaluable either in the suggested projects or if you have an idea for a project you would like to try.
Here are some example devices with part numbers
RS232 communications can be difficult to debug, partly because of confusion over whether the Transmit and Receive signals need to be crossed or straight, and also because unless the baud rate is right, a terminal will probably display nothing.
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, and make swapping between straight and crossed connections easy. Microcontrollers with 2 serial ports are available, which will make the task easier, for example the ATMEGA644P.
We have a sensor which consists of three different colour detectors (R,G,B) on a small chip, and which outputs a frequency dependent on the light intensity for the selected colour. Because the output is a frequency, it works over a huge range of input intensities, but it cannot be used to detect rapid changes in colour, it is more suited to making colour measurements.
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 use motorized lenses in some of our research projects. These are very good quality, and can often be found very cheaply on the secondhand market because they require a control board. We have made a lens controller PCB for controlling these lenses, with all the hardware in place to control the lens zoom, focus and iris. The PCB uses the ATMEGA168 as its controller.
Write control software for the microcontroller to receive commands via serial to control the lens functions. The lens outputs analogue voltages representing the current zoom and focus positions, and has digital inputs to control the zoom and focus motors.
You have already used the MCP9700 temperature sensor in workbook 2. Using this device it is possible to make a very repeatable and reasonably accurate temperature sensor. 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. The ATTINY45 microcontroller has all the functionality you will need for the temperature sensor part, and as it is in an 8 pin package, it would need less soldering.
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. The sensors give very repeatable results, but will need initial calibration.
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/1112/P31/docs/MS24.pdf
Consider whether it is more efficient to log start/stop times, or active/inactive every second. Use sleep mode to extend the battery life. How long can the device work from a miniature coin cell, or even a large capacitor. 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. The project PCB is probably ideal for this logger.
Use 2 microcontrollers and a radio transmit/receiver pair such as the ER900TS/ER900RS to make a radio link, which would work as a serial extender. Using a real-time clock or the timers in the microcontroller, or more probably both, synchronise the transmit and receive so that a batch of data is sent every minute, and sleep the rest of the time to save power. See: http://www.cl.cam.ac.uk/teaching/1112/P31/docs/ER900TS.pdf
Evaluate the tradeoff between latency and power consumption by altering the time between bursts of data, and also consider the cost in power of switching the radios between active and sleep modes.
Use a radio receive chip such as the ER900RS which has an RSSI analogue output to make a received signal strength meter, perhaps using an LED array to display the strength. You will probably also need to program another microcontroller to send a signal every few seconds so that you have a signal to measure. Make both devices battery powered for maximum flexibility, and switch off the LEDs between readings to save power. See: http://www.cl.cam.ac.uk/teaching/1112/P31/docs/ER900TS.pdf
Use a 16 bit Digital to Analogue converter (DAC) on the SPI bus, and the project PCB to create a device which can play .wav files stored on a micro SD card. Initially use 8 bit data and a low sample rate, which will mean you will need to create or convert .wav files using a utility like audacity or ffmpeg. Eventually you might reach 44.1kbits/second and 16 bit data width for CD quality mono, but this will push the microcontroller towards its throughput limit.
Create a 'telltale' - a device whose purpose is to show whether a door has been opened since the last time the device was checked. Use a microswitch or tilt switch to detect door opening, a reed switch or hall effect switch to interrogate the device, and two leds to show the state. A green led indicates that the door switch hasn't operated since the last check, a red one shows that it has.
You will need to use sleep mode to make battery life as long as possible. You might want to check the power consumption of the ATTINY45 against the ATMEGA168A and ATMEGA168P for minimum power in sleep mode. A battery life of several years should be possible using 2 or 3 AA cells.
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/1112/P31/docs/MS24.pdf for details of a suitable shock sensor. Measure the current consumption, to find the battery life in typical usage.
Create the electronics for a digital safe. The lock mechanism would be driven by a servo, and you would need to implement a 4 or 6 digit key code to gain entry. These devices are battery powered, so it is important to sleep for nearly all the time, and to energise the servo for only a very short period. With such a safe, you enter the code, the door unlocks, then stays unlocked until you close the door, as detected by a microswitch. Calculate the battery capacity required for 2 years of typical operation.
Using a clamp meter which produces a voltage in proportion to the current in a wire, make a logger which calculates and logs power usage over time, with the ability to output logged data via serial, and the ability to show cumulative power used on an LCD.
Using the HMC6352 chip which has an I2C interface, create a digital compass. You will need to devise a suitable display for the user to show them their heading. Then, make a logger which records the heading every few seconds, and which can calculate a very rough bearing back to the starting point, and display it to the user.
We have a PCB which has an array of 20x28 LEDs and electronics to drive them from an ATMEGA644P microcontroller. Two of these can be stacked horizontally to give 40x28, and stacked vertically to any depth. The microcontroller can't drive the 560 LEDs directly, but can drive the 28 rows in rapid succession, relying on the persistence of vision effect.
Now, what can you do with 560 LEDs ? You will need to write a driver for the LEDs on the ATMEGA644P, and write an application which uses the display on the same microcontroller (very hard) or a second microcontroller, then get the two microcontrollers to communicate.
The ATMEGA644P has 2 serial ports, which makes daisy chaining a possibility, too.
Stepper motors have the property that up to some maximum frequency they will faithfully step once per incoming pulse. This makes them ideal to drive a turntable which needs to rotate at one of a number of precise speeds, for example for playing vinyl records, for which the standard speeds are 33rpm, 45rpm, 78rpm.
The interfacing to the stepper motor is a little tricky but then you should find it easy to make it rotate at a very precise speed once this is done. Next check the limits of speed. Lastly you might try more precise control when energising the coils to try to extend the range of speeds available.
Ironless-core DC motors run very smoothly, and start at a low applied voltage. Accurate control of the speed of a DC motor is difficult as it depends on the load, plus there is a delay between adjusting the supply voltage and the motor reaching the required speed.
A photodetector on a notched wheel should allow you to measure the speed. You can then try either a pulse width modulation scheme or a variable voltage supply to control the motor with the objective of getting it to run at a precise speed.
Create a display using an array of LEDs, perhaps 10 or so in a vertical bar which are spun around a vertical axis.
To avoid the difficult problem of the wiring to the LEDs needing to go through commutating rings, use two independent microcontrollers. On drives a stepper motor at a known speed (maybe with some small adjustment available). The other, plus its battery spins with the LEDs, either using a hall effect switch to resynchronise each turn, or just free running but carefully calculated to keep the message static.