Design & Implementation
The "Air-Gapped" Security Philosophy
The primary goal was to automate a 2016 Ford F-150 without modifying the vehicle's hardware. By using a spare key fob, the project remains completely non-invasive. If I sell the truck or change vehicles, I simply swap the fob and the 3D-printed tray.
Power Delivery & Efficiency
Reliability was a major concern for a device meant to run 24/7.
- Dual-Rail Setup: I used a 5V 2A wall adapter as the primary source.
- Under-Board Buck Converter: To save space and keep the top of the breadboard clean, I soldered a DROK Mini Buck Converter to the bottom of the solderable breadboard.
- Fixed Voltage: I configured the DROK for a fixed 3.3V output to power the ESP32 logic rail. This prevents the "noise" or voltage sag from the servo (on the 5V rail) from causing the ESP32 to brown out during the 10 PM trigger.
Mechanical Assembly
The physical build is divided into two parts: the logic enclosure and the mechanical interface.
- The Base: A standard 100x60x25mm black project box.
- The Mount: I designed a custom 3D-printed tray that holds the Ford F-150 fob in a fixed position. The servo is integrated into this same mount to ensure the standard plastic horn is perfectly aligned with the "Lock" button.
- Vibration Dampening: The 3D-printed assembly is attached to the case using double-sided foam tape. This not only secures the mount but also absorbs the torque kickback from the servo, ensuring the "press" is consistent.
Programming & OTA Workflow
Because the project board lacks a built-in USB port, I used a USB-to-ESP01 adapter to bridge the TX/RX/GND pins for the initial flash.
- Bootstrap: I pushed a basic sketch to enable ArduinoOTA.
- Wireless Calibration: Once assembled and closed, I used the 20-second boot test logic. This allowed me to update code via Wi-Fi and watch the servo actuate 20 seconds later to verify the physical alignment without needing to plug in a cable.
Internal Cable Management
To maintain a "finished product" feel:
- All excess servo wiring is coiled neatly inside the case.
- I soldered a 3-pin male header directly to the breakout board.
- To service the unit, I simply open the lid and unplug the servo—no dangling wires or external mess.
Software Logic
The ESP32 uses the WiFi.h and time.h libraries to connect to an NTP server. On boot, it grabs the current epoch time and then checks every second if the local time matches 22:00:00. When triggered, the servo moves to the calibrated posPress angle, holds for 1000ms, and returns to posIdle.
rockfishon