|User info Bertrik Sikken|
|Tagline||heb ik niet|
Studied Electrical Engineering at Twente University.
- reverse-engineering things (USB stuff, mp3 players), working on http://rockbox.org
- studying bats and making electronics for recording/listening to bat sounds
- radio stuff, in particular software-defined radio
Projects I work(ed) on (refresh):
- 1 Project ideas
- 1.1 TinyGS
- 1.2 Receiving gas meters
- 1.3 Multi-network wifi manager
- 1.4 Automated bat counting
- 1.5 XBEE
- 1.6 Use TheThingsIndoorGateway as Helium hotspot
- 1.7 Adding BLE GATT interface to sensors
- 1.8 Reverse engineering XS-8217 bluetooth air quality meter
- 1.9 ribbon tweeter for bat audio
- 1.10 3d glasses
- 1.11 Waterniveaumeter
- 1.12 Online bat detector
- 1.13 Blood pressure meter hacking
- 1.14 Raspberry pi airplane tracking
- 1.15 APRS gateway
- 1.16 JQ6500
- 1.17 FPGA
- 1.18 Neural networks on low-end hardware
- 1.19 mini word clock in dutch
- 1.20 Cypress PSOC5
- 1.21 Simple Doppler motion sensors
- 1.22 Bare-bones Arduino bat detector
- 1.23 GPS repeater
- 1.24 Indoor radar speed sign
This is a list of ideas I'm thinking about, but have not fully developed into an actual project yet.
I run a tinyGS satellite ground station. It should be able to receive LoRa transmission from cube sats.
Station page: https://tinygs.com/station/bertrik@1430247931
Receiving gas meters
Apparently sending data to the smart meter using a wireless link in the 868 MHz band. Probably just FSK at 38.4, as mentioned here: https://a35.veron.nl/nieuwe-elektra-en-gasmeters/
Multi-network wifi manager
Figure out or create software so that ESP8266/ESP32 wifi manager can use multiple networks to connect (not just one), so it allowing storing credentials for more than one network. For example, the network at home, the hacker space, at work. Instead of reconfiguring the wifi manager for each network, you just *add* your credentials (and the existing credentials are not replaced).
- https://github.com/arduino-libraries/Arduino_MultiWiFi is the arduino multi wifi library, to allow connecting to multiple different WiFi networks, but it is not a wifi manager, that starts a captive portal, etc
Automated bat counting
Can we automatically count the number of bats from the image of a webcam mounted in a bat colony? Perhaps using some kind of AI or machine learning algorithm?
The image in question: https://stofradar.nl/coenecoop/
I received a kind of XBEE zigbee router/repeater. Info
- FCC ID: MCQ-PROS2B, see https://fccid.io/MCQ-PROS2B
- IC: 1846A-PROS2B
Use TheThingsIndoorGateway as Helium hotspot
I have a spare TTIG that could perhaps be used as a Helium gateway, investigate what is possible.
One possiblity is to capture the gateway traffic from the TTN gateway events API, convert uplink data to a format that the Helium network understands and forward it. I don't really care about the Helium crypto tokens, this is just for fun and science.
What I definitely can do:
- Capture data from the TTN gateway events API, convert it back to Semtech UP format and forward it somewhere to Helium (just not sure where!)
- See also my https://github.com/bertrik/ttn-gateway-collector project which contains an initial implementation of TTN-to-UDP conversion
- If you want to be a gateway on the Helium network, you have to *pay Helium*! Obviously I don't want that, I just want to share data to improve *their* network.
- investigate if Helium has an open uplink API for their hotspots, if so study it etc, without paying the gateway fee
- https://docs.helium.com/use-the-network/setup-a-packet-forwarder unfortunately the link to setting up the 'light hotspot client' does not work!
Adding BLE GATT interface to sensors
The GATT specification allows measurement properties to be defined and transferred continuously over Bluetooth low-energy.
With GATT you can define a collection of properties (e.g. measurement items like temperature/humidity/particulate matter/noise, etc) organised in a simple structure of a BLE service. The 'notification' method allows you to basically push the data continuously to a connected host, e.g. a smart phone.
Services collects characteristic, a characteristic has values with units. Each of these (service, characteristic, unit) have their own unique "UUID". This is described in the so-called 16-bit UUID numbers document
Interesting stuff in GATT:
- See GATT_Specification_Supplement_v5 paragraph 3.151, it has a noise characteristic with 1 dB resolution.
- 0x27C3 is the GATT *unit* for sound pressure
- 0x181A is the GATT environmental sensing *service*, document name "ESP_V1.0.0.pdf"
- 0x2A6E is the GATT Characteristic and Object Type for temperature
- 0x2A6F is the GATT Characteristic and Object Type for humidity
- 0x2BD5 is the GATT Characteristic and Object Type for Particulate Matter - PM1 Concentration
- 0x2BD6 is the GATT Characteristic and Object Type for Particulate Matter - PM2.5 Concentration
- 0x2BD7 is the GATT Characteristic and Object Type for Particulate Matter - PM10 Concentration
- Unfortunately I cannot find a characteristic for carbon-dioxide (CO2) in the BLE GATT unit document
Reverse engineering XS-8217 bluetooth air quality meter
This is a thing that measures CO2, humidity, temperature, TVOC and formaldehyde.
This teardown looks a lot like my sensor: https://www.youtube.com/watch?v=APnjhMrJChI Mine contains a "TPM-300A" sensor for measuring VOC.
It has a bluetooth interface, device name is XS-8217. It has a BLE GATT profile, with the following services
- service 0xC760
- characteristic 0xC762 (WRITE)
- characteristic 0xC761 (NOTIFY)
- example data: 0x23 0x06 0x10 0x04 0xF1 0x00 0x23 0x65
- example data: 0x23 0x08 0x10 0x04 0x01 0x9A 0x00 0x0A 0x00 0x03 0x0E
- data shown on screen was approximately: CO2=418ppm, HCHO=0.003mg/m3, TVOC=0.013mg/m3, temp=24degC, humi=35%
So data in the characteristic 0xC761 seems to have a 4 byte constant header:
- length byte
Then we have for the first message: 0x10 0x04 0xF1 0x00 0x23 0x65
- 0x10 0x04 fixed header
- 0xF1 is temperature in 0.1 degree Celcius most likely (24.1)
- 0x00 is ...
- 0x23 is humidity most likely (35)
- 0x65 is ... checksum perhaps
And for the second message: 0x10 0x04 0x01 0x9A 0x00 0x0A 0x00 0x03 0x0E
- 0x10 0x04 fixed header
- 0x01 0x9A is the CO2 concentration (410)
- 0x00 0x0A is TVOC most likely (10)
- 0x00 0x03 is HCHO most likely (3)
- 0x0E is ... checksum perhaps
ribbon tweeter for bat audio
Someone gave me this idea: Use a ribbon tweeter like this for playing back bat audio: https://nl.aliexpress.com/item/4000973201791.html
The frequency spectrum shows no sign of dropping off at 20 kHz.
I got some 2nd hand 3d glasses, they look exactly like these ones:
- GH-15 https://www.dhgate.com/product/g15-dlp-3d-active-shutter-glasses-96-144hz/213983026.html
- Sintron https://www.amazon.de/Sintron-Kompatibel-TDG-BT500A-TDG-BT400A-Deutschland/dp/B015PCWMZ8
The common name appears to be "G15-DLP".
A tear-down here:
Someone claims he got something to work with some hacks: https://www.avsforum.com/threads/how-i-got-cheap-dlp-link-glasses-to-work-great.1887145/
Op verschillende plekken in Gouda staat er water in de kruipruimte van huizen van bewoners. Kunnen we dat meten en inzichtelijk maken, voor bewoners, op een kaart bijvoorbeeld?
- in de kruipruimte plaats je een module die waterhoogte kan meten
- de module bestaat uit een microcontroller en een afstandsmeter, die de waterhoogte bepaalt
- de gegevens worden via WiFi doorgestuurd naar een centraal punt, waar de data wordt verwerkt en gevisualiseerd
- op een webpagina kan je een overzicht zien van alle meters die online zijn
- de meting wordt gedaan door bijv. een laser-afstandsmeter of een ultrasoon-afstandsmeter
- voeding? lastig, hoe krijg je 5v naar een potentieel natte plek?
- kosten? verwachting < E 40,-
In Gouda wordt op veel verschillende plekken de grondwaterstand gemeten, zie https://opendata.munisense.net/portal/wareco-water2/group/581/Gouda-KJ38A , maar:
- geen visualisatie op de kaart, je ziet alleen de meetlokaties d.m.v. een icoontje!
- geen meetpunten in Gouda noord!
Online bat detector
Idea: use an ultrasonic microphone, connect it to a WebSDR, so people can tune into bat sounds remotely.
Blood pressure meter hacking
Apparently some blood pressure monitors can be hacked.
My goal is to be able to extract the list of the last 100 measurements somehow, so you don't have to type them over manually. Either using bluetooth (serial), or by adding something like an ESP8266 to sniff internally an make it available over WiFi.
- bluetooth GATT profile for blood pressure monitors https://www.bluetooth.com/specifications/gatt/
- hacking the UART on an Omron RS8 : https://blog.adafruit.com/2016/05/26/hacking-uart-to-an-omron-rs8-blood-pressure-sphygmomanometer/
- hacking a blood pressure monitor by monitoring i2c traffic to the EEPOM: https://www.edusteinhorst.com/hacking-a-blood-pressure-monitor/
Raspberry pi airplane tracking
Apparently now you can also participate in MLAT tracking of planes that don't transmit GPS coordinates themselves.
Small inexpensive modules that play mp3 from an internal flash. Could be nice for a custom door bell for example.
More info at:
Cheap FPGA boards and nice applications:
- inexpensive ep2c5t144 board
Neural networks on low-end hardware
Investigate if you can run a powerful neural network on relatively low-end/cheap/low-power hardware. For example a Raspberry pi. A RPI runs Linux, run python, just like some common neural frameworks. Do we need hardware acceleration from the GPU and does the RPI GPU support that?
Bought a MaixPy:
- see https://maixpy.sipeed.com/en/
- see https://www.youtube.com/watch?v=KResVuAIMb4
- see http://educ8s.tv/sipeed-m1-dock-review/
- interesting? https://www.instructables.com/id/Transfer-Learning-With-Sipeed-MaiX-and-Arduino-IDE/
mini word clock in dutch
Basically an monochrome 8x8 word clock, in Dutch, showing local time in the Netherlands.
This git repo has the current code.
See here for a demo running on an arduino nano.
The plan is to run this from an ESP8266 instead of an arduino nano, so it can get the time from the internet using NTP. Andreas Spiess demonstrated on youtube how existing libraries on the ESP8266 can be used to do the local time (including summer-time) calculations.
Play with the Cypress PSOC5 platform, which combines a ARM Cortex-m3 processor with configurable analog blocks. I'm thinking of combining it with a 24 GHz doppler radar sensor, to process the signal and present it as a USB audio device (stereo signal contains I and Q parts). See RadarOnAStick.
Simple Doppler motion sensors
You can find basic doppler microwave motion sensors based on a single transistor, with some weird traces on the PCB very cheaply, for example
Typically the microwave part of these consists of a single transistor with a rectangular area on one leg and a meandering trace (with lots of vias to the other side) on the other leg. The output of this circuit seems to go into a chip very much like the ones used in PIR sensors.
See also https://github.com/jdesbonnet/RCWL-0516 for a reverse engineering effort of these doppler radar modules.
Bare-bones Arduino bat detector
This is an idea for a very basic heterodyne bat detector, doing signal processing on an Arduino, requiring minimal external components.
The basic principle of a heterodyne detector is that it just mixes (multiplies) the audio signal with a square wave, low-pass filters the result and puts it on a speaker.
Multiplying with a square wave can also be considered to be just alternatively inverting and not-inverting the signal. So if you sample an ultrasonic signal at twice the rate you want to multiply, you can just subtract odd samples from even samples and low-pass filter that.
How this can be done in an AVR Arduino:
- sample the audio signal at twice the detection frequency, say 84 kHz. An AVR should just be able to do that.
- apply a 1-pole IIR high-pass filter to remove DC bias, this takes one shift instruction and one addition.
- multiply by the detection frequency, this means just inverting the odd samples.
- low-pass filter the signal, this can be done using a moving average filter, say 16 samples long (first null at 5.25 kHz). Theoretically, averaging 16 samples should result in two bits extra accuracy. This operation takes some storage, an addition and a subtraction.
- output the filtered signal using PWM, possibly at the same rate that we are sampling the input audio.
The microphone can be a 40 kHz piezo transducer, to keep it cheap (but also limited to 40 kHz). The pre-amplifier can be a single transistor with some resistors around it, providing about 40x gain. The arduino does the signal processing (mixing, low-pass filter) to shift the bat audio to human range. The speaker amplifier can just be a simple two transistor push-pull circuit, since the output from the Arduino is digital/PWM.
AVR Arduino sample rate
As far as I understand, the ADC clock can be set to 1 MHz. Conversion takes 13 cycles, so this can be a problem to reach a sample rate above 80 kHz.
This idea is about experimenting with a cheap GPS repeater built out of an "active" GPS antenna.
The problem this solves is that often indoors you have no GPS reception, but you like to have some signal to experiment with (e.g. a LoRa tracker).
- get a cheap active GPS antenna from AliExpress (some as cheap as E2,- !), most just mention one frequency (1575.42 MHz)
- get a bias-T circuit to feed it the supply voltage (e.g. from a KOPPLA) and pass the RF signal onto an indoor antenna
- the indoor antenna may be as simple as a 1/4 wave coax dipole: center conductor sticking up (about 47 mm), coax shielding is divided into 3 of 4 ground radials sticking sideways
- build it and test it with a smart phone, tracker hardware, etc.
Indoor radar speed sign
This idea about placing a simple IQ-output radar sensor indoors in the hacker space, do some basic signal processing on the IQ doppler signal and determine movement speed and direction, then display this on a LED display. This is of no immediate practical use other than fun, but helps me to gain a bit more experience with microwave radar sensors and eventually build a more effective setup for detecting/counting bats flying in and out of a roost.
Implement this on a PSOC5 platform or on the STM32 using Arduino.