Sozu a low-cost self-powered activity sensing system, which can detect a wide range of events wirelessly, through walls and floors, at a whole-building scale. Instead of running on batteries, Sozu tags leverage energy from activities that they sense, and convert this energy into RF broadcasts, acting like miniature radio stations. More information about this project can be found below:
[Project video] [Paper] [Citation format]
To facilitate others' hands-on experience with Sozu, we created a toolkit which consists of a solar powered Sozu tag, an RTL-SDR, a set of antennas, demo code, and a quick start guide:
You will find the following parts in the box:
- A Sozu tag powered by a small solar panel
- One alligator clip
- RTL-SDR + antenna
Sozu receiver is based on SDR. In this tutorial, we will use RTL-SDR. The easiest way to get data out of RTL-SDR is to use pystlsdr -- A Python wrapper for librtlsdr (a driver for Realtek RTL2832U based SDR’s). Python3 is required (3.7.4 was tested).
Steps to below to install librtlsdr and run Sozu demo code:
- Install pyrtlsdr via pip:
pip install pyrtlsdr
- Install librtlsdr via brew:
brew install librtlsdr
- Download Project Sozu source code from the Github Page or
git clone git@github.com:figlab/Sozu.git
- Now plug in the SDR with the antenna connected (through USB) and get the RF signal from your environment by running the python code (./toolkit/software/Python/demo_waterfall.py):
python demo_waterfall.py
If you can see the above output on your python window, you are ready to receive RF signals from Sozu tags!
-
Deploy harvesters in the environment.
-
If you use a different energy harvester, use a multimeter to make sure the harvester provides higher than 1.5 Volts from the activity that you are interested in sensing.
-
Connect the energy harvester to the Sozu tag.
- Run the Python server code(./toolkit/software/Python/demo_waterfall_server.py):
- Tune the center frequency of your SDR around the Sozu tag frequency (labeled on the back of the tag), until you see its signal on the waterfall chart:
After you have located the signal, you are ready to make applications out of it!
The Python code (./toolkit/software/Python/demo_waterfall_server.py) functions like a TCP server, ready to stream data out to any programs you want to use in your project. Here we demonstrate getting Sozu signals with Processing.
-
Download and install Processing from https://processing.org
-
Run the Processing client code (./toolkit/software/Processing/client/client.pde). Now you should see the Sozu signal shown in the Processing app:
- Finally, connecting the alligator cable to the tag antenna as an extension helps improve the broadcast range.
Please fill out the google form below for your toolkit request: https://forms.gle/UTFnRSarYxjS2oz19
For bulk orders and commercial collaborations, please email us at info@figlab.com
Sozu – comes from the traditional Japanese water feature, where a bamboo segment slowly fills with water, eventually causing its center of mass to shift, such that it pivots downwards, striking a rock (designed to scare away animals in gardens). This is similar in principle to our system, where one form of energy is converted into another for practical use.
Auxiliary video of example projects: https://youtu.be/Q_soA7qurLE
PCB design files: https://github.com/FIGLAB/Sozu/tree/master/pcb
Gqrx is a useful software to interface SDRs with a nice UI, which you can use and tune many parameters (e.g., sampling rate, center frequency, averaging etc.) for debug.
Solution: Try to move the Sozu tag closer to the receiver. It is also possible that Sozu tag frequency shifted since the spacing of the inductor coil and the trimmer capacitor might change over shipping. To locate tag frequency, please tune the center frequency of your spectrogram visualizer around the labeled frequency on the back of the Sozu tag. It is easier to locate the frequency with Gqrx and use a SDR with wider bandwidth (e.g., HackRF has a 20MHz bandwidth)
Solution: Unplug the SDR from the USB, and plug it back in.
Solution: Try brew install librtlsdr again.