0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

如何构建与Arduino板兼容的温度传感器

454398 来源:网络整理 作者:佚名 2019-11-06 10:34 次阅读

步骤1:

要构建传感器,我创建了一个小的PCB。为此,我使用了墨粉转移方法。如何做到这一点是许多指导对象的目标。我焊接了芯片电容和引脚头。在传感器的第五个针脚上,我放了一根从电缆绝缘层中取出的小塑料管。它的目的是将传感器引导到正确的位置并阻止其插入错误的母头孔中。在图片上可以看到它必须放置的正确方式。传感器按照使用以下Arduino引脚的方式投影:“5V”,“GNG”,“GND”,_,_,“A0”。这意味着-模拟输出电压值由ADC0采样。

步骤2:硬件

对于基于DIY温度传感器的简单温度计项目,我使用了Arduino MEGA板(也是我的DYI项目)。还需要LCD防护罩。就我而言,盾牌也是自制的。使用的LCD是带有ST9720芯片的图形128x64显示器。我在ebay上买了它。 LCD屏蔽板的PCB也来自ebay。我已经在LCD上焊接了母排针,并在原型屏蔽板上焊接了排针-现在,我可以简单地将LCD模块插入到原型板上,并且可以正常工作,并且不使用任何电缆。如果您没有任何LCD防护罩,那么当然可以使用面包屑的标准方法。对于该项目,也可以使用任何字符LCD(例如16x2),但我没有LCD,但我经历了更复杂的方式:-)。

步骤3:代码

现在是时候编写代码了。我试图使它尽可能简短。因为我使用GLCD,所以我决定将实现基于u8glib库。如果要使用字符LCD,则应使用标准的LCD Arduino库,并且必须根据它们来调整代码。

这是代码:

/*

温度计基于Maxims DS600u +芯片

*/

#include“U8glib.h”

#include

U8GLIB_ST7920_128X64_4X u8g(8,9,10,11) ,4,5,6,7,18,17,16);//8Bit Com:D0..D7:8,9,10,11,4,5,6,7 en = 18,di = 17,rw = 16

void u8g_prepare(void){

u8g。 setFont(u8g_font_6x10);

u8g.setFontRefHeightExtendedText();

u8g.setDefaultForegroundColor();

u8g.setFontPosTop();

}

void setup(void){

//翻转屏幕,如果需要的话

//u8g.setRot180();

//指定默认颜色值

if(u8g.getMode()== U8G_MODE_R3G3B2)

u8g.setColorIndex(255);//white

else if(u8g.getMode()== U8G_MODE_GRAY2BIT)

u8g.setColorIndex(3);//最大强度

否则if(u8g.getMode()== U8G_MODE_BW)

u8g.setColorIndex(1);//像素在

//u8g.setContrast(0x30);

pinMode(13,OUTPUT);

digitalWrite(13,HIGH);

u8g_prepare();

}

void draw(void){

浮动供应= 4.91 ;//必须在此处输入arduino板的测量电源电压

//读取传感器输出电压

int读数= AnalogRead(0);

float v_out =(读取*电源)/ 1.024 ;

//在液晶显示屏上显示温度

float temperature =(v_out-509)/6.45;

char temp [5];

dtostrf(temperature,5,1 ,温度);结果,u8g.drawStr(4,24, “温度:”);结果,u8g.drawStr(76,24,温度);结果,u8g.drawStr(108,24,“的 260 C“);

}

void loop(void){

//图片循环

u8g.firstPage();

do {

draw();

} while(u8g.nextPage());

//延迟一段时间后重建图片

延迟(1000);

有一些棘手的问题代码中的点。

我把它们放在粗体中。

1)因为内部Atmega ADC使用电源电压作为参考来测量模拟电压电位,这不是比率指标电源电压,但由传感器芯片固定,如果电源电压变化,可能会发生错误。粗略的计算表明,50mV的电源变化会引起1度的温度误差。提高精度的解决方案是按应使用的方式测量Arduino板上的确切电源电压-如果您打算使用USB提供的Arduino温度计,则必须测量这种情况下的板子电源电压。如果您打算将温度计用作AC/DC适配器提供的独立设备 - 那么,在这种情况下应测量电路板+屏蔽的电源电压。在我的情况下,设备由USB供电,我在“5V”Arduino引脚上测得4.91V。所以我把这个值放在草图中。

2)很高兴在LCD上你可以看到度数“°”符号。这里的问题是不同的显示器具有不同的ASCII表,并且难以说出对应于该符号的八进制数究竟是什么。有两种可能的解决方案:

A )如果有任何ASCII表,则读取LCD模块/驱动程序的数据表

B )编写草图以显示写在LCD ROM中的整个ASCII表,查看符号出现的位置并计算/查看与之对应的十进制数。进一步将此值转换为八进制数并放入草图。

我使用了第二种方法。..。..并且以最简单的方式:-) - 库中有“示例”u8glib。程序“ GraphicsTest”将打印存储在驱动器芯片ROM中的两个ASCII表。在那里,我发现所需的符号具有260个八进制等效数字。

想要在Arduino Due上实现此项目的家伙,我建议在代码中也插入以下行:

analogReadResolution(12);

在设置过程中,然后在1.024上除以4.096除。

步骤4:

整个设备组装,编程并运行:

PS该项目继续。..

步骤5:其他工作

在几周前,我决定在此防护罩中实现其他功能。这些功能必须是:LCD上显示的当前时间和日期。为此,我从ebay购买了RTC模块。 (如图所示)。该模块不是很精确,必须不时调整。另一个解决方案是尝试用更好的石英晶体进行更换。

步骤6:进行屏蔽修改

能够插入RTC我已通过以下方式修改了屏蔽:我焊接了4针母接头,并将其连接到正确的信号

SCL RTC引脚与屏蔽/引脚21相连。 arduino

分别将SDA与#20引脚相连

别忘了连接GND和Vcc引脚。

步骤7:代码。..

以前的代码已修改为:

/*

基于Maxims DS600u +芯片+ RTC的温度计

*/

#include“ U8glib.h”

#include

#include

# include

int rtc [7];

float supply = 4.91;//这里必须输入arduino板的测量电源电压

//读取传感器输出电压

char hours [2];

char minutes [2];

char seconds [2] ;

char天[2];

char months [2];

char years [4];

U8GLIB_ST7920_128X64_4X u8g(8,9,10,11,4,5,6,7, 18、17、16);//8Bit Com:D0..D7:8,9,10,11,4,5,6,7 en = 18,di = 17,rw = 16

void u8g_prepare(void){

u8g。 setFont(u8g_font_6x10);

u8g.setFontRefHeightExtendedText();

u8g.setDefaultForegroundColor();

u8g.setFontPosTop();

}

void setup(void){

序列号。 begin(9600);

//翻转屏幕,如果需要的话

//u8g.setRot180();

//指定默认颜色值

if(u8g.getMode()== U8G_MODE_R3G3B2)

u8g.setColorIndex(255);//white

else if(u8g.getMode()== U8G_MODE_GRAY2BIT)

u8g.setColorIndex(3);//最大强度

否则if(u8g.getMode()== U8G_MODE_BW)

u8g.setColorIndex(1);//像素在

//u8g.setContrast(0x30);

pinMode(13,OUTPUT);

digitalWrite(13,HIGH);

u8g_prepare();

}

void draw(void){ u8g.drawFrame(0,0,127,63);

u8g.drawFrame(13,7,103,21);

u8g.drawBox(15,9,99,17);

RTC.get(rtc,true); u8g.setColorIndex(0);

dtostrf(rtc [2],2,0,hours);

if(rtc [2] 《10 )结果{结果u8g.drawStr(26,14, “0”);结果,},点击u8g.drawStr(26,14,小时);结果,dtostrf(RTC [1],2 ,0,minutes);

u8g.drawStr(45,14,“:”);

if(rtc [1] 《10)

{

u8g.drawStr(58,14,“ 0“ );结果,},点击u8g.drawStr(58,14,分钟);结果,dtostrf(RTC [0],2,0,秒);结果,u8g.drawStr(78,14, “:”);

if(rtc [0] 《10)

{

u8g.drawStr(91,14,“ 0”);

}

u8g.drawStr(91, 14秒);

u8g.setColorIndex(1);

switch(rtc [3])

{

情况1:u8g.drawStr(4,33,“ Sunday”);休息;

案例2:u8g.drawStr(4,33,“星期一”);休息;

案例3:u8g.drawStr(4,33,“星期二”);休息;

案例4:u8g.drawStr(4,33,“星期三”);休息;

案例5:u8g.drawStr(4,33,“星期四”);休息;

案例6:u8g.drawStr(4,33,“星期五”);休息;

案例7:u8g.drawStr(4,33,“星期六”); break;

}

dtostrf(rtc [4],2,0,days);

if(rtc [4] 《10)

{ u8g.drawStr(64,33, “0”);结果,},点击u8g.drawStr(64,33,天);结果,u8g.drawStr(75,33, “”);结果,dtostrf(RTC [5],2 ,0,months);

if(rtc [5] 《10)

{

u8g.drawStr(80,33,“ 0”);

}

u8g.drawStr(80 ,33,月);结果,u8g.drawStr(90,33, “”);结果,dtostrf(RTC [6],4,0,岁);结果,u8g.drawStr(96,33,年);

int读数= AnalogRead(0);

浮点v_out =(读数*供给)/1.024;

//在LCD上显示温度

浮点温度=(v_out-509)/6.45;

char temp [5]; dtostrf(temperature,5,1,temp);

u8g.drawStr(4,48,“ Temperature:”);

u8g.drawStr( 76,48,temp);

u8g.drawStr(108,48,“ 260C”);

void loop(void){

//图片循环

u8g.firstPage();

做{

draw();

} while(u8g.nextPage());

//延迟一段时间后重建图片

delay( 1000);

}

如您所见,此代码需要库DS1307。我已附上该库,以帮助您解决由于可用的DS1307库不同而引起的混乱。

责任编辑:wv

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 温度传感器
    +关注

    关注

    48

    文章

    2647

    浏览量

    154282
  • Arduino
    +关注

    关注

    184

    文章

    6426

    浏览量

    184797
收藏 人收藏

    评论

    相关推荐

    【开源项目】Arduino ESP32 彩色电子气象站

    读数,精度为 2-5% -40 至 125°C 温度读数±精度为 0.5°C 慢 与Arduino的连接非常简单。我们将带有 + 号的传感器引脚连接到 Arduino 的 5V 或
    发表于 01-16 14:01

    如何测量温度传感器好坏?温度传感器有哪些用途?

    温度传感器绝对是生活中最常用的传感器类型之一,甚至我们的家中都有温度传感器的身影。为增进大家对温度
    的头像 发表于 12-15 08:39 704次阅读

    你了解温度传感器吗?温度传感器温度变送器有哪些区别?

    一、温度传感器 近年来,我国工业现代化的进程和电子信息产业连续的高速增长,带动了传感器市场的快速上升。温度传感器作为
    的头像 发表于 12-14 08:44 514次阅读
    你了解<b class='flag-5'>温度</b><b class='flag-5'>传感器</b>吗?<b class='flag-5'>温度</b><b class='flag-5'>传感器</b>和<b class='flag-5'>温度</b>变送器有哪些区别?

    温度传感器的特性,温度传感器的类型有哪些

      温度传感器将热能转换为物理量,如位移、压力和电信号等。它是一种用于自动测量温度的电气设备。温度传感器的主要原理是测量热量并在将其转换为可
    发表于 09-01 16:33

    集成温度传感器(2)#传感器

    传感器温度传感器
    未来加油dz
    发布于 :2023年08月20日 15:05:50

    集成温度传感器(1)#传感器

    传感器温度传感器
    未来加油dz
    发布于 :2023年08月20日 15:05:27

    温度传感器概述(2)#传感器

    传感器温度传感器
    未来加油dz
    发布于 :2023年08月20日 14:55:47

    温度传感器概述(1)#传感器

    传感器温度传感器
    未来加油dz
    发布于 :2023年08月20日 14:55:24

    集成温度传感器(2)#传感器

    传感器温度传感器
    未来加油dz
    发布于 :2023年08月20日 10:29:50

    集成温度传感器概述(2)#传感器

    传感器温度传感器
    未来加油dz
    发布于 :2023年08月20日 10:25:40

    集成温度传感器概述(1)#传感器

    传感器温度传感器
    未来加油dz
    发布于 :2023年08月20日 10:25:17

    基于Arduino和超声波传感器构建一个简单的油箱液位指示器电路

    在这篇文章中,我们将学习如何使用 Arduino 和超声波传感器构建一个简单的油箱液位指示器电路。
    的头像 发表于 06-27 18:14 794次阅读
    基于<b class='flag-5'>Arduino</b>和超声波<b class='flag-5'>传感器</b><b class='flag-5'>构建</b>一个简单的油箱液位指示器电路

    使用NRF24L01和Arduino构建无线传感器网络

    电子发烧友网站提供《使用NRF24L01和Arduino构建无线传感器网络.zip》资料免费下载
    发表于 06-09 10:07 3次下载
    使用NRF24L01和<b class='flag-5'>Arduino</b><b class='flag-5'>构建</b>无线<b class='flag-5'>传感器</b>网络

    如何使用Arduino SDK轻松地将传感器连接到平台并触发操作?

    你好! 我正在与朋友一起构建一个开源框架,使用 Arduino SDK 轻松地将传感器连接到平台并触发操作。我很想听听您的反馈,当然欢迎您就 SDK 进行协作! SDK 的存储库是: https
    发表于 05-24 07:46

    如何构建一个简单的传感器

    您可以自己构建一个简单的传感器。 我的博客上有一个 PNP 和一个 NPN 晶体管、一个电阻和一个电容器的示例。 非常灵敏且易于构建,只需几美元。也许您甚至已经有库存的电子产品。 可
    发表于 04-28 08:23