Inhoudsopgave:

Smart Home-thermostaat: 4 stappen
Smart Home-thermostaat: 4 stappen

Video: Smart Home-thermostaat: 4 stappen

Video: Smart Home-thermostaat: 4 stappen
Video: Термостат Terneo sx для теплых полов, возможности, настройка, интеграция в Home Assistant 2024, November
Anonim
Slimme huisthermostaat
Slimme huisthermostaat

Onze Smart Home Thermostat is een programma waarmee een huishouden automatisch geld kan besparen op energierekeningen op basis van iemands voorkeuren.

Stap 1: Overzicht

De Smart Home Thermostaat gebruikt een temperatuursensor om de temperatuur in huis te krijgen. Deze temperatuurmeting wordt in het programma gezet waar het zal beslissen of het airconditioningsysteem het huis moet verwarmen of koelen op basis van de gewenste temperatuur van de huiseigenaar.

Er zijn twee standen voor de thermostaat: handmatig en automatisch. De handmatige modus die de temperatuur van het huis aanpast aan de gewenste temperatuur, wordt door de gebruiker ingesteld. En de automatische modus van de thermostaat zal de temperatuur van het huis automatisch wijzigen naar door de gebruiker ingestelde temperaturen. Er zijn twee temperatuurinstellingen voor de automatische modus: afwezigheidstemperatuur en huidige temperatuur. De afwezigheidstemperatuur wordt gebruikt om energie te besparen door de thermostaat op een vooraf ingestelde energiebesparende temperatuur te zetten wanneer de gebruiker niet thuis is. De huidige temperatuur wordt gebruikt wanneer de gebruiker thuis is en een comfortabele temperatuur wil. In de automatische modus van de thermostaat zoeken bewegingssensoren actief naar beweging om te bepalen of er iemand thuis is of niet. Op basis van hun uitlezing wordt de thuistemperatuur ingesteld op de afwezigheidstemperatuur of de huidige temperatuur.

Stap 2: Onderdelen en materialen

(15) Doorverbindingsdraden

(4) 220 Ohm Weerstanden

(1) 10K Ohm Weerstand

(1) Temperatuursensor

(1) Fotoweerstand:

(1) DAGU Mini DC-versnellingsbak

(1) Diode

(1) Transistor:

(1) Fotoweerstand:

(1) Broodplank

(1) Arduino MKR

Stap 3: Circuit

Stroomkring
Stroomkring
Stroomkring
Stroomkring
Stroomkring
Stroomkring
Stroomkring
Stroomkring

Afbeelding 1 = Grote afbeelding links

Afbeelding 2 = Rechtsboven

Afbeelding 3 = Midden Rechts

Afbeelding 4 = Rechtsonder

Figuur 1

Met behulp van het bovenstaande diagram hebben we elk van onze drie LED's bedraad. We hebben elke LED uit elkaar geplaatst omdat we met een groot broodplank werkten. Voor kleinere broodplanken kan het nodig zijn om de LED's dichter bij elkaar te plaatsen. Het is ook niet nodig om het breadboard van stroom te voorzien, omdat de LED's zo weinig stroom verbruiken. De 5V aansluiting op het breadboard hebben we niet gebruikt voor de leds. Elke verbinding van de LED's naar onze Arduino is gemaakt zoals de groene draad hierboven. Onze rode, blauwe en groene LED's zijn respectievelijk verbonden met de digitale pin 8, 9 en 10, aangeduid met een rode, blauwe en groene draad in onze afbeelding.

Figuur 2

Het bovenstaande diagram werd gebruikt om de fotoresistor te bedraden. We hebben zelf een paar correcties aangebracht; de concepten zijn echter nog steeds hetzelfde. De fotoresistor moet worden aangesloten op de analoge pin die we in pin A1 hebben. Zorg ervoor dat u een weerstand van 10K ohm gebruikt voor de weerstand die zich het dichtst bij de fotoweerstand bevindt.

figuur 3

Dit is het diagram dat wordt gebruikt om de temperatuursensor te bedraden. Verwar de hier gebruikte transistor niet met de temperatuursensor. Ze zien er bijna identiek uit. De temperatuursensor heeft waarschijnlijk TMP of een ander script geschreven op de platte kant van de sensor. De bedrading hier is heel eenvoudig, onze temperatuursensor is aangesloten op analoge pin A0 met een witte draad.

Figuur 4

De afbeelding hierboven werd gebruikt om de DAGU Mini DC Gearbox te bedraden. De groene draad die aan de versnellingsbak is bevestigd, is eigenlijk de rode draad die erop is aangesloten op onze foto. De versnellingsbak is in ons model met een oranje draad aangesloten op digitale pin 11. Verwar de hier gebruikte transistor niet met de temperatuursensor. Ze zien er bijna identiek uit. De temperatuursensor heeft waarschijnlijk TMP of een ander script geschreven op de platte kant van de sensor. U moet hier de transistor gebruiken en niet de temperatuursensor.

Stap 4: Arduino-code

Hier worden de belangrijkste onderdelen van de code uitgelegd. De code werkt niet alleen met wat hier wordt gegeven. Om de volledige werkende code te krijgen, is er een link onderaan de pagina.

Wanneer u de code van de programmeerbare thermostaat maakt, is een van de eerste dingen die u doet, de sensoren instellen en een for-lus maken die constant temperatuurmetingen van de temperatuursensor ontvangt.

Temperatuursensor en LED instellen:

tempPin = 'A0';%definieer anonieme functie die de spanning omzet in temperatuur tempCfromVolts = @(volt) (volt-0,5)*100; bemonsteringsduur = 5; % seconden. Hoe lang willen we samplen voor samplingInterval = 1; %Hoeveel seconden tussen temperatuurmetingen %setup vector van bemonsteringstijden samplingTimes = 0:samplingInterval:samplingDuration; %bereken het aantal monsters op basis van de duur en het interval numSamples = length(samplingTimes); %preallocate tijdelijke variabelen en variabele voor het aantal metingen dat het zal opslaan tempC = nullen (numSamples, 1); tempF = tempC; %We gebruiken deze keer een for-lus om een vooraf bepaald aantal %temperatuurmetingen te doen

De for-lus:

voor index = 1: numSamples % lees de spanning op tempPin en sla op in variabele volt volt = readVoltage (a, tempPin); tempC(index) = -1*tempCfromVolts(volt+0.3); tempF(index) = tempC(index)*(9/5)+32; %Geformatteerde uitvoer weergeven die de huidige temperatuurmeting communiceert fprintf('Temperatuur op %d seconden is %5.2f C of %5.2f F.\n', … samplingTimes(index), tempC(index), tempF(index)); %merk op dat deze weergave-uitvoer alleen in één keer zichtbaar wordt nadat de code %klaar is uitgevoerd, tenzij u de code kopieert/plakt naar een m-bestand met gewoon script. pauze(samplingInterval) %vertraging tot het einde van de volgende sample

Vervolgens creëren we ons gebruikersmenu zodat de gebruiker kan beslissen of hij de thermostaat in de handmatige of automatische modus wil zetten. We creëren ook een foutcode als de gebruiker geen van beide opties selecteert.

Het menu Handmatige modus vereist dat de gebruiker een getal voor de thermostaattemperatuur instelt, waarna het ofwel het huis verwarmt, het huis koelt of inactief is op basis van metingen. Om dit deel van de code in te stellen, heb je temperatuurmetingen van de temperatuursensor gebruikt en een code gemaakt die het huis zal koelen wanneer de temperatuurmeting hoger is dan de ingestelde temperatuur, en het huis zal verwarmen wanneer de temperatuurmeting lager is dan de ingestelde temperatuur.

