IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 嵌入式 -> 基于Arduio的温度检测与显示系统 -> 正文阅读

[嵌入式]基于Arduio的温度检测与显示系统

一,设计任务要求

1.1 基本要求

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

1.2 设计要求

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

二,模块介绍及搭建

2.1 LM358放大电路构建

2.1.1 LM358电路搭建

DIP塑封引脚图引脚功能

放大器内部电路原理图
LM358内部包括有两个独立的、高增益、内部频率补偿的双运算放大器,适合于电源电压范围很宽的单电源使用,也适用于双电源工作模式,在推荐的工作条件下,电源电流与 电源电压无关。[]它的使用范围包括传感放大器、直流增益模组,音频放大器、工业控制、DC增益部件和其他所有可用单电源供电的使用运算放大器的场合。 LM358的封装形式有塑封8引线双列直插式和贴片式。
LM358特性:
*直流电压增益高(约100dB)
*单位增益频带宽(约1MHz)
*电源电压范围宽:单电源(3—30V);双电源(±1.5一±15V)
*低功耗电流,适合于电池供电
*低输入偏流
*低输入失调电压和失调电流
*共模输入电压范围宽,包括接地
*差模输入电压范围宽,等于电源电压范围
*输出电压摆幅大(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 LCD1602的基本介绍:
LCD1602的基本介绍:
LCD1602的介绍字符型液晶显示模块是一种专门用于显示字母、数字、符号等点阵式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为液晶显示器对比度调整端,接正电源时对比度最弱,接地时对比度最高,对比度过高时会产生“鬼影”,使用时可以通过一个10K的电位器调整对比度。
第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软件仿真过,还是遇到过许多问题,并不是一步成功。在软件仿真中所用的元件和真实元器件并不完全一致,因此还需要对原先线路进行调整。容易出现虚焊等情况,但也在积极学习改正,进一步锻炼了自己的操作能力,同时也进一步了提高了自己焊接电路的能力。
课设中实际操作非常重要,但随后的课程设计报告的编写也不可少。
通过对课程设计报告的编写,让我总结了在实际操作过程中的所遇到的各种问题,进一步加深了对此次课程设计的理解。
非常感谢学校给我们提供此次课程设计机会和老师的细心辅导,让我们能够将所学的知识应用于实际,提高了自身的实践能力。同时要有主动查阅芯片资料,做到主动学习,在历经了两个星期的实践后,我也发现了自己的许多不足之处,让我在以后的学习生活中更有明确的目标来改变自身的不足,提高自我的能力(来自学校课程设计报告,图片太麻烦了,没加)

  嵌入式 最新文章
基于高精度单片机开发红外测温仪方案
89C51单片机与DAC0832
基于51单片机宠物自动投料喂食器控制系统仿
《痞子衡嵌入式半月刊》 第 68 期
多思计组实验实验七 简单模型机实验
CSC7720
启明智显分享| ESP32学习笔记参考--PWM(脉冲
STM32初探
STM32 总结
【STM32】CubeMX例程四---定时器中断(附工
上一篇文章      下一篇文章      查看所有文章
加:2021-11-15 16:02:04  更:2021-11-15 16:03:25 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/26 8:31:44-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码