I am most familiar with the following programming languages and technologies:
Feel free to contact me via email: samuel@sjohnston.uk
I designed and developed a solution for using an AI model to detect anomalies in sensor data from IoT devices. The IoT device hardware was built and assembled by myself for deployment within an agricultural environment. It featured temperature, humidity, light and soil sensors, all interfaced with a custom PCB, controlled by an Arduino which I programmed, and uses LoRa to transmit the sensor data. I created a Python program to train the AI model on data collected from the sensor's, using TensorFlow. The program processes data in real time, determining whether to accept or reject it if it detects any signs of invalidity or tampering by an adversary. This work formed part of my Bachelor's level dissertation, of which I wrote an academic and in depth explanation of the solution and evaluated its effectiveness, with a heavy focus on trust and security.
A custom physics engine for Unity, written in C#, implementing Newtonian physics (including collision detection and resolution). The physics are demonstrated in a simple 'marble run' game which shows how the physics can be manipulated in real time with different environments such as rough terrain and multiple gravitational sources.
A live map to display the positions of trains within the UK. Data is sourced from the Network Rail Open Data low level data feeds, consisting of binary data representing train signalling states. Considerable effort was involved to map signalling state changes to physical locations for display on a map. Python was used, with STOMP to access the message broker for the real-time signalling data feed. The program stores data in a MySQL database, and uses the Flask web framework for the implementation of a RESTful API to retrieve live train locations.
A RESTful API for a 'to do list' service, written in C# and making use of Docker containers. Data is stored in a MySQL database using the Entity Framework ORM.
I assembled the hardware for a C-Band satellite receiver, capable of receiving aircraft downlinks from geostationary satellites. A Raspberry Pi with a software defined radio (SDR) was used to collect this data, with the use of readily available decoding software. I developed a logging and heatmap application using PHP and JavaScript to visualise the positions of aircraft which fly outside of ground based radar coverage, and therefore rely on satellite communication.
Green Streets is a social media service with a mobile application frontend, developed as part of a University group project. The app encourages users to engage in a community effort to pick up litter by gamifying the experience, as well as providing a space to organise and discuss litter picking events (e.g. beach cleans). The frontend mobile app is written in Java, using Android Studio, and interfaces with a backend RESTful API created with Python Flask. The backend stores its data in a MySQL database.
Demonstrating how the location of low-cost and low-power devices can be determined without the need for GPS hardware. The ESP8266 microcontroller was used to record signal characteristics of nearby Wi-Fi networks, enabling it to determine its location by using the Google Geolocation API. The code was written in the Arduino C++ language and the microcontroller was interfaced via the Arduino IDE.
I created a secure file transfer protocol in Python for the client-server architecture as part of my Master's level dissertation project. The implementation leveraged Trusted Platform Module (TPM)'s capabilities to perform secure cryptographic operations including key generation, encryption, decryption, signing and verification. The project also focused on preventing malicious clients from being accepted by the server by utilising the TPM's Platform Configuration Register as part of the file verification process.
A proof-of-concept approach to using the extremely large coverage of Apple's Find My Network for retrieving data from IoT devices lacking an internet connection. This project expanded on the OpenHaystack codebase to add support for sending external sensor data from ESP32 devices via Bluetooth Low Energy (BLE). When in range of a supported Apple device, the data will be uploaded to Apple's servers, where it can be retrieved and processed by a custom application.
A live aircraft tracker specifically focused on tracking light, general aviation aircraft and gliders. Data is obtained from the Open Glider Network live feed. A Python program connects to the live feed and performs validation and filtering on the data. The program matches aircraft in the feed to a database of known aircraft registrations, and outputs formatted data on a TCP socket for display on a live map.
A web based lottery system utilising role-based access control to feature multiple users and an administrator control panel. The Python framework Flask is used alongside the SQLAlchemy ORM to store data in an SQLite database. Time-based one-time password (TOTP) two-factor authentication is implemented, and sensitive data such as lottery numbers and user passwords are appropriately stored in the database.
A secure chat room, collaboratively designed and developed as a group project during University. Designed for high performance and capable of handling many simultaneous clients, it offers features such as end-to-end encryption, file sharing and steganography. The codebase consists of a Python program interfacing with a MySQL database.
A 3D Unity environment based on a volcanic island, showcasing custom water shaders, real time lighting, lens flare, fog and particle effects.
A peer-to-peer messenger built for ESP32 devices with a LoRa RF module for transmitting and receiving messages. Built with Arduino C++, the ESP32 hosts a local web application providing an interface for sending and receiving messages, and transmits encrypted LoRa packets between devices. Intended for use with personal devices which do not have internet access.
I assembled the hardware and antennas for an ESP32-based satellite ground station, capable of receiving LoRa packets from satellites in low earth orbit such as cubesats and Starlink satellites. The software makes use of the preexisting project TinyGS. Decoded packets are sent to a community MQTT server.
I setup a receiver for Automatic Identification System (AIS), a transmission standard which enables maritime vessels to broadcast their location for safety over very high frequency (VHF) RF. I developed a PHP program to decode binary position messages as per the AIS specification, and stored the decoded positions in a database. JavaScript is used to visualise this data on a map, allowing for analysis of common shipping routes.
A station for receiving live data from meteorological weather balloons (radiosondes) used to aid weather forecasting models. The hardware consists of a Raspberry Pi and software defined radio (SDR), and uses the radiosonde_auto_rx as decoding software. I created a Python program to convert live packets into a format which can be used to track balloons on a live map, making use of networking sockets.
First three years consisted of Bachelor's level study, followed by a final year at Master's level.