Projects

Contents

Conway's Game of Life

Conway's Game of Life is a Turing complete cellular automaton.

Due to the fact that it is a zero-player game, the interaction is done by supplying the initial configuration as a black and white picture and observing how it evolves.

The rules are simple:
Any live cell with 2 or 3 live neighbours survives, any dead cell with 3 live neighbours becomes a live cell, all other live cells die in the next generation, all other dead cells stay dead in the next generation.
C#

AES Encryptor

Advanced Encryption Standard (also known as Rijndael) is a specification for data encryption.

AES Encryptor is capable of encrypting and decrypting files (upper picture), plain text and hex data representation (lower picture).

The cipher uses AES in CBC mode and PKCS#7 padding.

This implementation is compliant with FIPS 197: Advanced Encryption Standard (AES) and was verified using test vectors from NIST SP 800-38A 2001 Edition.
C#

Nixie clock

AVR ATmega32 program

AVR ATmega32 program that is running on Nixie clock main board.

The program is responsible for adjusting brightness of the Nixie tubes according to environment brightness, timekeeping with synchronization over GPS every 24 hours and sending the time data to Nixie clock tubes driver.
C
AVR

Nixie clock tubes driver

PCB responsible for driving Nixie tubes.

Board overview:
  • 6P6C connector used for interfacing the Nixie clock main board
  • 180V DC input (powered by 180V power supply)
  • 6 11-pin connectors for 6 Nixie tubes:
    • 10 cathode pins, statically driving each digit
    • 1 anode pin, with dimming capability (PWM)
KiCad
PCB design
Soldering

Nixie clock main board

Main PCB of the Nixie clock.

Board overview:
  • 12V AC input
  • Rectified, smoothed 12V AC output powering the 180V power supply
  • ATmega32 AVR microcontroller as the heart of the Nixie clock
  • Photoresistor input for PWM Nixie tubes dimming
  • Two inputs for external buttons used for timezone setting (UTC offset)
  • GPS module connector with power on/off capability
  • 6P6C connector used for interfacing the Nixie clock tubes driver board
  • AVR ISP connector for programming
AVR
KiCad
PCB design
Soldering

180V power supply

180V power supply PCB.

Rectified, smoothed 12V AC input (around 16V DC), 180V DC output.
KiCad
PCB design
Soldering

TSP

C++ TSP solver.

Travelling Salesman Problem can be defined by the following question:

"Given a list of cities and the distances between each pair of cities, what is the shortest possible route that visits each city exactly once and returns to the origin city?"

The application has the following algorithms implemented:
  • Greedy
  • Repetitive greedy
  • Brute force
  • Simulated annealing
  • Genetic

Instance to solve can be loaded in two ways:
  • As matrix (faster, but needs more memory)
  • As coords (slower, but needs very little memory) (not available for explicit-type instances)

Loading instance as coords enables loading big instances (e.g. pla85900.tsp or bigger), as matrix representation of such instances could exhaust available memory.
C++

Plant care system

Plant care system PCB

PCB of the Plant care system that can keep the plant alive by supplying water and additional light in specified intervals and with specified duration.

Board overview:
  • ATmega32 AVR microcontroller as the heart of the Plant care system
  • Terminal block connector for external pump
  • Galvanically isolated terminal block connector for external lamp
  • AVR ISP connector for AVR programming
  • 5V DC input with battery backup:
    • 18650 battery holder for battery operation
    • TP4056 board for battery charging
    • Additional circuitry enabling simultaneous battery charging and system operation
  • Microswitch buttons for system parameters setup
  • 4-digit 7-segment display for system parameters
  • LEDs indicating the currently displayed parameter on 7-segment display
AVR
KiCad
PCB design
Soldering

Plant care system firmware

AVR ATmega32 program that is running on Plant care system board.

The program is responsible for keeping the plant alive by driving the water pump and the external lamp according to set parameters which can be adjusted.
C
AVR

Compressor

C++ file compression utility tool.

Implemented algorithms:
  • Canonical Huffman
  • Lempel-Ziv 77
  • Lempel-Ziv 78
  • Lempel-Ziv-Welch
C++
Bash

avr-mandelbrot

Generating Mandelbrot set on 84x48 px LCD using pure AVR assembly.

Details:
  • MCU: ATmega8 with 8 MHz internal RC clock
  • LCD: 84x48 px screen with PCD8544 driver
  • Language: Pure AVR assembly
  • Non-integer numbers: 16-bit fixed-point, in 4.12 and 8.8 formats
AVR
Assembler AVR

Hiragana recognition

Handwritten hiragana recognition software.

Details:
  • ETL Character Database extraction
  • Classifier training
  • Recognition program
Bash
Python

Encryptor

C++ data encryption utility tool.

Details:
  • Data encryption and decryption
  • Supported data types for input and output:
    • Base16
    • Base64
    • File
    • Raw
  • Data padding
C++
Bash

dotfiles

My collection of dotfiles.

A dotfile is a file with filename starting with a dot, storing user-specific application configuration.
Linux
Bash

diffusion-limited-aggregation

Diffusion-limited aggregation simulation implemented in Python and C++.
Python
C++
Bash