Some of my projects
Emotion recognition inside a VR headset, on a £10 chip
I mounted a Raspberry Pi Zero and a camera on the outside of a VR headset. Via a computer vision model run on the pi, we could tell when someone smiled. This was fed into the VR environment (characters in that environment behaved differently when they knew you were smiling). The first version was made of cardboard and masking tape.
StoryFutures · 2020– Pi Zero, OpenCV, Python · finished rig filmed for AI Spy
A Duplo windmill that answers to Alexa
My son wanted a windmill that turned when he asked it to, via Alexa. A micro servo fits inside a Duplo brick. The rest of the windmill is ordinary bricks.
2019–2020 · Duplo, micro servo, Alexa
An Arduino you can hold in both arms
An Arduino Uno is about the size of a credit card. Here’s a huge one! Took some days to 3d print.
2026 · 3D printed
A brain that lights up
Full size print done with transparent PLA. The model’s from a brain scan I had a few years ago.
Christmas 2021 · white PLA, LEDs
Helen Falls In
Helen cycles the Wey towpath from West Byfleet to Godalming on a very wobbly bike. Keep her dry with the arrow keys, the left and right halves of the screen.
2026 · play it
Wind and haptics you can post to someone
Multisensory experiences mostly live in expensive venues. Here’s a robotic wind generator I built. An awesome PhD student is exploring whether augmenting movies / experiences with additional senses provided by this and other devices, boosts metrics such as enjoyment.
Ongoing · Arduino, servos, 3D printing · gamepad-controlled
A scent release device, also for Unilever
Unilever needed a way to contain scent and release it on cue. An early project of mine.
Unilever · 2012 · badged Xperiment Hardware, Mk 1.0
A six-channel taste delivery machine
Multisensory flavour research needs precisely timed, repeatable delivery of six liquids to a person’s mouth without them seeing what’s coming. I designed and built this solution.
Unilever R&D · psychophysics apparatus · clip from 2011, early version
My brain, open sourced
I have printed a lot of brains. This one is mine. The raw structural MRI and printable models are on GitHub, under Apache 2.0. You can print it yourself.
Opensourced 2019 · MRIcron, STL, 3D printed · github.com/andytwoods/brain
Vibrating HairWare
Hair follicles have tactile sensors. It’s a shame we can’t make use of them when communicating with our tech… that’s where this idea came in. Via gear I had…
· arduino
The Inclusivity Bookshelf
Three physical bookshelves already on campus, plus a website so other places of work can set up their own.
Launched 2025 · inclusivitybookshelf.com
Can I Still Code?
An ongoing longitudinal study of what AI coding assistants do to developers’ underlying Python skill. I was curious (and worried!) about the impact of coding ability due to using AI.
Ongoing · canistillcode.org · Django
LiveQual – live qualitative research that runs itself
A WhatsApp based research platform I’m proud of, made with Django. Paper coming shortly!
Current · Django
Simulating a psychology study with ChatGPT4o
I asked ChatGPT4o to simulate a psychology study with a complex multilevel design (here’s the final code). I wanted to check whether an effect we observed was down…
· simulation · psychology · chatGPT · python
InclusivityXR – finding accessibility problems in the pixels
There are many ways of making a button or other UX element in VR, making it hard to figure what UX elements by looking at underlying code. InclusivityXR gets around this by examining pixels. A developer uploads a screen recording of their experience. A computer vision pipeline then finds the interface elements, and a set of detectors flags issues of inclusion such as text too small, targets too small, crowdedness, and contrast that fails for regularly sighted people as well as for the three commonest forms of colour blindness. Built with Umar Farooq and Marco Volino at Surrey’s CVSSP, and James Bennett at StoryFutures.
StoryFutures with CVSSP, Surrey · CVMP 2023 · paper
Story Starter – driving a room full of headsets with no internet
StoryTrails toured fifteen UK towns in the summer of 2022, bringing six VR experiences to thousands of people. Every off-the-shelf system for managing a fleet of headsets required a live internet connection—something a library cannot always provide reliably.
Story Starter works over a local network instead, using a small dongle housed in a 3D-printed case that sits discreetly in the corner of the room. From it, an onboarder can start or stop an experience, install a new experience, adjust the volume, and check the remaining battery level—all without having to put the headset on. The result: faster-moving queues and one fewer thing to wipe down between users.
Written with Laryssa Whittaker, Neil Smith, Robert Ispas, Jackson Moore, Roderick Morgan and James Bennett.
StoryFutures · StoryTrails 2022 · paper in Virtual Worlds
DnD ability scores chance
I felt bad about rolling an 18 amongst 5 other 3d6 scores. I wrote this browser based probability checker to show that chances do happen.
· probability · dnd
IDE+browser-refresh hotkey productivity tip
Do you have your IDE and your browser open side-by-side? Do you want explicit control of when your browser refreshes with a single shortcut key? Auto-reloaders are…
Trumpet note / valve learning tool
I’ve made this tool help people like my son and me, who have trouble learning notes and fingerings. I have no formal musical training, except for 4 years of…
django htmx modal popup loveliness
I thought to share a pattern I’ve been using recently, for providing modal popups, via HTMX. I’m using Bootstrap5 but this is straightforward to implement in…
· bootstrap5 · django · htmx
TestXR – a platform for running VR studies in the wild
A platform I developed for coordinating at home and central location VR base research.
StoryFutures · Django, AWS · £200k secured
Pizero arty alexa-powered sunblind controller
I need to be careful with sunburn, so we installed an electronic sun-blind that extends out from the house to cover part of our garden. I was excited to hear from…
OK google, are there parking spaces — my PiZero, computer-vision, voice-assistant, parking-space detector
Situation
· raspberry-pi · computer-vision · ok-google · pizero
Setting up google-actions to control python gadgets
I am using PyCharm so I used it’s GUI to create a new project and a Virtual Environment. I also:
Xperiment – millisecond timing in a browser, before that was possible
Back in 2011, not a lot of research was done online. I spent seven years developing software to make this possible, rewriting the engine three times as the web platform caught up: ActionScript, then Haxe, then ES6. Conducting perception research over the internet came out of it.
Founded 2011 · ran to 2018 · AS3 → Haxe → ES6 · archived site