A back door sensor with a coin Cell and a reed contact to detect the state of the back door
Principles
- Limit power consumption:
https://forum.mysensors.org/topic/1287/door-window-sensor-consuming-more-power-when-closed/5
- For the reed contact pin D3, a 3.3 MOhm pull up resistor is used and the internal pull-up is disabled.
- Use an Arduino Pro Mini 3V3 to keep the cost down (compared to the sensebender).
- Use no debouncing, and not the software debouncing library, since that one is guaranteed to give trouble combined with sleep mode.
- The Arduino 3.3V 8mhz can handle down to roughly 2.8V and the Nrf24l01+ down to 1.9V. Hence the batteries can not be NiMH rechargeables - Alkaline or Lithium required. We use a CR2450 coin cell which gives 3V.
Future extensions
- Add a Si7021 module to measure temperature and humidity.
The result
Used Components
- NRF24L01+SMD
- Reed contact with resistor 3M3 Ohm
- ArduinoProMini3V modified to reduce current consumption for battery supply
- Si7021Module optional
- AdapterProMiniForNrfSmd
- Capacitor 10uF 10V solid low ESR
Wiring
NRF24L01+ Function | Arduino Mini Pro pin |
---|---|
+3.3V | connected with wire |
GND | connected with wire |
CE | D9 |
CSN | D10 |
SCK | D13 |
MOSI | D11 |
MISO | D12 |
IRQ | Not Connected |
Component | Pin | Wire/Component | Pin | Component |
---|---|---|---|---|
Arduino Pro Mini | VCC | orange | plus | Battery CR2450 |
Arduino Pro Mini | GND | black | min | Battery CR2450 |
Arduino Pro Mini | GND | Reed Contact | D3 | Arduino Pro Mini |
Arduino Pro Mini | VCC | Resistor 3M3 Ohm | D3 | Arduino Pro Mini |
Programming
This project uses Platformio, see platformio.ini
Use the following commands:
$ pio run $ pio run -t upload $ pio run -t monitor
Code at: BackDoorSensor.ino
Setting the BOD to 1.8V
Programmer Type: USBtiny. The USBtiny is a simple USB programmer, see http://www.ladyada.net/make/usbtinyisp/.
Give these 3 commands. The first one sets the fuse, but also clears the bootloader (thanks to the "-e" - see https://docs.platformio.org/en/latest//platforms/atmelavr.html?highlight=custom_fuses#erase-chip-before-programming). The second one restores the bootloader, and the 3rd one programs the sketch:
michiel@Delphinus:~/..../domotica/Nodes/BackDoorSensor> pio run -t fuses -e custom_fuses michiel@Delphinus:~/..../domotica/Nodes/BackDoorSensor> avrdude -C/home/michiel/.arduino15/packages/arduino/tools/avrdude/6.3.0-arduino17/etc/avrdude.conf -v -patmega328p -cusbtiny -Uflash:w:/home/michiel/.arduino15/packages/arduino/hardware/avr/1.8.5/bootloaders/atmega/ATmegaBOOT_168_atmega328_pro_8MHz.hex:i -Ulock:w:0x0F:m michiel@Delphinus:~/..../domotica/Nodes/BackDoorSensor> pio run -t upload -t monitor
The first command with Platformio gives:
michiel@Delphinus:~/..../domotica/Nodes/BackDoorSensor> pio run -t fuses -e custom_fuses Processing custom_fuses (platform: atmelavr; framework: arduino; board: pro8MHzatmega328) --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- Verbose mode can be enabled via `-v, --verbose` option CONFIGURATION: https://docs.platformio.org/page/boards/atmelavr/pro8MHzatmega328.html PLATFORM: Atmel AVR (3.4.0) > Arduino Pro or Pro Mini ATmega328 (3.3V, 8 MHz) HARDWARE: ATMEGA328P 8MHz, 2KB RAM, 30KB Flash DEBUG: Current (avr-stub) On-board (avr-stub, simavr) PACKAGES: - framework-arduino-avr 5.1.0 - tool-avrdude 1.60300.200527 (6.3.0) - toolchain-atmelavr 1.70300.191015 (7.3.0) Converting BackDoorSensor.ino LDF: Library Dependency Finder -> https://bit.ly/configure-pio-ldf LDF Modes: Finder ~ chain, Compatibility ~ soft Found 5 compatible libraries Scanning dependencies... Dependency Graph |-- <SPI> 1.0 Building in release mode Selected fuses: [lfuse = 0xFF, hfuse = 0xDA, efuse = 0xFE] Setting fuses avrdude: AVR device initialized and ready to accept instructions Reading | ################################################## | 100% 0.00s avrdude: Device signature = 0x1e950f (probably m328p) avrdude: erasing chip avrdude: reading input file "0x0f" avrdude: writing lock (1 bytes): Writing | ################################################## | 100% 0.01s avrdude: 1 bytes of lock written avrdude: verifying lock memory against 0x0f: avrdude: load data lock data from input file 0x0f: avrdude: input file 0x0f contains 1 bytes avrdude: reading on-chip lock data: Reading | ################################################## | 100% 0.00s avrdude: verifying ... avrdude: 1 bytes of lock verified avrdude: reading input file "0xDA" avrdude: writing hfuse (1 bytes): Writing | ################################################## | 100% 0.00s avrdude: 1 bytes of hfuse written avrdude: verifying hfuse memory against 0xDA: avrdude: load data hfuse data from input file 0xDA: avrdude: input file 0xDA contains 1 bytes avrdude: reading on-chip hfuse data: Reading | ################################################## | 100% 0.00s avrdude: verifying ... avrdude: 1 bytes of hfuse verified avrdude: reading input file "0xFF" avrdude: writing lfuse (1 bytes): Writing | ################################################## | 100% 0.00s avrdude: 1 bytes of lfuse written avrdude: verifying lfuse memory against 0xFF: avrdude: load data lfuse data from input file 0xFF: avrdude: input file 0xFF contains 1 bytes avrdude: reading on-chip lfuse data: Reading | ################################################## | 100% 0.00s avrdude: verifying ... avrdude: 1 bytes of lfuse verified avrdude: reading input file "0xFE" avrdude: writing efuse (1 bytes): Writing | ################################################## | 100% 0.01s avrdude: 1 bytes of efuse written avrdude: verifying efuse memory against 0xFE: avrdude: load data efuse data from input file 0xFE: avrdude: input file 0xFE contains 1 bytes avrdude: reading on-chip efuse data: Reading | ################################################## | 100% 0.00s avrdude: verifying ... avrdude: 1 bytes of efuse verified avrdude: safemode: Fuses OK (E:FE, H:DA, L:FF) avrdude done. Thank you. ================================================================================ [SUCCESS] Took 0.90 seconds ================================================================================ Environment Status Duration ------------- -------- ------------ custom_fuses SUCCESS 00:00:00.897 ================================================================================ 1 succeeded in 00:00:00.897 ================================================================================ michiel@Delphinus:~/..../domotica/Nodes/BackDoorSensor>
First sign of life
__ __ ____ | \/ |_ _/ ___| ___ _ __ ___ ___ _ __ ___ | |\/| | | | \___ \ / _ \ `_ \/ __|/ _ \| `__/ __| | | | | |_| |___| | __/ | | \__ \ _ | | \__ \ |_| |_|\__, |____/ \___|_| |_|___/\___/|_| |___/ |___/ 2.3.2 104 MCO:BGN:INIT NODE,CP=RNNNA---,FQ=8,REL=255,VER=2.3.2 167 TSM:INIT 174 TSF:WUR:MS=8000 190 TSM:INIT:TSP OK 200 TSF:SID:OK,ID=14 212 TSM:FPAR 223 ?TSF:MSG:SEND,14-14-255-255,s=255,c=3,t=7,pt=0,l=0,sg=0,ft=0,st=OK: 260 TSF:MSG:READ,0-0-14,s=255,c=3,t=8,pt=1,l=1,sg=0:0 288 TSF:MSG:FPAR OK,ID=0,D=1 595 TSF:MSG:READ,13-13-14,s=255,c=3,t=8,pt=1,l=1,sg=0:1 825 TSF:MSG:READ,10-10-14,s=255,c=3,t=8,pt=1,l=1,sg=0:1 1071 TSF:MSG:READ,7-7-14,s=255,c=3,t=8,pt=1,l=1,sg=0:1 2263 TSM:FPAR:OK 2271 TSM:ID 2277 TSM:ID:OK 2285 TSM:UPL 2304 TSF:MSG:SEND,14-14-0-0,s=255,c=3,t=24,pt=1,l=1,sg=0,ft=0,st=OK:1 2340 TSF:MSG:READ,0-0-14,s=255,c=3,t=25,pt=1,l=1,sg=0:1 2369 TSF:MSG:PONG RECV,HP=1 2385 TSM:UPL:OK 2394 TSM:READY:ID=14,PAR=0,DIS=1 2422 TSF:MSG:SEND,14-14-0-0,s=255,c=3,t=15,pt=6,l=2,sg=0,ft=0,st=OK:0100 2461 TSF:MSG:READ,0-0-14,s=255,c=3,t=15,pt=6,l=2,sg=0:0100 2500 TSF:MSG:SEND,14-14-0-0,s=255,c=0,t=17,pt=0,l=5,sg=0,ft=0,st=OK:2.3.2 2547 TSF:MSG:SEND,14-14-0-0,s=255,c=3,t=6,pt=1,l=1,sg=0,ft=0,st=OK:0 2584 TSF:MSG:READ,0-0-14,s=255,c=3,t=6,pt=0,l=1,sg=0:M 2650 TSF:MSG:SEND,14-14-0-0,s=255,c=3,t=11,pt=0,l=16,sg=0,ft=0,st=OK:Back Door Sensor 2697 TSF:MSG:SEND,14-14-0-0,s=255,c=3,t=12,pt=0,l=3,sg=0,ft=0,st=OK:1.0 2750 TSF:MSG:SEND,14-14-0-0,s=1,c=0,t=0,pt=0,l=18,sg=0,ft=0,st=OK:BDS - Reed contact 2793 MCO:REG:REQ 2838 !TSF:MSG:SEND,14-14-0-0,s=255,c=3,t=26,pt=1,l=1,sg=0,ft=0,st=NACK:2 2877 TSF:MSG:READ,0-0-14,s=255,c=3,t=27,pt=1,l=1,sg=0:1 2906 MCO:PIM:NODE REG=1 2920 MCO:BGN:STP Back Door Sensor 1.0 - Online! 2938 MCO:BGN:INIT OK,TSP=1 Wake up - now minute -1 2975 TSF:MSG:SEND,14-14-0-0,s=1,c=1,t=16,pt=2,l=2,sg=0,ft=1,st=OK:1 Reed contact changed without interrupt - now open 3037 MCO:SLP:MS=60000,SMS=0,I1=1,M1=1,I2=255,M2=255 3063 TSF:TDI:TSL 3074 MCO:SLP:WUP=1 3084 TSF:TRI:TSB 3104 TSF:MSG:SEND,14-14-0-0,s=1,c=1,t=16,pt=2,l=2,sg=0,ft=0,st=OK:0 Reed contact changed - now closed 3158 MCO:SLP:MS=100,SMS=0,I1=255,M1=255,I2=255,M2=255 3186 TSF:TDI:TSL 3196 MCO:SLP:WUP=-1 3207 TSF:TRI:TSB Wake up - now minute 0 3239 TSF:MSG:SEND,14-14-0-0,s=1,c=1,t=16,pt=2,l=2,sg=0,ft=0,st=OK:0 Reed contact repeat last message - now closed 3299 MCO:SLP:MS=60000,SMS=0,I1=1,M1=1,I2=255,M2=255 3328 TSF:TDI:TSL 3336 MCO:SLP:WUP=1 3346 TSF:TRI:TSB 3362 TSF:MSG:SEND,14-14-0-0,s=1,c=1,t=16,pt=2,l=2,sg=0,ft=0,st=OK:1 Reed contact changed - now open 3416 MCO:SLP:MS=100,SMS=0,I1=255,M1=255,I2=255,M2=255 3442 TSF:TDI:TSL 3452 MCO:SLP:WUP=-1 3463 TSF:TRI:TSB Wake up - now minute 1 3495 TSF:MSG:SEND,14-14-0-0,s=1,c=1,t=16,pt=2,l=2,sg=0,ft=0,st=OK:1 Reed contact repeat last message - now open 3555 MCO:SLP:MS=60000,SMS=0,I1=1,M1=1,I2=255,M2=255 3584 TSF:TDI:TSL 3592 MCO:SLP:WUP=1 3602 TSF:TRI:TSB 3618 TSF:MSG:SEND,14-14-0-0,s=1,c=1,t=16,pt=2,l=2,sg=0,ft=0,st=OK:0 Reed contact changed - now closed 3672 MCO:SLP:MS=100,SMS=0,I1=255,M1=255,I2=255,M2=255 3700 TSF:TDI:TSL 3710 MCO:SLP:WUP=-1 3721 TSF:TRI:TSB Wake up - now minute 2 3753 TSF:MSG:SEND,14-14-0-0,s=1,c=1,t=16,pt=2,l=2,sg=0,ft=0,st=OK:1 Reed contact changed without interrupt - now open 3815 MCO:SLP:MS=60000,SMS=0,I1=1,M1=1,I2=255,M2=255 3844 TSF:TDI:TSL 3852 MCO:SLP:WUP=-1 3864 TSF:TRI:TSB Wake up - now minute 3 3901 TSF:MSG:SEND,14-14-0-0,s=1,c=1,t=16,pt=2,l=2,sg=0,ft=0,st=OK:1 Reed contact repeat last message - now open 3960 MCO:SLP:MS=60000,SMS=0,I1=1,M1=1,I2=255,M2=255 3987 TSF:TDI:TSL 3997 MCO:SLP:WUP=-1 4007 TSF:TRI:TSB Wake up - now minute 4 4040 TSF:MSG:SEND,14-14-0-0,s=1,c=1,t=16,pt=2,l=2,sg=0,ft=0,st=OK:1 Reed contact repeat last message - now open 4100 MCO:SLP:MS=60000,SMS=0,I1=1,M1=1,I2=255,M2=255 4126 TSF:TDI:TSL 4136 MCO:SLP:WUP=-1 4147 TSF:TRI:TSB Wake up - now minute 5 4179 TSF:MSG:SEND,14-14-0-0,s=1,c=1,t=16,pt=2,l=2,sg=0,ft=0,st=OK:1 Reed contact repeat last message - now open 4239 MCO:SLP:MS=60000,SMS=0,I1=1,M1=1,I2=255,M2=255 4265 TSF:TDI:TSL 4276 MCO:SLP:WUP=-1 4286 TSF:TRI:TSB Wake up - now minute 6 4319 TSF:MSG:SEND,14-14-0-0,s=1,c=1,t=16,pt=2,l=2,sg=0,ft=0,st=OK:1 4366 TSF:MSG:SEND,14-14-0-0,s=255,c=3,t=0,pt=1,l=1,sg=0,ft=0,st=OK:104 Wake up - a long period has passed - update all data. 4431 MCO:SLP:MS=60000,SMS=0,I1=1,M1=1,I2=255,M2=255 4460 TSF:TDI:TSL 4468 MCO:SLP:WUP=1 4478 TSF:TRI:TSB 4495 TSF:MSG:SEND,14-14-0-0,s=1,c=1,t=16,pt=2,l=2,sg=0,ft=0,st=OK:0 Reed contact changed - now closed 4548 MCO:SLP:MS=100,SMS=0,I1=255,M1=255,I2=255,M2=255 4577 TSF:TDI:TSL 4587 MCO:SLP:WUP=-1 4597 TSF:TRI:TSB Wake up - now minute 0 4626 TSF:MSG:SEND,14-14-0-0,s=1,c=1,t=16,pt=2,l=2,sg=0,ft=0,st=OK:0 Reed contact repeat last message - now closed 4685 MCO:SLP:MS=60000,SMS=0,I1=1,M1=1,I2=255,M2=255 4712 TSF:TDI:TSL 4722 MCO:SLP:WUP=1 4732 TSF:TRI:TSB 4749 TSF:MSG:SEND,14-14-0-0,s=1,c=1,t=16,pt=2,l=2,sg=0,ft=0,st=OK:1 Reed contact changed - now open 4800 MCO:SLP:MS=100,SMS=0,I1=255,M1=255,I2=255,M2=255 4829 TSF:TDI:TSL 4839 MCO:SLP:WUP=-1 4849 TSF:TRI:TSB Wake up - now minute 1 4882 TSF:MSG:SEND,14-14-0-0,s=1,c=1,t=16,pt=2,l=2,sg=0,ft=0,st=OK:1 Reed contact repeat last message - now open 4941 MCO:SLP:MS=60000,SMS=0,I1=1,M1=1,I2=255,M2=255 4968 TSF:TDI:TSL
__ __ ____ | \/ |_ _/ ___| ___ _ __ ___ ___ _ __ ___ | |\/| | | | \___ \ / _ \ `_ \/ __|/ _ \| `__/ __| | | | | |_| |___| | __/ | | \__ \ _ | | \__ \ |_| |_|\__, |____/ \___|_| |_|___/\___/|_| |___/ |___/ 2.3.2 104 MCO:BGN:INIT NODE,CP=RNNNA---,FQ=8,REL=255,VER=2.3.2 167 TSM:INIT 174 TSF:WUR:MS=8000 190 TSM:INIT:TSP OK 200 TSF:SID:OK,ID=26 212 TSM:FPAR 223 ?TSF:MSG:SEND,26-26-255-255,s=255,c=3,t=7,pt=0,l=0,sg=0,ft=0,st=OK: 335 TSF:MSG:READ,21-21-26,s=255,c=3,t=8,pt=1,l=1,sg=0:1 364 TSF:MSG:FPAR OK,ID=21,D=2 882 TSF:MSG:READ,7-7-26,s=255,c=3,t=8,pt=1,l=1,sg=0:1 2263 TSM:FPAR:OK 2271 TSM:ID 2277 TSM:ID:OK 2285 TSM:UPL 2295 TSF:MSG:SEND,26-26-21-0,s=255,c=3,t=24,pt=1,l=1,sg=0,ft=0,st=OK:1 2463 TSF:MSG:READ,0-21-26,s=255,c=3,t=25,pt=1,l=1,sg=0:2 2494 TSF:MSG:PONG RECV,HP=2 2508 TSM:UPL:OK 2519 TSM:READY:ID=26,PAR=21,DIS=2 2537 TSF:MSG:SEND,26-26-21-0,s=255,c=3,t=15,pt=6,l=2,sg=0,ft=0,st=OK:0100 2678 TSF:MSG:READ,0-21-26,s=255,c=3,t=15,pt=6,l=2,sg=0:0100 2711 TSF:MSG:SEND,26-26-21-0,s=255,c=0,t=17,pt=0,l=5,sg=0,ft=0,st=OK:2.3.2 2754 TSF:MSG:SEND,26-26-21-0,s=255,c=3,t=6,pt=1,l=1,sg=0,ft=0,st=OK:21 2947 TSF:MSG:READ,0-21-26,s=255,c=3,t=6,pt=0,l=1,sg=0:M 2979 TSF:MSG:SEND,26-26-21-0,s=255,c=3,t=11,pt=0,l=16,sg=0,ft=0,st=OK:Back Door Sensor 3026 TSF:MSG:SEND,26-26-21-0,s=255,c=3,t=12,pt=0,l=3,sg=0,ft=0,st=OK:1.0 3067 TSF:MSG:SEND,26-26-21-0,s=1,c=0,t=0,pt=0,l=18,sg=0,ft=0,st=OK:BDS - Reed contact 3112 MCO:REG:REQ 3123 TSF:MSG:SEND,26-26-21-0,s=255,c=3,t=26,pt=1,l=1,sg=0,ft=0,st=OK:2 3424 TSF:MSG:READ,0-21-26,s=255,c=3,t=27,pt=1,l=1,sg=0:1 3452 MCO:PIM:NODE REG=1 3467 MCO:BGN:STP Back Door Sensor 1.0 - Online! 3485 MCO:BGN:INIT OK,TSP=1 Wake up - now minute -1 3522 TSF:MSG:SEND,26-26-21-0,s=1,c=1,t=16,pt=2,l=2,sg=0,ft=0,st=OK:1 Reed contact changed without interrupt - now open 3584 MCO:SLP:MS=60000,SMS=0,I1=1,M1=1,I2=255,M2=255 3612 TSF:TDI:TSL
Comments: