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

Θερμοστάτης με βάση το Arduino: 6 βήματα
Θερμοστάτης με βάση το Arduino: 6 βήματα

Βίντεο: Θερμοστάτης με βάση το Arduino: 6 βήματα

Βίντεο: Θερμοστάτης με βάση το Arduino: 6 βήματα
Βίντεο: How to use up to 10 push button switch with 1 Arduino input pin ANPB-V1 2024, Ιούλιος
Anonim
Θερμοστάτης με βάση το Arduino
Θερμοστάτης με βάση το Arduino
Θερμοστάτης με βάση το Arduino
Θερμοστάτης με βάση το Arduino
Θερμοστάτης με βάση το Arduino
Θερμοστάτης με βάση το Arduino

Αυτή τη φορά θα κατασκευάσουμε έναν θερμοστάτη βασισμένο στο Arduino, αισθητήρα θερμοκρασίας και ρελέ. Μπορείτε να βρείτε στο github

Βήμα 1: Διαμόρφωση

Διαμόρφωση
Διαμόρφωση

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

Βήμα 2: Διαμόρφωση ρελέ

Ας υποθέσουμε ότι θα θέλαμε να έχουμε 3 ρελέ:

  • ID: 0, PIN: 1, Σημείο ρύθμισης θερμοκρασίας: 20
  • ID: 1, PIN: 10, Σημείο ρύθμισης θερμοκρασίας: 30
  • ID: 2, PIN: 11, Σημείο ρύθμισης θερμοκρασίας: 40

Πρώτα πρέπει να βεβαιωθείτε ότι το PIN της επιλογής σας δεν έχει ήδη ληφθεί. Όλες οι ακίδες μπορούν να βρεθούν στο Config.h, ορίζονται από μεταβλητές που ξεκινούν με DIG_PIN.

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

const στατικό uint8_t DIG_PIN_RELAY_0 = 1; const στατικό uint8_t DIG_PIN_RELAY_1 = 10; const static uint8_t DIG_PIN_RELAY_2 = 11;

const static uint8_t RELAYS_AMOUNT = 3;

const static int16_t RELAY_TEMP_SET_POINT_0 = 20;

const static int16_t RELAY_TEMP_SET_POINT_1 = 30; const static int16_t RELAY_TEMP_SET_POINT_2 = 40;

Τώρα πρέπει να εγκαταστήσουμε ρελέ και ελεγκτή, αυτό συμβαίνει στο RelayDriver.cpp

initRelayHysteresisController (0, DIG_PIN_RELAY_0, RELAY_TEMP_SET_POINT_0); initRelayHysteresisController (1, DIG_PIN_RELAY_1, RELAY_TEMP_SET_POINT_1); initRelayHysteresisController (2, DIG_PIN_RELAY_2, RELAY_TEMP_SET_POINT_2);

xxx

Βήμα 3: Ελεγκτής υστέρησης

Είναι αυτό που επιλέχθηκε στο παραπάνω παράδειγμα, έχει λίγες πρόσθετες διαμορφώσεις:

const static uint32_t RELAY_DELAY_AFTER_SWITCH_MS = 300000; // 5 λεπτά σταθερή uint32_t RHC_RELAY_MIN_SWITCH_MS = 3600000.

Το RELAY_DELAY_AFTER_SWITCH_MS δίνει χρόνο αναμονής για την αλλαγή του επόμενου ρελέ. Φανταστείτε ότι η διαμόρφωση από το παράδειγμά μας θα ξεκινούσε να λειτουργεί σε περιβάλλον 40 μοιρών. Αυτό θα είχε ως αποτέλεσμα την ενεργοποίηση και των τριών ρελέ ταυτόχρονα. Αυτό θα μπορούσε τελικά να οδηγήσει σε υψηλή κατανάλωση ενέργειας - ανάλογα με το τι ελέγχετε, ο ηλεκτρικός κινητήρας, για παράδειγμα, καταναλώνει περισσότερη ισχύ κατά την εκκίνηση. Στην περίπτωσή μας, τα ρελέ μεταγωγής έχουν την ακόλουθη ροή: το πρώτο ρελέ πηγαίνει, περιμένετε 5 λεπτά, το δεύτερο συνεχίζεται, περιμένετε 5 λεπτά, το τρίτο συνεχίζεται.

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

Βήμα 4: Ελεγκτής PID

Ελεγκτής PID
Ελεγκτής PID
Ελεγκτής PID
Ελεγκτής PID

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

Για να χρησιμοποιήσετε τον ελεγκτή PID πρέπει να αλλάξετε το initRelayHysteresisController (…..) σε initRelayPiDController (….) Και πρέπει να βρείτε τις σωστές ρυθμίσεις για αυτό. Ως συνήθως, θα τα βρείτε στο Config.h

Έχω εφαρμόσει απλό προσομοιωτή στην Java, έτσι ώστε να είναι δυνατή η οπτικοποίηση των αποτελεσμάτων. Μπορεί να βρεθεί στο φάκελο: pidsimulator. Παρακάτω μπορείτε να δείτε προσομοιώσεις για δύο ελεγκτές Το PID a P. PID δεν είναι απόλυτα σταθερό επειδή δεν εφάρμοσα κανέναν εξελιγμένο αλγόριθμο για να βρω σωστές τιμές.

Και στα δύο οικόπεδα η απαιτούμενη θερμοκρασία έχει οριστεί σε 30 (μπλε). Η τρέχουσα θερμοκρασία υποδεικνύει τη γραμμή ανάγνωσης. Το ρελέ έχει δύο καταστάσεις ON και OFF. Όταν είναι ενεργοποιημένη η θερμοκρασία μειώνεται κατά 1,5, όταν είναι απενεργοποιημένη αυξάνεται κατά 0,5.

Βήμα 5: Λεωφορείο μηνυμάτων

Λεωφορείο μηνυμάτων
Λεωφορείο μηνυμάτων
Λεωφορείο μηνυμάτων
Λεωφορείο μηνυμάτων
Λεωφορείο μηνυμάτων
Λεωφορείο μηνυμάτων
Λεωφορείο μηνυμάτων
Λεωφορείο μηνυμάτων

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

Για παράδειγμα:

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

Κάθε ενότητα συνδέεται με το Bus Bus και μπορεί να εγγραφεί για συγκεκριμένα συμβάντα και μπορεί να παράγει οποιαδήποτε συμβάντα (πρώτο διάγραμμα).

Στο δεύτερο διάγραμμα μπορούμε να δούμε τη ροή συμβάντων πατώντας το κουμπί.

Ορισμένα στοιχεία έχουν κάποιες εργασίες από όσες πρέπει να εκτελούνται περιοδικά. Θα μπορούσαμε να καλέσουμε τις αντίστοιχες μεθόδους τους από τον κύριο βρόχο, αφού έχουμε το Bus Bus είναι απαραίτητο μόνο να διαδώσουμε το σωστό συμβάν (τρίτο διάγραμμα)

Βήμα 6: Libs

  • https://github.com/maciejmiklas/Thermostat
  • https://github.com/milesburton/Arduino-Temperature…
  • https://github.com/maciejmiklas/ArdLog.git

Συνιστάται: