Arduino智能垃圾桶
Posted 橙子果果
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Arduino智能垃圾桶相关的知识,希望对你有一定的参考价值。
这个小项目是基于Arduino设计的一款感应式智能开盖垃圾桶这个项目只要一点C语言的基础,懂得一点点物联网知识就可以,是一个刚入行物联网值得练手的小项目。
硬件准备
- Arduino UNO
- HC-SR04超声波模块
- SG90舵机
- 杜邦线若干
工作原理
当手靠近垃圾桶时,超声波传感器测出两者之间的距离,距离小于设定的阈值,舵机转动,垃圾桶盖打开。
接线方式
Arduino | 5V | GND | 引脚5 | 引脚8 | 引脚2 |
---|---|---|---|---|---|
舵机 | VCC(红) | GND(黑/褐) | 信号线(白/黄) | ||
超声波传感器 | VCC | GND | Trig | Echo |
代码
#include<Servo.h>
#define Trig 8
#define Echo 2
#define DuoPIN 5
Servo myDuoJi;
long gettime()
{
digitalWrite(Trig,HIGH);
delayMicroseconds(10);
digitalWrite(Trig,LOW);
return pulseIn(Echo,HIGH);
}
void initChaoShengBo()
{
pinMode(Echo,INPUT);
pinMode(Trig,OUTPUT);
}
void setup() {
initChaoShengBo();
myDuoJi.attach(DuoPIN);
Serial.begin(115200);
}
void loop() {
//获取距离
long dis;
dis = gettime()/58;
if(dis <10){
myDuoJi.write(90);
delay(1500);
}
else{
myDuoJi.write(180);
}
}
实物
补充 舵机和超声波 调试
舵机
接线
Arduino | 5V | GND | 引脚5 |
---|---|---|---|
舵机 | VCC(红) | GND(黑/褐) | 信号线(白/黄) |
舵机代码调试
#include<Servo.h>
#define DuoPIN 5
Servo myDuoJi;
void setup() {
myDuoJi.attach(DuoPIN);
Serial.begin(115200);
}
void loop() {
int cmd;
if(Serial.available()>0){
cmd = Serial.read();
if(cmd == 1){
myDuoJi.write(90);
}
if(cmd == 0){
myDuoJi.write(180);
}
}
}
通过串口工具调试舵机的转动角度
输入 0 或者输入 1 来控制舵机的转动(调整合适的角度)
超声波传感器
接线方式
Arduino | 5V | GND | 引脚8 | 引脚2 |
---|---|---|---|---|
超声波传感器 | VCC | GND | Trig | Echo |
#define Trig 8
#define Echo 2
#define BEEP 5
long gettime()
{
// 产生一个10us的高脉冲去触发TrigPin
digitalWrite(Trig,HIGH);
delayMicroseconds(10);
digitalWrite(Trig,LOW);
return pulseIn(Echo,HIGH);
}
void initChaoShengBo()
{
pinMode(Echo,INPUT);
pinMode(Trig,OUTPUT);
}
void setup() {
initChaoShengBo();
pinMode(BEEP,OUTPUT);
digitalWrite(BEEP,HIGH);
Serial.begin(115200);//波特率设置为115200
}
void loop() {
//获取距离
long dis;
dis = gettime()/58;// 检测脉冲宽度,并计算出距离
Serial.print(dis);
Serial.println("cm");
if(dis<10){
digitalWrite(BEEP,LOW);
}
else{
digitalWrite(BEEP,HIGH);
}
delay(500);
}
通过串口工具的可以接收到超声波测的距离
为什么接收到的脉冲信号要除以58得到距离?
声音在干燥、摄氏 20度的空气中的传播速度大约为343米/秒,合34,300厘米/秒。
或者,我们作一下单位换算,34,300除以1,000,000厘米/微秒。
即为:0.0343厘米/微秒
再换一个角度,1/(0.0343 厘米/微秒)
即:29.15 微秒/厘米。
这就意味着,每291.5微秒表示10CM的距离。1厘米就是29.15微秒。
但是发送后到接收到回波,声音走过的是2倍的距离呀。
所以实际距离就是1厘米,对应58.3微秒。
实际上整个测距过程是测的发出声波到收到回波的时间,你的程序里的第一个distance实际上是时间us。
所以换成距离cm,要除以58。当然除以58.3可能更精确
以上是关于Arduino智能垃圾桶的主要内容,如果未能解决你的问题,请参考以下文章