EMBEDDED SOFTWARE ENGINEER
Ryan Sadeghi-Javid
I design and develop embedded systems, writing firmware that bridges hardware and software. Specializing in microcontrollers, real-time systems, and low-level programming.
PROJECTS
Featured Work
A selection of firmware and embedded systems projects I have worked on.
ION Train Model
A fully autonomous train model inspired by the Ion train intersection at University Avenue in Waterloo. This project simulates real-world train operations with motion control, gate automation, traffic signals, and sensor integration.
Key Features
- ●Event-driven MCU firmware using a non-blocking FSM (no delay-based logic)
- ●Stepper motor motion control for bi-directional train movement (single-motor cross-belt mechanism)
- ●Gate + signal automation with interlocked safety logic and timed state transitions
- ●IR + electromagnetic sensing for train detection, direction inference, and state triggers
- ●Custom traffic-light PCB + firmware GPIO control (sequencing, timing, and fail-safe states)
- ●Reusable stepper driver library (timers/step scheduling, acceleration-ready structure, deterministic timing)
- ●I²C peripheral integration for sensor/IO expansion, with robust readouts used as FSM state triggers

Watch
Custom STM32-based wearable platform with low-power firmware to drive a 1.69" display over SPI, manage power states, and interface with onboard peripherals. Built as a full embedded system: PCB + bring-up + firmware for reliable startup, debugging, and future sensor expansion.
Key Features
- ●STM32 embedded firmware with low-power modes (sleep/stop), wake events, and deterministic main-loop scheduling
- ●SPI display driver for the 1.69" screen (init sequence, frame updates, and interface timing)
- ●Board bring-up firmware: GPIO validation, power-rail checks, and peripheral smoke tests during early hardware validation
- ●Power-aware design support: firmware coordinated with regulation/protection (startup sequencing + safe defaults)
- ●SWD debug workflow for iterative firmware development (flash/debug, register-level bring-up, fault isolation)

Tiny Canvas (Tiny Tapeout ASIC)
MS Paint-style pixel art engine implemented in Verilog for Tiny Tapeout (SKY130), driven by an SNES-compatible gamepad and exposed as an I2C slave for host-side capture/visualization. Built as a full hardware/software system: controller protocol decode + real-time drawing pipeline + memory-constrained undo/redo + I2C state streaming, validated with a Python/Pygame emulator and cocotb tests.
Key Features
- ●Real-time digital design in Verilog: modular pipeline (input decode → cursor/brush/symmetry → pixel generation → I2C streaming) optimized to fit a 1×1 Tiny Tapeout tile (~167×108 µm) at high utilization
- ●I2C slave interface (addr 0x64) with packed 4-byte status protocol (position, mode, RGB color, brush settings) designed for reliable host-side polling and telemetry-style state capture
- ●Hardware gamepad integration: SNES controller protocol decoder (latch/clk/data) mapped to UX features (RGB mixing, brush sizing, symmetry, fill-rect) with deterministic state machines
- ●Memory-constrained undo/redo: 4-entry circular buffer storing pixel edits; designed tradeoffs for silicon area while preserving usability (stroke-based undo implemented in emulator)
- ●Verification + tooling: cocotb + Icarus tests plus a Python/Pygame interactive emulator with I2C packet viewer for fast iteration, debugging, and feature validation before tapeout

Water Reservoir Controller
Embedded controller for a pump + valve irrigation system (3 zones + inlet), built around an STM32 Nucleo. Implements a two-mode UX (SETUP over UART + RUN sequencing) and real-time control of motor speed + servo-based valve selection while continuously monitoring reservoir depth and reporting process telemetry.
Key Features
- ●Real-time sequencing with a scaled-time wall clock driven by an MCU timer (24h compressed into minutes; ~300× faster than real time for demo runs)
- ●Pump control via PWM to a brushed DC motor controller + RPM sensing through an interrupt interface for speed measurement/verification
- ●Servo-driven valve selection to route flow to INLET or one of three irrigation zones, with RGB LED state indicating the active pipeline connection
- ●Reservoir depth monitoring using an ultrasonic distance sensor; converts sensor readings into a 0–99% depth value and publishes it to both a dual 7-segment display and the UART terminal
- ●Bi-directional UART terminal interface for SETUP inputs (pipeline order + motor PWM selection + wall-clock start/stop times) and RUN-mode status streaming (zone/inlet, %PWM, RPM, reservoir depth)
- ●Integrated mixed-signal I/O: potentiometer analog input for manual RPM control in setup/testing, plus GPIO control for LEDs/display and push-button state transitions (SETUP → RUN)