news 2026/4/23 13:07:07

【ESP32-S3】对接HC SR04P+sg90 的180度标准舵机进行避障运动的操作

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
【ESP32-S3】对接HC SR04P+sg90 的180度标准舵机进行避障运动的操作

【ESP32-S3】对接HC SR04P+sg90 的180度标准舵机进行避障运动的操作

    • 硬件连接说明
      • HC-SR04P 连接:
      • SG90 舵机连接:
      • 电机驱动连接(以L298N为例):
    • 注意事项

以下是一个ESP32-S3连接HC-SR04P超声波传感器和SG90舵机实现避障运动的完整代码:

#include<ESP32Servo.h>// 引脚定义constintTRIG_PIN=5;// HC-SR04P Trig引脚constintECHO_PIN=6;// HC-SR04P Echo引脚constintSERVO_PIN=7;// SG90舵机信号引脚// 避障参数constintOBSTACLE_DISTANCE=20;// 障碍物距离阈值(cm)constintMAX_DISTANCE=200;// 最大测量距离constintSERVO_CENTER=90;// 舵机中间位置constintSERVO_LEFT=150;// 舵机左转角度constintSERVO_RIGHT=30;// 舵机右转角度Servo myServo;// 舵机对象// 运动控制引脚定义(根据实际连接修改)constintMOTOR_A_IN1=8;constintMOTOR_A_IN2=9;constintMOTOR_B_IN3=10;constintMOTOR_B_IN4=11;voidsetup(){Serial.begin(115200);// 初始化超声波传感器pinMode(TRIG_PIN,OUTPUT);pinMode(ECHO_PIN,INPUT);// 初始化舵机myServo.attach(SERVO_PIN);myServo.write(SERVO_CENTER);// 舵机回中// 初始化电机驱动引脚pinMode(MOTOR_A_IN1,OUTPUT);pinMode(MOTOR_A_IN2,OUTPUT);pinMode(MOTOR_B_IN3,OUTPUT);pinMode(MOTOR_B_IN4,OUTPUT);delay(1000);Serial.println("系统初始化完成");}// 超声波测距函数floatgetDistance(){digitalWrite(TRIG_PIN,LOW);delayMicroseconds(2);digitalWrite(TRIG_PIN,HIGH);delayMicroseconds(10);digitalWrite(TRIG_PIN,LOW);longduration=pulseIn(ECHO_PIN,HIGH,30000);// 最大等待30msfloatdistance=duration*0.034/2;if(distance>MAX_DISTANCE||distance<=0){returnMAX_DISTANCE;}returndistance;}// 舵机扫描并获取指定方向距离floatscanDirection(intangle){myServo.write(angle);delay(300);// 等待舵机稳定floatdist=getDistance();delay(50);// 等待测量稳定returndist;}// 运动控制函数(需要根据实际硬件实现)voidforward(){Serial.println("前进");// 示例:直流电机控制digitalWrite(MOTOR_A_IN1,HIGH);digitalWrite(MOTOR_A_IN2,LOW);digitalWrite(MOTOR_B_IN3,HIGH);digitalWrite(MOTOR_B_IN4,LOW);}voidbackward(){Serial.println("后退");digitalWrite(MOTOR_A_IN1,LOW);digitalWrite(MOTOR_A_IN2,HIGH);digitalWrite(MOTOR_B_IN3,LOW);digitalWrite(MOTOR_B_IN4,HIGH);delay(500);// 后退固定时间stopMoving();}voidleft(){Serial.println("左转");// 差速左转digitalWrite(MOTOR_A_IN1,LOW);digitalWrite(MOTOR_A_IN2,HIGH);// 左轮后退digitalWrite(MOTOR_B_IN3,HIGH);// 右轮前进digitalWrite(MOTOR_B_IN4,LOW);delay(300);// 转向时间stopMoving();}voidright(){Serial.println("右转");// 差速右转digitalWrite(MOTOR_A_IN1,HIGH);// 左轮前进digitalWrite(MOTOR_A_IN2,LOW);digitalWrite(MOTOR_B_IN3,LOW);// 右轮后退digitalWrite(MOTOR_B_IN4,HIGH);delay(300);// 转向时间stopMoving();}voidstopMoving(){Serial.println("停止");digitalWrite(MOTOR_A_IN1,LOW);digitalWrite(MOTOR_A_IN2,LOW);digitalWrite(MOTOR_B_IN3,LOW);digitalWrite(MOTOR_B_IN4,LOW);}// 避障决策函数voidobstacleAvoidance(){// 1. 先测量正前方距离floatfrontDist=scanDirection(SERVO_CENTER);Serial.print("前方距离: ");Serial.print(frontDist);Serial.println(" cm");// 2. 如果前方无障碍if(frontDist>OBSTACLE_DISTANCE){myServo.write(SERVO_CENTER);// 舵机回中forward();delay(100);// 前进一段时间stopMoving();}// 3. 如果前方有障碍else{Serial.println("检测到障碍物,开始扫描...");stopMoving();backward();// 先后退一点// 扫描左侧floatleftDist=scanDirection(SERVO_LEFT);Serial.print("左侧距离: ");Serial.print(leftDist);Serial.println(" cm");delay(300);// 扫描右侧floatrightDist=scanDirection(SERVO_RIGHT);Serial.print("右侧距离: ");Serial.print(rightDist);Serial.println(" cm");delay(300);// 舵机回中myServo.write(SERVO_CENTER);// 决策逻辑if(leftDist>rightDist&&leftDist>OBSTACLE_DISTANCE){Serial.println("左侧空间更大,向左转");left();}elseif(rightDist>leftDist&&rightDist>OBSTACLE_DISTANCE){Serial.println("右侧空间更大,向右转");right();}else{Serial.println("两侧都有障碍,后退并旋转");backward();delay(300);// 随机选择方向旋转if(random(2)==0){left();}else{right();}}}}voidloop(){obstacleAvoidance();delay(100);// 循环延迟}// 可选:手动控制测试函数voidtestAllMovements(){Serial.println("测试所有运动...");forward();delay(1000);stopMoving();delay(500);backward();delay(1000);stopMoving();delay(500);left();delay(500);right();delay(500);Serial.println("测试完成");}

