目录
1、所需材料
Arduino UNO开发板+180度舵机*2+公对母杜邦线六根+超声波测距模块+公对母杜邦线四根
2、使用原理
为了实现在使用两个不同的垃圾桶时候,垃圾盖子可以分别打开。
3、模块简介
3.1 Arduino UNO
Arduino Uno 是一款基于 微控制器 MTATmega328P的开发板。它有14个数字输入/输出引脚(这些引脚中有6个引脚可以作为PWM输出引脚),6个模拟输入引脚,16 MHz石英晶振,USB接口,电源接口,支持在线串行编程以及复位按键。用户只需要将开发板与电脑通过USB接口连接就可以使用。
3.2 超声波测距模块
超声波传感器模块是一种使用超声波测量与物体之间距离的仪器。它有两个探头。一种是发送超声波,另一种是接收超声波并将发送和接收的时间转换为距离,从而检测设备与障碍物之间的距离。在实践中,它非常方便和实用。
3.3 舵机(自由度为180度或360度)
舵机是一种位置(角度)伺服的驱动器。舵机只是一种通俗的叫法,其实质是一个伺服马达。在需要角度不断变化并可以保持的控制系统中应用广泛。
4、接口接线
Arduino UNO | 舵机1 |
5V | VCC(红线) |
GND | GND(棕线) |
pin9 | 橙线 |
Arduino UNO | 舵机2 |
5V | VCC(红线) |
GND | GND(棕线) |
pin11 | 橙线 |
Arduino UNO | 超声波测距模块 |
5V | VCC |
GND | GND |
pin10 | Trig |
pin8 | Echo |
5、代码示例
#define TrigPin 10 //输出
#define EchoPin 8 //输入
#include <Servo.h>
Servo myservo; // 创建舵机对象来控制舵机
Servo myservo1; // 创建舵机对象来控制舵机
int pos = 0; // 用来存储舵机位置的变量
int pos1 = 0;
float Value_cm;
void setup()
{
Serial.begin(9600);
pinMode(TrigPin, OUTPUT);
pinMode(EchoPin, INPUT);
myservo.attach(9); // 把连接在引脚9上的舵机赋予舵机对象
myservo1.attach(11); // 把连接在引脚9上的舵机赋予舵机对象
}
void loop()
{
digitalWrite(TrigPin, LOW);
delayMicroseconds(2);
digitalWrite(TrigPin, HIGH);
delayMicroseconds(10);
digitalWrite(TrigPin, LOW);
Value_cm = float( pulseIn(EchoPin, HIGH) * 17 )/1000; //将回波时间换算成cm
Serial.println("前方障碍距离当前位置:");
Serial.print(Value_cm);
Serial.println("cm");
if (Value_cm <= 20) {
for (pos = 0; pos <= 180; pos ++) { // 0°到180°
// in steps of 1 degree
myservo.write(pos); // 舵机角度写入
delay(10); // 等待转动到指定角度
}
}
if (Value_cm <=100 && Value_cm >=50) {
for (pos1 = 0; pos1 <= 180; pos1 ++) { // 0°到180°
// in steps of 1 degree
myservo1.write(pos1); // 舵机角度写入
delay(10); // 等待转动到指定角度
}
}
delay(3000);
}
6、总结
在两个垃圾桶上分别安装两个舵机,使用超声波测距模块,从侧边测量人到超声波模块的距离,以此为信号,控制两个舵机的启闭,进而实现不垃圾桶前站立,不同垃圾桶打开。