|
|
学了Arduino那么久,也没怎么做东西,看了大家做的超声波测距仪与温度计,想着把这两个合起来,做了个带温度补偿的超声波测距仪,还请大家多多指教。
我的想法是从串口发送测距指令,通过SR-04测距,LM35测温,用温度算出音速,再根据音速算出距离,然后用1602显示出距离与温度,但是做出来后测出的距离不太准,有时差10多MM去,不知道是什么原因,还请大家指点指点,先谢谢了!
成品图:
源代码:
/*
本程序用HC-SR04超声波测距模块进行测距,然后从1604 LCD显示屏上显示出来
1604接线说明:
RS 接 12
RW 接 11
E 接 10
D4 接 5
D5 接 4
D6 接 3
D7 接 2
A 接 9
VSS、K、V0(接1K电阻) 接 地
VDD 接 电源
SR04接线说明:
VCC 接 电源
GND 接 地
TRIG 接 7
ECHO 接 6
模拟口4为LM35的信号输入端口
如果从串口接收到1,则进行测距并在LCD屏显示距离。
*/
#include <LiquidCrystal.h>
unsigned int EchoPin=6; //将Arduino 的 Pin6 连接至 HC-SR04 的Echo/RX
unsigned int TrigPin=7; //将Arduino 的 Pin7 连接至 HC-SR04 的Trig/TX
unsigned long Time_Echo_us=0; //用于记录传感器返回的脉冲宽度
unsigned long Len_mm=0; //用于存储距离值
int potPin=4; //设置模拟口4为LM35的信号输入端口
float temperature=0; //设置temperature为浮点变量
float val=0; //设置val为长整数变量
LiquidCrystal lcd(12,11,10,5,4,3,2);
int ak=9;
int col=0;
int row=0;
char brightness;
String comdata="";
void setup()
{
Serial.begin(9600);
pinMode(EchoPin,INPUT); //设置EchoPin 为输入模式
pinMode(TrigPin,OUTPUT); //设置TrigPin 为输出模式
pinMode(ak,OUTPUT);
lcd.begin(16,2);
digitalWrite(ak,HIGH);
lcd.cursor();
lcd.blink();
}
void loop()
{
if(Serial.available()>0)
{
comdata="";
brightness=Serial.read();
comdata+=brightness;
if(comdata=="1")
{
val=analogRead(potPin); //val变量为从LM35信号口读取到的数值
temperature = (val*5*100)/1023; //把读取到的val转换为温度数值
//通过Trig/Pin 发送脉冲,触发 HC-SR04 测距
digitalWrite(TrigPin,LOW);
delayMicroseconds(2);
digitalWrite(TrigPin,HIGH); //开始通过 Trig/Pin 发送脉冲
delayMicroseconds(50); //设置脉冲宽度为 50us (>10us)
digitalWrite(TrigPin,LOW); //结束脉冲
Time_Echo_us=pulseIn(EchoPin,HIGH); //获取 HC-SR04 返回的脉冲宽度
if((Time_Echo_us<60000)&&(Time_Echo_us>1)) //脉冲有效范围(1, 60000)
{
//Len_mm = (Time_Echo_us * Vmm/us) / 2 (mm) //根据返回脉冲宽度计算距离
//V = 331×sqrt(1+temperature/273)/1000 (mm/us) //根据温度计算音速
Len_mm=(Time_Echo_us*(331*sqrt(1+temperature/273)/1000))/2; //通过脉冲宽度计算距离
lcd.clear();
lcd.print("distance:");
lcd.print(Len_mm);
lcd.print("MM");
lcd.setCursor(0,1);
lcd.print(temperature);//显示温度
lcd.print((char)223); //显示o符号
lcd.print("C"); //显示字母C
}
else
{
lcd.clear();
lcd.print("More than measuring range, please range again......");
}
delay(1000);
}
}
} |
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有帐号?注册
x
|