diff options
| author | Sadeep Madurange <sadeep@asciimx.com> | 2026-01-13 22:40:06 +0800 |
|---|---|---|
| committer | Sadeep Madurange <sadeep@asciimx.com> | 2026-01-14 11:02:47 +0800 |
| commit | 8be504601aeb9005b4e227fb2529d12672ea697e (patch) | |
| tree | 4deed91f1d9cd912045a8028615e3cac70ef2c3f /_log/fpm-door-lock-rf.md | |
| parent | 1fc1dbcb34bfb0a7f99bbc068edff93ae97c4662 (diff) | |
| download | www-8be504601aeb9005b4e227fb2529d12672ea697e.tar.gz | |
Tighten prose.
Diffstat (limited to '_log/fpm-door-lock-rf.md')
| -rw-r--r-- | _log/fpm-door-lock-rf.md | 30 |
1 files changed, 15 insertions, 15 deletions
diff --git a/_log/fpm-door-lock-rf.md b/_log/fpm-door-lock-rf.md index 97779db..7c2b9ef 100644 --- a/_log/fpm-door-lock-rf.md +++ b/_log/fpm-door-lock-rf.md @@ -9,22 +9,22 @@ thumbnail: thumb_sm.jpeg Wanted to unlock door with fingerprint, wirelessly to avoid drilling. 2024-11: Started with basic 433MHz RF modules and two Arduinos. Connected data -lines of the transceivers to UART RXD/TXD of an ATmega328P. -Unreliable--constant packet loss. +lines of the transceivers to UART RXD/TXDs of the MCUs. Unreliable--constant +packet loss. 2025-01: Switched to RFM69 modules. Complete ball-ache. Followed datasheet to the letter, audited code many times, cross-checked with RadioHead and RFM69 -open-source drivers. No luck. +drivers. No luck. -ATmega328P runs at 5V; RFM69 3.3V. Suspect logic-level converter (LLC) -issues. High resistance. Not enough swing. +ATmega328P runs at 5V; RFM69 3.3V. Suspect logic-level converter (LLC) issues. +High resistance; Not enough swing. 2025-04: Ditched RFM69s. Switched to NRF24L01+ modules--data pins 5V tolerant, no LLC required. Spent six weekends writing a clean-room driver from scratch. Works like a charm. -Basic security via xor cipher–good enough for a door behind a guard post and -gate: +Basic security via xor cipher--good enough for a door behind a guard post and +a gate: ``` void xor(const char *k, const char *s, char *d, uint8_t n) @@ -56,12 +56,12 @@ static inline void keygen(char *buf, uint8_t n) ``` Protocol: FPM sends SYN. Servo responds with session key. Both xor-ed with -static key. Session key used thereafter. Private command set authenticates -endpoints. +static key. Session key used thereafter. Command set private--serves to +authenticate endpoints. 2025-05: Wrote FPM drivers for R503 and FPM10A. UART RX sequence was -tricky--adopted Adafruit C++ FOSS implementation to C. R503 has built-in LEDs -and better form factor. Chose it for the lock. +tricky--adopted Adafruit C++ implementation to C. R503 has built-in LEDs and +better form factor. Chose it for the lock. 2025-06: Two PCBs for FPM (front) and servo (back) controllers. @@ -90,15 +90,15 @@ and better form factor. Chose it for the lock. PCB specs: 2-layer, 1oz copper, 0.3mm traces (0.5mm for power). Ground plane. -2025-06: NRF24L01+ on the back stopped working after mounting on PCB. Too close -to servo's PWM line. Soldering a large 47uF (16V) electrolytic capacitor -between VCC and ground fixed it. +2025-06: NRF24L01+ stopped working after mounting on PCB. Too close to PWM +line. Soldering a large 47uF (16V) electrolytic capacitor between VCC and +ground fixed it. Power problems became clear. Linear regulators dissipated too much heat. Sensor and servo drew 13.8mA and 4.6mA quiescent currents--unacceptable for battery. Servo inrush current exceeds 1A. 0.3mm tracks cuts it too close. -Verdict: Functional but not practical. Battery dead in under 24 hours. Led to +Verdict: Functional but not practical. Battery died in under 24 hours. Led to [redesign](../fpm-door-lock-lp/) with proper power management. Commit: <a |
