Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/myzhar/ultrasonicbumperboard
Firmware for STm32F303 Nucleo32 board to handle up to four HC-SR04 Ultrasonic Range Sensor
https://github.com/myzhar/ultrasonicbumperboard
Last synced: 8 days ago
JSON representation
Firmware for STm32F303 Nucleo32 board to handle up to four HC-SR04 Ultrasonic Range Sensor
- Host: GitHub
- URL: https://github.com/myzhar/ultrasonicbumperboard
- Owner: Myzhar
- License: lgpl-3.0
- Created: 2016-01-25T12:19:21.000Z (almost 9 years ago)
- Default Branch: develop
- Last Pushed: 2016-08-01T06:22:32.000Z (over 8 years ago)
- Last Synced: 2024-11-08T13:14:35.435Z (about 2 months ago)
- Language: C
- Homepage:
- Size: 19.4 MB
- Stars: 3
- Watchers: 3
- Forks: 1
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# SonarBoard
Firmware for **STm32F303 Nucleo32** board to handle up to four **HC-SR04** ultrasonic range sensors## Description
*HC-SR04* module is a 2-wires driven distance sensor. It is triggered by a TTL 10 microsec pulse on *"Trig"* pin and the measured distance is proportional to the duration of the echo pulse received on the *"Echo"* pin.* The Trig pulse is generated using a PWM timers programmed in "One Pulse mode".
* The Echo duration is measured using a timer in "Input Capture" coupling two channels: channel 1 triggers on rising edge on echo reception, channel 2 triggers on falling edge when the echo stops.## Sensor Configuration
The sensors are triggered coupled two by two to avoid echo interferences, only two triggers are generated to enable two sonars, 4 timers are required to measure the 4 echos.Typical configuration:
--- Sonar #0 ----------- Sonar #1 ---
| |
| |
| |
--- Sonar #3 ----------- Sonar #2 ---
- The sensor **#0** and the sensor **#2** receive the same trigger
- The sensor **#1** and the sensor **#3** receive the same trigger## Pinout
### Nucleo32
* **PA6** - Trigger sensor #0 #2 [*TMR16 CH1 PWM SINGLE SHOT*]
* **PA7** - Trigger sensor #1 #3 [*TMR17 CH1 PWM SINGLE SHOT*]
* **PA8** - Echo sensor #0 [*TMR1 CH1 INPUT CAPTURE DIRECT - CH2 INPUT CAPTURE INDIRECT*]
* **PA0** - Echo sensor #1 [*TMR2 CH1 INPUT CAPTURE DIRECT - CH2 INPUT CAPTURE INDIRECT*]
* **PB4** - Echo sensor #2 [*TMR3 CH1 INPUT CAPTURE DIRECT - CH2 INPUT CAPTURE INDIRECT*]
* **PA2** - Echo sensor #3 [*TMR15 CH1 INPUT CAPTURE DIRECT - CH2 INPUT CAPTURE INDIRECT*]
* **PA9** - USART 1 TX
* **PA10** - USART 1 RX
* **PB3** - Board Green Led
**NOTE #1:** The Nucleo32 board is powered by an external 5V power supply, so **SB1** must be opened.**NOTE #2:** To enable the input pin for *Sensor #3 echo* on **PA2** you need to open **SB3** and **SB2**, disabling USART2 for Virtual COM Port - [For further information see Table 6 on document **UM1956** "STM32 Nucleo-32 boards - User Manual" - http://www.st.com/st-web-ui/static/active/en/resource/technical/document/user_manual/DM00231744.pdf]
![alt tag](https://github.com/Myzhar/SonarBoard/blob/develop/Images/STm32F303.PNG)
## Serial communication
Baudrate 115200 8N1
### Serial output
To emit range measures the board uses a binary protocol:
* *Unsigned int 16 bit* **Sync word** [0x5aa5]
* *Unsigned int 32 bit* **number of bytes following** [30]
* *Unsigned int 32 bit* **ticks since system start**
* *float* **not_valid_val** the float value used for not valid measured ranges
* *float* **Sensor #0**
* *float* **Sensor #1**
* *float* **Sensor #2**
* *float* **Sensor #3**
* *Unsigned int 16 bit* **Number of sonar connected**
* *Unsigned int 16 bit* **Termination word** [0x0d0a]The data is mapped by the following C/C++ structure:
```
typedef struct _data_out
{
uint16_t ctrl_frame_0; // SYNC WORD [0x5aa5]
uint16_t byte_count; // number of bytes following [30]
uint32_t ticks; // ticks since system start
float not_valid_val; // value for not valid distances
float distances[MAX_SONAR]; // distances in meters
uint16_t sonar_active; // Number of sonar connected
uint16_t ctrl_frame_1; // TERMINATION WORD [0x0d0a]
} DataOut;[...]
DataOut data;
char buf[33];
memcpy( buf, &data, sizeof(DataOut) );
[...]
```### Serial input
*No input allowed yet*