This is a project where multitaksing is demonstrated with FreeRTOS and STM32F411 Evalboard
In this project, Time in HHMMSS format is displayed on LCD Display and the Distance of an object from an Ultrasonic sensor HC-SR04 is displayed in cm. LCD Display is controlled via I2C bus. In this project i have used GPS module to extract time. Ultrasound module HC-04 to measure distance in cm between the module and the object. Time and Distance are displayed on the LCD display. The uC sends commands to LCD via I2C bus. I have used FreeRTOS to manage my 4 Tasks. Task1 is a dummy task that blinks LEDs. Task 2 parses time from a buffer that is filled when a DMA Transfer complete is done. Task 3 calculates the distance depending on the pulsewidth of the echo signal recieved from HC-04 module. Task 4 is for displaying the parsed time and distance to the LCD.
- STM32F411VE Discovery board
- Ultrasonic sensor HC-SR04 Sensor module
- 1604 LCD Display via I2C Bus
- Waveshare Wireless UART GPS Module NEO-7M-C
- USART to USB module (for Debugging)
- Logicanalyzer
- SW4STM32 built by Ac6 based on Eclipse IDE,
- ARM-GCC Compiler
- ST-Link Support
- Salae Logicanalyzer GUI.
- Operating System- Ubuntu Linux
- FreeRTOS port for CortexM4
- Standard Peripheral Libraries (StdPeriph_Driver)
The HC-04 module has Trigger and Echo pin.
Timer 2 (TIM2-CH3) is configured to send the trigger signal with a specific dutycycle.
Depending on the distance of the object from the Ultrasound module, a pulse is generated by echo Pin.The Echo pin is connected to input capture Pin (Timer1-CH1). The Pulsewidth of the received pulse in milliseconds is used to determine the distance.
For more details refer this PDF. https://www.mouser.com/ds/2/813/HCSR04-1022824.pdf
Sound travels at approx. 343 meters/second. Distance in centimeters is hence, (pulsewidth(ms)*34300(cm/s))/2;
Distance in cm = (PW/1000)seconds * (17150)(cm/seconds)