Zodra u de temperatuurmetingen hebt, kunt u de code maken die de thermostaat vertelt om het huis te koelen wanneer de temperatuurmeting hoger is dan de ingestelde temperatuur, en het huis te verwarmen wanneer de temperatuurmeting lager is dan de ingestelde temperatuur. Voor het prototype gaat het blauwe lampje branden wanneer de thermostaat moet afkoelen en het rode lampje gaat branden wanneer de thermostaat moet verwarmen.

Menu-instellingen:

keuzes = {'Automatisch', 'Handmatig'};imode = menu('Modus', keuzes) if imode>0 h=msgbox(['Je koos 'keuzes{imode}]); else h=warndlg('Je hebt het menu gesloten zonder een keuze te maken') end waitfor(h);

De handmatige modus vereist dat de gebruiker een temperatuur voor de thermostaat invoert, en op basis van de metingen van de temperatuursensor begint hij ofwel het huis te koelen of het huis te verwarmen. Als de meetwaarde van de temperatuursensor hoger is dan de ingestelde temperatuur, begint hij het huis te koelen. Als de meetwaarde van de temperatuursensor lager is dan de ingestelde temperatuur, zal deze de woning verwarmen.

De handmatige modus start:

if imode == 2 dlg_prompts = {'Welke temperatuur heeft u het liefst?'}; dlg_title = 'Temperatuur'; dlg_defaults = {'68'}; opts. Resize = 'aan'; dlg_ans = inputdlg(dlg_prompts, dlg_title, 1, dlg_defaults, opts); if isempty(dlg_ans) h=warndlg('Je hebt de inputdlg-opdracht geannuleerd'); else temp_manual = str2double(dlg_ans{1}) %[Add Temperature Regulation Setup slide below] end

Binnenin de if-statement voor de handmatige modus moet je de menu-interface schrijven zodat de gebruiker de gewenste thuistemperatuur kan kiezen, en vervolgens een while-statement implementeren dat de thuistemperatuur regelt.

Instelling temperatuurregeling:

while temp_manual <tempF writeDigitalPin(a, 'D9', 1) writeDigitalPin(a, 'D11', 1); end while temp_manual > tempF writeDigitalPin(a, 'D8', 1) writeDigitalPin(a, 'D11', 1); einde

De automatische modus vereist meer invoer dan de handmatige modus. Nadat de gebruiker naar de automatische modus is gegaan, stelt de gebruiker een normale en een afwezigheidstemperatuur in voor zijn thermostaat. Na deze te hebben geselecteerd, op basis van de modus waarin de thermostaat zich bevindt, gaat hij terug naar de temperatuurregelmodus

Stel de automatische modus in:

elseif imode == 1 dlg_prompts = {'Normaal', 'Afwezig'}; dlg_title = 'Temperatuurinstellingen'; dlg_defaults = {'68', '64'}; opts. Resize = 'aan'; dlg_ans = inputdlg(dlg_prompts, dlg_title, 1, dlg_defaults, opts); if isempty(dlg_ans) h=warndlg('Je hebt de inputdlg-opdracht geannuleerd'); else temp_normal = str2double(dlg_ans{1}) temp_away = str2double(dlg_ans{2}) end waitfor(h); %[Voeg bewegingsdetector toe, stap hieronder]

We moeten ook de bewegingssensor instellen voor de instellingen van de automatische modus. Wanneer de bewegingsmelder beweging oppikt, zal hij de temperatuur op de huidige temperatuurinstelling houden, anders wordt hij ingesteld op de afwezigheidstemperatuur.

Run_Motion_Detector(a, inf) while lightStr == 0 temp = temp_away while tempF writeDigitalPin(a, 'D6', 1) ongeacht welke pin rood licht is in ook motor voor ventilator writeDigitalPin (a, 'D9', 1); end end while lightStr == 1 temp = temp_normal writeDigitalPin(a, 'D6', 1) %verandering naar de pin waar het normale licht in zit, terwijl tempF writeDigitalPin(a, 'D6', 1) welke pin ook rood licht is motor voor ventilator writeDigitalPin(a, 'D9', 1); einde einde

De volledige code vind je hier.

Aanbevolen: