news 2026/2/16 4:24:50

【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/2/9 0:44:35

IDM使用指南:2025年最便捷的解决方案

还在为IDM的授权提醒而困扰吗&#xff1f;想要轻松解决IDM使用问题&#xff0c;享受顺畅的下载体验&#xff1f;这份2025最新版IDM使用指南将为你提供最实用的解决方案&#xff0c;从原理到操作&#xff0c;一步步带你彻底告别使用困扰。 【免费下载链接】IDM-Activation-Scrip…

作者头像 李华
网站建设 2026/2/4 2:22:33

BongoCat终极指南:3步打造专属桌面萌宠伙伴

BongoCat终极指南&#xff1a;3步打造专属桌面萌宠伙伴 【免费下载链接】BongoCat 让呆萌可爱的 Bongo Cat 陪伴你的键盘敲击与鼠标操作&#xff0c;每一次输入都充满趣味与活力&#xff01; 项目地址: https://gitcode.com/gh_mirrors/bong/BongoCat 想要在枯燥的电脑工…

作者头像 李华
网站建设 2026/2/15 6:10:09

SeargeSDXL:AI图像生成的终极SDXL工作流解决方案

SeargeSDXL&#xff1a;AI图像生成的终极SDXL工作流解决方案 【免费下载链接】SeargeSDXL Custom nodes and workflows for SDXL in ComfyUI 项目地址: https://gitcode.com/gh_mirrors/se/SeargeSDXL 还在为复杂的AI图像生成流程而烦恼吗&#xff1f;想要在ComfyUI中轻…

作者头像 李华
网站建设 2026/2/7 10:46:57

MAA_Punish:5分钟上手《战双帕弥什》全自动游戏助手

MAA_Punish&#xff1a;5分钟上手《战双帕弥什》全自动游戏助手 【免费下载链接】MAA_Punish 战双帕弥什每日任务自动化 | Assistant For Punishing Gray Raven 项目地址: https://gitcode.com/gh_mirrors/ma/MAA_Punish 还在为重复刷日常任务而烦恼吗&#xff1f;MAA_P…

作者头像 李华
网站建设 2026/2/1 5:08:59

IINA:macOS视频播放器的智能进化之路

IINA&#xff1a;macOS视频播放器的智能进化之路 【免费下载链接】iina 项目地址: https://gitcode.com/gh_mirrors/iin/iina 在macOS平台上寻找一款既强大又优雅的视频播放器&#xff0c;曾是许多用户面临的共同挑战。IINA的出现&#xff0c;为这个问题提供了一个值得…

作者头像 李华
网站建设 2026/2/4 16:27:26

Charticulator数据可视化工具:高效构建专业图表的完整指南

Charticulator数据可视化工具&#xff1a;高效构建专业图表的完整指南 【免费下载链接】charticulator Interactive Layout-Aware Construction of Bespoke Charts 项目地址: https://gitcode.com/gh_mirrors/ch/charticulator 在数据驱动的时代&#xff0c;如何快速将复…

作者头像 李华