基于Arduino的测距仪和温湿度监视

引言

本文介绍了如何基于Arduino制作超声波测距仪和温湿度监视,使用的零部件如下:

  • Arduino Nano
  • SR-04超声波测距模块
  • I2C 0.91 OLED
  • DH11温湿度传感器

使用的Arduino库包括Adafruit_SSD1306,Adafruit-GFX-Library,DHTlibAdafruit_SSD1306Adafruit-GFX-Library用于OLED屏控制,DHTlib用于DH11温湿度传感器。

零部件简介

SR-04超声波测距模块

SR-04超声波测距模块测距精确,还很便宜,在各种DIY中广泛应用。模块的测距原理比较简单,首先在TRIG控制口发一个10US以上的高电平,然后在ECHO接收口等待高电平输出,一有输出就可以开定时器计时,当此口变为低电平时就可以读定时器的值,该值即为声音来回的时间,根据下面的公式就可计算出距离。

测试距离=(声音来回时间乘以声速)/2

声音在各介质中传播速度不同,正常使用SR-04超声波测距模块均在空气中,所以该处声速取 340 m/s 。

注意SR-04超声波测距模块最大测距为4.5米,精度0.2厘米。

DH11温湿度传感器

DHT11温湿度传感器包括一个电阻式感湿元件和一个NTC测温元件,可以检测周围环境的湿度和温度。如果想要更高的测量范围和测量精度,可以选择DHT22温湿度传感器。

  • DHT11参数
湿度测量范围 湿度测量误差 温度测量范围 温度测量误差
20%-80% ±5% 0度-50度 ±2度
  • DHT22参数
湿度测量范围 湿度测量误差 温度测量范围 温度测量误差
0%-100% ±2% -40度-125度 ±0.5度

超声波测距

接线

基于Arduino的测距仪和温湿度监视_第1张图片

代码

#include   
#include   

Adafruit_SSD1306 display(128, 64);  

int trigPin = 6;   
int echoPin = 7; 
long aver[3];
long duration, distance;

void setup()  
{                
  delay(100);
  display.begin(SSD1306_SWITCHCAPVCC, 0x3C);  
  display.clearDisplay(); 
  display.setTextColor(WHITE);  
  display.setRotation(0); 
  display.setTextWrap(false);  
  display.dim(0); 
  
  pinMode(trigPin, OUTPUT);  
  pinMode(echoPin, INPUT);
}  

void loop()  
{  
  for (int i=0;i<=2;i++) {   
    measure();               
    aver[i]=distance;            
    delay(50);           
  }
  distance=(aver[0]+aver[1]+aver[2])/3; 
    
  display.clearDisplay();  
  display.setTextSize(2);  //设置字体大小
  
  display.setCursor(0, 10); 
  display.println("distance:");  
  display.setCursor(0, 30); 
  display.println(distance); 
  display.setCursor(40, 30); 
  display.println("cm");
    
  display.display(); 
  delay(300); 
} 

void measure() {
  digitalWrite(trigPin, LOW);
  delayMicroseconds(5);
  digitalWrite(trigPin, HIGH);
  delayMicroseconds(15);
  digitalWrite(trigPin, LOW); 
  pinMode(echoPin, INPUT);
  duration = pulseIn(echoPin, HIGH); 
  distance = duration *0.034 / 2;  //测距过程
}

演示

基于Arduino的测距仪和温湿度监视_第2张图片


温湿度监视

接线

基于Arduino的测距仪和温湿度监视_第3张图片

代码

#include   
#include   

#include 
#define dataPin 5
dht DHT;

int readData;
float t,h;

Adafruit_SSD1306 display(128, 64);  

void setup()  
{                
  delay(100);
  display.begin(SSD1306_SWITCHCAPVCC, 0x3C);  
  display.clearDisplay(); 
  display.setTextColor(WHITE);  
  display.setRotation(0); 
  display.setTextWrap(false);  
  display.dim(0); 
}  

void loop()  
{
  data();
    
  display.clearDisplay();  
  display.setTextSize(2); 
  
  display.setCursor(0, 10); 
  display.println("Temp:");  
  display.setCursor(0, 40); 
  display.println("Humi:");

  display.setCursor(60, 10);  
  display.println(t);  
  display.setCursor(60, 40);  
  display.println(h);  
 
  display.display();  
}  

void data(){
  readData = DHT.read11(dataPin);
  t = DHT.temperature;
  h = DHT.humidity;
  delay(2000);  //读取DH11数据
}

演示

基于Arduino的测距仪和温湿度监视_第4张图片

你可能感兴趣的:(基于Arduino的测距仪和温湿度监视)