Read ancillary sensor data and send timestamped sensor data over serial to PC. Code written for a Teensy 4.0 target.
HSI pushbroom sensors require motion to generate a 2D spatial datacube. To accurately model this motion, IMU absolute orientation and GPS coordinates are needed. We also include a humidity/pressure/temperature sensor to measure the local weather conditions.
- BME280 humidity, temperature, pressure sensor
- takes 8 ms to take a reading
- accuracy (https://learn.adafruit.com/adafruit-bme280-humidity-barometric-pressure-temperature-sensor-breakout)
- ± 3% relative humidity
- ± 1 hPa pressure. Good enough to use as a ± 1 m accurate altimeter.
- ± 1.0 °C temperature
- BNO055 IMU (gives absolute orientation in quaternion/Euler angles)
- https://learn.adafruit.com/adafruit-bno055-absolute-orientation-sensor
- ambient temperature at 1 Hz (deg C)
- magnetic field strength at 20 Hz (uT)
- acceleration minus gravity vector at 100 Hz (m/s^2)
- angular velocity vector at 100 Hz (red/s)
- euler angles at 100 Hz (deg)
- absolute quaternion at 100 Hz
- DS3231 Real Time Clock
- temperature output (since temperature compensated)
- GPS (SparkFun GPS-RTK2 - ZED-F9P (GPS-15136))
- Current: 68mA - 130mA (varies with constellations and tracking state)
- Time to First Fix: 25s (cold), 2s (hot)
- Max Navigation Rate:
- PVT (basic location over UBX binary protocol) - 25Hz
- RTK - 20Hz
- Raw - 25Hz
- Horizontal Position Accuracy:
- 2.5m without RTK
- 0.010m with RTK
- https://github.com/sparkfun/SparkFun_u-blox_GNSS_Arduino_Library
- Dimensions (https://cdn.sparkfun.com/r/600-600/assets/7/d/f/a/c/SparkFun_RTK2_ZED-F9P_Dimensions.jpg)
Additional Components include:
- Operating LED: blinking indicates code runs normally. Lack of blink indicates program abort or hang.
- Latching LED button: This is used to start data packet transfer and indicate operational status. Blink means waiting for HSI camera. Solid colour means camera is currently collecting data.
- Reset button: Reboots the Teensy. Press this button instead of power cycling.
In the PCB folder, the custom parts library, schematic, and board files are provided. The Gerber files are also included.
All sensor update events are handled by a cooperative task scheduler. Sensors will try to update at their desired frequency and if the sensor is missing on startup, the task is removed from the schedule.
There is a debug mode which prints out sensor readings but requires the USB serial port to be connected. To use this, simply add
#define DEBUG
at the top of the code.