In my last tomography post, I said that sequential bursting was way too slow, so I had to re-design the detection method. In this post, I will write a bit about the new detection method, where it came from, how it works, and what's next for it.
But first, we have to take a step back to the specs I set out for tomography to eventually accomplish:
1. automatic positioning calculation in 3D space. In theory, we should be able to figure out the spacial relationships between each light switch with the sensor data. This means that users don't have to enter the locations of each light switch on some app, and therefore easier to use. This can easily be accomplished using math.
2. Enclosing area motion detection. This is used to detect if nothing is moving anywhere in the entire house. Can be used for assist away mode detection, as well as possible security functions. This will be the focus of this post.
3. Automatic zoning and zone activity detection. This automatically divides the house into "sections" and will track movement within sections and between sections. This is still work in progress.
How does all this relate to spider webs?
When a bug gets trapped in a spider web, the spider can sense where the bug is struggling on the web through the vibrations on the web. This is the approach to accomplishing point 2 above. The nodes will be transmitting and receiving simultaneously (as opposed to sequential), to build a "web". Anyone that moves within this web will be detected instantly.
The key is to accurately determine non-movement. It's inevitable for the radios to receive some degree of steady state noise, and it's also safe to assume that this noise might change from time to time. A method was designed to "learn" this steady state to make sure that no noise is falsely read as movement, and no movement is missed.
The ATMEGA256RFR2 has a lot of memory, so a simple method was designed to utilize memory as much as possible. In order for this to work, three variables have to be calculated:
1. Rest State RSSI
2. Rest State Noise
3. Detected RSSI Range
The Rest State RSSI and Rest State Noise are determined somewhat statistically. Up to 40,000 RSSI measurements are taken over a period of 8 hours. The most frequent measurement is the Rest State RSSI, which is updated every 100 measurements. The Rest State Noise is calculated as the average of the second and third most frequent measurement, which are assumed to cover 2 standard deviations.
The Detected RSSI Range is measured every Burst Cycle.
Then, motion is detected if the following condition is satisfied:
Detected RSSI Range > Rest State RSSI + Rest State Noise
When motion is detected, a set of data is sent to the Hub for further analysis to determine the active zone.