summaryrefslogtreecommitdiffstats
path: root/_log/fpm-door-lock-rf.md
diff options
context:
space:
mode:
authorSadeep Madurange <sadeep@asciimx.com>2026-01-13 22:40:06 +0800
committerSadeep Madurange <sadeep@asciimx.com>2026-01-14 11:02:47 +0800
commit8be504601aeb9005b4e227fb2529d12672ea697e (patch)
tree4deed91f1d9cd912045a8028615e3cac70ef2c3f /_log/fpm-door-lock-rf.md
parent1fc1dbcb34bfb0a7f99bbc068edff93ae97c4662 (diff)
downloadwww-8be504601aeb9005b4e227fb2529d12672ea697e.tar.gz
Tighten prose.
Diffstat (limited to '_log/fpm-door-lock-rf.md')
-rw-r--r--_log/fpm-door-lock-rf.md30
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