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);
}
}
实物
![在这里插入图片描述](https://img-blog.csdnimg.cn/20210521144805468.jpg?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L20wXzQ2MjY5Mjg2,size_16,color_FFFFFF,t_70#pic_center)
补充 舵机和超声波 调试
舵机
接线
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()
{
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);
}
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得到距离?
distance_cm=(us)/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可能更精确
![在这里插入图片描述](https://img-blog.csdnimg.cn/20210521150158606.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L20wXzQ2MjY5Mjg2,size_16,color_FFFFFF,t_70#pic_center)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)