Hi, My Name is

Micke Sarro

I’m a Master’s student at the University Of Turku with a strong interest in cybersecurity, drones, software development and artificial intelligence. I’m a motivated learner that likes to build things and take on new challenges.

In my free time I like flying and building small FPV quadcopters, but I’m also interested in the security aspect of drones and their future applications. I am also passionate about cybersecurity with a particular interest in penetration testing and reverse engineering. I’m currently looking for opportunities in these areas, but I’m also open to any other roles where my skills could be fitting.


Projects

Stream Deck Project

PythonFlask
Stream Deck Project

Custom-built touchscreen Stream Deck paired with a physical audio mixer. It uses a repurposed rooted Samsung Galaxy S3 as the touchscreen interface, while the physical hardware mixer runs on the deej software using an Arduino Nano with four potentiometers.

Custom Stream Deck & Hardware Mixer

Custom-built touchscreen “Stream Deck” paired with a physical audio mixer. It uses a repurposed rooted Samsung Galaxy S3 as the touchscreen interface, while the physical hardware mixer runs on the deej software using an Arduino Nano with four potentiometers.

Features

  • App-Specific Volume Mixing: Four physical knobs let you independently control the volume of specific applications (like Discord, Firefox, and Spotify).

  • Visual Mixer Display: The Galaxy S3 screen shows which app is mapped to which knob, featuring live volume sliders and percentages.

  • Spotify Dashboard: A dedicated media screen pulls live data from Spotify, displaying the track name, artist, album art, and a live progress bar.

  • Touchscreen Controls: On-screen buttons allow you to quickly manage media (Play/Pause, Rewind, Skip) or execute quick actions like deafening Discord or switching audio outputs.


How It Works

  • At bootup the MixerApp.exe launches in the background. Background threads start and monitor the PC’s active applications, volume levels, and Spotify status.

  • Once the Galaxy S3 is plugged in via USB, the bundled Android Debug Bridge (adb.exe) detects it.

  • The script uses ADB to automatically set up port forwarding or USB tethering, creating a private network bridge between the PC and the phone.

  • After the bridge is established, the Flask app starts hosting the local web app.

The Display

  • The S3’s web browser navigates to the local IP address where Flask serves up the HTML, CSS, and JavaScript interface.

  • The host PC provides the data in JSON format, where the phone reads it to make changes like move the volume sliders, update the song title, or change the album art.

Actions

  • For media and especially Spotify data, Windows’ media session API is used to pull the info. This info is then cached in audio_manager.py to avoid unnecessary requests.

  • Audio actions are handled using nircmd.exe to talk to the Windows Control Panel.

  • Other actions like Discord are handled using keyboard shortcuts.

Showcase

The physical mixer and the smartphone are fitted into a cardboard box that’s painted black :D. A 3D printed case would be the next addition to have a more finalized look. Other future additions would include a simple function to easily add/remove buttons and actions into the mixer.

Arduino-Analog-VTX

ArduinoSmart Audio
Arduino-Analog-VTX

DIY SmartAudio VTX Controller

DIY SmartAudio VTX Controller

A small Arduino-based controller that talks to an analog FPV video transmitter over the SmartAudio protocol — letting you set channel, output power, and pit mode without a flight controller.

Built and tested with:

  • Arduino Nano
  • BetaFPV M03 analog VTX (25–350mW, 5.8GHz)
  • A single push button for on-the-fly channel and power control

Hardware

Component Role
Arduino Nano Runs the SmartAudio packet engine, reads the button, drives the VTX
BetaFPV M03 VTX + Antenna Analog 5.8GHz video transmitter, controlled over SmartAudio
Push button Short press = change channel, long press (1s+) = cycle power level
Split-rail 5V power Arduino gets power from USB-C connected to computer. VTX gets power separately from a powerbank or from a standard charger to handle the RF amplifier’s current draw, sharing a common ground with the Arduino for signal integrity

Wiring

Below is the full wiring diagram:

Through trial and error I figured the 1kΩ resistor is important, since SmartAudio is a shared, half-duplex, single-wire bus. Without it, the Arduino and VTX briefly driving the line at the same time can cause contention and corrupted commands.


Usage

  1. Wire the Nano to the VTX as described above, sharing ground.
  2. Flash vtx_controller.ino via the Arduino IDE.
  3. Plugging power should immediately start broadcasting on the configured startup channel.
  4. Short-press the button to step through channels; long-press to cycle power levels.
  5. Opening the Serial Monitor at 115200 baud shows what’s being sent.

Clear video feed from another VTX transmitting a signal

Powering up the arduino VTX and toggling through to the same channel (RACEBAND CH-5) shows clear interference


Troubleshooting & End results

  • VTX resets to pit mode every power cycle: There were a lot of problems of settings not persisting over power cycles. This is most likely due to these cheaper VTX modules re-sending the config every boot.
  • Flickering / intermittent signal: There were also problems with the signal being weak or flickering, probably due to noise on the SmartAudio line. The VTX was also running hot during a lot of testing and at the end it might’ve burnt. This meant that I was unable to get a completely working version.
  • Next steps: Following steps in the project could be adding a receiver so the controller can scan for active signals first, then automatically setting the VTX to match it. This would work rather than manually checking every band and channel. This could be done by using the automatic search logic from the goggles for searching the strongest signal.