change to blowfish
|
After Width: | Height: | Size: 1.4 MiB |
|
After Width: | Height: | Size: 696 KiB |
@@ -0,0 +1,52 @@
|
||||
---
|
||||
title: "Garmin Eink"
|
||||
date: 2026-02-20T15:42:06Z
|
||||
draft: false
|
||||
image: /projects/garmin-eink/featured.jpg
|
||||
summary: "Using an Eink display with an ESP32 to track and motivate me for a virtual running challenge"
|
||||
tags: ["ESP32", "Self-Hosting"]
|
||||
---
|
||||
|
||||
<style>
|
||||
section img, .content img, article img {
|
||||
max-width: 50% !important;
|
||||
height: auto !important;
|
||||
display: block;
|
||||
margin: 2rem auto;
|
||||
border-radius: 8px;
|
||||
}
|
||||
</style>
|
||||
|
||||
### 📋 Project Highlights
|
||||
* **Goal:** Show my running progress on my desk
|
||||
* **Tech Stack:** Python, ESP32, C#
|
||||
* **Outcome:** A clean and simple setup that works reliably
|
||||
|
||||
For christmas my wife got me a virtual running challenge. I have to run 80km with a smart watch and at the end I get a nice Scooby-Doo medal. The issue is, now that everything requires its own app I forget to open it. My Garmin watch tracks all my running and syncs it to the running app but I wanted a way see my progress, clearly on my desk in the hope it will motivate me to get out and run more.
|
||||
|
||||
I had a waveshare 4.2" eink display in my drawer that ive been looking to find a good use for. A quick search only and I found a python wrapper that can pull data from Garmin connect and suddenly I had all the pieces to put this project together.
|
||||
|
||||
---
|
||||
|
||||
### Step 1 - Getting the Garmin Data
|
||||
|
||||
I found this brilliant tool online called [Python Garmin Connect](https://github.com/cyberjunky/python-garminconnect) that allows you to input your Garmin account details and pull specific data from their API. The tool was installed and setup up as a system service on my server and the results servered with a Caddy web server.
|
||||
|
||||
### Step 2 - Displaying data on the eink screen
|
||||
|
||||
In VS Code I installed platform IO and connected my ESP32. The code was written to connect to wifi, grab the data from the web server and display it to the eink. I gave it a title and a progress bar with percentage to clearly show how much I have completed. I also added a Last Updated time stamp and logic to put the ESP to deep sleep and only update each morning after my typical workout time slot.
|
||||
|
||||

|
||||
|
||||
I later decided it made more sense to show todays date at the botton my the page, making it double as a basic daily calender.
|
||||
|
||||
One of the greatest challenges was my desicion to include an image. An easier option would have been to buy an ESP32 with a micro SD card slot to give me an easier way of storing the image. Wanted to make this work without buying anything new I decided to stream the image from my Caddy server directly ro the display. With some AI magic I had a bash script that would convert any image I gave it to a resized monochrome bitmap suitable for the basic eink display. The great thing about using this approach is it makes changing the image for a different future challenge much easier.
|
||||
|
||||
### Step 3 - The case
|
||||
|
||||
The case comes from [printables](https://www.printables.com/model/495094-waveshare-42-e-paper-stand/comments) and felt like the cleanest option.
|
||||
|
||||
### 🏁 Summary & Lessons Learned
|
||||
Wrap up your project here. What would you do differently next time? This provides that "closing" feel for a future employer.
|
||||
|
||||

|
||||
|
After Width: | Height: | Size: 544 KiB |
|
After Width: | Height: | Size: 283 KiB |
@@ -0,0 +1,37 @@
|
||||
---
|
||||
title: "Smart Train"
|
||||
date: 2026-02-20T12:27:11Z
|
||||
draft: false
|
||||
image: /projects/smart-train/featured.png
|
||||
summary: "EVERYTHING MUST BE SMART! I take an old Hornby train and make it controllable from Home Assistant"
|
||||
description: "EVERYTHING MUST BE SMART! I take an old Hornby train and make it controllable from Home Assistant"
|
||||
tags: ["Smart-Home", "ESP32"]
|
||||
---
|
||||
|
||||
<style>
|
||||
/* This targets any image inside the main article area */
|
||||
section img, .content img, article img {
|
||||
max-width: 50% !important; /* Use !important to override theme defaults */
|
||||
height: auto !important;
|
||||
display: block;
|
||||
margin: 2rem auto;
|
||||
border-radius: 8px;
|
||||
}
|
||||
</style>
|
||||
|
||||
### 📋 Project Highlights
|
||||
* **Goal:** What was the main objective?
|
||||
* **Tech Stack:** Proxmox, Docker, Caddy, etc.
|
||||
* **Outcome:** Did it work? Is it still running?
|
||||
|
||||
---
|
||||
|
||||
### 🚀 The Deep Dive
|
||||
This is where you write your main paragraphs. You can drop images anywhere using the standard syntax. Thanks to the style block above, they will automatically stay at 50% width.
|
||||
|
||||

|
||||
|
||||
---
|
||||
|
||||
### 🏁 Summary & Lessons Learned
|
||||
Wrap up your project here. What would you do differently next time? This provides that "closing" feel for a future employer.
|
||||
|
After Width: | Height: | Size: 2.2 MiB |
|
After Width: | Height: | Size: 3.2 MiB |
|
After Width: | Height: | Size: 1.3 MiB |
|
After Width: | Height: | Size: 2.3 MiB |
|
After Width: | Height: | Size: 1.6 MiB |
@@ -0,0 +1,58 @@
|
||||
---
|
||||
title: "Solar Cells"
|
||||
date: 2026-03-13T22:16:00Z
|
||||
draft: false
|
||||
image: /projects/solar-cells/featured.jpg
|
||||
summary: "Final year University project making Dye Sensitised Solar Cells."
|
||||
tags: ["Electronics", "University"]
|
||||
---
|
||||
|
||||
<style>
|
||||
section img, .content img, article img {
|
||||
max-width: 50% !important;
|
||||
height: auto !important;
|
||||
display: block;
|
||||
margin: 2rem auto;
|
||||
border-radius: 8px;
|
||||
}
|
||||
</style>
|
||||
|
||||
### 📋 Project Highlights
|
||||
* Fabricate Dye Sensitized Solar Cell using Natural Dyes
|
||||
* Investigate a variety of different dyes and their effects on cell efficiency
|
||||
* Develop cosensitized cells by mixing compatible dyes and comparing their performance
|
||||
|
||||
---
|
||||
|
||||
For my final year project of my BSc Physics degree, I fabricated solar cells using natural dyes extracted from plants, fruits and vegetables.
|
||||
The motivation being the project was to investigate alternative methods for solar power generation which don't involve conventional silicon as this can be difficult to recycle at end of use.
|
||||
|
||||
### Benchmarking a silicon cell
|
||||
To test the cells that we would be making, a light box was setup.
|
||||
A standard silicon cell was then tested to get an understanding of how much power could reasonably be harnessed from the light source and to give a benchmark to compare results against.
|
||||
Initially the testing of cells was done using a separate voltmeter and ammeter to record the I-V curve created by the cell.
|
||||
This was found to be very inefficient and was difficult to reliably repeat, so I setup a test circuit with an Arduino to record the result.
|
||||
|
||||

|
||||
|
||||
### Extracting the Dyes
|
||||
The dyes were extracted from a range of plants, fruits and vegetables all based on success in previous research.
|
||||
The exact extraction method had to vary slightly based on the source of the dye but the base principle involved crushing the source in either water or ethanol and then filtering the solution.
|
||||
|
||||
### Analyzing the Dye
|
||||
With the dye extracted it was then watered down and analyzed using a spectrometer.
|
||||
This allowed us to see the absorption of the dye over a range of wavelengths.
|
||||
The absorption of the dye in the wavelengths of the sun are one of the most important properties of the dye so testing this at an early stage helped us rule out certain dye sources without making cells for them.
|
||||
|
||||
### Making the Cells
|
||||
To make the cells, a Titanium dioxide paste was made, and spread thinly onto a sheet of conductive glass.
|
||||
The cell was then heated on a hotplate and left to cool.
|
||||
The extracted dye was then carefully dropped onto the Ti02 with a pipet and left to soak in.
|
||||
The excess dye could then be rinsed off and the cell is left to dry.
|
||||
Finally a small amount of redox electrolyte solution is sandwiched between the Ti02 layer and another sheet of conductive glass, and the pieces are clamped together.
|
||||
|
||||
### 🏁 Summary & Lessons Learned
|
||||
Wrap up your project here. What would you do differently next time? This provides that "closing" feel for a future employer.
|
||||
|
||||
|
||||
|
||||