Skip to content

This project is an exercise in realtime embedded engineering. An embedded computer connected to a camera periodically takes pictures of a ticking clock and saves them to persistent memory

Notifications You must be signed in to change notification settings

EsGeh/rtes-synchronome-project

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Synchronome Project

Important milestones are marked via git tags.

system block diagram

Short Description: This project is an exercise in realtime embedded engineering. An embedded computer connected to a camera periodically takes pictures of a ticking clock and saves them to persistent memory (Flash). The program outputs one image each second, each showing a still image of the seconds hand in one stationary position. (or one image each 1/10th of a second if the clock displays 1/10ths of a second). In order to achieve that, the process of taking/picking pictures needs to be carefully synchronized with the external clock.

Keywords:

  • Synchronome
  • Machine Vision
  • Realtime
  • Embedded Systems
  • Concurrent Programming
  • Camera
  • V4L2
  • Raspberry Pi

frame acquisition

This project is the fourth part of the Realtime Embedded Systems Specialization by the University of Colorado Boulder via Coursera. According to the course description successful completion of this project proofs advanced level applied knowledge about realtime embedded engineering.

For details about grading and requirements for passing this course, see ./doc/0_requirements.md.

homelab synchronome setup ("it's so berlin")

The System has been demonstrated to run successful in case of the external clock being a 1Hz analog clock as well as the eternal clock being a 10Hz stopwatch with a digital display. See ./doc/example_output/.

Screenshot of saved images for 1Hz

Screenshot of saved images for 10Hz

Documentation

Extended documentation:

Final documentation in PDF format

Generate/update .PDF documentation:

$ ./scripts/create_doc.fish
$ ls doc/pdf/

Build

$ ./scripts/build.fish

Run

$ ./scripts/run_synchronome.fish [--help]

Measure Timing / Statistics

$ ./scripts/run_statistics.fish

Run Tests

Prerequisit: install the check test framework

$ ./scripts/test.fish

Upload

$ ./scripts/upload.fish

The script will cd into to the uploaded dir on the REMOTE. You may now build and run the program there.

Remark: create ./local/config/remote.conf on first run and edit accordingly:

$ mkdir --parents local/config
$ cp .example-remote.conf ./local/config/remote.conf

Example Output Data and Video Presentation

Example output and presentation videos.

In order for the documentation and diagrams to be generated, ./local/example_output must contain a file named synchronome.log, which can be obtained from the example output data (eg from the 10Hz test run).

Developer Notes

Auto run tests before every commit:

$ git config core.hooksPath hooks

Recommended integrated linter/autocompletion config for vim/neovim:

  • ale: integrated lint engine for vim/neovim
  • bear: automatically generate compile_commands.json for clang-based linting/analysis tools

About

This project is an exercise in realtime embedded engineering. An embedded computer connected to a camera periodically takes pictures of a ticking clock and saves them to persistent memory

Resources

Stars

Watchers

Forks

Packages

No packages published