Selecting a Project
Return to project description.
Project Description
Form a group of 3-4 students and choose your own topic (see below for topic constraints). You will be evaluated as a group with some marks for individual effort (students who do not contribute much will get a low mark; minimum of 0 on the project). I strongly recommend you create a repository on SFU's GitLab server for your project.
Criteria for selecting a project
- Must make good use of an embedded Linux system, such as the BeagleBone.
Your project must run on target hardware for this course. - Should interface with an external system, such as having a webpage, or use Ethernet, USB, RS232, GPIO, I2C, or audio.
- Should be focused on software (not on hardware design). OK to create application software (user space), or work in lower levels such as kernel, U-Boot, or bare metal.
- Must have a significant amount of code implemented in C, C++, or Rust. May use other languages as well.
- Must be an impressive display of your group's embedded software development skills.
- See list of project suggestions (below) to help inspire you!
- See list of expected project elements (below) to guide/inspire you.
- List of hardware I have to lend.
- At the end of the project, I'll use this Project Difficulty / Quality Rubric to help in my marking.
Some Very Likely Elements (not all in each project)
- General features expected:
- Code (C/C++/Rust required; python/Java/JavaScript/Perl/... OK as well): multi-threaded, clean, well-designed, cross-compiled.
(Code written in node.js or python/bash/perl/... contributes less to overall project difficulty than C/C++/Rust code.) - Quality code, error checking
- Robust operation
- Product boots up to functional device without user intervention
- No memory leaks/access errors
- Use watchdog
- Code (C/C++/Rust required; python/Java/JavaScript/Perl/... OK as well): multi-threaded, clean, well-designed, cross-compiled.
- Networking
- Webpage to control product, or
- Interact with remote web server/client
- Interact with BeagleBone or Zen Cape hardware (LEDs, buttons/joystick, buzzer, display, accelerometer, audio...)
- Minor changes to root file system (copy drivers, program, data, change settings).
- Peripheral integration, such as one or more of the following:
- Cape: Zen, Click, LCD
- Bluetooth / Wifi
- uSD card
- USB: Dongles, Camera...
- Components from the hardware package sold to each student (see below).
Less Common Elements
- 3rd party libraries (image/sound processing with cross-compiling)
- Uses multiple systems (many BeagleBones/RPi/Arduino, PC/web, phones/tablets)
- Load extra cross-compiled driver for peripheral.
- Deeply rework setup: UBoot, Kernel, RFS over NFS
Uncommon Components
- Low-level protocol work (SPI/I2C, bit-bang)
- RTU integration (bare metal)
- Write own kernel driver
- Create hardware (measure voltages, control relay, sense temperature)
- Unusual peripherals: RFID, motors, ...
Project Ideas
You are encouraged to come up with your own project topic, but here are some to get you thinking. Your group will own the intellectual property rights for the work you produce, so it could be the basis of a commercial product. Or, think of a job interview and which of your skills you would like a demo product to highlight.
Note that some of the project ideas listed may require more or fewer features in order to make them the right scope for the course.
- UN Sustainable Development Goals
Think about one of the UN sustainable development goals.- How could you make a product to help somewhere?
- Clean water (rain water capture)?
- Clean energy (smart house power, power monitor)?
- Reduce inequality?
- There are 17 goals! Make a difference!
- Reconciliation or Explore Cultures
Create a device that helps people learn about another culture. Imagine you are hired by a museum to create an interactive exhibit which highlights your culture. What neat ways could someone interact to explore? Maybe a cube they turn over to show different points in history? Maybe a map with buttons to explore places? Maybe a wheel that lets them select different dates in history? - Sustainability SFU
Come up with a project to help make SFU more sustainable. See the [SFU Sustainability[(https://www.sfu.ca/sustainability.html) page or SFU's EMBARK for ideas. What device could make people recycle better? Ride to work? Conserve energy better with motion detect lighting/heating. Detect devices that use too much energy. - Music Generator
Use some external inputs (MIDI keyboard, lots of buttons, drum pad, ...) to give your software an input to generate some music. Play back different sounds, at different volumes as controlled by the user. Allow recording / looping of some inputs for the user to build-up a multi-track recording of their music. - Robot Control
Get a robot you can control (such as using motor drivers / relays) and connect some sensors. Make it navigate a maze, or find an object, or be controlled from a phone. - Cloud
Turn multiple BBG's into a cloud using Docker/Kubernetes. Use the Zen cape inputs to either control some interesting task they are doing, or to control how your cloud operates and display the status of each node. Note that the embedded side should be emphasized. - Transportation
Use the BBG to enhance your transportation: Car, Bike, Skateboard, Wagon! Add GPS, add remote locating, add music, add light-show connected to the motion/vibration/acceleration of your transportation. Add an LED light panel to display something, add some buttons for control. Add a locking mechanism? Locate via GPS? - Game
Create a physically interactive game. Either make it like a standard gaming controller with a joystick and buttons, or make it more physically interactive with the user having the move around on the floor. Make it competitive or cooperative with a multi-player feature. Make it real-time with timed action and timed game-play. Add a light-panel for graphical output. Add some interesting inputs like a gyroscope, accelerometer, or video processing. - Digital Picture Frame
Load pictures from on-board storage and from network as well. Support shuffle mode for pictures, and on-screen menu driven from Zen's hardware inputs. - IP Phone
Receive phone calls on the board over the Ethernet. Use a web-interface to configure/control. Use the correct protocol to actually be an IP phone. - Remote Audio Player
Playback (or record) audio on the device while controlling it either locally or remotely. Support downloading (uploading) audio files from/to a remote server. Use Ethernet to control the system via a web-page, or control using a touch-screen and/or buttons. Also support loading music off the SC card or a USB memory stick. - Stereo/TV/PVR Controller
Interface to your stereo or your TV. Allow the user to control its operation and offer additional features. Could use an USB based IR transmitter to control as though it is a remote control. - Remote Video Camera & Display
Connect a USB video camera and microphone to the unit. Connect to the board via Ethernet to view the live images and sound. Allow saving video to an SD card or USB memory stick. Make it detect motion and start video. Or allow the remote user to transmit audio/video to the unit so it is a 2 way video/voice call. - Alarm Clock
Make a skill-testing alarm clock which ensures you are awake before turning off. Connect it to sensors to read if you lay back down in bed! Connect it to the web to pull up your Google calendar to figure out what time your alarm should be set for. Send an email to your boss if you are still in bed when you should be starting your shift. Make it bullet-proof and crash-proof so a baseball bat cannot turn it off (well, maybe not). ;) - Data Logger
Use external sensors to read information (such as temperature, battery voltage, current) to a log file on the SD card. Support configurable upload of data in real-time to an FTP server. Support field-upgrades of your application via an SD card, and use a web interface to allow the user to control it. - Connect to external devices
Connect to a car, heating system, fridge, Christmas lights/Halloween lights gone wild, cell phone (blue-tooth), RFID tags, radio controlled car, GPS, WiFi. Do something interesting with it! - Protocol Bridge & Logger
Write a protocol bridge to relay information between different ports (such as Ethernet to I2C). Use a web interface to show status information about about connections and data transmitted. Allow the user to enable logger functionality to work with a USB memory stick or SD card. Use for remote debugging of a communication system. Or connect WiFi to the board and make it be a wireless hub. - Use Multiple Boards
Use multiple boards to do office communication/messaging system. Do a distributed house-wide control system for lights, or windows blinds. Do a distributed music system which can play one of a number of music streams in a variety of rooms, so each family member can listen to their own music in whichever room they move to. - Lego Mindstorm
Connect the target to Lego Mindstorm robots and sensors to map a room, scan an object, fold a paper airplane, or anything else you can build! - Connect Specialized Inputs
Plug in a Guitar Hero guitar, or other gaming input like a USB joystick or flight-control hardware to create a fun and interactive experience. - Bare-metal Board & Zen Tester
Design and build a bare metal test program (runs without the OS) to test hardware on the BBB & Zen cape. This would require research into compiling/running without Linux. Or, could write a bare-metal application to accomplish some interesting task. - Plant Care
Control soil moisture, air temperature, air humidity to optimize plant growing conditions. Generate a log of these conditions over time and show as a graph. Create a physical user interface to allow control over your various functions.
Past Projects
Here are some project ideas from previous semesters.
- Bike security system which used a keypad for user to enter code to unlock bike; motion sensor and buzzer for alarm if moving while "locked". Webpage for status; Zen cape for status.
- Door monitoring program to detect if a door is opened. Send notifications to Discord; notifications customizable via Zen cape interface and a character LCD screen. Webcam for user photo; distance sensor for detecting door.
- MP3 music player controlled by RFID cards; files on USB stick; status on webpage; audio output; POT for volume control; Joystick for skip song/pause.
- Wheeled robot (manual and automatic control); webcam; distance sensor; gyroscope to measure turning; webpage to display status.
- Voice over IP phone using SIP protocol for peer-to-peer low-latency calls with multiple possible devices to communicate with. Web page for status, LCD screen to display status; Zen joystick for control; buzzer & LED for ringing. Clear audio input/output.
- Home security system to monitor temperature (cold/hot), flooding, web-cam video with pan/tilt; microphone listens for fire alarm sound; send text message when event occurs; display status on webpage.
- Guitar hero: use MIDI file to determine what user should play; buzzer play sounds; display on LED matrix; guitar input; display score counter on Zen cape 14-seg display.
- Pacman on XBox-style joystick, game display on LED matrix; play sound out audio; score on 14-seg display.