硬件连接说明

HC-SR04P 连接:

  • VCC → ESP32 5V
  • Trig → GPIO 5
  • Echo → GPIO 6
  • GND → GND

SG90 舵机连接:

  • 橙色信号线 → GPIO 7
  • 红色电源线 → 5V
  • 棕色地线 → GND

电机驱动连接(以L298N为例):

  • IN1 → GPIO 8
  • IN2 → GPIO 9
  • IN3 → GPIO 10
  • IN4 → GPIO 11
  • 电机电源接合适电源

注意事项

  1. 电源管理

    • 舵机和电机需要较大电流,建议使用外部电源供电
    • ESP32与电机驱动共地
  2. 参数调整

    • 根据实际环境调整OBSTACLE_DISTANCE阈值
    • 调整舵机角度范围,避免机械过载
    • 调整转向延迟时间以获得合适的转弯角度
  3. 安装位置

    • 超声波传感器安装在舵机上,随舵机转动
    • 确保传感器前方无遮挡
  4. PWM引脚注意
    ESP32-S3的多数GPIO都支持PWM,但某些引脚可能有使用限制

实现了基本的避障逻辑:前进时检测障碍,遇到障碍后扫描左右两侧,选择更空旷的方向转向。你可以根据实际需求调整避障策略和运动参数。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/20 18:06:27

PHP轻量级聊天室源码

源码介绍&#xff1a; 最新版本&#xff1a;v2.1.2 (2024.08更新) 运行环境&#xff1a;PHP5.6&#xff08;无需MySQL&#xff09; 核心特性&#xff1a;手机电脑自适应、TXT数据存储、50条历史消息 适用场景&#xff1a;小型社区/企业内网/教育培训即时通讯 一、核心功能…

作者头像 李华
网站建设 2026/4/22 8:11:58

团子烘焙销售服务系统-计算机毕业设计源码+LW文档

摘要 由于移动应用技术的持续性的快速发展&#xff0c;现实生活中人们大多数都是通过移动手机、电脑等智能设备来完成生活中的事务。因此&#xff0c;许多的人工传统行业也开始与互联网结合&#xff0c;不再一味的依靠人工手动&#xff0c;努力打造半自动数字化甚至是全自动数字…

作者头像 李华
网站建设 2026/4/23 15:35:58

Ventoy主题美化:打造个性化启动体验的完整指南

Ventoy主题美化&#xff1a;打造个性化启动体验的完整指南 【免费下载链接】Ventoy 一种新的可启动USB解决方案。 项目地址: https://gitcode.com/GitHub_Trending/ve/Ventoy 在数字化办公和系统维护中&#xff0c;单调乏味的启动界面往往成为用户体验的短板。Ventoy作为…

作者头像 李华
网站建设 2026/4/22 13:55:44

Open-AutoGLM插件使用全攻略:从入门到精通的7个关键技巧

第一章&#xff1a;Open-AutoGLM插件的核心功能解析Open-AutoGLM是一款专为自动化大语言模型调用与任务编排设计的开源插件&#xff0c;旨在提升开发者在复杂AI工作流中的效率。其核心优势在于无缝集成多种LLM服务、支持动态提示工程以及提供可扩展的任务调度机制。多模型统一接…

作者头像 李华
网站建设 2026/4/22 19:24:02

SVG图标转字体文件完整指南:告别图标管理烦恼!

SVG图标转字体文件完整指南&#xff1a;告别图标管理烦恼&#xff01; 【免费下载链接】icons Official open source SVG icon library for Bootstrap. 项目地址: https://gitcode.com/gh_mirrors/ic/icons 还在为项目中杂乱的SVG图标管理而头疼吗&#xff1f;每次添加新…

作者头像 李华
网站建设 2026/4/22 19:24:26

Revit插件开发终极效率革命:告别重启烦恼的调试新范式

你是否曾因一个小小的代码改动而被迫重启整个Revit项目&#xff1f;是否在调试循环中浪费了宝贵的时间&#xff1f;Revit插件开发中的"重启困扰"正是阻碍效率提升的隐形障碍。今天&#xff0c;让我们一同探索如何通过Add-in Manager这个强大工具&#xff0c;彻底告别…

作者头像 李华