Skip to the content
PCBKitNew board
4 layers84.5 × 17 mmSmartProbe v004, the printed circuit board in 3D

SmartProbe v004

alex31/smartprobe1

firmware and hardware for an autonomous five holes 3D pitot tube

Size
84.5 × 17 mm
Copper layers
4
Thickness
1.6 mm
Parts
90
Nets
112
Pads
411
Tracks, vias
915, 237
Pours
9
Routed
Yes
KiCad
KiCad 8.0 (file 20240108)
Created
26 Nov 2019
Updated
3 Dec 2024

Overview

SmartProbe v004 is an open-source printed circuit board by alex31, from the alex31/smartprobe repository on GitHub. It is a 4-layer board of 84.5 × 17 mm with 90 parts on 112 nets, routed with 915 tracks and 237 vias.

It is built around the STM32F777VIH6, LPS33HW and SDP31, with the LP5912-3.3DRVR, ICM-20600 and MAX3051EKA among its other parts. Its parts include 36 capacitors, 22 resistors, 10 ICs, 8 diodes and 3 connectors. It belongs with the STM32 boards of this library.

Main components

10

README

README.md

SMARTPROBE Pitot3D device

Smartprobe is an autonomous pitot3d tube that is designed to be mounted on a drone. It records relative wind speed and angles, stores them on sdcard, and stream data on a serial line.

Disclaimer : software was still in alpha stage when the project development was stopped in fall 2021

Installation

The easy way

use the latest binary found under GitHub Releases

You really want to compile it ?

Dependencies installation

cross compilation and Perl library for the boardGen.pl tool :

shell
sudo apt install build-essential gcc-arm-none-eabi gdb-multiarch \
         default-jre libmodern-perl-Perl \
	 libxml-libxml-Perl libfile-which-Perl \
	 dfu-util
	 
sudo cpan -i String/LCSS.pm

to use bmpflash when flashing with a Black Magic Probe or Criquet Probe

shell
sudo usermod -a -G dialout $USER

optional : stm32cubemx install from stmicroelectronics website:

https://www.st.com/en/development-tools/stm32cubemx.html (boardGen.pl script needs xml MCU description files) If stm32cubemx is not found, a pregenerated board.h is used, you won't be able to modify pin assignation

clone of GitHub repository and submodules :

shell
git clone --recursive https://github.com/alex31/smartprobe.git
cd smartprobe
git submodule update --init --recursive

build firmware in release mode

shell
make clean; make BUILD=SIZE

flash firmware in release mode

In dfu mode : plug micro-USB cable (no need to power supply)

shell
make BUILD=SIZE dfuflash

In swd mode : plug swd cable (need to power supply smartprobe)

shell
make BUILD=SIZE flash

Usage

µSD Card

It is mandatory to install a micro sd card :

  • SD should be formatted with FAT32 or ExFAT filesystem.
  • configuration is read from SD
  • wind data is stored on the SD
  • reading/writing SD can be done
    • offline : SD must be removed
    • online : plug the smartprobe via USB (with SD installed) on a computer, and it will be shown like a USB storage device

Connector J3 at the back

The Molex connector at the back contains :

  • power in : Vin should be between 7 and 20 Volts
  • bootloader mode switch (connect pin5 with pin6, then power up the smartprobe) -bootloader mode is to be used to flash the firmware in the smartprobe
  • USB to mount the sdcard as a USB storage device
  • UART which can be used for multiple purposes (choice is made in configuration file)

Molex connector wiring

Parameters

  • firmware parameters are read from the SD at start, in a file named smartprobe.conf
  • if a file named smartprobe.conf is not found, it will be created, all the fields set at their default value
  • the most accurate and up-to-date definitions (with default and range) for each field can be found in source file
    source/confParameters.hpp
  • here is a list of parameters (details are missing, confParameters.hpp reading is advised)
