Welcome to wyllie.eu

This page keeps an up to date record of the miscellaneous projects that I work on for fun.

This server is hosted on a Raspberry Pi, live information on the status of the Pi Server (which is kept at a desired temperature by a custom cooling system) is shown below:

Current target server CPU temperature: --.- 'C

Real-time server CPU temperature: --.- 'C

Real-time Fan RPM: ---

To see more datalogging, click HERE for the weather station's live data feed.

Here are some graphs investigating the effectiveness of the Raspberry Pi's thermal control system:

Temperature Graph Cold Start Temperature Graph

Here is a picture of the Raspberry pi server setup, this is the server hosting the page you are viewing right now!

Pi Setup

Android Applications

To further my Java skills I jumped into the world of Android development, currently I have two apps published, (number 3 is in alpha, coming very soon!) one simple stopwatch game and another more complicated N-Body simulator, which was an extension of my school final year Computing Science project.

My first android app - "timestop" - can be found here.

My second android app - "Orbital Gravity Simulator" - can be found here.

The core Newtonian physics code from the Orbital Gravity Simulator is shown here running on a computer, the following video is a recording of coalescene of groups of masses collapsing into one under their own gravitational force, as can be simulated with the Android app.

Orbital Mechanics Simulation

For my crash Advanced Higher Computing Science project I decided to program an orbital mechanics simulation based game. The player must fly around and avoid gravitational entities, passing through certain regions to complete each level. The game can be downloaded here.

One of the most interesting aspects of this program was the analysis that could be done on the simulation afterwards. By recording the simulated velocity at each frame as the object orbited in a stable orbit around around the entity, a graph of how the velocity changed with time could be plotted. The results were as follows:

The results clearly showed the player orbiting with a velocity that oscillates periodically (as, although more accurately than, expected). The stable and consistent oscillation observed (no drag or similar such forces were programmed) meant Fourier analysis of the results were possible, which returned the following results:

As can be seen, with only a reasonably slight deviation, the orbital oscillation was composed of a frequency of just under 3 Hz, as expected and as was observed on the screen.

I repogrammed some of the core orbital mechanics code into Javascript using Khan Academy's handy educational javascript tool. The JS code is embedded here, and numerical values in the code can be changed to vary the speed and position of the orbiting mass, and the strength of gravity. This has proved fun for others to play around with :)

Made using: Khan Academy Computer Science.

Raspberry Pi Laser and milling CNCs

From spare disc readers (and one floppy disc reader) that were being thrown away, I salvaged the stepper motor controlled linear drives and resoldered and programmed them to move back and forth. By mounting three drives mutually perpendicular to each other, accurate control was acheived. I attached a pen to one axis, and thus was able to start drawing shapes.

By devising my own control script for the Raspberry Pi, which reads a file format that encodes data for each of the directions of the axes, and then programming some very (very) basic CAD software using Java to run on my PC, I was able to turn this into a reasonably accurate CNC drawing machine.

I later added in to the java software the ability to import monochrome bitmap images and convert them into the axes data (.TARA) files to be read by the control script. This allowed the printing of complex images, and I tested this by printing off various crests. In the near future I plan on replacing the pen with a burning (300 mW) laser, such that this CNC can become a precise laser engraver.

All code for this project can be found here

I eventually turned my plotter into a laser engraver, using a 200mW 650nm laser module powered by a scavenged ATX power supply (from the same old PCs as I got the disc drives!). Managed to get some awesome footage of it burning away into some old cardboard, although it has no problem burning into wood either.

The final step of this project was modulating the laser and varying tray speed to allow different shades to be engraved. Here is the Mona Lisa engraved onto a piece of cardboard...

CNC v4 - Milling Machine


These are the very initial tests of the CNC mill that I recently built. It is a much bigger CNC than my original small version, and is now capable of full scale milling and cutting using a cheap rotary tool which I bought for only £11. This whole project was extremely economical using almost entirely salvaged printers and a few leftover disc drives that were being thrown out anyway, along with three cheap stepper motors (£1.75 each), 20 ball bearings (£3-4), some threaded rods (£2), and miscellaneous nuts and bolts. I am currently programming a GCode interpreter to run this mill with high precision.

The WIP code for the interpreter is here: https://github.com/TomWyllie/rpi-gcode-interpreter

Hybrid Rocketry

I have been building hybrid rocket engines for a while now, here are some of my earliest burns. I recently completed my first burn of a much larger motor, however regression rate of the paraffin wax used a fuel proves to be rather low for any serious thrust - I am awaiting a polyethylene pelleted fuel and will keep this section updated as I burn more tests. Here are some pictures of the second iteration of the motor, now made of a steel tube, steel funnels and exhaust paste. The entire construction should be able withstand temperatures of over 1000'C.

Here is a compilation of several burns using my earliest design of motor - which was almost completely nozzleness. This proved invaluable in terms of learning about the pitfalls of small hybrid rocket engines.

This engine used gaseous Oxygen as an oxidizer and polyethylene / rubber as fuels.

Artifial Intelligence

One of my latest projects: a machine learning AI chatbot thing. (The AI is called Ariel.) Here is an early prototype of Ariel demonstrating her learning capabilities:

Ariel is currently in version 3.0, the very complicated and not understandable nodejs script can be found here. (note this won't actually run, as database credentials have been omitted)

Ariel learns by storing any responses you make to her and using a custom devised string comparison algorithms works out the most suitable response to any message you send, based off how you responded when she sent a similar message to you.


On a related note, my (currently very primitive) work on the OpenAI project can be found at https://gym.openai.com/users/TomWyllie

Weather Station

I recently built - and now testing - a small solar powered arduino-based weather station, to transmit temperature, humidity, and air pressure back to this server and provide a live feed on the internet.

LIVE WEATHER FEED IS HERE.

Here is an image of the first iteration, about to begin testing:

The components onboard are:

  • Arduino Nano
  • Two small solar panels (approx 120mW in bright daylight)
  • Lithium ion battery, a spare from a TI-Nspire calculator
  • TP4056 Based lithium ion charging board
  • NRF24L01+ 2.4GHz radio transceiver
  • DHT11 humidity sensor
  • BMP180 pressure and temperature sensor

Miscellaneous

Here are some miscellaneous projects. I programmed a stepper motor to play music by stepping with certain microsecond delays (and so different frequencies allowing notes to be played). This project was more or less useless, and simply was for fun while I waited for parts to arrive. :D

Code for this project here.



This next project was far more useful - I programmed an Arduino as a remote control for my monitor, although I did not go very far with it as the Infrared LED proved to be weak. I may continue more work on this in the future

Arduino code for this project here. (not including java code that converts the hex signals available on the internet into raw microsecond pause time data)



Here are some Java sort algorithms! (bubble / selection)

Bubble Sort Algorithm Selection Sort Algorithm

Although reasonably inefficient, these sort algorithms were great fun to code! To view the source code, and/or to download the .jar with 3 sort algorithms including your own animation generation, click here.

Run the executable .jar file with java -jar Sort.jar with java installed from cmd/terminal/bash.



My version of these periodic wave generating things that have been going around the internet:

Trig Generator

The source code and the downloadble .jar file are available here here.



Infinite series that converges (somewhat slowly, relative to other series eg Ramanujan's for 1 / pi) to value of pi - here are the first 100 terms.


The source code and the downloadble .jar file are available here here.