Skip to content

keppler/cavelogger

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

24 Commits
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

CaveLogger

(tbd)

Data

During measurement, we collect the following data:

Data Size
Timestamp 4 byte
Temperature 2 byte
Air Pressure 2 byte
Humidity 2 byte
Battery Voltage 2 byte
Wind speed 1 byte

That's up to 13 byte per measurement. But we don't need the timestamp and the battery voltage every time (it's sufficient to save these e.g. once per hour).

So when we measure data every 15 minutes, we produce (4 x 7) + 6 = 34 bytes per hour (= 816 bytes per day, =300kB per year).

Saving the data

The initial idea was to save data on a (micro) SD card. But during development several problems came up:

  • the SD card has a really large peak current during power-on (>500mA) - this can be problematic on low battery
  • the SD card usually requires a minimum voltage of 2.7V. When we plan to run on battery "as long as possible" (e.g. around 1.7V) we won't be able to write any more
  • there's a really annoying leak current of around 50uA, even when switching off GND via a N-Ch MOSFET (e.g. BS170)

So we now use a dedicated NOR-flash memory chip (AT45DB081E-SHN). It only draws 400nA (!) during deep sleep, runs with 1.7-3.6V, has no mechanical interfaces (think of corrosion!) and so on.

The capacity of this flash memory is 8 MBit = 1 MB, so we can save data for more than three years. Data retention is specified with 20 years in industrial environments (-40 to +85 °C).

The SD Card connector anyway remains. If a card insertion is detected (this is signalled by connecting a pin on the connector to GND), we run a function to mount that SD card and copy the contents of the flash memory to the SD card. An "empty" connector doesn't use any power.

SD Card Usage

  1. Format a MicroSD card with FAT32 filesystem. Other filesystems (FAT16, VFAT, ...) will not work. Under Windows, use the format utility on the shell to explicitly choose the filesystem type:

    format e: /FS:FAT32

  2. Prepare an empty file called CAVELOG.DAT with a size of 1MB (data) + 128 Bytes (headers + spare) = 1.048.704 bytes. You find such a file in the repository, or create your own:

    dd if=/dev/zero of=CAVELOG.DAT bs=1048704 count=1

    Copy this file on the SD card.

  3. Insert MicroSD into SD slot. CaveLogger will detect the card, wake up and present a menu. Select <COPY> to copy data from flash memory on SD card.

  4. When copied successfully, leave the menu by selecting <EXIT>.

Parsing the data

(to be done...)

Battery lifetime

The circuit uses around 1.5μA during idle time. The duty cycle draws around 5mA for around 5 seconds. Most power is drawn when sending data via LoRaWAN, we estimate 20mA for 1 second (###TODO###). So within a 15 minute loop, we draw:

  • idle: 15min * 1.5μA = 0.375μAh
  • power-on: 5sec * 5mA = 6.95μAh
  • sending: 1sec * 20mA = 5.56μAh
  • total: 12.9μAh = 113mAh per year

(missing: power can be saved by only sending data every 2 or 4 measurements; writing data to the flash chip requires some additional power once or twice a day - depending on how often data is written)

When we use 2 AA batteries (to get a voltage of 3.0V) we should have at least 1.500-2.000mAh available - more than enough for some years, even in a cold cave. Self-discharge is propably a bigger problem, so we should prefer industrial-grade cells.

A CR2032 is used as backup battery for the real-time clock. The flash memory doesn't need power to retain its data.

Parts

Name Description Price Datasheet
AT45DB081E-SHN NOR Flash Memory, 8 MBit, SPI, 1.7V 1,75 € Datasheet
EPSON RX6110SA B Real Time Clock (RTC) with SPI, ultra low power (130nA) 1,99 € Datasheet
ATmega 328P-PU 8 Bit AVR Microcontroller, 32kb flash 2,25 € Datasheet
BMP280 Sensor for temperature and pressure. Check for SPI pins on the breakout board! 1,15 € Datasheet
HopeRF RFM95W LoRa transceiver, based on SX1276 chipset (868MHz version for EU) 6-10 € Website Datasheet
SSD1306 OLED display 128x64 px, I²C (for debugging/development only) ~2 € -
Wind sensor Replacement part for anemometer 20 € -

Pin configuration

                         _______
        [RESET] PC6   1 |  ( )  | 28  PC5 TWI (I²C) SCL
                PD0   2 |       | 27  PC4 TWI (I²C) SDA
   FLASH SPI CS PD1   3 |       | 26  PC3
INT0 (RTC INT1) PD2   4 |       | 25  PC2 OLED POWER
        WIND IN PD3   5 |       | 24  PC1 LED
       WIND OUT PD4   6 |       | 23  PC0 BME280 SPI CS
                VCC   7 |       | 22  GND
                GND   8 |       | 21  AREF
                PB6   9 |       | 20  AVCC
     RFM95 DIO1 PB7  10 |       | 19  PB5 SPI SCK
     RFM95 DIO0 PD5  11 |       | 18  PB4 SPI MISO
   RFM95 SPI CS PD6  12 |       | 17  PB3 SPI MOSI
     RTC SPI CS PD7  13 |       | 16  PB2
       Button_1 PB0  14 |_______| 15  PB1 Button_2

Software

Flashing

You need to flash the circuit with 3.3V (the RFM95 will be killed with 5V). I recommend to modify an USBASP to work with 3.3V output.

Libraries

All required libraries are included. The following adjustments have been made to the original source:

  1. Petit FAT File System

    • adjusted pffconf.h to disable all features except PF_USE_WRITE and PF_FS_FAT32
  2. LMIC library

    • defined all configuration settings in lmic-config.h (instead of project_config/lmic_project_config.h), disabling all features not required
    • ported hardware driver (HAL) to AVR (lmic-hal-avr.c) to be independend of Arduino (a bit "quick&dirty", highly depending on current chipset and layout)
  3. I2C Master Interface by Peter Fleury

    We use the software driver (i2cmaster.S) because this allows a faster I²C clock speed than the hardware driver (because of our limited clock speed of 1MHz). Additionally, this enabled us to work around a bug in the PCB layout v1.0 (see issue #1), where SDA and SCL pins are swapped.

Literatur/Links (German)

About

Environmental data logger for caves

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published