Selecting a Project

Return to project description.

Components in Student Hardware Package

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 GitHub or 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 real-time 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
  • Interact with BeagleBone and kit hardware (LEDs, buttons/joystick, display, 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

  • Networking
    • Webpage to control product, or
    • Interact with remote web server/client
  • 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
  • PRU / RTU integration

Uncommon Components

  • Low-level protocol work (SPI/I2C, bit-bang)
  • 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.

  1. 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!
  2. Sustainability SFU
    Come up with a project to help make SFU more sustainable. See the SFU Sustainability 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.
  3. 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.
  4. HAM software defined radio:
    Partner with a hardware designer to create the software for a Linux based software defined HAM radio. Add graphical screen support for the user interface.
  5. Baby monitor:
    Webcam with streaming audio and video. Add ability to track audio levels over time and graph (i.e., when over the last 12 hours (or 72 hours, ...) has it detected loud noise).
  6. 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.
  7. 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.
  8. 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.
  9. 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.
  10. 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). ;)
  11. 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.
  12. 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!
  13. 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.
  14. 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.
  15. 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!
  16. 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.
  17. 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.

Selecting a Project