LightSafer

Has somebody been snooping around in your hotel safe?

I wanted a simple device that would tell me if somebody had been in my hotel safe whilst I was out on holiday, so I designed LightSafer. LightSafer is a tiny 33 x 21 mm (1.3 x 0.8 inch) gadget with PIN code entry that lets you know if somebody has been snooping around in your hotel safe (or sock drawer).

It's completely silent. You just press the button to arm LightSafer, put it in your safe and if anybody opens the safe and fails to enter the correct PIN, the alarm LED lights. Once the alarm is triggered there is no way to turn it off. Even if the battery is removed, as soon as a new one is put in, the alarm LED lights straight back up.

Entering the correct PIN is the only way to disable the alarm.

LightSafer

Already got LightSafer? Read the LightSafer User Guide for a full description on how to use it!

LightSafer in a hand

The Design

Microcontroller

At the heart of the device is a PIC microcontroller, specifically the PIC16LF18345. The correct PIN is stored in the built-in EEPROM and the the code protect bits have been set. This prevents anybody from being able to dump the code of the PIC and read out the EEPROM.

Light Sensor

The light sensor used is a Broadcom APDS-9300. I did originally use the APDS-9301, which supported 3 volt operation, but they've since discontinued that device so I moved to the APDS-9300 which is a 2.5 volt device, and added a 2.5 volt regulator. The sensor uses an I2C interface to the PIC and has a handy interrupt feature which can wake the PIC when a certain light level is reached.

Power

LightSafer is powered by the ubiqitous CR2032 coin cell. The voltage of these coin cells can be anywhere from 3.3 volts to 2.5 volts, so I had to make sure all components supported operation inside this range.

Low power consumption is really important - I wanted to leave the coin cell permanently in LightSafer, so the power consumption when off had to be tiny. When in turned off, the APDS-9300 is powered down and the PIC is put into a super low power sleep mode, waiting for the button to be pressed to turn it on.

The interrupt feature of the APDS-9300 also lets me save power. When LightSafer is armed inside the safe, the APDS-9300 light sensor is configured by the PIC to raise an interrupt when the light exceeds a certain level. This lets the PIC go into a low power sleep whilst it waits for the APDS-9300 to wake it up.

I've wired the battery through a potential divider into an ADC input of the PIC, so the battery life can be communicated to the user.

State Current Consumption @ 3.0V
Off 3.3 μA
Armed (i.e. sat in your safe) 146 μA
Alarming 1.33 mA

Joystick

User input is through a 5-way joystick: up, down, left, right, push. LightSafer uses an 8-digit PIN for disarming. Digits 1-4 can be used in the PIN - 1 is up, 2 is right, 3 is down and 4 is left. For example, a PIN of 14322312 would be up, left, down, right, right, left, up, right. The device is turned on and armed by pushing the joystick in. See the instruction guide below for more.

Schematic and PCB

The design is fairly simple and comprises 6 LEDs (three dual colour packages), the PIC, the APDS-9300 light sensor, a 2.5 volt regulator, a programming connector and some capacitors and resistors.

Warning: this isn't a very pretty schematic! Click it to enlarge.

LightSafer Schematic

I wanted to try and get a description of what each of the LEDs meant onto the PCB, so the hardest part about the PCB design was trying to fit in the silkscreen! I've just about managed it though, you don't have to squint too much.

The PCB is shown below. As with all of my projects (see burningimage.net), I've used oshpark.com to manufacture the PCB. If you're interested in making your own LightSafer then you can even order yourself one by clicking the button below! They're only $5.45 for 3 boards, shipped worldwide for free.

LightSafer PCB

Order from OSH Park

Bill of Materials

The BoM for the project is given below - I've included links to component suppliers where available. Any manufacturer will do for the resistors and capacitors, so I've not given links for those. Any 0603 part of the right value will be fine.

Ref Des Qty Description Package Manu. Part Number RS Part Number
B1 1 CR2032 battery holder - BC-2001 219-7954
C1 1 100n capacitor 0603 - -
C3-4 2 1u0 capacitor 0603 - -

IC1

1 PIC microcontroller SSOP PIC16LF18345-I/SS 177-2571

IC2

1 2.5 V regulator SOT-23 MCP1700T-2502E/TT 669-4853

IC3

1 Light sensor - APDS-9300 692-0470
SW1 1 5-way joystick - SWCH-09905 123-9637
R1-5, R8 6 1k resistor 0603 - -

R6-7, R9-10

4 2k2 resistor 0603 - -

LED1-3

3 Bi-colour surface mount LED - HSMF-C155 486-0430

JP1

1 6 way JST programming socket - SM06B-SRSS-TB 546-8827

The Code

The PIC code was written in C using MPLAB, using the free MPLAB XC8 compiler. If you'd like to make your own LightSafer then the hex file to program into the PIC is below. The pins on the JST programming header map 1:1 to the PICkit 2/3/4 programmer header. Alternatively, you can send boards to me and I can program them for you.

Hex file
lightsafer.hex

User Guide

Read the LightSafer User Guide for a full description on how to use LightSafer.

Andy C
May 2019
andy@burningimage.net