summaryrefslogtreecommitdiffstats
path: root/_site/log/fpm-door-lock-rf/index.html
blob: 55675ff298dcb496924444c4b4052ff0cb336d9f (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
<!DOCTYPE html>
<html>
    <head>
  <meta charset="utf-8">
  <meta name="viewport" content="width=device-width, initial-scale=1">
  <title>Fingerprint door lock (RF)</title>
  <link rel="stylesheet" href="/assets/css/main.css">
  <link rel="stylesheet" href="/assets/css/skeleton.css">
</head>


  <body>

    <div id="nav-container" class="container">
  <ul id="navlist" class="left">
    
    <li >
      <a href="/" class="link-decor-none">hme</a>
    </li>
    <li >
      <a href="/projects/" class="link-decor-none">poc</a>
    </li>
    <li >
      <a href="/about/" class="link-decor-none">abt</a>
    </li>
    <li>
      <a href="/cgi-bin/find.cgi" class="link-decor-none">lup</a>
    </li>
    <li>
      <a href="/feed.xml" class="link-decor-none">rss</a>
    </li>
  </ul>
</div>



    <main>
      <div class="container">
        <div class="container-2">
          <h2 class="center" id="title">FINGERPRINT DOOR LOCK (RF)</h2>
          <h5 class="center">05 JUNE 2025</h5>
          <br>
          <div class="twocol justify"><p>Wanted to unlock door with fingerprint, wirelessly to avoid drilling.</p>

<p>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.</p>

<p>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.</p>

<p>Datasheet riddled with ambiguity.</p>

<p>ATmega328P runs at 5V; RFM69 3.3V. Suspect logic-level converter (LLC)
issues. High resistance. Not enough swing.</p>

<p>2025-04: Ditched RFM69s. Switched to NRF24L01+ modules– data pins 5V tolerant,
no LLC required. Spent six weekends writing driver from scratch–clean-room.
Works like a charm.</p>

<p>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.</p>

<p>2025-06: Two PCB boards for FPM (front) and servo (back) controllers. Encrypted
RF link between them.</p>

<table style="border: none; width: 100%">
  <tr style="border: none;">
    <td style="border: none; width: 49.5%; vertical-align: top; text-align: center;">
      <img src="front_design.jpeg" alt="Design (front)" style="width: 100%" />
      <p>Footprint (front)</p>
    </td>
    <td style="border: none; vertical-align: top; text-align: center;">
      <img src="front.jpeg" alt="PCB (front)" style="width: 100%" />
      <p>PCB (front)</p>
    </td>
  </tr>
  <tr style="border: none;">
    <td style="border: none; width: 49.5%; vertical-align: top; text-align: center;">
      <img src="back_design.jpeg" alt="Design (back)" style="width: 100%" />
      <p>Footprint (back)</p>
    </td>
    <td style="border: none; vertical-align: top; text-align: center;">
      <img src="back.jpeg" alt="PCB (back)" style="width: 100%" />
      <p>PCB (back)</p>
    </td>
  </tr>
</table>

<p>PCB specs: 2-layer, 1oz copper, 0.3mm traces (0.5mm for power). Ground plane.</p>

<p>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.</p>

<p>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.</p>

<p>Verdict: Functional but not practical. Battery dead in under 24 hours. Led to
<a href="../fpm-door-lock-lp/">redesign</a> with proper power management.</p>

<p>Commit:
<a href="https://git.asciimx.com/smart-home/commit/?id=f4b0b734a595919cf451ab9448b06274c8e609a4">f4b0b73</a>
| Gerber: <a href="gerber_back.zip">gerber_back.zip</a>,
<a href="gerber_front.zip">gerber_front.zip</a></p>
</div>
          <p class="post-author right">by W. D. Sadeep Madurange</p>
        </div>
      </div>
    </main>

    <div class="footer">
  <div class="container">
    <div class="twelve columns right container-2">
      <p id="footer-text">&copy; ASCIIMX - 2026</p>
    </div>
  </div>
</div>


  </body>
</html>