超声波测距传感器

本文介绍了Grove-UltrasonicRanger非接触式距离探测模块的工作原理及应用实例。该模块适用于中短距离探测,工作频率为42KHz。文中详细展示了如何利用Arduino和UltrasonicRanger库实现距离测量,并将结果显示在Grove-SerialLCD上。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

先介绍下超声波传感器是怎么用的????然后再用arduino上用超声波传感器





只用了四个脚,其他的都没有用上。

下面就是实践了:

Grove - Ultrasonic Ranger 距离探测传感器

[English]

Ultrasonic Ranger.jpg

Contents

 [hide

产品简介

Grove - Ultrasonic Sensor是一个非接触式的距离探测模块。他的工作频率在42KHz,适合用于中距离或近距离的探测。 
Model: SEN10737P 

规格参数

工作电压: 5.0VDC 
工作电流: 15mA 
超声频率: 42kHz 
测量范围: 3-400cm 
误差: 1cm 
输出制式: PWM 

应用示例

这里我们演示如何使用Grove - Ultrasonic Ranger来获得距离信息,并打印到Grove - Serial LCD上。

UltrasonicRanger.png

如上图所示,将Serial LCD连接到D4/D5接口,Ultrasonic Ranger连接到D7口。然后你需要从github上下载我们提供的Ultrasonic Ranger库文件和用到的1Serial LCD库文件, 对于非Arduino自带的库文件,你需要将下载的库文件安装到Arduino 的Library中,具体安装步骤请参考wiki首页的"如何安装库文件"课题。 安装完成后,通过路径:File->Examples->UltrasonicRanger->examples->UltraDisOnSeeedSerialLcd打开代码并上传。 

/***************************************************************************/        
// Function: Measure the distance to obstacles in front and display the
//                         result on seeedstudio serialLcd. Make sure you installed the
//                         serialLCD, SofewareSerial and Ultrasonic library.        
//        Hardware: Grove - Ultrasonic Ranger, Grove - Serial LCD
//        Arduino IDE: Arduino-1.0
//        Author:         LG                
//        Date:          Jan 17,2013
//        Version: v1.0 modified by FrankieChu
//        by www.seeedstudio.com

/*****************************************************************************/


#include <SoftwareSerial.h>
#include <SerialLCD.h>
#include "Ultrasonic.h"

SerialLCD slcd(4,15);
Ultrasonic ultrasonic(7);
void setup()
{
   slcd.begin();
}
void loop()
{
        long RangeInCentimeters;
        RangeInCentimeters = ultrasonic.MeasureInCentimeters();
        delay(150);
        slcd.clear();
        slcd.setCursor(0,0);
        slcd.print("The distance:");
        slcd.setCursor(0,1) ;
        slcd.print(RangeInCentimeters,DEC);
        slcd.setCursor(5,1) ;
        slcd.print("cm");
}

在参考资料部分有这个demo的视频教程,供你参考。

参考资料

以下是示例arduino程序,可供参考: #include <Wire.h> #include <Adafruit_MotorShield.h> #include <Ultrasonic.h> #include <QTRSensors.h> // 配置传感器引脚 #define QTR_NUM_SENSORS 2 #define QTR_SENSOR_PIN_LEFT A0 #define QTR_SENSOR_PIN_RIGHT A1 #define ULTRASONIC_TRIGGER_PIN 2 #define ULTRASONIC_ECHO_PIN 3 #define LIGHT_SENSOR_PIN A2 // 定义电机驱动模块 Adafruit_MotorShield AFMS = Adafruit_MotorShield(); Adafruit_DCMotor *motor_left_1 = AFMS.getMotor(1); Adafruit_DCMotor *motor_left_2 = AFMS.getMotor(2); Adafruit_DCMotor *motor_right_1 = AFMS.getMotor(3); Adafruit_DCMotor *motor_right_2 = AFMS.getMotor(4); // 定义传感器 Ultrasonic ultrasonic_sensor(ULTRASONIC_TRIGGER_PIN, ULTRASONIC_ECHO_PIN); QTRSensors qtr_sensors((unsigned char[]) {QTR_SENSOR_PIN_LEFT, QTR_SENSOR_PIN_RIGHT}, QTR_NUM_SENSORS); // 光敏传感器 int light_sensor_value; // 车速(0-255) const int MOTOR_SPEED = 200; void setup() { Serial.begin(9600); AFMS.begin(); motor_left_1->setSpeed(MOTOR_SPEED); motor_left_2->setSpeed(MOTOR_SPEED); motor_right_1->setSpeed(MOTOR_SPEED); motor_right_2->setSpeed(MOTOR_SPEED); } void loop() { // 读取传感器数据 unsigned int sensor_values[QTR_NUM_SENSORS]; qtr_sensors.read(sensor_values); int ultrasonic_distance = ultrasonic_sensor.MeasureInCentimeters(); light_sensor_value = analogRead(LIGHT_SENSOR_PIN); // 判断前方是否有障碍物 if (ultrasonic_distance <= 10) { // 超声波传感器所能探测到的最短距离为2cm,为了避免误差可以设定为10cm Serial.println("Obstacle detected, avoiding..."); motor_left_1->run(BACKWARD); motor_left_2->run(BACKWARD); motor_right_1->run(BACKWARD); motor_right_2->run(BACKWARD); delay(1000); motor_left_1->run(BACKWARD); motor_left_2->run(FORWARD); motor_right_1->run(FORWARD); motor_right_2->run(BACKWARD); delay(1000); motor_left_1->run(FORWARD); motor_left_2->run(FORWARD); motor_right_1->run(FORWARD); motor_right_2->run(FORWARD); } else { // 如果没有障碍物,则遵循黑线轨迹行驶 int left_speed = 0; int right_speed = 0; // 根据传感器读数确定左右轮子的车速 if (sensor_values[0] > 500 && sensor_values[1] > 500) { // 黑线轨迹已经找到,电机前进 left_speed = MOTOR_SPEED; right_speed = MOTOR_SPEED; } else if (sensor_values[0] > sensor_values[1]) { // 车向左偏,右轮加速,左轮减速 left_speed = MOTOR_SPEED * 0.7; right_speed = MOTOR_SPEED * 1.3; } else { // 车向右偏,左轮加速,右轮减速 left_speed = MOTOR_SPEED * 1.3; right_speed = MOTOR_SPEED * 0.7; } // 控制电机速度 if (left_speed > 0) { motor_left_1->run(FORWARD); motor_left_2->run(FORWARD); motor_left_1->setSpeed(left_speed); motor_left_2->setSpeed(left_speed); } else { motor_left_1->run(BACKWARD); motor_left_2->run(BACKWARD); motor_left_1->setSpeed(-left_speed); motor_left_2->setSpeed(-left_speed); } if (right_speed > 0) { motor_right_1->run(FORWARD); motor_right_2->run(FORWARD); motor_right_1->setSpeed(right_speed); motor_right_2->setSpeed(right_speed); } else { motor_right_1->run(BACKWARD); motor_right_2->run(BACKWARD); motor_right_1->setSpeed(-right_speed); motor_right_2->setSpeed(-right_speed); } } // 光敏传感器控制LED灯 if (light_sensor_value < 100) { digitalWrite(LED_PIN, HIGH); } else { digitalWrite(LED_PIN, LOW); } delay(50); // 等待50毫秒再重新读取传感器数据 }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值