From 44376ba8d8f0a563abfd901d3b2503e78bc19fd1 Mon Sep 17 00:00:00 2001 From: ImplFerris Date: Fri, 25 Oct 2024 23:57:46 +0530 Subject: [PATCH] ultrasonic --- src/SUMMARY.md | 4 + src/images/hc-sr04-ultrasonic.jpg | Bin 0 -> 51820 bytes src/ultrasonic/action.md | 148 ++++++++++++++++++++++++++++++ src/ultrasonic/concepts.md | 34 +++++++ src/ultrasonic/index.md | 24 +++++ 5 files changed, 210 insertions(+) create mode 100644 src/images/hc-sr04-ultrasonic.jpg create mode 100644 src/ultrasonic/action.md create mode 100644 src/ultrasonic/concepts.md create mode 100644 src/ultrasonic/index.md diff --git a/src/SUMMARY.md b/src/SUMMARY.md index 87dfb12..764e424 100644 --- a/src/SUMMARY.md +++ b/src/SUMMARY.md @@ -12,4 +12,8 @@ - [PWM](./blinky/pwm.md) - [Watchdog](./blinky/watchdog.md) - [Using External LED](./blinky/external-led.md) +- [Ultrasonic](./ultrasonic/index.md) + - [How it works?](./ultrasonic/concepts.md) + - [Light it Up](./ultrasonic/action.md) + - [Resources](./resources.md) diff --git a/src/images/hc-sr04-ultrasonic.jpg b/src/images/hc-sr04-ultrasonic.jpg new file mode 100644 index 0000000000000000000000000000000000000000..56c1678507940ff0d01dc0291cb3a9f97ba3a26d GIT binary patch literal 51820 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%0Dm%*jVgf+*nA+Sv^%w%kq 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�JtMZ z+|3p0lX^nUv(gvG?U)dm6%%MzGCwJ*y%`B>3(xq;18_>k8K{X?O_G#~+;Or{(6Z#< zX>kwekd~4|VH-oEQZeJoVv3h`Fovx~DKvUQ$H(m$2%3gFt>TSE(LNV~#{rBMAV0nPW#`nF$YL#3sorxG_oXjGx#{QK_p#L=ZvuOuGuy=7&#M z!{hdh2zrVm6ggcOck_W!jR;cg5Q#=K#x+%<1h!p@IfN-gO;J_4Log_sDK(Jntsx9* zMm%;VjSs&j;7OKLh5rB%Rblb_R4=wPGB6D0OWsv`Y6hchF=# zfsGlSLpW8$a*RqN!BZgV4alvDVl*V|Noau6Aq0iG9x#yzk{y_ljA=9>-Rx!Bj7~_@ z8cggq*`_dxnEu40fi79xS2n1!h94Trdmh71MT7@ql4L=PljA6qN+lABL2mt{A0Y4D`07m}++rNd&mo8knf9zbje+A2z zE?mF#?p(OBWy_cFT)0dB09xY9^DOvyOP4RHY`=ow%a%ei$fT)A@P%a%)*=3l{exqk)Aj9h*NCHxFrxpMqPzggN`xHq|dFlG6J z+!%kNq+uMgk@bxrx5vSAE+xaHzx|ZsFi-ygAX<4(RPvrO-TVw&#A1fN4(8*_;nFLZ z+3qdx67SjxEtdwTZO+KLgZ_ew`HIE1TQ515%Y*OmzUA^uc*MSb1EjIcx!_E^OM8|h z7;Ky1o?DDwZSY^2ZEjlS%V(Kswr9D28=02x;9I$F{tZ9T7CuL;i!*tu`i01 zIo$R7LfNk~Ji=}MV-l|2hu`+myU;}Bth+`D_p%tWqsPN_b zh{%24s9&F+{YxBsuj*v{-_�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 literal 0 HcmV?d00001 diff --git a/src/ultrasonic/action.md b/src/ultrasonic/action.md new file mode 100644 index 0000000..3c8a34f --- /dev/null +++ b/src/ultrasonic/action.md @@ -0,0 +1,148 @@ +## Action + +We'll start by generating the project using the template, then modify the code to fit the current project’s requirements. + + +## Generating From template + +Refer to the [Template section](../cargo-generate.md) for details and instructions. + +To generate the project, run: + +```sh +cargo generate --git https://github.com/ImplFerris/pico2-template.git +``` +Provide a project name and select `rp-hal` as the HAL. + +Then, navigate into the project folder: +```sh +cd PROJECT_NAME +``` + +## Setup the LED Pin +You should understand this code by now. If not, please complete the Blink LED section first. + +Quick recap: Here, we're configuring the PWM for the LED, which allows us to control the brightness by adjusting the duty cycle. + +```rust +let pwm = &mut pwm_slices.pwm6; // Access PWM slice 6 +pwm.set_ph_correct(); // Set phase-correct mode for smoother transitions +pwm.enable(); // Enable the PWM slice +let led = &mut pwm.channel_b; // Select PWM channel B +led.output_to(pins.gpio13); // Set GPIO 13 as the PWM output pin +``` + +## Setup the Trigger Pin +The Trigger pin on the ultrasonic sensor is used to start the ultrasonic pulse. It needs to be set as an output so we can control it to send the pulse. + +```rust +let mut trigger = pins.gpio17.into_push_pull_output(); +``` + +## Setup the Echo Pin +The Echo pin on the ultrasonic sensor receives the returning signal, which allows us to measure the time it took for the pulse to travel to an object and back. It’s set as an input to detect the returning pulse. + +```rust +let mut echo = pins.gpio16.into_pull_down_input(); +``` + +## 🦇 Light it Up + +### Step 1: Send the Trigger Pulse +First, we need to send a short pulse to the trigger pin to start the ultrasonic measurement. + +```rust +// Ensure the Trigger pin is low before starting +trigger.set_low().ok().unwrap(); +timer.delay_us(2); + +// Send a 10-microsecond high pulse +trigger.set_high().ok().unwrap(); +timer.delay_us(10); +trigger.set_low().ok().unwrap(); +``` + +### Step 2: Measure the Echo Time +Now, measure the time the Echo pin remains high, which represents the round-trip time of the sound wave. + +```rust +let mut time_low = 0; +let mut time_high = 0; + +// Wait for the Echo pin to go high and note down the time +while echo.is_low().ok().unwrap() { + time_low = timer.get_counter().ticks(); +} + +// Wait for the Echo pin to go low and note down the time +while echo.is_high().ok().unwrap() { + time_high = timer.get_counter().ticks(); +} + +// Calculate the time taken for the signal to return +let time_passed = time_high - time_low; + +``` + +### Step 3: Calculate Distance +Using the measured time, calculate the distance to the object. The speed of sound in air is approximately 0.0343 cm/µs. + +```rust +let distance = time_passed as f64 * 0.0343 / 2.0; +``` + +### Step 3: Calculate Distance +Finally, adjust the LED brightness based on the distance. If the distance is below a certain threshold (e.g., 30 cm), increase the brightness proportionally; otherwise, turn off the LED. + +```rust +let duty_cycle = if distance < 30.0 { + let step = 30.0 - distance; + (step * 1500.) as u16 + 1000 +} else { + 0 +}; + +// Set the LED brightness +led.set_duty_cycle(duty_cycle).unwrap(); + +``` + +### Complete Logic of the loop +Note: This code snippet highlights the loop section and does not include the entire code. + +```rust +loop { + timer.delay_ms(5); + + trigger.set_low().ok().unwrap(); + timer.delay_us(2); + trigger.set_high().ok().unwrap(); + timer.delay_us(10); + trigger.set_low().ok().unwrap(); + + let mut time_low = 0; + let mut time_high = 0; + while echo.is_low().ok().unwrap() { + time_low = timer.get_counter().ticks(); + } + while echo.is_high().ok().unwrap() { + time_high = timer.get_counter().ticks(); + } + let time_passed = time_high - time_low; + + let distance = time_passed as f64 * 0.0343 / 2.0; + + let duty_cycle = if distance < 30.0 { + let step = 30.0 - distance; + (step * 1500.) as u16 + 1000 + } else { + 0 + }; + led.set_duty_cycle(duty_cycle).unwrap(); +} +``` + + +## Your Challenge +1. Use Embassy framework instead of rp-hal +2. Use the onboard LED instead diff --git a/src/ultrasonic/concepts.md b/src/ultrasonic/concepts.md new file mode 100644 index 0000000..2edf3cd --- /dev/null +++ b/src/ultrasonic/concepts.md @@ -0,0 +1,34 @@ +# How Does an Ultrasonic Sensor Work? + +Ultrasonic sensors work by emitting sound waves at a frequency too high for humans to hear. These sound waves travel through the air and bounce back when they hit an object. The sensor calculates the distance by measuring how long it takes for the sound waves to return. + +pico2 + +- **Transmitter:** Sends out ultrasonic sound waves. +- **Receiver:** Detects the sound waves that bounce back from an object. + +**Formula to calculate distance**: +``` +Distance = (Time x Speed of Sound) / 2 +``` + +The speed of sound is approximately 0.0343 cm/µs (or 343 m/s) at normal air pressure and a temperature of 20°C. + +## Example Calculation: + +Let’s say the ultrasonic sensor detects that the sound wave took 2000 µs to return after hitting an object. + +Step 1: Calculate the total distance traveled by the sound wave: +``` +Total distance = Time x Speed of Sound +Total distance = 2000 µs x 0343 cm/µs = 68.6 cm +``` + +Step 2: Since the sound wave traveled to the object and back, the distance to the object is half of the total distance: +``` +Distance to object = 68.6 cm / 2 = 34.3 cm +``` + +Thus, the object is 34.3 cm away from the sensor. + + \ No newline at end of file diff --git a/src/ultrasonic/index.md b/src/ultrasonic/index.md new file mode 100644 index 0000000..ecc6ead --- /dev/null +++ b/src/ultrasonic/index.md @@ -0,0 +1,24 @@ +# Ultrasonic + +In this section, we'll learn how to interface the HC-SR04 ultrasonic sensor with a Raspberry Pi Pico 2. Ultrasonic sensors measure distances by emitting ultrasonic sound waves and calculating the time taken for them to return after bouncing off an object. + + We will build a simple project that gradually increases the LED brightness using PWM, when the ultrasonic sensor detects an object distance of less than 30 cm. + +pico2 + +## 🛠 Hardware Requirements +To complete this project, you will need: + +- HC-SR04 Ultrasonic Sensor +- Breadboard +- Jumper wires +- External LED (You can also use the onboard LED, but you'll need to modify the code accordingly) + +The HC-SR04 Sensor module has a transmitter and receiver. The module has Trigger and Echo pins which can be connected to the GPIO pins of a pico and other microcontrollers. When the receiver detects the returning sound wave, the Echo pin goes high for a duration equal to the time it takes for the wave to return to the sensor. + +## Setup +- **VCC**: Connect to the 5V pin on the Pico to power the HC-SR04. +- **Trig**: Connect to GPIO 17 on the Pico to start the ultrasonic sound pulses. +- **Echo**: Connect to GPIO 16 on the Pico; this pin sends a pulse when it detects the reflected signal, and the pulse length shows how long the signal took to return. +- **GND**: Connect to the ground pin on the Pico. +- **LED**: Connect the anode (long leg) of the LED to GPIO 13, as in the [External LED setup](../blinky/external-led.md).