ParameterDescriptiondefault
syslog.filenamename of the file where system events are loggedsyslog
sensorslog.filenamename of the file where sensors data are loggedsensors
thread.frequency.d_pressdifferential pressure sampling frequency100
thread.frequency.imuIMU sampling frequency100
thread.frequency.stream_consolefrequency of messages on the console10
thread.frequency.transmit_uartfrequency of messages on serial link100
ahrs.typetype of AHRS : raw, headless, or completeheadless_ahrs
ahrs.outputahrs output format : euler or quaternioneuler
uart.modeno_used or pprz or nmea_in or ubx_inpprz
pprz.messagepprz msg to stream data : aeroprobe or smartprobeaeroprobe
uart.baudBaud rate of the uart in the range 9600..460800115200
canbus.modenot yet implemented
canbus.idnot yet implemented
sensor.barometer.temperatureBiastemperature bias of the measured exterior air-5
sensor.barometer.lpfbarometer clock divider (see LPS33HW datasheet)div2
sensor.barometer.odrbarometer output data rate (see LPS33HW datasheet)50hz
sensor.d_press.fetcheddiff pressure param fetched : press or press + tempP+T
sensor.d_press.fetchTempFrequencydiff pressure temp frequency fetching1<<
sensor.imu.accrateimu acc fetching rate (see ICM20600 datasheet)1khz_bw99
sensor.imu.gyrorangegyro range [250 .. 2000] degrees per seconds250_dps
sensor.imu.accrangeacc range [2 .. 16] G2g
sensor.imu.estimationLoopDuration_msahrs calibration duration [10 .. 4000] milliseconds500
airspeed.rhoestimated (0) or fixed in the range [0.1 .. 2]0(force estimation)
airspeed.calibration.m11transformation matrix from the1.15
airspeed.calibration.m12calibration process0
airspeed.calibration.m13default values can be used to verify that0
airspeed.calibration.m14the smartprobe roughly works, but should not be6
airspeed.calibration.m15used to make actual measures6
airspeed.calibration.m210
airspeed.calibration.m2215
airspeed.calibration.m230
airspeed.calibration.m240
airspeed.calibration.m250
airspeed.calibration.m310
airspeed.calibration.m320
airspeed.calibration.m3311
airspeed.calibration.m340
airspeed.calibration.m350
airspeed.calibration.bias.velocitybias on air velocity (from calibration)0
airspeed.calibration.bias.alphabias on alfa angle (from calibration)0
airspeed.calibration.bias.betabias on beta angle (from calibration)0
led.modestatus or airspeedstatus

Calibration

Smartprobe should be calibrated in a wind tunnel before use. The calibration matrix values should then be written in the configuration file instead of the default values.

Calibration procedure :

...TO BE WRITTEN...

Development tool

there is a SWD connector on the PCB for connecting a debug probe (Black Magic Probe or STlink V2/V3) which permits debugging with gdb and access to a shell console where errors messages are shown.

troubleshooting

The led color reflect status of operation (see details below). When error occurs, the error details are logged in the syslog file, on the sdcard, and on debug console if a probe is attached to the internal swd+serial connector.

error codes :
  • blink green : OK
  • blink green and orange : sd card file system is dirty, operation will try to continue, but ultimately, there is a need for filesystem check or reformating
  • blink orange : sd card mount has failed
  • blink green and white : configuration file error
  • blink red : hardware fault detected

..

Ideas for future developments

  • If external componant (autopilot) stream gps positions and heading, wind in a terrestrial reference frame could be calculated on board
  • add USB CDC endoint to the existing USB storage endpoint to output serial console shell via USB
  • stream UAVCAN messages on the CAN 2.0B interface

Parts

