Sisällysluettelo:
- Vaihe 1: Yhdistä kaikki
- Vaihe 2: Vastaanotin
- Vaihe 3: Lähetin
- Vaihe 4: Koodi
- Vaihe 5: Tee se toimivaksi
- Vaihe 6: Ohjelman käyttö
- Vaihe 7: Lämpötilan säätö
- Vaihe 8: Historialliset tiedot
Video: Autostat: kauko -termostaatti: 8 vaihetta (kuvilla)
2024 Kirjoittaja: John Day | [email protected]. Viimeksi muokattu: 2024-01-30 09:02
Luultavasti kysyttävä kysymys on "miksi teet toisen etätermostaatin?"
Vastaus tähän kysymykseen on, minun täytyi, ja markkinoiden älykkäät termostaatit ovat liian kalliita.
Oikea varoitus, tämä on "konseptin todiste" -rakenne, joka vaatisi muutaman ylimääräisen lähdön termostaatin ohjaamiseen, mutta ydin on paikallaan ja sitä voidaan muokata olosuhteidesi mukaan. Lisäksi tämä on vielä kesken, joten odota muutamia päivityksiä ja muutoksia (erityisesti Matlab -koodiin)
Aluksi haluan varoittaa sinua, tämä vaatii kolme ohjelmaa (yksi niistä on melko kallista), useita kirjastoja ja ohjelmien tukipaketteja, ja sinun on saatava ne kaikki puhumaan keskenään. Se on päänsärky. Kun tämä varoitus on poissa tieltä, voit aloittaa materiaalien käytön.
Laitteisto
- arduino nano
- arduino uno (tai toinen nano, käytin juuri unoa, koska minulla oli yksi makaamassa)
- valikoituja hyppyjohtoja, jotkut uros/uros ja kaksi sarjaa kolmesta yhdistetystä uros/naarashyppääjästä
- 433 MHz: n radiotaajuusvastaanotin, käytin MX-05V: tä
- 433MHz RF-lähetin, käytin MX-FS-03V
- DHT11 korkean tarkkuuden lämpömittari ja kosteusanturi (käyttämäni on asennettu kolmipiikkiseen siruun ja tarvittavat vastukset on jo asennettu)
- leipälauta (jos et halua juottaa tätä kaikkea yhdessä)
- puhelin, jossa on GPS (tässä tapauksessa iPhone 8, mutta olen käyttänyt myös Galaxy S8: ta)
- 3D -tulostettu säiliö (ei todellakaan tarpeellinen, mikä tahansa säiliö toimii tai ei ollenkaan)
Ohjelmisto
- Matlab MathWorksista (minulla on 2018a-versio, mutta olen käyttänyt myös 2017a-b-versioita)
- Matlab mobile on asennettu puhelimeesi
- arduino -tukipaketti Matlabille
- iPhone -anturipaketti Matlabille
- arduino IDE
- RadioHead -tukipaketit ja arduino IDE: n kirjastot
- DHT11 -kirjasto arduino IDE: lle
- python 3.7 (varmista, että pyserial -kirjasto tai sarjakirjasto on asennettu, mikä sen pitäisi olla versiolle 3.4 tai uudemmalle)
Vaihe 1: Yhdistä kaikki
Ensinnäkin ehdotan, että teet muutamia arduino -opetusohjelmia RF -lähettimien kanssa vain varmistaaksesi, että osat toimivat ja johdotus on oikein. Esimerkkejä on runsaasti, ja koodi on mukana (niille meistä, jotka eivät tiedä juurikaan mitään C: stä ja C ++: sta).
Noudata alla olevia kytkentäkaavioita saadaksesi arduino ja anturit koottua. Yksi asia, joka on pidettävä mielessä kytkettäessä arduinot, on se, että käyttämiäni tietoportteja ei vaadita, mutta ne ovat suositeltavia.
JOS päätät muuttaa käyttämiäsi tietoportteja, sinun on vain määritettävä nastat koodissasi. Henkilökohtaisesti mielestäni on helpompi noudattaa oletusportteja, jotka arduino -kirjastot tunnistavat.
Ja vain selvyyden vuoksi, nano ja uno ovat vaihdettavissa, mutta käytin nanoa projektin lähettimen puolella pienentämään lämpötilamittarin kokoa.
Sivuhuomautus: vihreä nanorakenne on 3D -tulostettu säiliö.
Vaihe 2: Vastaanotin
Vaihe 3: Lähetin
Vaihe 4: Koodi
Kun johdotus on valmis, sinun on saatava kaikki ohjelmat käyntiin ja kirjastot asennettavaksi (jos et ole jo tehnyt sitä), oletan vain, että sinulla on, sinun on käynnistettävä Matlab ja suoritettava iPhonen tukipaketti. Sekä puhelimesi että Matlabin on oltava tässä vaiheessa samassa wifi -verkossa.
Kirjoita Matlabin komentoikkunaan:
liitin päällä
Tämä kehottaa sinua antamaan viisinumeroisen salasanan, jota käytät muodostamaan yhteyden iPhoneen. Muista salasana. Kun olet antanut salasanan, Matlab näyttää joitakin tietoja, kuten IP -osoitteesi. Käytä tätä seuraavassa vaiheessa, joka tulee Matlab mobile -laitteen "Aloittaminen antureilla" -valikon ohjeista.
- Lähetä anturitiedot MathWorks Cloudiin tai tietokoneeseen seuraavasti:
- Jos lähetät anturitietoja tietokoneelle ja jos sitä ei ole jo asennettu, lataa ja asenna MATLAB -tukipaketti Apple iOS -sensoreille MATLABissa.
- Yhdistä MATLAB Mobile MathWorks Cloudiin tai tietokoneeseen Asetusten avulla.
- Luo mobiledev -objekti MATLABissa (tietokoneellasi), esimerkiksi: >> m = mobiledev
- Valitse yksi tai useampi anturi ja napauta Käynnistä.
Kirjaa anturitiedot paikallisesti laitteellesi seuraavasti:
- Valitse Anturit -näytöstä anturit, joista haluat kerätä tietoja.
- Valitse Loki.
- Napauta Käynnistä -painiketta.
- Kun olet kerännyt tiedot, napauta Stop -painiketta.
- Kirjoita ponnahdusikkunaan anturilokin nimi.
- Toista vaiheet 1-5 tarvittaessa.
Tähän osioon viitataan osassa 4, joten tietojen keräämistä ei tarvitse vielä aloittaa. Pidä vain puhelin käden ulottuvilla ja Matlab mobile valmiina.
Nyt sinun on luotava kansio jonnekin tietokoneeseesi Matlab -kooditiedostojen tallentamiseksi. Sinulla on neljä erillistä tiedostoa, kaksi taustatoimintoja (.m -tiedostot) ja yksi Matlab -kooditiedosto käyttöliittymälle (.mlapp).
Ensimmäinen on talosi ilman massalaskenta (tämä kertoo Matlabille, kuinka kauan talosi lämmittäminen/jäähdyttäminen kestää)
function [Mass] = CalcMass (T_ins, P_out, Chng_dir)
runCalc = 0; Tmp_start = T_ins; time_start = kello; time_end = 0 runCalc <= 1 if T_ins == (Tmp_start+(7*Chng_dir)) time_end = clock; PwrCntr = 0; runCalc = 0; muuten PwrCntr = P_out; runCalc = runCalc+0,1 päättymisaika_diag = time_end-time_start Mass = (P_out*time_diag) /7.035
Ja toinen:
function [aikaleimat, pwr_usage] = dist_cntrl (Lat_in, Lon_in, P_out, r_pref, speed, T_pref, mass)
AutoStat = 1; i = 1; kun AutoStat == 1 time_start = kello; m = mobiledev; t = csvread ('arvot.csv', 0, 1); t = t (i); aikaleimat = [0, 0, 0, 0, 0, 0]; pwr_usage = 0; i = i+1; muoto pitkä; %hasrsine-kaava etäisyyden laskemiseen leveysasteen ja %longintude a_hav = (sind ((m. Latitude-Lat_in)./ 2)).^2+cosd (Lat_in).*cosd (m. leveysaste).*(sind ((m. pituuspiiri-pitkä)./2)).^2; c_hav = 2.*atan2d (sqrt (a_hav), sqrt (1-a_hav)); d_hav = 6371.*c_hav; Dist = d_hav.*1000; %arvioi aikaasi palata time_rtn = (Dist-r_pref)./ speed; %laskee tarvittavan termostaatin asetuksen perustuen %ilmastointilaitteen ja kodin ilmamassan virrankatkaisuun. calcTmp_set = ((--**P_out.*time_rtn)./ (massa.*(1.005)))+T_pref; %määrittää, onko termostaatin nykyistä asetusta muutettava, jos pyöreä (calcTmp_set) ~ = pyöreä (t) timeACon = kello; PwrCntr = P_out; timeACon = timeACon + clock-time_start; cost = P_out*timeACon*rate; muuten PwrCntr = 0 lopun aikaleimaa (loppu+1, [1: 6]) = kello; pwr_usage (loppu+1, 1) = PwrCntr; tauko (5) loppu
Molemmat tiedostot ovat Matlab -toimintoja. Sinun ei tarvitse käyttää niitä, ellet aio muuttaa niitä tiettyjen tarpeiden mukaan, koska soitat heille GUI: sta. Tallenna molemmat tiedostot erikseen, ensimmäinen CalcMass.m ja toinen dist_cntrl.m, nämä ovat nimet, joita GUI -koodi käyttää toimintojen kutsumiseen, joten ellet halua muokata jäljellä olevaa koodia, pysy nimeämiskäytäntö.
Ennen kuin pääset GUI -koodiin, sinun on avattava Matlabin sovellusten suunnittelija, jonka voit avata navigoimalla Matlab -valikkorivillä tai suosikkimenetelmälläni, joka kirjoittaa seuraavan komennon Matlab -komentoikkunaan:
sovellusten suunnittelija
Kun sovellusten suunnittelija on auki, avaa uusi sovellustiedosto (.mlapp) ja poista kaikki oletuskoodi koodi -ikkunasta. Korvaa sitten kaikki seuraavilla ja paina suorituspainiketta.
classdef Control_1 <matlab.apps. AppBase % Ominaisuudet, jotka vastaavat sovellusosien ominaisuuksia (Access = public) UIFigure matlab.ui. Figure TabGroup matlab.ui.container. TabGroup SetupTab matlab.ui.container. Tab RunDiagnosticButton matlab.ui.control. painike 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. ui.control. Spinner Temperature2SpinnerLabel matlab.ui.cont rol. 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. Mittarin säästöTab matlab.ui.container. Tab UIAxes matlab.ui.control. UIAxes ThisMonthCostEditFieldLabel matlab.ui.control. Label ThisMonthCostEditField matlab.ui.control. NumericEditField TotalSavingsEditFieldLield.lab.
menetelmät (Access = yksityinen)
% Arvo muutettu toiminto: tempnow
toiminto tempnowValueChanged (sovellus, tapahtuma) temp = app.tempnow. Value; temp = randi ([60, 90], 1, 50) app. Gauge. Value = 0, kun i = pituus (temp) app. Gauge. Value = temp (i) pause (1) end end
% Arvon muuttunut toiminto: TemperatureDirectionSwitch
function TemperatureDirectionSwitchValueChanged (sovellus, tapahtuma) way = app. TemperatureDirectionSwitch. Value; tapa = uint8 (tapa) tapa = pituus (tapa) jos tapa == 4 Chng_dir = -1; muu Chng_dir = 1; loppu Chng_dir; loppuun
% Arvon muuttunut toiminto: DDFH
toiminto DDFHValueChanged (sovellus, tapahtuma) r_pref = app. DDFH. Value; loppuun
% Arvon muutettu toiminto: AvgLocalSpeedEditField
function AvgLocalSpeedEditFieldValueChanged (sovellus, tapahtuma) speed = app. AvgLocalSpeedEditField. Value; loppuun
% Arvon muuttunut toiminto: PowerOutputRatingEditField
function PowerOutputRatingEditFieldValueChanged (sovellus, tapahtuma) value = app. PowerOutputRatingEditField. Value; loppuun
% Arvon muuttunut toiminto: EnergyEfficiencyRatingEditField
function EnergyEfficiencyRatingEditFieldValueChanged (sovellus, tapahtuma) value = app. EnergyEfficiencyRatingEditField. Value; loppuun
% Painike painettu: RunDiagnosticButton
toiminto RunDiagnosticButtonPushed (sovellus, tapahtuma) way = app. TemperatureDirectionSwitch. Value; tapa = uint8 (tapa) tapa = pituus (tapa) jos tapa == 4 Chng_dir = -1; muu Chng_dir = 1; end T_ins = app.tempnow. Value P_out = app. PowerOutputRatingEditField. Value CalcMass1 (T_ins, P_out, Chng_dir)
loppuun
% Arvon muuttunut toiminto: Temperature1Spinner
toiminto Temperature1SpinnerValueChanged (app, event) value = app. Temperature1Spinner. Value; loppuun
% Arvon muuttunut toiminto: Temperature2Spinner
toiminto Temperature2SpinnerValueChanged (app, event) value = app. Temperature2Spinner. Value; loppuun
% Arvo muutettu toiminto: Kytkin
toiminto SwitchValueChanged (sovellus, tapahtuma) m = mobiledev; Lat_in = m. Latitude Lon_in = m. Longitude P_out = 0; r_pref = app. DDFH. Value; T_pref = app. Temperature1Spinner. Value; nopeus = m.nopeus; massa = 200; nopeus = app. AvgLocalSpeedEditField. Value; Auto_Stat = app. Switch. Value; dist_cntrl (Lat_in, Lon_in, P_out, r_pref, T_pref, speed, mass) end end
% Sovelluksen alustus ja rakentaminen
menetelmät (Access = yksityinen)
% Luo UIFigure ja komponentit
function createComponents (sovellus)
% Luo UIFigure
app. UIFigure = uifigure; app. UIFigure. Position = [100100640480]; app. UIFigure. Name = 'Käyttöliittymän kuva';
% Luo välilehtiryhmä
app. TabGroup = uitabgroup (app. UIFigure); app. TabGroup. Position = [1 1 640 480];
% Luo SetupTab
app. SetupTab = uitab (app. TabGroup); app. SetupTab. Title = 'Asennus';
% Luo RunDiagnosticButton
app. RunDiagnosticButton = uibutton (app. SetupTab, 'push'); app. RunDiagnosticButton. ButtonPushedFcn = createCallbackFcn (sovellus, @RunDiagnosticButtonPushed, true); app. RunDiagnosticButton. FontWeight = 'lihavoitu'; app. RunDiagnosticButton. Position = [465 78103 23]; app. RunDiagnosticButton. Text = 'Suorita diagnostiikka';
% Luo EnergyEfficiencyRatingEditFieldLabel
app. EnergyEfficiencyRatingEditFieldLabel = uilabel (app. SetupTab); app. EnergyEfficiencyRatingEditFieldLabel. HorizontalAlignment = 'oikea'; app. EnergyEfficiencyRatingEditFieldLabel. Position = [8 425 135 22]; app. EnergyEfficiencyRatingEditFieldLabel. Text = 'Energiatehokkuusluokitus';
% Luo EnergyEfficiencyRatingEditField
app. EnergyEfficiencyRatingEditField = uieditfield (app. SetupTab, 'numeerinen'); app. EnergyEfficiencyRatingEditField. Limits = [0 100]; app. EnergyEfficiencyRatingEditField. ValueChangedFcn = createCallbackFcn (app, @EnergyEfficiencyRatingEditFieldValueChanged, true); app. EnergyEfficiencyRatingEditField. HorizontalAlignment = 'keskusta'; app. EnergyEfficiencyRatingEditField. Position = [158 425 100 22];
% Luo PowerOutputRatingEditFieldLabel
app. PowerOutputRatingEditFieldLabel = uilabel (app. SetupTab); app. PowerOutputRatingEditFieldLabel. HorizontalAlignment = 'oikea'; app. PowerOutputRatingEditFieldLabel. Position = [18 328 118 22]; app. PowerOutputRatingEditFieldLabel. Text = 'Teholähtöluokitus';
% Luo PowerOutputRatingEditField
app. PowerOutputRatingEditField = uieditfield (app. SetupTab, 'numeerinen'); app. PowerOutputRatingEditField. Limits = [0 Inf]; app. PowerOutputRatingEditField. ValueChangedFcn = createCallbackFcn (app, @PowerOutputRatingEditFieldValueChanged, true); app. PowerOutputRatingEditField. HorizontalAlignment = 'keskusta'; app. PowerOutputRatingEditField. Position = [151 328 100 22];
% Luo AvgLocalSpeedEditFieldLabel
app. AvgLocalSpeedEditFieldLabel = uilabel (app. SetupTab); app. AvgLocalSpeedEditFieldLabel. HorizontalAlignment = 'oikea'; app. AvgLocalSpeedEditFieldLabel. Position = [27 231 100 22]; app. AvgLocalSpeedEditFieldLabel. Text = 'Keskim. Paikallinen nopeus”;
% Luo AvgLocalSpeedEditField
app. AvgLocalSpeedEditField = uieditfield (app. SetupTab, 'numeerinen'); app. AvgLocalSpeedEditField. Limits = [0 70]; app. AvgLocalSpeedEditField. ValueChangedFcn = createCallbackFcn (sovellus, @AvgLocalSpeedEditFieldValueChanged, true); app. AvgLocalSpeedEditField. HorizontalAlignment = 'keskusta'; app. AvgLocalSpeedEditField. Position = [142 231 100 22];
% Luo DesiredDistancefromHouseEditFieldLabel
app. DesiredDistancefromHouseEditFieldLabel = uilabel (app. SetupTab); app. DesiredDistancefromHouseEditFieldLabel. HorizontalAlignment = 'oikea'; app. DesiredDistancefromHouseEditFieldLabel. Position = [24129100 28]; app. DesiredDistancefromHouseEditFieldLabel. Text = {'Haluttu etäisyys'; 'talolta'};
% Luo DDFH
app. DDFH = uieditfield (app. SetupTab, 'numeerinen'); app. DDFH. Limits = [0 50]; app. DDFH. ValueChangedFcn = createCallbackFcn (sovellus, @DDFHValueChanged, true); app. DDFH. HorizontalAlignment = 'keskus'; app. DDFH. Position = [139 135100 22];
% Luo TemperatureDirectionSwitchLabel
app. TemperatureDirectionSwitchLabel = uilabel (app. SetupTab); app. TemperatureDirectionSwitchLabel. HorizontalAlignment = 'keskusta'; app. TemperatureDirectionSwitchLabel. Position = [410343124 22]; app. TemperatureDirectionSwitchLabel. Text = 'Lämpötilan suunta';
% Luo TemperatureDirectionSwitch
app. TemperatureDirectionSwitch = uiswitch (app. SetupTab, 'liukusäädin'); app. TemperatureDirectionSwitch. Items = {'Ylös', 'Alas'}; app. TemperatureDirectionSwitch. ValueChangedFcn = createCallbackFcn (sovellus, @TemperatureDirectionSwitchValueChanged, true); app. TemperatureDirectionSwitch. Position = [449380 45 20]; app. TemperatureDirectionSwitch. Value = 'Ylös';
% Luo TempSettingsTab
app. TempSettingsTab = uitab (app. TabGroup); app. TempSettingsTab. Title = 'Lämpötila Asetukset';
% Luo Temperature1SpinnerLabel
app. Temperature1SpinnerLabel = uilabel (app. TempSettingsTab); app. Temperature1SpinnerLabel. HorizontalAlignment = 'keskus'; app. Temperature1SpinnerLabel. Position = [66363 76 28]; app. Temperature1SpinnerLabel. Text = {'Lämpötila'; '#1'};
% Luo Temperature1Spinner
app. Temperature1Spinner = uispinner (app. TempSettingsTab); app. Temperature1Spinner. Limits = [60 90]; app. Temperature1Spinner. ValueChangedFcn = createCallbackFcn (sovellus, @Temperature1SpinnerValueChanged, true); app. Temperature1Spinner. Position = [157 346 100 68]; app. Temperature1Spinner. Value = 60;
% Luo Temperature2SpinnerLabel
app. Temperature2SpinnerLabel = uilabel (app. TempSettingsTab); app. Temperature2SpinnerLabel. HorizontalAlignment = 'keskus'; app. Temperature2SpinnerLabel. Position = [66 248 76 28]; app. Temperature2SpinnerLabel. Text = {'Lämpötila'; '#2'};
% Luo Temperature2Spinner
app. Temperature2Spinner = uispinner (app. TempSettingsTab); app. Temperature2Spinner. Limits = [60 90]; app. Temperature2Spinner. ValueChangedFcn = createCallbackFcn (sovellus, @Temperature2SpinnerValueChanged, true); app. Temperature2Spinner. Position = [157 230 100 70]; app. Temperature2Spinner. Value = 60;
% Luo kytkin
app. Switch = uiswitch (app. TempSettingsTab, 'liukusäädin'); app. Switch. Items = {'1', '0'}; app. Switch. ValueChangedFcn = createCallbackFcn (sovellus, @SwitchValueChanged, true); app. Switch. FontName = 'Nyala'; app. Switch. FontSize = 28; app. Switch. Position = [522 21 74 32]; app. Switch. Value = '0';
% Luo EditFieldLabel
app. EditFieldLabel = uilabel (app. TempSettingsTab); app. EditFieldLabel. HorizontalAlignment = 'oikea'; app. EditFieldLabel. Position = [374 291 25 22]; app. EditFieldLabel. Text = '';
% Luo väliaika
app.tempnow = uieditfield (app. TempSettingsTab, 'numeerinen'); app.tempnow. Limits = [60 89]; app.tempnow. ValueChangedFcn = createCallbackFcn (sovellus, @tempnowValueChanged, true); app.tempnow. HorizontalAlignment = 'keskus'; app.tempnow. FontSize = 26; app.tempnow. Position = [409230133117]; app.tempnow. Value = 60;
% Luo GaugeLabel
app. GaugeLabel = uilabel (app. TempSettingsTab); app. GaugeLabel. HorizontalAlignment = 'keskus'; app. GaugeLabel. Position = [225 32 42 22]; app. GaugeLabel. Text = 'Mittari';
% Luo mittari
app. Gauge = uigauge (app. TempSettingsTab, 'circular'); app. Gauge. Limits = [60 90]; app. Gauge. MajorTicks = [60 65 70 75 80 85 90]; app. Gauge. Position = [185 6912020]; app. Gauge. Value = 60;
% Luo säästövälilehti
app. SavingsTab = uitab (app. TabGroup); app. SavingsTab. Title = 'Säästöt';
% Luo UIAxeja
app. UIAxes = uiaxes (app. SavingsTab); title (app. UIAxes, 'Savings') xlabel (app. UIAxes, 'Month and Year') ylabel (app. UIAxes, 'Money') app. UIAxes. PlotBoxAspectRatio = [1 0.60666666666666 0.606666666666667]; app. UIAxes. Color = [0,9412 0,9412 0,9412]; app. UIAxes. Position = [146 219 348 237];
% Luo ThisMonthCostEditFieldLabel
app. This kuukausihintaEditKenttäLabel = uilabel (app. SavingsTab); app. ThisMonthCostEditFieldLabel. HorizontalAlignment = 'keskusta'; app. ThisMonthCostEditFieldLabel. Position = [439 96 94 22]; app. ThisMonthCostEditFieldLabel. Text = 'Tämän kuukauden hinta';
% Luo ThisMonthCostEditField
app. ThisMonthCostEditField = uieditfield (app. SavingsTab, 'numeerinen'); app. ThisMonthCostEditField. Limits = [0 Inf]; app. ThisMonthCostEditField. ValueDisplayFormat = '$%7.2f'; app. ThisMonthCostEditField. HorizontalAlignment = 'keskusta'; app. ThisMonthCostEditField. Position = [417 39137 58];
% Luo TotalSavingsEditFieldLabel
app. TotalSavingsEditFieldLabel = uilabel (app. SavingsTab); app. TotalSavingsEditFieldLabel. HorizontalAlignment = 'oikea'; app. TotalSavingsEditFieldLabel. Position = [111 96 77 22]; app. TotalSavingsEditFieldLabel. Text = 'Yhteensä säästöt';
% Luo TotalSavingsEditField
app. TotalSavingsEditField = uieditfield (app. SavingsTab, 'numeerinen'); app. TotalSavingsEditField. Limits = [0 Inf]; app. TotalSavingsEditField. ValueDisplayFormat = '$%9.2f'; app. TotalSavingsEditField. HorizontalAlignment = 'keskusta'; app. TotalSavingsEditField. Position = [88 39137 58]; loppu loppu
menetelmät (Access = public)
% Rakenna sovellus
function app = Control_1
% Luo ja määritä komponentteja
createComponents (sovellus)
% Rekisteröi sovellus App Designerilla
registerApp (sovellus, sovellus. UIFigure)
jos nargout == 0
selkeä sovelluksen loppu
% Koodi, joka suoritetaan ennen sovelluksen poistamista
toiminto poista (sovellus)
% Poista UIFigure, kun sovellus poistetaan
poista (app. UIFigure) loppu loppu
Saat todennäköisesti virheen, mikä ei ole ongelma. Sulje vain käyttöliittymä, joka luotiin suorituksen painamisen jälkeen, keräämme loput tarvittavat ohjelmat ja tiedot hetkessä.
Koska Matlab on asennettu, voimme siirtyä pythoniin. Suorita ensin python -ohjelma joko komentoriviltä (Windows) tai käyttämällä.exe -tiedostoa python -kansiossasi. Varmista, että kaikki asianmukaiset kirjastot on asennettu käyttämällä import -komentoa.
tuoda sarja
tuonti aika tuonti csv
Nämä ovat kolme kirjastoa, jotka sinun on aloitettava, vaikka teemme pian oman kirjaston. Jos näissä komennoissa tapahtui jonkinlainen virhe, palaa takaisin ja varmista, että kirjastot on asennettu ja että ne ovat python -kansion Lib -kansiossa. Seuraavaksi luomme pythonlogger -kirjaston. Tämä nimi ei ole välttämätön, voit kutsua sitä miten haluat, se on vain luomasi python -tiedoston (.py) nimi.
Avaa tekstieditori, käytän Sublime3: ta, mutta muistilehtiö toimii hienosti, ja kirjoita tämä koodi.
def pythonprint ():
tuonti pythonlogger tuonti sarjatuonnin aika tuonti csv ser = serial. Serial ('COM8') # COM8 on arduino -sarjaportti, tämä on todennäköisesti erilainen jokaiselle käyttäjälle, ts. tarkista sarjaporttisi arduino IDE ser.flushInput () Totta: try: ser_bytes = ser.readline () print (ser_bytes) with open ("test_data.csv", "a") kuten f: írtaja = csv.writer (f, erotin = ",") # asettaa tiedot kirjoitetaan pilkuilla erotettuna kirjoittajana.kirjoittaja ([aika.aika (), ser_bytes]) #kirjoittaa tiedot kohteeseen test_data.csv paitsi: print ("Virhe tapahtui") break
Tallenna teksti "lisää haluamasi kirjaston nimi".py Lib -kansioon. Huomaa myös, että def pythonprint () -rivi määrittää sen toiminnon nimen, jota aiot kutsua, joten voit muuttaa sen def "lisää toiminnolle haluamasi nimi" (). Kun kirjasto on tallennettu, voimme siirtyä arduino -koodiin.
Avaa arduino IDE ja avaa kaksi uutta luonnosikkunaa. Tallenna nämä kaksi luonnostiedostoa jonnekin kätevään paikkaan, näiden tiedostojen nimellä ei ole väliä. Poista sitten kaikki oletuskoodit ja korvaa ne seuraavalla.
Vastaanottava arduino:
#sisältää
#include #include #include // tätä ei käytetä, mutta sitä tarvitaan RH_ASK -ohjaimen kääntämiseen; structure dataStruct {float temp; } myData; void setup () {Serial.begin (9600); // Virheenkorjaus vain, jos (! Driver.init ()) Serial.println ("init epäonnistui"); } void loop () {uint8_t buf [RH_ASK_MAX_MESSAGE_LEN]; uint8_t buflen = sizeof (buf); if (driver.recv (buf, & buflen)) // Ei-estävä {int i; // Viesti, jolla on hyvä tarkistussumma, vastaanotettu. //driver.printBuffer("Got: ", buf, buflen); memcpy (& myData, buf, sizeof (myData)); Serial.println (""); Sarjajälki (myData.temp); }}
P. S. //driver.printBuffer ……. jne. rivi on testikoodi. Sinun ei tarvitse huolehtia siitä, ellet tee diagnooseja ja haluat selvittää, vastaanotatko todella tietoja.
Lähettimelle arduino
#sisältää
#include #include #include // tätä ei käytetä, mutta sitä tarvitaan kääntämiseen #include #include int pin = 4; DHT11 dht11 (nasta); RH_ASK -ohjain; structure dataStruct {float temp; } myData; tavu tx_buf [sizeof (omat tiedot)] = {0}; // Argumentit ovat siis bittinopeutta, lähetysnasta (tx), // vastaanottotappi (rx), ppt -nasta, isInverse. Kahta viimeistä ei käytetä.void setup () {Serial.begin (9600); // Virheenkorjaus vain, jos (! Driver.init ()) Serial.println ("init epäonnistui"); } void loop () {int err; kelluva lämpötila, humi; uint8_t viesti; jos ((err = dht11.read (humi, temp)) == 0) myData.temp = temp; memcpy (tx_buf, & myData, sizeof (myData)); tavu zize = sizeof (myData); {Serial.println (myData.temp); driver.send ((uint8_t *) tx_buf, zize); driver.waitPacketSent (); // keskeytä suoritus, kunnes kaikki tiedot on lähetetty viive (2000); // odota 2 sekuntia}}
Sisällytyskomentojen pitäisi riittää, mutta jos sinulla on myöhemmin ongelmia tiedonsiirron kanssa, sinun kannattaa etsiä RadioHead -kirjaston kansio ja sisällyttää loput tiedostonimet samassa muodossa.
Vaihe 5: Tee se toimivaksi
Nyt kun meillä on kaikki koodit yhdessä ja arduino on koottu, voimme kytkeä arduinon tietokoneeseesi ja ladata koodin. Varmista, että lähetät oikean koodin vastaanottaville ja lähettäville mikro -ohjaimille. Voit kytkeä molemmat arduinot tietokoneeseen, kun tämä on käynnissä, mutta sinun on varmistettava, että oikea portti on valittu eteenpäin, tai voit irrottaa lähettävän arduinon ja kytkeä sen virran toisesta lähteestä, kun koodi on ladattu.
Tästä syystä sinun pitäisi valita IDE -työkaluvalikosta portti, joka on liitetty vastaanottavaan arduinoosi, ja suorittaa python.
Älä avaa sarjamonitoria, kun teet tämän, python ei voi lukea sarjaa näytön ollessa auki. Kun python on auki, kutsu pythonprint -toiminto seuraavasti.
pythonlogger.pythonprint ()
Tämä aloittaa tiedonkeruun arduino -sarjaportista. Jos avaat python -kansion nyt, näet, että on luotu uusi.csv -tiedosto nimeltä "test_data.csv", joka sisältää kaikki aika- ja lämpötilatiedot. Tämä on tiedosto, johon Matlab käyttää kaikkia laskelmiaan ja ohjauksiaan.
Toinen varoitus: älä avaa test_data.csv, kun tietoja käytetään tai kirjoitetaan. Jos teet niin, python ja/tai Matlab -koodi kaatuu ja lähettää takaisin virheen
Jos päätät avata.csv -tiedoston myöhemmin, huomaat, että aika -sarake on vain suuri numerojono. Tämä johtuu siitä, että time.time () -komento kirjoittaa sekuntien määrän 1. tammikuuta 1970 jälkeen.
Tässä vaiheessa python tulostaa sarjaportista lukemansa lämpötilatiedot. Sen pitäisi näyttää tältä:
b'25.03 '/r/n
Älä välitä ylimääräisistä merkeistä, Matlab -koodi indeksoi.csv -tiedoston toisen sarakkeen viisi keskimmäistä arvoa.
Nyt kun kaikki tukiohjelmat toimivat ja tietoja kerätään, voimme aloittaa GPS -tietojen keräämisen aiemmin määritetystä Matlab -mobiilisovelluksesta ja suorittaa Matlab GUI -koodin. Kun olet Matlab mobilen anturivälilehdessä, valitse GPS ja paina käynnistyspainiketta.
Jos olet uusi Matlab -mobiililaite, palaa vaiheeseen 4 ja katso yllä olevat kuvakaappaukset. Jos sinulla on edelleen ongelmia, varmista, että olet yhteydessä tietokoneeseen, jonka valitsit aiemmin (asetusvälilehdessä), ja käytä "connector on" -komennon linkkiä tarkistaaksesi, että Matlab on online -tilassa.
Vaihe 6: Ohjelman käyttö
Tässä järjestelmässä tapahtuu useita asioita taustalla. Arduino ja pyton keräävät ja kirjaavat lämpötilatietoja, Matlab kerää GPS -tietoja puhelimestasi ja suorittaa laskelmia nähdäkseen, kuinka kaukana olet kotoasi, ja asettaa termostaatin kaikkien näiden tietojen perusteella. Paikka, jossa tulet, tarjoaa mieltymyksesi.
Suorita Matlab GUI -koodi. Avaa.mlapp -tiedosto ja katso ensimmäinen välilehti. Sinun on kerättävä tiedot itse, lämmitys-/jäähdytysyksikön tehokkuus ja teholuokitus löytyvät yleensä itse laitteesta, ja keskinopeutesi on vain hyvä arvio ajon nopeudesta. Kun arvot on syötetty, paina "Suorita diagnostiikka" -painiketta ja ohjelma ohjaa termostaattiasi kerätäksesi tietoja talostasi.
Siirry seuraavaan valikkoon.
Vaihe 7: Lämpötilan säätö
Tämän valikon avulla voit valita haluamasi lämpötilan kotona ja poissa. Aseta lämpötila #1 mukavaan lämpötilaasi ja lämpötila #2 korkeaan tai matalaan arvoon, joka on turvallinen kotillesi (varmista, ettet aseta sitä 100 asteeseen, kun sinulla on koiria kotona jne.).
Vaihe 8: Historialliset tiedot
Lopuksi voit katsoa, kuinka paljon rahaa säästät automaattisen ohjauksen avulla. Tämä arvioi olennaisesti sen, kuinka paljon energiaa käytettäisiin, jos termostaatti asetettaisiin haluttuun lämpötilaan 24/7, ja vähennetään sitten todellinen käytetty energia.
Onnea rakentamiseen.
Suositeltava:
Kauko -ohjattavat LED -silmät ja pukuhuppu: 7 vaihetta (kuvilla)
Kauko -ohjattavat LED -silmät ja pukuhuppu: Twin Jawas! Tupla Orko! Kaksi kummitusvelhoa Bubble-Bobblesta! Tämä pukuhuppu voi olla mikä tahansa LED-silmäinen olento, jonka valitset vain vaihtamalla värejä. Tein tämän projektin ensimmäisen kerran vuonna 2015 hyvin yksinkertaisella piirillä ja koodilla, mutta tänä vuonna halusin cr
Smokin ' - kauko -ohjattava savukone halvalla: 5 vaihetta (kuvilla)
Smokin ' - Kauko -ohjattava savukone halvalla: Tämä on lyhyt ohje kuinka tehdä suhteellisen pieni, kauko -ohjattava, halpa ja hauska pieni savukone, jota voidaan käyttää ystävien keppontaan, taikatemppujen tekemiseen, ilmavirtojen testaamiseen tai mihin tahansa Vastuuvapauslauseke: Tämä rakenne sisältää
DIY Ir Kauko -ohjattava LED -nauha: 10 vaihetta (kuvilla)
DIY Ir -kauko -ohjattava led -nauha: Hei kaikki, tervetuloa uusiin oppaisiimme, koska tiedät jo pikkukuvasta, että tässä projektissa aiomme tehdä Ir -led -nauhaohjaimen, jota voidaan ohjata millä tahansa yleisesti saatavilla olevalla IR -kaukosäätimellä käytetty
Kauko -ohjattava ilmatyynyalus: 8 vaihetta (kuvilla)
Kauko -ohjattavat ilmatyynyalukset: ss
Kauko-ohjattavan 3D-tulostetun itsetasapainorobotin luominen: 9 vaihetta (kuvilla)
Kauko-ohjattavan 3D-tulostetun itsetasapainorobotin luominen: Tämä on edellinen B-robotin versio. 100% OPEN SOURCE / Arduino -robotti. CODE, 3D -osat ja elektroniikka ovat auki, joten voit muokata sitä tai luoda valtavan version robotista. Jos sinulla on epäilyksiä, ideoita tai tarvitset apua