第1步:全部放在一起
首先,我建議你做一些arduino教程處理RF發(fā)射器只是為了確保您的部件正常工作且接線正確。有很多可用的例子,包括代碼(對于那些對C和C ++幾乎沒有了解的人)。
按照下面的接線圖來組裝arduino和傳感器。在連接arduinos時要記住的一件事是我使用的數據端口不是而是推薦的。
IF 您決定更改所使用的數據端口,只需在代碼中定義引腳即可。就個人而言,我認為堅持使用arduino庫識別的默認端口更容易。
為了清楚起見,納米和uno是可以互換的,但我在項目的發(fā)射器側使用納米來減小溫度監(jiān)控器的尺寸。
旁注:持有nano的綠色裝置是3D打印容器。
步驟2:接收器
步驟3:發(fā)射器
步驟4:代碼
一次接線完成你需要運行所有程序并安裝庫(如果你還沒有),我只是假設你有,你需要啟動Matlab并運行iPhone支持包。此時你的手機和Matlab都需要在同一個wifi網絡上。
在Matlab的命令窗口中寫道:
connector on
這將提示你輸入用于連接iPhone的五位數密碼。確保記住密碼。輸入密碼后,Matlab將顯示一些信息,包括您的IP地址。在下一步中使用它,它來自Matlab mobile中“傳感器入門”幫助菜單中的說明。
按照以下步驟將傳感器數據發(fā)送到MathWorks Cloud或計算機:
如果要將傳感器數據發(fā)送到計算機并且尚未安裝,請下載并安裝MATLAB支持在MATLAB中為Apple iOS傳感器打包。
使用“設置”將MATLAB Mobile連接到MathWorks Cloud或計算機。
在MATLAB中(在您的計算機上)創(chuàng)建mobiledev對象,例如:》》 m = mobiledev
選擇一個或多個傳感器,然后點擊開始。
按照以下步驟在設備上本地記錄傳感器數據:
在“傳感器”屏幕上,選擇要從中收集數據的傳感器。
選擇日志。
點按“開始”按鈕。
完成數據收集后,點擊“停止”按鈕。
在彈出窗口中,輸入傳感器日志的名稱。
如果需要,請重復步驟1-5。
本節(jié)將在第4部分中回顧,因此無需實際開始收集數據。只需將您的手機放在手邊,就可以使用Matlab移動設備。
現在您需要在計算機的某個位置創(chuàng)建一個文件夾來存放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已經設置完畢,我們可以繼續(xù)使用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庫。這個名稱不是必需的,您可以隨意調用它,它只是您創(chuàng)建的python文件(.py)的名稱。
打開一個文本編輯器,我使用Sublime3,但記事本工作正常,并輸入此代碼。
% App initialization and construction
methods (Access = private)
將文本另存為“在Lib文件夾中插入所需庫的名稱”.py。另請注意,def pythonprint()行定義了要調用的函數的名稱,因此您可以將其更改為def“為函數插入所需的名稱”()。保存庫后,我們可以繼續(xù)使用arduino代碼。
打開arduino IDE并打開兩個新的草圖窗口。將這兩個草圖文件保存在方便的地方,這些文件的名稱無關緊要。然后刪除所有默認代碼并將其替換為以下內容。
對于接收arduino:
% Create UIFigure and components
function createComponents(app)
P.S。//driver.printBuffer 。..。 etc行是測試代碼。除非你做診斷并想知道你是否真的在接收數據,否則無需擔心。
對于發(fā)射器arduino
% Create UIFigure
app.UIFigure = uifigure;
app.UIFigure.Position = [100 100 640 480];
app.UIFigure.Name = ‘UI Figure’;
include命令應該是足夠了,但是如果您以后在數據傳輸方面遇到任何問題,您可能需要查看RadioHead庫文件夾并以相同的格式包含其余文件名。
步驟5 :讓它工作
現在我們已經將所有代碼放在一起并且arduino已經組裝好了,我們可以將arduino連接到您的計算機并加載代碼。確保將正確的代碼發(fā)送到接收和發(fā)送微控制器。您可以在運行時將兩個arduinos連接到您的計算機,但是您必須確保選擇正確的端口向前移動,或者您可以斷開傳輸arduino并在代碼完成后從其他來源斷開電源。上傳。
說到這一點,你應該從IDE工具菜單中選擇連接到你的接收arduino的端口并運行python。
不要打開串行監(jiān)視器這樣做,python無法在顯示器打開時讀取序列。一旦python打開,調用pythonprint函數如下。
% Create TabGroup
app.TabGroup = uitabgroup(app.UIFigure);
app.TabGroup.Position = [1 1 640 480];
這將從arduino串口開始數據收集。如果現在打開python文件夾,您將看到創(chuàng)建了一個名為“test_data.csv”的新.csv文件,該文件包含所有時間和溫度信息。這將是Matlab訪問以執(zhí)行其所有計算和控制的文件。
另一個警告:在訪問或寫入數據時不要打開test_data.csv。如果這樣做,python和/或Matlab代碼將崩潰并發(fā)回錯誤。
如果您決定稍后打開.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:使用程序
此系統(tǒng)的后臺正在進行多項操作。 Arduino和pyton正在收集和記錄溫度數據,Matlab正在從您的手機收集GPS數據并運行計算,以查看您離家有多遠,并根據所有信息設置恒溫器。你進來的地方是提供你的偏好。
運行Matlab GUI代碼。打開.mlapp文件并查看第一個選項卡。您需要自己收集信息,加熱/冷卻裝置的效率和額定功率通常可以在裝置上找到,而您的平均速度只是對您行駛速度的一個很好的估計。輸入值后,點擊“運行診斷”按鈕,程序控制恒溫器收集有關房屋的信息。
轉到下一個菜單。
步驟7:溫度控制
此菜單允許您在家中和離開時選擇您喜歡的溫度。將溫度#1設置為您的舒適溫度,將溫度#2設置為對您的家庭安全的高或低值(確保您在家中有狗等時不將其設置為100度)。
步驟8:歷史數據
最后,您可以使用自動控制來查看您節(jié)省的金額。這基本上估算了如果恒溫器24/7設定為您的首選溫度,然后減去實際使用的能量,將使用多少能量。
-
恒溫器
+關注
關注
4文章
143瀏覽量
21085
發(fā)布評論請先 登錄
恒溫晶振OCXO在地面衛(wèi)星接收器中的應用

物聯(lián)網智能恒溫器解決方案

恒溫晶振對比其他晶振的優(yōu)勢有哪些?

解決方案 | 恒溫器精準控溫 原來有這些“芯”科技!

電腦制作私有云盤,電腦制作私有云盤的教程,個人云電腦是什么以及怎么連接

傳感器類型在智能家居中的應用
松下KAIROS助力Globstream Media打造遠程制作解決方案
使用CC3220 Simplelink單芯片Wi-Fi MCU SoC設計恒溫器

使用MSP430 MCU和TPS60313實現單節(jié)電池恒溫器

使用邏輯和轉換用例優(yōu)化智能恒溫器的設計

陶瓷PTC恒溫發(fā)熱片的阻值是多大?
LM26NV 采用 SOT-23 封裝、具有 ±3°C 精度的出廠預設恒溫器數據表

LM27 SOT-23,±3°C精確,120°C-150°C出廠預設恒溫器數據表

評論