90
QtyValueFootprintReferences
17100nF_Capacitors_GRZ:C_0402C7, C8, C10, C11, C12, C13, C14, C15, C16, C17, C18, C19, C20, C21, C22, C23 +1
112.2kΩ_Resistors_GRZ:R_0402R8, R9, R10, R11, R12, R13, R14, R15, R16, R17, R18
610µF_Capacitors_GRZ:C_0603C29, C30, C31, C32, C33, C34
5PMEG3010AESB_Diodes_GRZ:PMEG3010AESBD1, D2, D3, D4, D5
34.7µF_Capacitors_GRZ:C_0402C26, C27, C28
3SDP31_Sensors_GRZ:SDP31IC5, IC6, IC7
21.5kΩ_Resistors_GRZ:R_0402R6, R7
210nF_Capacitors_GRZ:C_0402C5, C6
218pF_Capacitors_GRZ:C_0402C3, C4
21µF_Capacitors_GRZ:C_0402C24, C25
2390Ω_Resistors_GRZ:R_0402R3, R4
24.7pF_Capacitors_GRZ:C_0402C1, C2
2LP5912-3.3DRV_Regulators_GRZ:LP5912DRVIC1, IC2
10Ω_Resistors_GRZ:R_0402R1
11.2kΩ_Resistors_GRZ:R_0402R5
11000µF/6.3V_Capacitors_GRZ:EIA_7360-38C36
1100µF/20V_Capacitors_GRZ:EIA_7343-31C35
110kΩ_Resistors_GRZ:R_0402R20
110µH_Inductors_GRZ:VLCF4020TL1
1120Ω_Resistors_GRZ:R_0402R2
112kΩ_Resistors_GRZ:R_0402R21
116MHz_Misc_GRZ:Crystal_8ZQ1
12.7kΩ_Resistors_GRZ:R_0402R19
132.768KHz-9pF_Misc_GRZ:Crystal_FC-135Q2
133kΩ_Resistors_GRZ:R_0402R22
1COMM_Connectors_GRZ:PicoBlade_53048-1210J3
1DEBUG_Connectors_GRZ:PicoBlade_53261-0771J2
1ICM-20600_Sensors_GRZ:ICM-20600IC8
1KP-1608CGCK_Opto_GRZ:KP-1608CGCKLED2
1KP-1608SURC_Opto_GRZ:KP-1608SURCLED1
1LOGO_Logos_GRZ:PaparazziPenguin_10x10G***
1LPS33HW_Sensors_GRZ:LPS33HWIC4
1LT1616_Regulators_GRZ:LT1616IC10
1MAX3051EKA_IC_Misc_GRZ:MAX3051EKAIC9
1MicroSD_Connector_500901-0801_Connectors_GRZ:MicroSD_500901-0801J1
1SK6812-SIDE-A_Opto_GRZ:SK6812-SIDE-ALED3
1STM32F777VI_MCU_GRZ:STM32F777VIIC3

The 83 most common of 90 parts.

Questions

How big is the SmartProbe v004 PCB?

It measures 84.5 × 17 mm and has 4 copper layers, 1.6 mm thick.

What parts does the SmartProbe v004 use?

90 parts, built around the STM32F777VIH6, LPS33HW, SDP31 and LP5912-3.3DRVR. The full list of its parts is on this page, with links to each part's symbol and footprint where PCBKit's library has them.

Where can I download the SmartProbe v004 KiCad files?

From the alex31/smartprobe repository on GitHub, at the commit this page was made from: the board is hardware/Electronics/source/SmartProbe_v004.kicad_pcb and its schematic hardware/Electronics/source/SmartProbe_v004.kicad_sch. PCBKit opens the board in the browser, with nothing to install.

Can I use the SmartProbe v004 design in my own project?

Its repository states no licence, so its author keeps all rights: ask alex31 before reusing the design.

Similar boards

  • 4 layers53 × 35.2 mmTawaki v110, the printed circuit board in 3D

    Tawaki v110

    enacuavlab/boards

    ENAC's electronic boards related resources

    116 parts
  • 2 layers86 × 82 mmMotor board, the printed circuit board in 3D

    Motor board

    rustyducks/motor_board

    89 parts
  • 2 layers130 × 100 mmBattery tester, the printed circuit board in 3D

    Battery tester

    Fabien-B/battery_tester

    132 parts
  • 2 layers131.2 × 95.7 mmSwadge S2-Devkit, the printed circuit board in 3D

    Swadge S2-Devkit

    AEFeinstein/Super-2023-Swadge-HW

    Swadge devkit for an ESP32-S2 with all the bells and whistles

    86 parts17MIT
  • 2 layers149.9 × 134.2 mmSwadge HW, the printed circuit board in 3D

    Swadge HW

    emilyanthony4244/Super-2027-Swadge-HW

    Super 2027 Swadge

    134 parts2MIT
  • 4 layers158.4 × 66 mmSketchingpad proto2, the printed circuit board in 3D

    Sketchingpad proto2

    todbot/sketchingpad

    Capsense touch BLE pad for Sketching

    84 parts1GPL-3.0
  • 4 layers426 × 182.3 mmDboards-02, the printed circuit board in 3D

    Dboards-02

    QuantumMatter/Rumission

    Measuring methane emissions from ruminant agriculture

    371 parts