网站首页
minecraft
资源共享
个人随笔
科技圈
杂七杂八
豆丁wiki
您的位置:首页 > 笔记 > Arduino UNO超声波测距仪实验
Arduino UNO超声波测距仪实验
2017-8-29    3555    0

arduino-UNO.png

闲置了好久的一些散件,觉得还是用来干点什么比较好,so,就做了这么一个超声波测距的东西。

硬件:Arduino UNO一块

          HC-SR04超声波测距模块一个

          IIC1602显示模块一个

          UNO固定板一块

连接:

超声波:VCC — 5v

           Trig — D5

            Echo — D4

            GND — GND

IIC1602:VCC — VCC

             GND — GND

             SDA — SDA

             SCL — SCL

首先检测自己的1602地址,打开串口,设置波特率9600,写入以下代码:

#include <Wire.h>
void setup()
{
Wire.begin();
Serial.begin(9600);
Serial.println("\nI2C Scanner");
}
void loop()
{
byte error, address;
int nDevices;
Serial.println("Scanning...");
nDevices = 0;
for(address = 1; address < 127; address++ )
{
// The i2c_scanner uses the return value of
// the Write.endTransmisstion to see if
// a device did acknowledge to the address.
Wire.beginTransmission(address);
error = Wire.endTransmission();
if (error == 0)
{
Serial.print("I2C device found at address 0x");
if (address<16)
Serial.print("0");
Serial.print(address,HEX);
Serial.println(" !");
nDevices++;
}
else if (error==4)
{
Serial.print("Unknow error at address 0x");
if (address<16)
Serial.print("0");
Serial.println(address,HEX);
}
}
if (nDevices == 0)
Serial.println("No I2C devices found\n");
else
Serial.println("done\n");
delay(5000); // wait 5 seconds for next scan
}
之后就能看到地址了,我的是0x3F。


然后写入以下代码:

#include <LiquidCrystal_I2C.h>

#include <Wire.h>

LiquidCrystal_I2C lcd(0x3F,16,2);//设置I2C驱动板的地址,楼主的是0x3F,请根据上一步获得的写入,不然不会再LCD上显示信息
int inputPin=4; // 定义超声波信号接收接口
int outputPin=5; // 定义超声波信号发出接口
int ledpin=13;
void setup()
{
Serial.begin(9600);
pinMode(ledpin,OUTPUT);
pinMode(inputPin, INPUT);
pinMode(outputPin, OUTPUT);
}
void loop()

{
lcd.init();
digitalWrite(outputPin, LOW); // 使发出发出超声波信号接口低电平2ms
delayMicroseconds(2);
digitalWrite(outputPin, HIGH); // 使发出发出超声波信号接口高电平10ms,这里是至少10μs
delayMicroseconds(10);
digitalWrite(outputPin, LOW); // 保持发出超声波信号接口低电平
float distance = pulseIn(inputPin, HIGH); // 读出脉冲时间
distance= 1.3+distance/58; // 将脉冲时间转化为距离(加上底座高度单位:厘米)
Serial.print(distance);
Serial.println("cm");//向串口监视器中输出距离信息
lcd.backlight();
     lcd.setCursor(0,0);//光标从这里开始
     lcd.print("Distance is");
     lcd.setCursor(0,1);//换行后显示距离
     lcd.print(distance);
     lcd.println("cm");//在LCD上输出距离信息
delay(100);//刷新时间100ms,也就是0.1s

}
到这就可以了。


注意:1.第一步获取的地址如果不同,要修改第二部分的代码里面相应的部分。

2.1602的对比度在板子后面有蓝色的旋钮可以调节。

3.IDE版本超过1.6的话,IIC的库可能不正常,导致1602只能显示第一个字符,这里提供下我用的库,我的IDE版本是1.8.3。下载:LiquidCrystal_I2C1602V1.rar


最后成品图:

QQ截图20170829124057.png

参考文章:

http://www.arduino.cn/thread-21927-1-1.html



上一篇: Arduino pro mini使用8*8点阵实验
下一篇: owncloud补充—SSL证书
发表评论:
您的网名:
个人主页:
编辑内容: