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

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

3天内不再提示

如何制作一个远程恒温器

454398 来源:工程师吴畏 2019-08-20 11:33 次阅读

第1步:全部放在一起

如何制作一个远程恒温器

首先,我建议你做一些arduino教程处理RF发射器只是为了确保您的部件正常工作且接线正确。有很多可用的例子,包括代码(对于那些对C和C ++几乎没有了解的人)。

按照下面的接线图来组装arduino和传感器。在连接arduinos时要记住的一件事是我使用的数据端口不是而是推荐的。

IF 您决定更改所使用的数据端口,只需在代码中定义引脚即可。就个人而言,我认为坚持使用arduino库识别的默认端口更容易。

为了清楚起见,纳米和uno是可以互换的,但我在项目的发射器侧使用纳米来减小温度监控器的尺寸。

旁注:持有nano的绿色装置是3D打印容器。

步骤2:接收器

步骤3:发射器

步骤4:代码

一次接线完成你需要运行所有程序并安装库(如果你还没有),我只是假设你有,你需要启动Matlab并运行iPhone支持包。此时你的手机和Matlab都需要在同一个wifi网络上。

在Matlab的命令窗口中写道:

connector on

这将提示你输入用于连接iPhone的五位数密码。确保记住密码。输入密码后,Matlab将显示一些信息,包括您的IP地址。在下一步中使用它,它来自Matlab mobile中“传感器入门”帮助菜单中的说明。

按照以下步骤将传感器数据发送到MathWorks Cloud或计算机:

如果要将传感器数据发送到计算机并且尚未安装,请下载并安装MATLAB支持在MATLAB中为Apple iOS传感器打包。

使用“设置”将MATLAB Mobile连接到MathWorks Cloud或计算机。

在MATLAB中(在您的计算机上)创建mobiledev对象,例如:》》 m = mobiledev

选择一个或多个传感器,然后点击开始。

按照以下步骤在设备上本地记录传感器数据:

在“传感器”屏幕上,选择要从中收集数据的传感器。

选择日志。

点按“开始”按钮。

完成数据收集后,点击“停止”按钮。

在弹出窗口中,输入传感器日志的名称。

如果需要,请重复步骤1-5。

本节将在第4部分中回顾,因此无需实际开始收集数据。只需将您的手机放在手边,就可以使用Matlab移动设备。

现在您需要在计算机的某个位置创建一个文件夹来存放Matlab代码文件。你将有四个单独的文件,两个用于后台函数(.m文件)和一个用于GUI的(.mlapp)的Matlab代码文件。

首先是你房子里空气的质量计算(这让Matlab知道加热/冷却房子需要多长时间)

function [Mass]= CalcMass(T_ins,P_out,Chng_dir)

runCalc=0;

Tmp_start=T_ins;

time_start=clock;

time_end = 0

while runCalc 《= 1

if T_ins==(Tmp_start+(7*Chng_dir))

time_end=clock;

PwrCntr = 0;

runCalc=0;

else PwrCntr = P_out;

runCalc=runCalc+0.1

end

end

time_diag= time_end-time_start

Mass=(P_out*time_diag)/7.035

第二个:

function [timestamps, pwr_usage]= dist_cntrl(Lat_in,Lon_in,P_out,r_pref,speed,T_pref,mass)

AutoStat = 1;

i = 1;

while AutoStat == 1

time_start=clock;

m = mobiledev;

t = csvread(‘values.csv’,0,1);

t= t(i);

timestamps= [0,0,0,0,0,0];

pwr_usage = 0;

i = i+1;

format longg;

%haversine formula for calculating distance based on latitude and

%longintude

a_hav=(sind((m.Latitude-Lat_in)。/2)).^2+cosd(Lat_in).*cosd(m.latitude).*(sind((m.Longitude-Lon_in)。/2)).^2;

c_hav= 2.*atan2d(sqrt(a_hav),sqrt(1-a_hav));

d_hav= 6371.*c_hav;

Dist=d_hav.*1000;

%estimates your time to return

time_rtn=(Dist-r_pref)。/speed;

%calculates the necessary thermostat setting based on power out put of

%air conditioner and airmass of the home.

calcTmp_set=((-1.*P_out.*time_rtn)。/(mass.*(1.005)))+T_pref;

%determines whether the current thermostat setting needs to be changed

if round(calcTmp_set) ~= round(t)

timeACon = clock;

PwrCntr = P_out;

timeACon= timeACon + clock-time_start;

cost=P_out*timeACon*rate;

else

PwrCntr = 0

end

timestamps(end+1,[1:6]) = clock;

pwr_usage(end+1,1)= PwrCntr;

pause(5)

end

end

这两个文件都是Matlab函数。除非您计划根据特定需要修改它们,否则您无需访问它们,因为您将从GUI调用它们。分别保存两个文件,第一个作为CalcMass.m,第二个作为dist_cntrl.m,这些将是GUI代码用来调用函数的名称,所以除非你想编辑下面的其余代码,坚持下去命名惯例。

在进入GUI代码之前,您需要打开Matlab的应用程序设计器,您可以通过在Matlab菜单栏中导航打开,或者通过我最喜欢的方法打开它,该方法在Matlab命令窗口:

appdesigner

打开应用程序设计器后,打开一个新的应用程序文件(.mlapp)并从代码窗口中删除所有默认代码。然后用以下内容替换所有内容并点击运行按钮。

classdef Control_1 《 matlab.apps.AppBase

% Properties that correspond to app components

