Remote laboratories for the "Embedded Systems" course at TU Bergakademie Freiberg. Reuse these labs for your own courses or self-study.
Import the configuration files into a newly created lab on https://edrys-labs.github.io or use the Deploy-Lab buttons below.
To run a station, use the pyxtermjs terminal server in a secure Docker environment:
docker run -it -p 5000:5000 --device=/dev/ttyACM0:/dev/ttyACM0 edryslabs/module-pyxtermjs:latestAlternatively, set up your own Docker environment or use the terminal server directly with Python. See: https://github.com/edrys-labs/module-pyxtermjs
Students implement ultrasonic sensor control with two difficulty tracks:
- Track A (Fundamentals): Low-level sensor control, GPIO timing, pulse measurement, distance calculation
- Track B (Library Integration): NewPing library, user configuration, LCD menus, unit conversion
Hardware: Arduino Uno, HC-SR04 ultrasonic sensor, 16×2 LCD display (I2C)
Learning: Sensor communication, timing signals, datasheet analysis, display interfaces
Students build a 180° rotating infrared scanner by replacing analogRead() with direct ADC register manipulation.
Tasks:
- Refactor code into reusable functions
- Configure ADC registers (
ADMUX,ADCSRA) directly - Transform voltage readings to distance (cm) using sensor datasheet
- Visualize measurements on radar-style plot
Hardware: Arduino Uno, Sharp GP2Y0A02 infrared sensor, servo motor
Learning: Register-level ADC programming, sensor calibration, code refactoring
Students replace polling with interrupt-based programming to synchronize stepper motor position with LED visualization.
Tasks:
- Implement ISR for Hall sensor (falling edge trigger)
- Use
volatilefor shared variables between main code and ISR - Map motor position (2048 steps) to LED ring (24 LEDs)
- Remove polling logic, rely on interrupt-driven position reset
Hardware: Arduino Uno, 28BYJ-48 stepper motor, ULN2003 driver, Hall sensor, Adafruit NeoPixel LED ring (24 LEDs)
Learning: Interrupt configuration, ISR programming, motor control, visual feedback synchronization
For detailed explanations of each lab, see the blog posts:


