Πίνακας περιεχομένων:

Θερμοστάτης έξυπνου σπιτιού: 4 βήματα
Θερμοστάτης έξυπνου σπιτιού: 4 βήματα

Βίντεο: Θερμοστάτης έξυπνου σπιτιού: 4 βήματα

Βίντεο: Θερμοστάτης έξυπνου σπιτιού: 4 βήματα
Βίντεο: Θερμοστάτης WiFi ! #smarthomepatra 2024, Ιούλιος
Anonim
Θερμοστάτης Smart Home
Θερμοστάτης Smart Home

Ο Θερμοστάτης Smart Home μας είναι ένα πρόγραμμα που μπορεί να εξοικονομήσει αυτόματα χρήματα από το νοικοκυριό σε λογαριασμούς κοινής ωφέλειας με βάση τις προτιμήσεις ενός ατόμου.

Βήμα 1: Επισκόπηση

Ο θερμοστάτης Smart Home χρησιμοποιεί αισθητήρα θερμοκρασίας για να πάρει τη θερμοκρασία του σπιτιού. Αυτή η ένδειξη θερμοκρασίας μπαίνει στο πρόγραμμα όπου θα αποφασίσει εάν το σύστημα κλιματισμού χρειάζεται να θερμάνει ή να ψύξει το σπίτι με βάση την επιθυμητή θερμοκρασία ιδιοκτήτη σπιτιού.

Υπάρχουν δύο τρόποι για τον θερμοστάτη: χειροκίνητος και αυτόματος. Η χειροκίνητη λειτουργία που θα προσαρμόσει τη θερμοκρασία του σπιτιού σε οποιαδήποτε επιθυμητή θερμοκρασία έχει οριστεί από τον χρήστη. Και η αυτόματη λειτουργία του θερμοστάτη θα αλλάξει αυτόματα τη θερμοκρασία του σπιτιού σε θερμοκρασίες που έχει ορίσει ο χρήστης. Θα υπάρχουν δύο ρυθμίσεις θερμοκρασίας για την αυτόματη λειτουργία: μακριά θερμοκρασία και τρέχουσα θερμοκρασία. Η θερμοκρασία εκτός λειτουργίας χρησιμοποιείται για εξοικονόμηση ενέργειας αλλάζοντας τον θερμοστάτη σε μια προκαθορισμένη θερμοκρασία εξοικονόμησης ενέργειας όποτε ο χρήστης δεν είναι στο σπίτι. Η τρέχουσα θερμοκρασία πρόκειται να χρησιμοποιηθεί όταν ο χρήστης είναι στο σπίτι και θέλει μια άνετη θερμοκρασία. Όταν βρίσκονται στην αυτόματη λειτουργία του θερμοστάτη, οι αισθητήρες κίνησης αναζητούν ενεργά κίνηση για να καθορίσουν αν κάποιος είναι σπίτι ή όχι. Με βάση την ανάγνωσή τους, η θερμοκρασία του σπιτιού θα ρυθμιστεί είτε στη θερμοκρασία εκτός είτε στην τρέχουσα θερμοκρασία.

Βήμα 2: Μέρη και υλικά

(15) Jumper Wires

(4) Αντίσταση 220 Ohm

(1) Αντίσταση 10K Ohm

(1) Αισθητήρας θερμοκρασίας

(1) Αντίσταση φωτογραφιών

(1) DAGU Mini DC κιβώτιο ταχυτήτων

(1) Δίοδος

(1) Τρανζίστορ

(1) Φωτοαντίσταση

(1) Breadboard

(1) Arduino MKR

Βήμα 3: Κύκλωμα

Κύκλωμα
Κύκλωμα
Κύκλωμα
Κύκλωμα
Κύκλωμα
Κύκλωμα
Κύκλωμα
Κύκλωμα

Εικόνα 1 = Μεγάλη αριστερή εικόνα

Εικόνα 2 = Επάνω δεξιά

Εικόνα 3 = Μέση Δεξιά

Εικόνα 4 = Κάτω δεξιά

Φιγούρα 1

Χρησιμοποιώντας το παραπάνω διάγραμμα, συνδέσαμε το καθένα από τα τρία LED μας. Διαχωρίσαμε κάθε LED αφού εργαζόμασταν με μια μεγάλη σανίδα ψωμιού. Για μικρότερες σανίδες ψωμιού, μπορεί να χρειαστεί να τοποθετήσετε τα LED πιο κοντά. Επίσης, είναι περιττό να τροφοδοτήσετε το breadboard, επειδή οι λυχνίες LED αντλούν τόσο λίγη ενέργεια. Δεν χρησιμοποιήσαμε τη σύνδεση 5V στο breadboard για τα LED. Κάθε σύνδεση από τις λυχνίες LED στο Arduino μας έγινε σαν το πράσινο καλώδιο που βρίσκεται παραπάνω. Οι κόκκινες, μπλε και πράσινες λυχνίες LED μας συνδέονται με το Pinηφιακό Pin 8, 9 και 10 αντίστοιχα, που ορίζονται με ένα κόκκινο, μπλε και πράσινο σύρμα στην εικόνα μας.

Σχήμα 2

Το παραπάνω διάγραμμα χρησιμοποιήθηκε για την καλωδίωση της φωτοαντίστασης. Κάναμε μερικές δικές μας διορθώσεις. ωστόσο οι έννοιες παραμένουν ίδιες. Ο φωτοαντιστάτης πρέπει να είναι συνδεδεμένος με έναν αναλογικό πείρο που έχουμε στον πείρο Α1. Βεβαιωθείτε ότι χρησιμοποιείτε αντίσταση 10K ohm για την αντίσταση που βρίσκεται πιο κοντά στη φωτοαντίσταση.

Εικόνα 3

Αυτό είναι το διάγραμμα που χρησιμοποιείται για την καλωδίωση του αισθητήρα θερμοκρασίας. Φροντίστε να μην μπερδέψετε το τρανζίστορ που χρησιμοποιείται εδώ με τον αισθητήρα θερμοκρασίας. Μοιάζουν σχεδόν πανομοιότυπα. Ο αισθητήρας θερμοκρασίας θα έχει πιθανώς TMP ή κάποιο άλλο σενάριο γραμμένο στην επίπεδη πλευρά του αισθητήρα. Η καλωδίωση εδώ είναι πολύ απλή Ο αισθητήρας θερμοκρασίας μας είναι συνδεδεμένος στην αναλογική ακίδα A0 με λευκό σύρμα.

Εικόνα 4

Η παραπάνω εικόνα χρησιμοποιήθηκε για την καλωδίωση του DAGU Mini DC Gearbox. Το πράσινο σύρμα που συνδέεται με το κιβώτιο ταχυτήτων είναι στην πραγματικότητα το κόκκινο σύρμα που συνδέεται με αυτό στην εικόνα μας. Το κιβώτιο ταχυτήτων συνδέεται με τον ψηφιακό πείρο 11 με ένα πορτοκαλί σύρμα στο μοντέλο μας. Φροντίστε να μην μπερδέψετε το τρανζίστορ που χρησιμοποιείται εδώ με τον αισθητήρα θερμοκρασίας. Μοιάζουν σχεδόν πανομοιότυπα. Ο αισθητήρας θερμοκρασίας θα έχει πιθανώς TMP ή κάποιο άλλο σενάριο γραμμένο στην επίπεδη πλευρά του αισθητήρα. Πρέπει να χρησιμοποιήσετε το τρανζίστορ εδώ και όχι τον αισθητήρα θερμοκρασίας.

Βήμα 4: Κωδικός Arduino

Εδώ, εξηγούνται τα πιο σημαντικά μέρη του κώδικα. Ο κώδικας δεν θα λειτουργεί μόνο με αυτά που δίνονται εδώ. Για να λάβετε τον πλήρη κωδικό εργασίας, υπάρχει ένας σύνδεσμος στο κάτω μέρος της σελίδας.

Κατά τη δημιουργία του κωδικού του προγραμματιζόμενου θερμοστάτη, ένα από τα πρώτα πράγματα που κάνετε είναι να ρυθμίσετε τους αισθητήρες και να δημιουργήσετε ένα βρόχο για το οποίο θα λαμβάνει συνεχώς μετρήσεις θερμοκρασίας από τον αισθητήρα θερμοκρασίας.

Ρύθμιση αισθητήρα θερμοκρασίας και LED:

tempPin = 'A0';%ορίζει ανώνυμη συνάρτηση που μετατρέπει την τάση σε θερμοκρασία tempCfromVolts = @(βολτ) (βολτ-0.5)*100; samplingDuration = 5; %δευτερόλεπτα. Πόσο καιρό θέλουμε να κάνουμε δειγματοληψία για samplingInterval = 1; %Πόσα δευτερόλεπτα μεταξύ των μετρήσεων θερμοκρασίας %ρυθμίστε το διάνυσμα των δειγματοληπτικών χρόνων samplingTimes = 0: samplingInterval: samplingDuration; %υπολογίστε τον αριθμό των δειγμάτων με βάση τη διάρκεια και το διάστημα numSamples = μήκος (samplingTimes). %προ -κατανομή μεταβλητών temp και μεταβλητής για τον αριθμό των μετρήσεων που θα αποθηκεύσει tempC = μηδενικά (numSamples, 1); tempF = tempC; %Αυτή τη φορά θα χρησιμοποιήσουμε έναν βρόχο for για να λάβουμε έναν προκαθορισμένο αριθμό %των μετρήσεων θερμοκρασίας

Ο βρόχος for:

για index = 1: numSamples %διαβάζει την τάση στο tempPin και αποθηκεύει σε μεταβλητά βολτ βολτ = readVoltage (a, tempPin); tempC (δείκτης) = -1*tempCfromVolts (βολτ+0,3); tempF (index) = tempC (index)*(9/5) +32; %Μορφοποιημένη έξοδος εμφάνισης που μεταδίδει την τρέχουσα ένδειξη θερμοκρασίας fprintf ('Η θερμοκρασία σε %d δευτερόλεπτα είναι %5.2f C ή %5.2f F. / n',… samplingTimes (index), tempC (index), tempF (index)); %σημειώστε ότι αυτή η έξοδος οθόνης θα είναι ορατή μόνο αμέσως μετά την ολοκλήρωση του κώδικα %, εκτός εάν αντιγράψετε/επικολλήσετε τον κώδικα σε ένα απλό αρχείο αρχείου δέσμης ενεργειών. παύση (samplingInterval) %καθυστέρηση έως το επόμενο τέλος του δείγματος

Στη συνέχεια, δημιουργούμε το μενού χρήστη για να αποφασίσει ο χρήστης εάν θα θέσει τον Θερμοστάτη σε χειροκίνητη ή αυτόματη λειτουργία. Δημιουργούμε επίσης έναν κωδικό σφάλματος εάν ο χρήστης δεν επιλέξει καμία από τις δύο επιλογές.

Το μενού χειροκίνητης λειτουργίας απαιτεί από τον χρήστη να ορίσει έναν αριθμό για τη θερμοκρασία του θερμοστάτη, στη συνέχεια είτε θα θερμάνει το σπίτι, είτε θα ψύξει το σπίτι, είτε θα είναι σε αδράνεια με βάση τις ενδείξεις. Για να ρυθμίσετε αυτό το μέρος του κώδικα, χρησιμοποιήσατε μετρήσεις θερμοκρασίας από τον αισθητήρα θερμοκρασίας και δημιουργήσατε κώδικα που θα δροσίσει το σπίτι όταν η ένδειξη θερμοκρασίας είναι υψηλότερη από τη ρυθμισμένη θερμοκρασία και θερμαίνει το σπίτι όταν η ένδειξη θερμοκρασίας είναι χαμηλότερη από τη ρυθμισμένη θερμοκρασία.

Μόλις έχετε τις ενδείξεις θερμοκρασίας, μπορείτε να δημιουργήσετε τον κωδικό που θα πει στον θερμοστάτη να ψύξει το σπίτι όταν η ένδειξη θερμοκρασίας είναι υψηλότερη από τη ρυθμισμένη θερμοκρασία και να θερμάνει το σπίτι όταν η ένδειξη θερμοκρασίας είναι χαμηλότερη από τη ρυθμισμένη θερμοκρασία. Για το πρωτότυπο, το μπλε φως ανάβει όταν ο θερμοστάτης πρέπει να κρυώσει και το κόκκινο ανάβει όταν ο θερμοστάτης πρέπει να θερμανθεί.

Ρύθμιση μενού:

επιλογές = {'Αυτόματη', 'Χειροκίνητη'}; imode = μενού ("Λειτουργία", επιλογές) εάν imode> 0 h = msgbox (['Επιλέξατε' επιλογές {imode}]); else h = warndlg ("Κλείσατε το μενού χωρίς να κάνετε επιλογή") τέλος αναμονής (h);

Η χειροκίνητη λειτουργία απαιτεί από τον χρήστη να εισάγει μια θερμοκρασία για τον θερμοστάτη, και στη συνέχεια με βάση τις ενδείξεις από τον αισθητήρα θερμοκρασίας, θα αρχίσει είτε να ψύχει το σπίτι θέρμανσης του σπιτιού. Εάν η ένδειξη του αισθητήρα θερμοκρασίας είναι υψηλότερη από τη ρυθμισμένη θερμοκρασία, θα αρχίσει να ψύχει το σπίτι. Εάν η ένδειξη του αισθητήρα θερμοκρασίας είναι χαμηλότερη από τη ρυθμισμένη θερμοκρασία, θα θερμάνει το σπίτι.

Η χειροκίνητη λειτουργία θα ξεκινήσει:

if imode == 2 dlg_prompts = {'Ποια θερμοκρασία θα προτιμούσατε;'}; dlg_title = 'Θερμοκρασία'; dlg_defaults = {'68'}; opts. Resize = 'on'; dlg_ans = inputdlg (dlg_prompts, dlg_title, 1, dlg_defaults, opts); if isempty (dlg_ans) h = warndlg ("Ακυρώσατε την εντολή inputdlg"); else temp_manual = str2double (dlg_ans {1}) %[Προσθήκη διαφάνειας ρύθμισης θερμοκρασίας παρακάτω] τέλος

Μέσα στη δήλωση if για τη χειροκίνητη λειτουργία, πρέπει να γράψετε τη διεπαφή μενού για να επιλέξει ο χρήστης την επιθυμητή θερμοκρασία στο σπίτι του και, στη συνέχεια, να εφαρμόσετε μια δήλωση while που θα ρυθμίσει τη θερμοκρασία του σπιτιού.

Ρύθμιση ρύθμισης θερμοκρασίας:

ενώ temp_manual <tempF writeDigitalPin (a, 'D9', 1) writeDigitalPin (a, 'D11', 1)? τέλος ενώ temp_manual> tempF writeDigitalPin (a, 'D8', 1) writeDigitalPin (a, 'D11', 1)? τέλος

Η αυτόματη λειτουργία απαιτεί περισσότερες εισόδους από τη χειροκίνητη λειτουργία. Μετά την είσοδο στην αυτόματη λειτουργία, ο χρήστης θα ορίσει μια κανονική και μια μακριά θερμοκρασία για τον θερμοστάτη του. Αφού τα επιλέξετε, με βάση ποια λειτουργία βρίσκεται ο θερμοστάτης, θα επιστρέψει στη λειτουργία ρύθμισης θερμοκρασίας

Ρυθμίστε την αυτόματη λειτουργία:

elseif imode == 1 dlg_prompts = {'Κανονικό', 'Εκτός'}; dlg_title = 'Ρυθμίσεις θερμοκρασίας'; dlg_defaults = {'68', '64'}; opts. Resize = 'on'; dlg_ans = inputdlg (dlg_prompts, dlg_title, 1, dlg_defaults, opts); if isempty (dlg_ans) h = warndlg ("Ακυρώσατε την εντολή inputdlg"); else temp_normal = str2double (dlg_ans {1}) temp_away = str2double (dlg_ans {2}) τέλος αναμονής για (h); %[Προσθήκη βήματος ανιχνευτή κίνησης παρακάτω]

Πρέπει επίσης να ρυθμίσουμε τον αισθητήρα κίνησης για τις ρυθμίσεις Αυτόματης λειτουργίας. Όταν ο ανιχνευτής κίνησης αυξάνει την κίνηση, θα διατηρήσει τη θερμοκρασία στην τρέχουσα ρύθμιση θερμοκρασίας, διαφορετικά θα ρυθμιστεί στη ρύθμιση εκτός θερμοκρασίας.

Run_Motion_Detector (a, inf) while lightStr == 0 temp = temp_away ενώ temp tempF writeDigitalPin (a, 'D6', 1) όποιο κόκκινο φως ακίδων υπάρχει επίσης στον κινητήρα για εγγραφή ανεμιστήραDigitalPin (a, 'D9', 1). τέλος λήξης ενώ lightStr == 1 temp = temp_normal writeDigitalPin (a, 'D6', 1) %αλλαγή σε όποιο pin βρίσκεται το κανονικό φως ενώ η θερμοκρασία temp μοτέρ για εγγραφή ανεμιστήραDigitalPin (a, 'D9', 1)? τέλος τέλος

Ο πλήρης κωδικός μπορεί να βρεθεί εδώ.

Συνιστάται: