资讯详情

基于Arduio的温度检测与显示系统

一、设计任务要求

1.1 基本要求

①采用 Proteus 模拟放大电路软件LM358仿真 ②采用LM35收集温度信号,然后通过LCD1602显示温度值。

1.2 设计要求

①根据设计任务设计实现方案,通过比较确定实现方案 ②说明所选电路的组成和工作原理,并绘制原理框图 ③设计各单元电路,计算组件参数,选择组件类型和型号 ④绘制实际电路图并使用 Proteus 电路仿真软件 ⑤组装和调试方案电路,记录调试步骤和结果 ⑥设计单片机程序,完成数据采集、处理和显示 1.主模块及传感器

二、模块介绍与构建

2.1 LM358放大电路建设

2.1.1 LM358电路搭建

DIP塑封引脚图引脚功能

放大器内部电路原理图 LM358包括两个独立的高增益、内部频率补偿的双操作放大器,适用于电源电压范围广的单电源和双电源工作模式。在推荐的工作条件下,电源电流和 电源电压无关。其应用范围包括传感放大器、直流增益模块、音频放大器、工业控制、DC使用操作放大器的增益部件和所有其他单电源供电。 LM358的包装形式包括塑封8引线双列直插式和贴片式。 LM358特性: *直流电压增加(约1000)dB) *单位增益频带宽(约1)MHz) *电源电压范围宽:单电源(3-300V);双电源(±1.5一±15V) *适用于电池供电 *低输入偏流 *低输入失调电压和失调电流 *共模输入电压范围宽,包括接地 *差模输入电压范围宽等于电源电压范围 *输出电压摆幅大(0-0)Vcc-1.5V)

LM358参数

输入偏置电流45 nA 输入失调电流50 nA 输入失调电压2.9mV 最大输入共模电压VCC~1.5 V 共模抑制比80d 电源抑制比100dB

2.1.2电路模拟结果 选用直流同向比放大电路:

直流仿真效果: 交流仿真效果:

2.1.3 放大电路板焊接 手工焊接主要工具设备: 电烙铁 烙铁架 锡焊条件: ? 焊件必须具有可焊性 ? 被焊金属表面应保持清洁 ? 使用合适的助焊剂 ? 焊接温度适宜 ? 焊接时间合适

常用的锡焊材料 管状焊锡丝 抗氧化焊锡 含银的焊锡 基本操作步骤: 1.准备焊接:左手准备焊接,左手拿焊丝,右手拿烙铁,进入焊接准备状态。要求烙铁头保持清洁,无焊渣等氧化物,表面镀一层焊锡。 2,加热焊,烙铁头靠在两焊件的连接处,加热整个焊件全体,时间大约为 1 ~ 2 秒。对于印刷板上的焊接元件,应注意使烙铁头同时接触两个焊接物体。导线、接线柱、元件导线和焊盘应同时均匀加热。 3.当焊件的焊接面被加热到一定温度时,焊丝从烙铁对面接触焊件。(注意:不要将焊丝送到烙铁头上) 4.拆下焊丝,焊丝熔化一定量后立即向左45°方向移开焊丝。 5.将下烙铁,将焊料浸入焊盘和焊件的焊接部位后,向右上 45°将烙铁移到方向,结束焊接。从第三步到第五步结束,时间约为1-2s。

焊点质量及检验 焊点的质量要求应包括电气接触良好、机械结合牢固、美观三个方面。保证焊点质量最重要的是避免虚焊。 虚焊的原因及其危害: 虚拟焊接主要由待焊金属表面的氧化物和污垢引起,使焊点成为接触电阻的连接状态,导致电路工作异常,连接不稳定,噪声增加,不规则,给电路调试带来重大隐患。

电路板实际焊接效果:

通过电路的实际构建测试 电路实际放大倍数约为5倍 2.2 显示模块 2.2.1 LCD基本介绍1602: LCD基本介绍1602: LCD字符型液晶显示模块是一种专门用于显示字母、数字、符号和其他点阵的方式LCD,目前常用161,162,202和402行等模块。以长沙太阳人电子有限公司1602字符液晶显示器为例,介绍其用法。一般1602字符液晶显示器如图所示:

LCD1602主要技术参数: 显示容量:16×2个字符 芯片工作电压:4.5—5.5V 工作电流:2.0mA(5.0V) 模块最佳工作电压:5.0V 字符尺寸:2.95×4.35(W×H)mm 引脚功能说明 1602LCD使用标准的14脚(无背光)或16脚(带背光)接口,每个引脚接口如表所示 编号 符号 引脚说明 编号 符号 引脚说明 1 VSS 电源地 9 D2 数据 2 VDD 电源正极 10 D3 数据 3 VL 液晶显示偏压 11 D4 数据 4 RS 数据/命令选择 12 D5 数据 5 R/W 读/写选择 13 D6 数据 6 E 使能信号 14 D7 数据 7 D0 数据 15 BLA 背光源正极 8 D1 数据 16 BLK 背光源负极 2.2.2 引脚介绍及控制指令介绍 第1脚:VSS为地电源。 第2脚:VDD接5V正电源。 第3脚:VL对于液晶显示器的对比度调整端,连接正电源时对比度最弱,接地时对比度最高,对比度过高时会产生鬼影K调整电位器的对比度。 第4脚:RS选择寄存器,高电平时选择数据寄存器,低电平时选择指令寄存器。 第5脚:R/W为了读写信号线,高电平时读写操作,低电平时写当RS和R/W在低电平时,可以写下指令或显示地址RS为低电平R/W平时为高电读忙信号,RS为高电平R/W通常可以为低电写入数据。 第6脚:E当E端从高电平跳转到低电平时,液晶模块执行命令。 第7~14脚:D0~D7是8位双向数据线。 15脚:背光源正极。 16脚:背光源负极。

1602液晶模块内部的控制器共有11条控制指令,如下表所示 序号 指令 RS R/W D7 D6 D5 D4 D3 D2 D1 D0

1 清显示 0 0 0 0 0 0 0 0 0 1 2 光标返回 0 0 0 0 0 0 0 0 1 * 3 置输入模式 0 0 0 0 0 0 0 1 I/D S 4 显示开/关控制 0 0 0 0 0 0 1 D C B 5 光标或字符移位 0 0	0	0	0	1	S/C	R/L	*	*
6	置功能	0	0	0	0	1	DL	N	F	*	*
7	置字符发生存贮器地址	0	0	0	1	字符发生存贮器地址
8	置数据存贮器地址	0	0	1	显示数据存贮器地址
9	读忙标志或地址	0	1	BF	计数器地址
10	写数到CGRAM或DDRAM)	1	0	要写的数据内容
11	从CGRAM或DDRAM读数	1	1	读出的数据内容

2.3 控制模块介绍 本次电子设计中选用了Arduio uno来作为核心控制模块

2.3.1 关于Arduio UNO的基本介绍 ArduinoUNO是ArduinoUSB接口系列的最新版本,作为Arduino平台的参考标准模板。UNO的处理器核心是ATmega328,同时具有14路数字输入/输出口(其中6路可作为PWM输出),6路模拟输入,一个16MHz晶体振荡器,一个USB口,一个电源插座,一个ICSPheader和一个复位按钮。

ArduinoUNO的处理器核心是ATmega328,同时具有14路数字输入/输出口(其中6路可作为PWM输出),6路模拟输入,一个16MHz的晶体振荡器,一个USB口,一个电源插座,一个ICSPheader和一个复位按钮。 2.4 测温模块介绍 选用LM35作为测温传感器 2.4.1 LM35基本介绍 LM35D是把测温传感器与放大电路做在一个硅片上,形成一个集成温度传感器

是一种输出电压与摄氏温度成正比例的温度传感器,其灵敏度为10mV/℃;工作温度范围为0℃-100℃;工作电压为4-30V;精度为±1℃。最大线性误差为±0.5℃;静态电流为80uA。该器件如塑封三极管(TO-92)。

该温度传感器最大的特点是是使用时无需外围元件,也无需调试和较正(标定),只要外接一个1V的表头(如指针式或数字式的万用表),就成为一个测温仪

单电源模式正负双电源模式供电电压35V到-0.2V 输出电压6V至-1.0V 输出电流10mA 指定工作温度范围 LM35A -55℃ to +150℃ LM35C, LM35CA -40℃ to +110℃ LM35D 0℃ to +100℃

