利用arduino超声波传感器语音播报模块LED灯模块和舵机模块。按如下要求设计:当检测到人来的时候机器人睁眼启动LED灯亮并且播报一次欢迎光临同时舵机转动人走时所有功能停止。给出完整代码以及各部分具体连接
以下是基于Arduino的机器人设计方案,需要准备以下材料:
- Arduino UNO板
- 超声波传感器
- 语音播报模块
- LED灯模块
- 舵机模块
- 杜邦线若干
硬件连接
超声波传感器连接:
- VCC接Arduino的5V引脚
- GND接Arduino的GND引脚
- Trig接Arduino的D2引脚
- Echo接Arduino的D3引脚
语音播报模块连接:
- VCC接Arduino的5V引脚
- GND接Arduino的GND引脚
- TX接Arduino的D4引脚
LED灯模块连接:
- 正极接Arduino的D5引脚
- 负极接Arduino的GND引脚
舵机模块连接:
- VCC接Arduino的5V引脚
- GND接Arduino的GND引脚
- Signal接Arduino的D6引脚
代码实现
#include <SoftwareSerial.h>
SoftwareSerial mySerial(10, 11); // RX, TX
const int trigPin = 2;
const int echoPin = 3;
const int ledPin = 5;
const int servoPin = 6;
long duration;
int distance;
void setup() {
pinMode(trigPin, OUTPUT);
pinMode(echoPin, INPUT);
pinMode(ledPin, OUTPUT);
pinMode(servoPin, OUTPUT);
mySerial.begin(9600);
}
void loop() {
digitalWrite(trigPin, LOW);
delayMicroseconds(2);
digitalWrite(trigPin, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin, LOW);
duration = pulseIn(echoPin, HIGH);
distance = duration * 0.034 / 2;
if (distance < 100) { // 当距离小于100cm时表示有人靠近
digitalWrite(ledPin, HIGH); // 点亮LED灯
mySerial.println("欢迎光临"); // 播报欢迎词
for (int angle = 0; angle <= 180; angle++) { // 舵机转动
digitalWrite(servoPin, HIGH);
delayMicroseconds(500 + angle * 5);
digitalWrite(servoPin, LOW);
delayMicroseconds(19500 - angle * 5);
}
} else {
digitalWrite(ledPin, LOW); // 关闭LED灯
}
}
代码解析
SoftwareSerial mySerial(10, 11);:定义一个软串口对象,用于和语音播报模块通信。
const int trigPin = 2;:定义超声波传感器的Trig引脚为D2。
const int echoPin = 3;:定义超声波传感器的Echo引脚为D3。
const int ledPin = 5;:定义LED灯的引脚为D5。
const int servoPin = 6;:定义舵机的引脚为D6。
void setup():初始化函数,在这里设置各个引脚的模式,并初始化软串口。
void loop():循环函数,不断检测超声波传感器的距离,并根据距离来控制LED灯、语音播报模块和舵机的运行。
digitalWrite(trigPin, LOW);:将Trig引脚设置为低电平。
delayMicroseconds(2);:等待2微秒。
digitalWrite(trigPin, HIGH);:将Trig引脚设置为高电平。
delayMicroseconds(10);:等待10微秒。
digitalWrite(trigPin, LOW);:将Trig引脚设置为低电平。
duration = pulseIn(echoPin, HIGH);:读取Echo引脚的高电平持续时间,单位为微秒。
distance = duration * 0.034 / 2;:根据持续时间计算出距离,单位为厘米。
if (distance < 100) {:如果检测到距离小于100cm,则表示有人靠近。
digitalWrite(ledPin, HIGH);:点亮LED灯。
mySerial.println("欢迎光临");:通过软串口向语音播报模块发送“欢迎光临”的指令,让其播报欢迎词。
for (int angle = 0; angle <= 180; angle++) {:循环180次,让舵机旋转角度从0到180度。
digitalWrite(servoPin, HIGH);:将舵机引脚设置为高电平,让舵机转动。
delayMicroseconds(500 + angle * 5);:等待一段时间,让舵机转动到指定角度。
digitalWrite(servoPin, LOW);:将舵机引脚设置为低电平,让舵机停止转动。
delayMicroseconds(19500 - angle * 5);:等待一段时间,让舵机停止转动。
digitalWrite(ledPin, LOW);:将LED灯引脚设置为低电平,关闭LED灯
原文地址: https://www.cveoy.top/t/topic/fbmC 著作权归作者所有。请勿转载和采集!