properties (Access = public

UIFigure matlab.ui.Figure

TabGroup matlab.ui.container.TabGroup

SetupTab matlab.ui.container.Tab

RunDiagnosticButton matlab.ui.control.Button

EnergyEfficiencyRatingEditFieldLabel matlab.ui.control.Label

EnergyEfficiencyRatingEditField matlab.ui.control.NumericEditField

PowerOutputRatingEditFieldLabel matlab.ui.control.Label

PowerOutputRatingEditField matlab.ui.control.NumericEditField

AvgLocalSpeedEditFieldLabel matlab.ui.control.Label

AvgLocalSpeedEditField matlab.ui.control.NumericEditField

DesiredDistancefromHouseEditFieldLabel matlab.ui.control.Label

DDFH matlab.ui.control.NumericEditField

TemperatureDirectionSwitchLabel matlab.ui.control.Label

TemperatureDirectionSwitch matlab.ui.control.Switch

TempSettingsTab matlab.ui.container.Tab

Temperature1SpinnerLabel matlab.ui.control.Label

Temperature1Spinner matlab.ui.control.Spinner

Temperature2SpinnerLabel matlab.ui.control.Label

Temperature2Spinner matlab.ui.control.Spinner

Switch matlab.ui.control.Switch

EditFieldLabel matlab.ui.control.Label

tempnow matlab.ui.control.NumericEditField

GaugeLabel matlab.ui.control.Label

Gauge matlab.ui.control.Gauge

SavingsTab matlab.ui.container.Tab

UIAxes matlab.ui.control.UIAxes

ThisMonthCostEditFieldLabel matlab.ui.control.Label

ThisMonthCostEditField matlab.ui.control.NumericEditField

TotalSavingsEditFieldLabel matlab.ui.control.Label

TotalSavingsEditField matlab.ui.control.NumericEditField

end methods (Access = private) % Value changed function: tempnow

function tempnowValueChanged(app, event)

temp = app.tempnow.Value;

temp=randi([60,90],1,50)

app.Gauge.Value = 0

for i = length(temp)

app.Gauge.Value= temp(i)

pause(1)

end

end % Value changed function: TemperatureDirectionSwitch

function TemperatureDirectionSwitchValueChanged(app, event)

way = app.TemperatureDirectionSwitch.Value;

way= uint8(way)

way = length(way)

if way == 4

Chng_dir = -1;

else

Chng_dir = 1;

end

Chng_dir;

end % Value changed function: DDFH

function DDFHValueChanged(app, event)

r_pref = app.DDFH.Value;

end % Value changed function: AvgLocalSpeedEditField

function AvgLocalSpeedEditFieldValueChanged(app, event)

speed = app.AvgLocalSpeedEditField.Value;

end % Value changed function: PowerOutputRatingEditField

function PowerOutputRatingEditFieldValueChanged(app, event)

value = app.PowerOutputRatingEditField.Value;

end 《立方厘米= 1》 《立方厘米= 1》 《立方厘米= 1》 《立方厘米= 1》 % Value changed function: EnergyEfficiencyRatingEditField

function EnergyEfficiencyRatingEditFieldValueChanged(app, event)

value = app.EnergyEfficiencyRatingEditField.Value;

end % Button pushed function: RunDiagnosticButton

function RunDiagnosticButtonPushed(app, event)

way = app.TemperatureDirectionSwitch.Value;

way= uint8(way)

way = length(way)

if way == 4

Chng_dir = -1;

else

Chng_dir = 1;

end

T_ins = app.tempnow.Value

P_out = app.PowerOutputRatingEditField.Value

CalcMass1(T_ins,P_out,Chng_dir) end % Value changed function: Temperature1Spinner

function Temperature1SpinnerValueChanged(app, event)

value = app.Temperature1Spinner.Value;

end % Value changed function: Temperature2Spinner

function Temperature2SpinnerValueChanged(app, event)

value = app.Temperature2Spinner.Value;

end

您可能会收到错误,这没有问题。只需关闭按下运行后生成的GUI,我们马上就会收集剩余的必要程序和数据。

由于Matlab已经设置完毕,我们可以继续使用python。首先,从命令提示符(在Windows上)或使用python文件夹中的.exe文件运行python程序。确保使用import命令安装了所有相应的库。

% Value changed function: Switch

function SwitchValueChanged(app, event)

m = mobiledev;

Lat_in = m.Latitude

Lon_in = m.Longitude

P_out = 0;

r_pref = app.DDFH.Value;

T_pref = app.Temperature1Spinner.Value;

speed = m.Speed;

mass = 200;

speed = app.AvgLocalSpeedEditField.Value;

Auto_Stat = app.Switch.Value;

dist_cntrl(Lat_in,Lon_in,P_out,r_pref,T_pref,speed,mass)

end

end

这些是您需要开始的三个库,尽管我们将要制作我们自己的图书馆很快如果这些命令出现某种错误,请返回并确保已安装库并位于python文件夹中的Lib文件夹中。接下来我们将生成我所谓的pythonlogger库。这个名称不是必需的,您可以随意调用它,它只是您创建的python文件(.py)的名称。

打开一个文本编辑器,我使用Sublime3,但记事本工作正常,并输入此代码。

% App initialization and construction

methods (Access = private)

将文本另存为“在Lib文件夹中插入所需库的名称”.py。另请注意,def pythonprint()行定义了要调用的函数的名称,因此您可以将其更改为def“为函数插入所需的名称”()。保存库后,我们可以继续使用arduino代码。

打开arduino IDE并打开两个新的草图窗口。将这两个草图文件保存在方便的地方,这些文件的名称无关紧要。然后删除所有默认代码并将其替换为以下内容。

对于接收arduino:

% Create UIFigure and components

function createComponents(app)

P.S。//driver.printBuffer 。..。 etc行是测试代码。除非你做诊断并想知道你是否真的在接收数据,否则无需担心。

对于发射器arduino

% Create UIFigure

app.UIFigure = uifigure;

app.UIFigure.Position = [100 100 640 480];

app.UIFigure.Name = ‘UI Figure’;

include命令应该是足够了,但是如果您以后在数据传输方面遇到任何问题,您可能需要查看RadioHead库文件夹并以相同的格式包含其余文件名。

步骤5 :让它工作

现在我们已经将所有代码放在一起并且arduino已经组装好了,我们可以将arduino连接到您的计算机并加载代码。确保将正确的代码发送到接收和发送微控制器。您可以在运行时将两个arduinos连接到您的计算机,但是您必须确保选择正确的端口向前移动,或者您可以断开传输arduino并在代码完成后从其他来源断开电源。上传。

说到这一点,你应该从IDE工具菜单中选择连接到你的接收arduino的端口并运行python。

不要打开串行监视器这样做,python无法在显示器打开时读取序列。一旦python打开,调用pythonprint函数如下。

% Create TabGroup

app.TabGroup = uitabgroup(app.UIFigure);

app.TabGroup.Position = [1 1 640 480];

这将从arduino串口开始数据收集。如果现在打开python文件夹,您将看到创建了一个名为“test_data.csv”的新.csv文件,该文件包含所有时间和温度信息。这将是Matlab访问以执行其所有计算和控制的文件。

另一个警告:在访问或写入数据时不要打开test_data.csv。如果这样做,python和/或Matlab代码将崩溃并发回错误。

如果您决定稍后打开.csv,您会注意到时间列只是一个非常大的数字串。这是因为time.time()命令写入自1970年1月1日以来的秒数。

此时python应该打印从串口读取的温度数据。它应该类似于:

% Create SetupTab

app.SetupTab = uitab(app.TabGroup);

app.SetupTab.Title = ‘Setup’;

不要担心额外的字符,即.csv文件第二列中五个值的Matlab代码索引

既然所有的支持程序都在工作并且正在收集数据,我们就可以开始从之前设置的Matlab移动程序中收集GPS数据并运行Matlab GUI代码。进入Matlab mobile的传感器选项卡后,选择GPS并点击开始按钮。

如果您不熟悉Matlab,请参阅步骤4并查看上面的屏幕截图。如果仍有问题,请确保已连接到之前选择的计算机(在设置选项卡中),并使用“connector on”命令中的链接检查Matlab是否在线。

步骤6:使用程序

此系统的后台正在进行多项操作。 Arduino和pyton正在收集和记录温度数据,Matlab正在从您的手机收集GPS数据并运行计算,以查看您离家有多远,并根据所有信息设置恒温器。你进来的地方是提供你的偏好。

运行Matlab GUI代码。打开.mlapp文件并查看第一个选项卡。您需要自己收集信息,加热/冷却装置的效率和额定功率通常可以在装置上找到,而您的平均速度只是对您行驶速度的一个很好的估计。输入值后,点击“运行诊断”按钮,程序控制恒温器收集有关房屋的信息。

转到下一个菜单。

步骤7:温度控制

此菜单允许您在家中和离开时选择您喜欢的温度。将温度#1设置为您的舒适温度,将温度#2设置为对您的家庭安全的高或低值(确保您在家中有狗等时不将其设置为100度)。

步骤8:历史数据

最后,您可以使用自动控制来查看您节省的金额。这基本上估算了如果恒温器24/7设定为您的首选温度,然后减去实际使用的能量,将使用多少能量。

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

    关注

    4

    文章

    142

    浏览量

    20815
收藏 人收藏

    评论

    相关推荐

    解决方案 | 恒温器精准控温 原来有这些“芯”科技!

    、总述:恒温器种能精确调节和控制环境温度的设备,内置传感实时监测温度,旦偏离预设值,即自动启动加热或制冷装置进行调节。广泛应用于工
    的头像 发表于 01-24 09:25 526次阅读
    解决方案 | <b class='flag-5'>恒温器</b>精准控温 原来有这些“芯”科技!

    传感类型在智能家居中的应用

    中的应用。 1. 温度传感 应用场景: 智能恒温器: 温度传感可以检测室内温度,并与智能恒温器配合,自动调节室内温度,以保持舒适的居住环境。 节能: 通过监测室内外温差,智能系统可
    的头像 发表于 12-06 14:13 1447次阅读

    松下KAIROS助力Globstream Media打造远程制作解决方案

    电视转播车进行长期的现场制作,既不现实也不经济。因此,Globstream Media采用松下KAIROS及全系列摄像机系统,为用户打造了套高效的远程制作解决方案。
    的头像 发表于 11-27 09:37 321次阅读

    使用CC3220 Simplelink单芯片Wi-Fi MCU SoC设计恒温器

    电子发烧友网站提供《使用CC3220 Simplelink单芯片Wi-Fi MCU SoC设计恒温器.pdf》资料免费下载
    发表于 10-29 09:47 0次下载
    使用CC3220 Simplelink单芯片Wi-Fi MCU SoC设计<b class='flag-5'>恒温器</b>

    使用MSP430 MCU和TPS60313实现单节电池恒温器

    电子发烧友网站提供《使用MSP430 MCU和TPS60313实现单节电池恒温器.pdf》资料免费下载
    发表于 10-21 09:42 0次下载
    使用MSP430 MCU和TPS60313实现单节电池<b class='flag-5'>恒温器</b>

    使用逻辑和转换用例优化智能恒温器的设计

    电子发烧友网站提供《使用逻辑和转换用例优化智能恒温器的设计.pdf》资料免费下载
    发表于 09-21 11:16 0次下载
    使用逻辑和转换用例优化智能<b class='flag-5'>恒温器</b>的设计

    陶瓷PTC恒温发热片的阻值是多大?

    陶瓷PTC恒温发热片是种利用正温度系数(Positive Temperature Coefficient,简称PTC)材料制成的加热元件。它具有自动恒温、安全、节能等特点,广泛应用于家用电器、工业
    的头像 发表于 09-20 17:37 2652次阅读

    LM26单通道数字输出、低功耗恒温器数据表

    电子发烧友网站提供《LM26单通道数字输出、低功耗恒温器数据表.pdf》资料免费下载
    发表于 08-14 14:33 0次下载
    LM26单通道数字输出、低功耗<b class='flag-5'>恒温器</b>数据表

    LM26NV 采用 SOT-23 封装、具有 ±3°C 精度的出厂预设恒温器数据表

    电子发烧友网站提供《LM26NV 采用 SOT-23 封装、具有 ±3°C 精度的出厂预设恒温器数据表.pdf》资料免费下载
    发表于 08-13 09:18 0次下载
    LM26NV 采用 SOT-23 封装、具有 ±3°C 精度的出厂预设<b class='flag-5'>恒温器</b>数据表

    LM27 SOT-23,±3°C精确,120°C-150°C出厂预设恒温器数据表

    电子发烧友网站提供《LM27 SOT-23,±3°C精确,120°C-150°C出厂预设恒温器数据表.pdf》资料免费下载
    发表于 08-13 09:17 0次下载
    LM27 SOT-23,±3°C精确,120°C-150°C出厂预设<b class='flag-5'>恒温器</b>数据表

    电子恒温器的工作原理,简单的电子恒温器电路

    电子恒温器种用于实现恒温控制的设备,它通过测量温度信号并与预设的恒温值进行比较,自动调节加热或制冷设备的输出功率,使被控温度保持在设定值范围内。
    的头像 发表于 06-08 14:21 2374次阅读
    电子<b class='flag-5'>恒温器</b>的工作原理,简单的电子<b class='flag-5'>恒温器</b>电路

    恒温水箱远程监控物联网系统解决方案

    能引发安全风险和能源浪费。 因此,为了实现精准控温和高效管理的目标,对恒温水箱实施远程监控的需求日渐迫切。数之能提供高效可靠的物联网解决方案。通过接入传感、PLC等设备进行数据采集并传输到
    的头像 发表于 06-04 10:37 542次阅读

    使用细铜线作为集成传感和加热进行温度控制

    传统的恒温器基于单独的温度传感和加热装置,并在它们之间提供反馈装置。但在近的些 EDN 设计理念 (DI) 中,我们看到恒温器设计将传
    发表于 04-04 11:41 1069次阅读
    使用细铜线作为集成传感<b class='flag-5'>器</b>和加热<b class='flag-5'>器</b>进行温度控制

    如何用Arduino制作简易自动喂鱼

    如果你家里养有鱼,并想找到种自动化喂食的方法,这个项目可能会对你有所启发。 在这个教程中,作者将展示如何制作自己的基于Arduino的自动喂鱼,让小鱼不在饿肚子。 自动喂鱼
    发表于 03-28 11:25

    恒温水箱如何远程监控温度和水位变化并自动预警

    恒温水箱是种可以长时间保持恒定温度的水箱设备,般通过PLC、温度传感、水位计等设备实现精准的温度控制,能够在水温较低时自动加温,也能在水温高时自动降温,并能对水位进行管理控制,具
    的头像 发表于 02-29 17:10 808次阅读