实物图:

LM35内部结构:

三,功能实现及代码:

3.1.1 连线图及实线图:

LCD1602与Arduio的连线图:(采用四线驱动连线)

实际电路图及显示屏幕的效果:

3.1.2 实现代码:

没有使用库函数

int DI = 12; 
int RW = 11; 
int DB[] = { 
        3, 4, 5, 6, 7, 8, 9, 10};//使用数组来定义总线需要的管脚 
int Enable = 2; 
  void LcdCommandWrite(int value) { 
         
// 定义所有引脚 
int i = 0; 
for (i=DB[0]; i <= DI; i++) //总线赋值 
{ 
         
digitalWrite(i,value & 01);//因为1602液晶信号识别是D7-D0(不是D0-D7),这里是用来反转信号。 
value >>= 1; 
} 
digitalWrite(Enable,LOW); 
delayMicroseconds(1); 
digitalWrite(Enable,HIGH); 
delayMicroseconds(1); // 延时1ms 
digitalWrite(Enable,LOW); 
delayMicroseconds(1); // 延时1ms 
} 
  void LcdDataWrite(int value) { 
         
// 定义所有引脚 
int i = 0; 
digitalWrite(DI, HIGH); 
digitalWrite(RW, LOW); 
for (i=DB[0]; i <= DB[7]; i++) { 
         
digitalWrite(i,value & 01); 
value >>= 1; 
} 
digitalWrite(Enable,LOW); 
delayMicroseconds(1); 
digitalWrite(Enable,HIGH); 
delayMicroseconds(1); 
digitalWrite(Enable,LOW); 
delayMicroseconds(1); // 延时1ms 
} 
  
void setup (void) { 
         
int i = 0; 
for (i=Enable; i <= DI; i++) { 
         
pinMode(i,OUTPUT); 
} 
delay(100); 
// 短暂的停顿后初始化LCD 
// 用于LCD控制需要 
LcdCommandWrite(0x38); // 设置为8-bit接口,2行显示,5x7文字大小 
delay(64); 
LcdCommandWrite(0x38); // 设置为8-bit接口,2行显示,5x7文字大小 
delay(50); 
LcdCommandWrite(0x38); // 设置为8-bit接口,2行显示,5x7文字大小 
delay(20); 
LcdCommandWrite(0x06); // 输入方式设定 
// 自动增量,没有显示移位 
delay(20); 
LcdCommandWrite(0x0E); // 显示设置 
// 开启显示屏,光标显示,无闪烁 
delay(20); 
LcdCommandWrite(0x01); // 屏幕清空,光标位置归零 
delay(100); 
LcdCommandWrite(0x80); // 显示设置 
// 开启显示屏,光标显示,无闪烁 
delay(20); 
} 
  void loop (void) { 
         
LcdCommandWrite(0x01); // 屏幕清空,光标位置归零 
delay(10); 
LcdCommandWrite(0x80+3); 
delay(10); 
// 写入欢迎信息 
LcdDataWrite('c'); 
LcdDataWrite('u'); 
LcdDataWrite('i'); 
LcdDataWrite('x');
LcdDataWrite('i');
LcdDataWrite('a'); 
LcdDataWrite('o'); 
LcdDataWrite('n'); 
LcdDataWrite('i'); 
LcdDataWrite('a'); 
LcdDataWrite('n'); 
delay(10); 
LcdCommandWrite(0xc0+1); // 定义光标位置为第二行第二个位置 
delay(10); 
LcdDataWrite('2'); 
LcdDataWrite('0'); 
LcdDataWrite('1'); 
LcdDataWrite('8'); 
LcdDataWrite('0'); 
LcdDataWrite('1'); 
LcdDataWrite('0'); 
LcdDataWrite('5'); 
LcdDataWrite('8'); 
LcdDataWrite('6');  
delay(5000);
}

3.2 系统硬件连接及搭建调试

3.2.1实验硬件电路:

3.2.2 温度显示效果及调试

由于放大器的作用在代码中调试到合适的温度:

3.3 实验代码

