05 April 2018

About me and my work

Hi there,

Thanks for stopping here! This humble portfolio shows some of my work in the tech space - devices and software; serious stuff and fun games; old gigs and very recent work.

I really enjoy working with tech and create stuff that people find useful (or fun!). I'm always open for new, interesting connections and opportunities - reach me out on email or connect on LinkedIn

04 April 2018

Floppy-to-RS232 microcontroller

This was a complete hardware design and embedded software project that was completed by me from the start to the end in ~8 months.

The idea of the device was to create autonomous and cheap microcomputer that would read a data file containing plotter commands in HP-GL language from a 3'5 inch floppy disk and send it to a RS-232 serial port, buffering the transmission. The need for this device was shaped by the state of the CAD technology then when plotters were quite slow and output of a drawing could take several precious computer time hours. Yes, there was no multitasking back then! This device allowed to write the CAD drawing on a 3'5 inch floppy disk, insert it into the device, press a button and leave it to output the graphics without a computer.

Hardware

The hardware of the device is based on Zilog Z80 processor and support architecture and contains:

  • Zilog Z80 processor
  • ROM with firmware
  • RAM
  • RS-232 I/O controller on a chip
  • Floppy drive controller on a chip
  • a START button :)

The principal circuit is shown on the image below (P-CAD .sch drawing):

controller P-cad curcuit

The print board was designed in P-CAD and produced to the order. The layout is shown on this image (P-CAD .pcb drawing):

board layout

Software - firmware

The firmware of the device organises the work of all the components, specifically:

  • device initialisation and I/O systems setup;
  • locate the data file in the FAT file system on the floppy disk;
  • read the file into the RAM memory in a loop buffer;
  • buffered output to the RS-232 port with control management ("busy"/"ready" etc)

The firmware was developed using assembler language and compiled with the assembler command line tool, also developed by me. Here is the firmware code in the GitHub repository.

Software - HP-GL viewer and editor

As a part of this project I also created a utility for viewing and editing of key elements of HP-GL files. The utility allows:

  • set origin point;
  • assign colours and numbers to pens;
  • transcode arcs (command ARC) into set of chords (commands PU,PD,PA);
  • change size and position of the user-defined output window and scaling;
  • path correction for output on old cutter models;

The source code for this utility is in this GitHub repository.

03 April 2018

Coin Match - mobile game (iOS, Android)

Coin Match is a unique puzzle game with Mahjong-style gameplay where the player finds matching pairs of coins to clear the level and build the coin collections. The game is not only fun to play, but it also educates with interesting facts. All the coins in the game are real, displaying both historical and current currencies that were in circulation throughout the world - from Ancient times to current day.

This 3D game was developed by me in cooperation with the artist Olena Vygovska. The game is built using Unity technology and C# language. The game was launched on iOS and Android platforms. As of 4 Apr the Android version gets 4.8 rating.

The game is available for free download on both AppStore and Google Play - try it yourself!

Industrial IoT: transport gas compression station telemetric

I worked as a software engineer in a bigger team developing complex telemetry system for natural gas compression stations. I was particularly for the sensor data flow - reading real time data, flow to the central server and storage for further analytics. This also included the client and web based interface.

The data was collected from ~300 data sensor and edge controllers installed on gas compressor turbines. The data was collected via a distributed network and stored in a relational database. The realtime nature of the data flow required buffering mechanisms, deep performance optimisation and other innovations for that time.

system diagram

02 April 2018

Image recognition in a video stream

The goal of this project was to restore the 3D position of a camera based only on 2D image sequence of video frames, containing a calibrated grid. This was necessary for a TV show production in what we would call now Augmented Reality.

The program accepts a video stream as input, detects the markers position, performs reverse 3D projection and outputs the result in a data file containing a timeline of 3D position of the camera. This file was then used in a 3D graphic application like Max or Maya for producing virtual 3D space. As a result, the 3D VR world and the live video were synchronised creating the AR illusion.

The following are the most interesting parts in the application:

  • pattern detection in the frames of the video stream;
  • "reverse projecting" - finding the point in 3D space from which the camera took the shot.

The application accepts as input an AVI file with frames containing the scene, actors and the special pattern (light blue lines on the back) like this:

Pattern detection

The frame is de-composed using blue Chrome key to separate the actors from the blue background. Then the algorithm detects the calibrated pattern traces in the image. The frame is scanned in the two directions, the pattern traces are marked based on colour gradient and the lines of the pattern are detected as "hypotheses". The debug output of this stage looks like this:

debug image tracing

Restore 3D position

The second part of the process is to restore the camera 3D position (and FOV) from the 2D patterns. Algorithm takes the pattern "hypotheses" from the previous step and detects the scale, skew and rotation of teh calibrated grid. From this data it calculates the 3D point of the camera from which the image was shot.

The application performs this calculations for the whole AVI sequence and form as a result the sequence of 3D camera points for export to 3D Max.

The application was solely developed by me and here is the GitHub with the source code.

01 April 2018

Assembler for Zilog Z80 processor

This DOS command line tool is Assembler compiler for Zilog Z80 processor, written in C language using Borland compiler.

assembler listing

This compiler performs the following functions:

  • reads input file and parses the source code;
  • finds identifiers, commands and numeric symbols;
  • builds a symbolic table and outputs dump list;
  • builds the resulting machine commands in binary file;

The compiler was successfully used in the development of the "Floppy-to-RS232" controller for the firmware of the micro-controller.

Check out the GitHub repository for the source code and sample file. DISCLAIMER: the code was written back in 90th utilising my mediocre C skills back then ;).