Skip to main content

My own Departure Board (V1)

A screen that tells you when the next train is coming, built with the same complexity as a Mars mission.

It all started on the blue line to Kista, riding Stockholm’s Tunnelbana. Half asleep, I was staring at the glowing “next departures” board when it hit me:
"What if I built one of those for home?"
Sure, I could’ve just opened an app like any normal human, but I chose the long, slow, bug-ridden path. Naturally.

A while later, for my birthday, Roberto gave me a Raspberry Pi Zero 2 W. Why? No idea. But clearly, it was fuel for my urge to overengineer things.
With that little board in hand, my fate was sealed.

Weeks later, we went to a Hopsworks meetup in Södermalm. Being a good Scandinavian tech event, it was full of beer. And not just any beer—Hopsworks has its own craft beer line, with labels that look like they came straight out of a DataFrame. Absolute chef’s kiss.
They were showing how they use the Trafiklab API to feed an AI model that predicts public transport delays.
Roberto and I were into it, but instead of doing something useful with that data, we decided to waste time building our own boards.

The moment the inspiration was sealed—Hopsworks event, beer included.

I went the hardware route: Raspberry Pi, double-sided tape, and a web app held together with hope.
Roberto, in true Roberto fashion, picked Kotlin. Or something equally obscure. I honestly can’t remember, but I’m sure it was weird.
Each of us had our impractical stack and technical pride.
Two completely different paths to solve something we could’ve done with a browser tab.

Back to my board: I used a recycled laptop screen, a metal frame, and industrial-strength double-sided tape. No 3D prints, no fancy mounts. Just adhesive.
 

It ran Ubuntu Server, no desktop environment. At first, I launched lightweight browsers with xinit. Spoiler: they suck.
Eventually, I wrote a wrapper that runs Chromium in kiosk mode, with all the useless flags disabled. Performance improved dramatically. 

Basic early UI running on the panel. The Pi Zero temporarily attached for first tests.

I started with vanilla JavaScript, because of course I did.
After three files I regretted everything. Switched to Angular 17, built it on my PC (because the Pi suffocates if you throw ng build at it), and uploaded it via scp like it was 2005.
Efficient? Not at all. Functional? Kinda.

 


Coding the UI before the inevitable regret that led to Angular.

Along the way, I also discovered that I didn’t know how to rotate HDMI output in Ubuntu.
I found out the hard way—after mounting the screen vertically and watching the UI spill sideways like a Tokyo street sign.
Lots of trial and error: xrandr, broken configs, reboots, swearing.

And as if that weren’t enough, I decided to add presence detection. Because obviously a screen with no one looking at it is an energy crisis.
First attempt? A 24 GHz Bluetooth sensor from China, the kind that only works via some Android app called “SmartLife” or “TuyaX Pro Whatever.”

 

The glorious sensor that asks for permission to control your oven, your location, and your soul that only worked from this Android friend.

I wired it to the GPIO pins. Never worked properly from behind the screen (pro tip: metal blocks stuff), and it drew power like a space heater.
Also, if I have to use some bloated Android app to configure it… thanks but no thanks.

I replaced it with a Zigbee sensor, integrated into Home Assistant, which turns off the HDMI output when no one’s around.
Much more reliable, no garbage UI, and now it also pulls in temperature and humidity data, displayed in the footer. Because if you’re going to overengineer, it better tell you how humid your living room is.

 

Final wall-mounted version, running fully headless and smarter.

In the end, I wanted everything powered by a single cable. And I got it—kind of. Just one humble microUSB, which feeds both the frame and the Pi. Not glamorous, but it works. And no dangling wires, which was all I really cared about.

 

Side-by-side inspiration: the metro and airport boards that started it all.

Today the board is mounted. It boots on its own, shuts off when I’m not around, and shows info I could get from my phone. But who cares?
I built it myself, with recycled parts, intentional overkill, and the unshakable urge to make simple things complicated.

What’s next?
Automate the deploy, add airports, wire up a coffee-level sensor.
I’ve also considered putting a QR code on-screen to control it from my phone: switch between preloaded boards, trigger updates, change modes… nothing urgent, but it sounds fun.

Comments

Popular posts from this blog

The wire - less madness

Lately working with Lora device I have learned that we are really close to create big impact changes with relatively little investing.    I've started my mesh during a research to communicate my postbox with my Home Assistant setup. In all the apartments where I lived this really got me; I wanted that when the post agent left something for me it should notify me somehow. This could have been because I've worked far from my place, or even because otherwise every time I need to go check it. During this mission I only counted with a bunch of ESP32s that could be used for communication using WiFi, Bluetooth and ESPnow. That's awesome but unfortunately not enough.  Suddenly when looking for sensors for other project, I've found SX126X and SX127X which are modules for LoRa communication. And pretty cheap ones!    2022 I've got some Heltec V1 (Stockholm)   Is good to mention that this technology uses ISM which basically is that the states provide a license-free b...

Shoot: Derrotas políticas y nuevas oportunidades

A lo largo del tiempo, como Argentinos fuimos encargados de llevar la política a nuevos espacios. Fuimos pioneros en debates abstractos, generamos discusiones de todo tipo contemplando todos los aspectos y aristas que un tema puede encontrar. Así y todo íbamos olvidando gran parte de nuestra gente. Así y todo nos íbamos blindando del otro. Así y todo, conseguimos ser de mente abierta pero tan cerrados para no entender que hoy no es ayer, para no entender que somos muy distintos y debemos vivir juntos. Nos dimos cuenta que ni la distancia ni las rejas nos separan del todo. Que la "necesidad" se hizo compleja, y que los derechos son un reflejo de esta nueva lucha de clases. Podríamos asegurar que el conflicto es lo nuestro, y que no sabemos cómo resolverlo. Así y todo es nuestra misión llevar paz y construir. Así y todo debemos saber que no somos tan diferentes, y que esa distancia que generamos no es más que una diferencia de potencial o voltaje político. Todo nuestro ...