1.	#include <LiquidCrystal.h>   //调用arduino自带的LiquidCrystal库
2.	
3.	LiquidCrystal lcd(12, 11, 5, 4, 3, 2);//设置接口
4.	
5.	int potPin = 4;                     //设置模拟口4为LM35的信号输入端口
6.	float temperature = 0;                //设置temperature为浮点变量
7.	long val=0;                       //设置val为长整数变量
8.	
9.	void setup()
10.	{ 
        
11.	  lcd.begin(16, 2);  //初始化LCD
12.	lcd.print("LM35 Thermometer");  //使屏幕显示文字LM35 Thermometer
13.	delay(1000); //延时1000ms
14.	}
15.	
16.	void loop ()
17.	{ 
        
18.	
19.	val = analogRead(potPin);             //val变量为从LM35信号口读取到的数值
20.	temperature = (val*0.0048828125*1000);         //把读取到的val转换为温度数值的10倍
21.	lcd.clear(); //清屏
22.	lcd.print("LM35 Thermometer"); //使屏幕显示文字LM35 Thermometer
23.	lcd.setCursor(0, 1) ; //设置光标位置为第二行第一个位置
24.	lcd.print((long)temperature / 10);   //显示温度整数位
25.	lcd.print(".");    //显示小数点
26.	lcd.print( (long)temperature % 10); //显示温度小数点后一位
27.	lcd.print((char)223); //显示o符号
28.	lcd.print("C"); //显示字母C
29.	
30.	delay(2000);                     //延时2秒,这里也就是刷新速度。
31.	
32.	}

四,课程设计体会

在此次为期两周的电子课设中,我通过用放大器构造一个放大电路,将以前所学习的模拟电子知识充分应用到实际中来,进一步地加深了我对模电的理解。通过与其他同学的讨论,对比自己和同学构造系统的不同方法,发现其他同学构造的系统中的优点和自己构造系统的缺点,来进一步优化自己构造的系统。 在系统构造中,我将系统搭建的过程分为三步:第一:在选好所用的器材后,用软件调试放大效果;第二:用proteus软件对放大电路进行仿真,验证放大倍数;第三:搭建实际电路,用硬件测试所搭建的系统是否达到预期功能,验证放大倍数和线路连接的正确性。通过三步的实际操作,让我充分应用了模电放大器的知识,如何充分利用proteus软件库中的各种元件搭建系统。 在用proteus软件仿真过程中,通过仿真,可以非常容易的发现系统中存在的各种问题。在系统中,换用不同的元件或是改变元件的属性,可以测试系统在用不同的元器件时的效果。用proteus软件搭建系统简单易行,克服了在实际用用硬件搭建系统的许多缺点,而且成本低廉。但软件仿真本质上并不是真的实际系统,软件中的元器件本身存在各种缺陷,如元件额定电压等。用proteus软件仿真的结果只能大概的验证所构建系统正确性,但有许多细节还需要在实际中用真实器件搭建系统来验证。 在元器件的焊接过程中,在用原件焊接电路过程中,虽然此前已经用proteus软件仿真过,还是遇到过许多问题,并不是一步成功。在软件仿真中所用的元件和真实元器件并不完全一致,因此还需要对原先线路进行调整。容易出现虚焊等情况,但也在积极学习改正,进一步锻炼了自己的操作能力,同时也进一步了提高了自己焊接电路的能力。 课设中实际操作非常重要,但随后的课程设计报告的编写也不可少。 通过对课程设计报告的编写,让我总结了在实际操作过程中的所遇到的各种问题,进一步加深了对此次课程设计的理解。 非常感谢学校给我们提供此次课程设计机会和老师的细心辅导,让我们能够将所学的知识应用于实际,提高了自身的实践能力。同时要有主动查阅芯片资料,做到主动学习,在历经了两个星期的实践后,我也发现了自己的许多不足之处,让我在以后的学习生活中更有明确的目标来改变自身的不足,提高自我的能力(来自学校课程设计报告,图片太麻烦了,没加)

标签: arduino单片机电阻正负极d1o47三极管参数热电阻数显温度温度传感器数显温度变送器mx三极管bf822直插三极管s9013h

锐单商城拥有海量元器件数据手册IC替代型号,打造 电子元器件IC百科大全!

锐单商城 - 一站式电子元器件采购平台