First the Mailbox RF Mesh Mote:
We took the Synapse RFET Mesh Engine and put a rollerball microswitch (for the mailbox door) in series with the power source - 2 AA battery holder. On mailbox opening, the microswitch provides power to the RFET engine and does a "power on reset". The code sends a message to the portal software and also turns on a digital bit to our Arduino compatible microcontroller. The microcontroller sends this bit to the IO Bridge, on to the internet for display and logging on the IOBridge servers.
The packaging for the Mailbox RF Mesh Mote was 1 1/2" PVC pipe and end caps. We coated the RF engine carrier board with "liquid rubber tape" and put Sorb-it silica gel desiccant bags to remove any moisture in the PVC tube.
Ditto for the Shed RF Mote: Same design, same packaging and software as the Mailbox RF Mesh Mote.
As for the Garage Door RF Mesh Mote: We gutted the Skylink garage door electronics and put
our Synapse RFET Mesh Mote inside the enclosure. (We got this garage sensor for only $7.00 USD)
The plastic rod has a magnet on it and the old electronics had a magnetic reed switch.
We tore out the reed switch, from the old sensor electronics, and RTV it to the enclosure.
Again, upon activation, the reed switch provides power to the Synapse RF Mesh Mote.
Note: We tie wrapped a 2 cell AA battery holder on to the enclosure mounting bracket.
Sylink Garage Door Sensor Link - for ref. only:
http://www.google.com/imgres?imgurl=http://ecx.images-amazon.com/images/I/31jBnUY7X9L._SL500_.jpg&imgrefurl=http://housealarms.co.cc/skylink-gm-318t-household-alert-garage-door-monitor-sensor/&usg=__Xo0evnSkQq4ShR9TldpEJrWayhw=&h=500&w=368&sz=11&hl=en&start=6&um=1&itbs=1&tbnid=jTOHYj-uffBJDM:&tbnh=130&tbnw=96&prev=/images%3Fq%3Dskylink%2Bgarage%2Bdoor%26um%3D1%26hl%3Den%26sa%3DN%26tbs%3Disch:1
Python Code:
Note: Code "framework" was provided free from Synapse.
"""
Demo of accessing the "pin wakeup" capabilities of different SNAP ports.
This script just blinks an LED, and provides a sleepTest() function.
See also pinWakeup.py in the synapse subdirectory.
This mailbox mote is connected to the mailbox by a microswitch
tied to the power for the RFET. On activation, or door opening,
this mote sends a message to the portal "MailBox Mote 8C:FB Has Mail! "
Also, the mailbox mote in 30 seconds goes back to sleep or by mailbox door closure,
power is again disconnected from the mailbox mote.
Note:
* To minimize power consumption remove all RS232 jumpers, and use VBAT power input.
* Default all unused pins to output/low for minimum power consumption.
Battery Capacity: 2700 mAh (2 @ ~ 1.6 VDC ea. = 3.2 VDC) (RFET Voltage range 2.7 - 3.4 VDC max)
Alseep Current: 0 mA
Awake Current 65 mA + 1 VDC ref. for battery monitor <--- recompute below figures!
Time Asleep seconds: 86400
Time Awake seconds: 30
Sleep/Wake Cycle seconds: 86430
Average Current mA: 0.03
Battery Life (hours) 105631.45
Days 4401.31
Months 146.71
Years 12.23 <--- shelf life will reduce this!
Author: ArduinoAndy
Date: 4/18/2010
Revision: 1.0.b
"""
from synapse.pinWakeup import *
from synapse.platforms import *
sleepCounter = 0
secondCounter = 0
BUTTON_PIN = GPIO_5
portalAddr = '\x00\x00\x01' # hard-coded address for Portal
# Since there are currently no ZIC2410 based SNAP Engines,
# there are currently no GPIO on ZIC2410, just plain IO.
if platform == "ZIC2410":
LED_PIN = 1
else:
LED_PIN = GPIO_1
@setHook(HOOK_STARTUP)
def start():
global BUTTON_PIN
# Initialize LED pin as output - GPIO 1
setPinDir(LED_PIN, True)
writePin(LED_PIN, False)
# Initialize all non user pins to output/low for minimum power consumption
setPinDir(GPIO_0, True)
writePin(GPIO_0, False)
setPinDir(GPIO_2, True)
writePin(GPIO_2, False)
setPinDir(GPIO_3, True)
writePin(GPIO_3, False)
setPinDir(GPIO_4, True)
writePin(GPIO_4, False)
setPinDir(BUTTON_PIN, False) # Input for Button Pin Tac switch
setPinPullup(BUTTON_PIN, True) # Pullup Button Pin switch GPIO 5
setPinDir(GPIO_6, True)
writePin(GPIO_6, False)
setPinDir(GPIO_7, False) # Uart 1 Input - connected on 171 board
#writePin(GPIO_7, True)
setPinDir(GPIO_8, True) # Uart 1 Output - connected on 171 board
writePin(GPIO_8, False)
setPinDir(GPIO_9, True)
writePin(GPIO_9, False)
setPinDir(GPIO_10, True)
writePin(GPIO_10, False)
setPinDir(GPIO_11, True) # Analog 7
writePin(GPIO_11, False)
setPinDir(GPIO_12, True) # Analog 6
writePin(GPIO_12, False)
setPinDir(GPIO_13, True) # Analog 5
writePin(GPIO_13, False)
setPinDir(GPIO_14, True) # Analog 4
writePin(GPIO_14, False)
setPinDir(GPIO_15, True) # Analog 3
writePin(GPIO_15, False)
setPinDir(GPIO_16, True) # Analog 2
writePin(GPIO_16, False)
setPinDir(GPIO_17, True) # Analog 1
writePin(GPIO_17, False)
setPinDir(GPIO_18, True) # Analog 0
writePin(GPIO_18, False)
eventString = "MailBox Mote 8C:FB Has Mail! " # Message sent to Portal on POR from switch off/on from mailbox
rpc(portalAddr, "logEvent", eventString)
GPIO_0_ON(); # Turn on status bit to Gator
@setHook(HOOK_100MS)
def timer100msEvent(currentMs):
"""On the 100ms tick, pulse the LED"""
global secondCounter
global sleepCounter
pulsePin(LED_PIN, 75, True)
sleepCounter += 1
secondCounter += 1
if secondCounter >= 250: # In 25 seconds
secondCounter = 0
#eventString = "Test from 8C:FB "
#rpc(portalAddr, "logEvent", eventString)
pass
# In 30 seconds - sleep forever or wakeup on Button pin press GPIO 5
if sleepCounter >= 300:
sleepCounter = 0
GPIO_0_OFF(); # Turn off status bit to Gator
writePin(LED_PIN, False) # Turn off LED
sleepTest(0,0,BUTTON_PIN,True) # power conserving mode 0 , wakeup ticks = 0 - wakeups on button press or POR
def sleepTest(mode, ticks, pin, enable):
wakeupOn(pin, enable, False)
sleep(mode, ticks)
def GPIO_0_ON():
writePin(GPIO_0, True)
def GPIO_0_OFF():
writePin(GPIO_0, False)
-----------------------------------------------------------------------------------------