## 超声波检测
### 来自Maker Pi
# This code reads the distance using HC-SR04P (3-5V) ultrasonic sensor
# via default (trig-echo) mode and print out on serial.
# ---
# Connection: TRIG = GP3, ECHO = GP2
# ---
# Hardware:
# 1. Cytron Maker Pi RP2040 (www.cytron.io/p-MAKER-PI-RP2040)
# - Any RP2040 boards should work too.
# 2. HC-SR04P (3-5V) ultrasonic (www.cytron.io/p-SN-HC-SR04P)
# ---
from machine import Pin
import utime
trigger = Pin(3, Pin.OUT)
echo = Pin(2, Pin.IN)
distance = 0
def ultrasound():
global distance
trigger.low()
utime.sleep_us(2)
trigger.high()
utime.sleep_us(5)
trigger.low()
while echo.value() == 0:
signaloff = utime.ticks_us()
while echo.value() == 1:
signalon = utime.ticks_us()
timepassed = signalon - signaloff
distance = (timepassed * 0.0343) / 2
while True:
ultrasound()
print("Distance = ", distance, "cm")
utime.sleep(0.5)
Example2
# This code reads the distance using HC-SR04P (3-5V) ultrasonic sensor
# via I2C mode and print out the distance on serial. This ultrasound sensor
# uses RCWL-9600 IC and support default (trig-echo), I2C and UART modes.
# ---
# Modification: Solder a 10kOhm resistor across R4 pads at the bottom layer
# of the sensor to enable I2C mode.
# ---
# Connection: I2C1, SCL1 = GP3, SDA1 = GP2
# ---
# Hardware:
# 1. Cytron Maker Pi RP2040 (www.cytron.io/p-MAKER-PI-RP2040)
# - Any RP2040 boards should work too.
# 2. HC-SR04P (3-5V) ultrasonic (www.cytron.io/p-SN-HC-SR04P)
# ---
import machine
import utime
# init i2c1 at frequency 120kHz.
i2c = machine.I2C(1, scl=machine.Pin(3), sda=machine.Pin(2), freq=120000)
device_addr = 0x57
utime.sleep_ms(100)
while True:
# write 0x01 to start ultrasound sensor
i2c.writeto(device_addr, b'\x01')
utime.sleep_ms(300)
# read 3 bytes from ultrasound sensor
data = bytearray(3)
i2c.readfrom_into(device_addr, data)
# convert to distance in cm
distance = ((data[0]<<16)+(data[1]<<8)+data[2])/1000
print(distance)
utime.sleep_ms(200)