第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
发布评论请先 登录
相关推荐
传感器类型在智能家居中的应用
松下KAIROS助力Globstream Media打造远程制作解决方案
使用CC3220 Simplelink单芯片Wi-Fi MCU SoC设计恒温器
![使用CC3220 Simplelink单芯片Wi-Fi MCU SoC设计<b class='flag-5'>恒温器</b>](https://file.elecfans.com/web1/M00/D9/4E/pIYBAF_1ac2Ac0EEAABDkS1IP1s689.png)
使用MSP430 MCU和TPS60313实现单节电池恒温器
![使用MSP430 MCU和TPS60313实现单节电池<b class='flag-5'>恒温器</b>](https://file.elecfans.com/web1/M00/D9/4E/pIYBAF_1ac2Ac0EEAABDkS1IP1s689.png)
陶瓷PTC恒温发热片的阻值是多大?
LM26NV 采用 SOT-23 封装、具有 ±3°C 精度的出厂预设恒温器数据表
![LM26NV 采用 SOT-23 封装、具有 ±3°C 精度的出厂预设<b class='flag-5'>恒温器</b>数据表](https://file.elecfans.com/web1/M00/D9/4E/pIYBAF_1ac2Ac0EEAABDkS1IP1s689.png)
LM27 SOT-23,±3°C精确,120°C-150°C出厂预设恒温器数据表
![LM27 SOT-23,±3°C精确,120°C-150°C出厂预设<b class='flag-5'>恒温器</b>数据表](https://file.elecfans.com/web1/M00/D9/4E/pIYBAF_1ac2Ac0EEAABDkS1IP1s689.png)
恒温水箱远程监控物联网系统解决方案
使用细铜线作为集成传感器和加热器进行温度控制
![使用细铜线作为集成传感<b class='flag-5'>器</b>和加热<b class='flag-5'>器</b>进行温度控制](https://file1.elecfans.com/web2/M00/C6/59/wKgZomYHidaARHHkAAB64cknXq0552.png)
评论