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

NexArdu: Έξυπνος έλεγχος φωτισμού: 5 βήματα
NexArdu: Έξυπνος έλεγχος φωτισμού: 5 βήματα

Βίντεο: NexArdu: Έξυπνος έλεγχος φωτισμού: 5 βήματα

Βίντεο: NexArdu: Έξυπνος έλεγχος φωτισμού: 5 βήματα
Βίντεο: Séance ordinaire - 5 juillet 2021 2024, Ιούλιος
Anonim
NexArdu: Έξυπνος έλεγχος φωτισμού
NexArdu: Έξυπνος έλεγχος φωτισμού

Εκσυγχρονίζω

Εάν έχετε αναπτύξει την ίδια λειτουργικότητα χρησιμοποιώντας το Home Assistant. Το Home Assistant προσφέρει μια τεράστια γκάμα δυνατοτήτων. Μπορείτε να βρείτε την εξέλιξη εδώ.

Ένα σκίτσο για τον έλεγχο του φωτισμού του σπιτιού με έξυπνο τρόπο μέσω ασύρματων συσκευών που μοιάζουν με X10 433,92MHz (γνωστός και ως 433MHz), π.χ. Nexa.

Ιστορικό

Όσον αφορά τον διακοσμητικό φωτισμό, με κούρασε κάπως ότι κάθε δεύτερη ή τρίτη εβδομάδα έπρεπε να προσαρμόζω τα χρονόμετρα που ανάβουν τα φώτα λόγω της αλλαγής της ηλιακής ώρας σε σχέση με το CET. Ταυτόχρονα, μερικές νύχτες πηγαίνουμε για ύπνο νωρίτερα από άλλες. Εξαιτίας αυτού, μερικές φορές τα φώτα σβήνουν είτε "πολύ αργά" είτε "πολύ νωρίς". Τα παραπάνω με προκάλεσαν να σκεφτώ: Θέλω ο διακοσμητικός φωτισμός να ανάβει πάντα στο ίδιο επίπεδο φωτισμού περιβάλλοντος και στη συνέχεια να σβήνει σε συγκεκριμένη ώρα ανάλογα με το αν είμαστε ξύπνιοι ή όχι.

Σκοπός

Αυτό το εκπαιδευτικό εκμεταλλεύεται τις δυνατότητες ασύρματων ελεγχόμενων συσκευών όπως το System Nexa που λειτουργούν με συχνότητα 433,92MHz. Εδώ θα παρουσιάσουμε:

  1. Αυτόματος έλεγχος φωτισμού
  2. Έλεγχος Ιστού

Έλεγχος Ιστού. Εσωτερικός έναντι εξωτερικού διακομιστή Ιστού

Ο εσωτερικός διακομιστής εκμεταλλεύεται τη δυνατότητα ασπίδας Arduino Ethernet να παρέχει διακομιστή ιστού. Ο διακομιστής ιστού θα παρακολουθεί κλήσεις πελάτη Ιστού για έλεγχο και αλληλεπίδραση με το Arduino. Αυτή είναι μια άμεση λύση με περιορισμένη λειτουργικότητα. οι δυνατότητες βελτίωσης του κώδικα του διακομιστή ιστού περιορίζονται από τη μνήμη του Arduino. Ο εξωτερικός διακομιστής απαιτεί τη ρύθμιση ενός εξωτερικού διακομιστή web PHP. Αυτή η ρύθμιση είναι πιο περίπλοκη και δεν υποστηρίζεται από αυτό το σεμινάριο, ωστόσο, ο κώδικας/σελίδα PHP για έλεγχο και καθοδήγηση του Arduino παρέχεται με βασικές λειτουργίες. Σε αυτήν την περίπτωση, οι δυνατότητες βελτίωσης του διακομιστή ιστού περιορίζονται από τον εξωτερικό διακομιστή ιστού.

Λογαριασμός υλικών

Για να επωφεληθείτε πλήρως από τις δυνατότητες που δίνει αυτό το σκίτσο, χρειάζεστε:

  1. Ένα Arduino Uno (δοκιμασμένο σε R3)
  2. Μια ασπίδα Arduino Ethernet
  3. Σετ Nexa ή παρόμοιο που λειτουργεί στα 433,92MHz
  4. Ένας αισθητήρας PIR (Passive InfraRed) που λειτουργεί στα 433,92MHz
  5. Αντίσταση 10KOhms
  6. Ένα LDR
  7. Ένα RTC DS3231 (μόνο έκδοση εξωτερικού διακομιστή)
  8. Πομπός 433,92MHz: XY-FST
  9. Δέκτης 433,92MHz: MX-JS-05V

Το ελάχιστο που συνιστάται είναι:

  1. Ένα Arduino Uno (δοκιμασμένο σε R3)
  2. Σετ Nexa ή παρόμοιο που λειτουργεί στα 433,92MHz
  3. Αντίσταση 10KOhms
  4. Ένα LDR
  5. Πομπός 433,92MHz: XY-FST

(Η παράλειψη της ασπίδας Ethernet απαιτεί τροποποιήσεις του σκίτσου που δεν παρέχονται στο παρόν εγχειρίδιο)

Η Λογική Nexa. Μια σύντομη περιγραφή

Ο δέκτης Nexa μαθαίνει το αναγνωριστικό τηλεχειριστηρίου και το αναγνωριστικό κουμπιού. Με άλλα λόγια, κάθε τηλεχειριστήριο έχει τον αριθμό αποστολέα του και κάθε ζεύγος κουμπιών on/off έχει το αναγνωριστικό του κουμπιού. Ο δέκτης πρέπει να μάθει αυτούς τους κωδικούς. Ορισμένα έγγραφα Nexa αναφέρουν ότι ένας δέκτης μπορεί να συνδυαστεί με έως και έξι τηλεχειριστήρια. Οι παράμετροι Nexa:

  • SenderID: Αναγνωριστικό του τηλεχειριστηρίου
  • ButtonID: αριθμός ζεύγους κουμπιών (ενεργοποίηση/απενεργοποίηση). Ξεκινά με τον αριθμό 0
  • Ομάδα: ναι/όχι (γνωστή και ως κουμπιά "Όλα απενεργοποιημένα/ενεργοποιημένα")
  • Εντολή: ενεργοποίηση/απενεργοποίηση

Διδακτικά βήματα. Σημείωση

Τα διαφορετικά βήματα που περιγράφονται εδώ είναι να προσφέρουν δύο διαφορετικές γεύσεις για τον τρόπο επίτευξης του στόχου. Μη διστάσετε να επιλέξετε αυτό που σας βολεύει. Εδώ είναι ο δείκτης:

Βήμα #1: Το κύκλωμα

Βήμα #2: Nexardu με εσωτερικό διακομιστή Web (με NTP)

Βήμα #3: Nexardu με εξωτερικό διακομιστή

Βήμα #4: Πολύτιμες πληροφορίες

Βήμα 1: Το κύκλωμα…

Το Κύκλωμα…
Το Κύκλωμα…

Καλωδίστε τα διάφορα εξαρτήματα όπως φαίνεται στην εικόνα.

Arduino pin#8 to Data pin on RX (receiver) module Arduino pin#2 to Data pin on RX (receiver) module Arduino pin#7 to Data pin on TX (sender) module Arduino pin A0 to LDR

Διαμόρφωση RTC. Απαιτείται μόνο στη διαμόρφωση Εξωτερικού διακομιστή. Καρφίτσα Arduino A4 σε καρφίτσα SDA στη μονάδα RTC Αρθρωτή ακίδα A5 σε SCL καρφίτσα στη μονάδα RTC

Βήμα 2: Nexardu με εσωτερικό διακομιστή Web (με NTP)

Οι Βιβλιοθήκες

Αυτός ο κώδικας χρησιμοποιεί πολλές βιβλιοθήκες. Τα περισσότερα από αυτά μπορούν να βρεθούν μέσω του "Library Manager" του Arduino IDE. Εάν δεν βρείτε μια καταχωρημένη βιβλιοθήκη, κάντε google.

Wire.hSPI.h - Απαιτείται από ασπίδα Ethernet NexaCtrl.h - Ελεγκτής συσκευής Nexa Ethernet.h - Ενεργοποίηση και λειτουργία της ασπίδας Ethernet Πελάτης NTP

Το Σκίτσο

Ο παρακάτω κώδικας εκμεταλλεύεται τη δυνατότητα χρήσης της πλακέτας Arduino UNO όχι μόνο ως μέσο ελέγχου των συσκευών Nexa, αλλά διαθέτει επίσης εσωτερικό διακομιστή Web. Μια παρατήρηση που πρέπει να προσθέσετε είναι ότι η μονάδα RTC (Ρολόι σε πραγματικό χρόνο) προσαρμόζεται αυτόματα μέσω NTP (Πρωτόκολλο χρόνου δικτύου).

Πριν ανεβάσετε τον κώδικα στο Arduino, ίσως χρειαστεί να διαμορφώσετε τα ακόλουθα:

  • SenderId: πρέπει πρώτα να μυρίσετε το SenderId, δείτε παρακάτω
  • PIR_id: πρέπει πρώτα να μυρίσετε το SenderId, δείτε παρακάτω
  • Διεύθυνση IP LAN: ορίστε μια IP του LAN σας στην ασπίδα Ethernet Arduino. Προεπιλεγμένη τιμή: 192.168.1.99
  • Διακομιστής NTP: Δεν είναι απολύτως απαραίτητο, αλλά θα ήταν καλό να κάνετε google για διακομιστές NTP που βρίσκονται κοντά σας. Προεπιλεγμένη τιμή: 79.136.86.176
  • Ο κωδικός προσαρμόζεται για τη ζώνη ώρας CET. Προσαρμόστε αυτήν την τιμή -αν χρειαστεί, στη ζώνη ώρας σας για να εμφανίσετε τη σωστή ώρα (NTP)

Μυρίζοντας τους κωδικούς Nexa

Για αυτό πρέπει να συνδέσετε τουλάχιστον το στοιχείο RX στο Arduino όπως φαίνεται στο κύκλωμα.

Βρείτε παρακάτω το σκίτσο Nexa_OK_3_RX.ino που, κατά τη σύνταξη, είναι συμβατό με τις συσκευές Nexa NEYCT-705 και PET-910.

Τα βήματα που πρέπει να ακολουθηθούν είναι:

  1. Συνδέστε τον δέκτη Nexa με το τηλεχειριστήριο.
  2. Φορτώστε το Nexa_OK_3_RX.ino στο Arduino και ανοίξτε το "Serial Monitor".
  3. Πατήστε το κουμπί του τηλεχειριστηρίου που ελέγχει τον δέκτη Nexa.
  4. Σημειώστε τα "RemoteID" και "ButtonID".
  5. Ορίστε αυτούς τους αριθμούς στα SenderID και ButtonID στη δήλωση μεταβλητής του προηγούμενου σκίτσου.

Για να διαβάσετε το Id του PIR, χρησιμοποιήστε το ίδιο σκίτσο (Nexa_OK_3_RX.ino) και διαβάστε την τιμή στο "Serial Monitor" όταν το PIR ανιχνεύσει κίνηση.

Βήμα 3: Nexardu με εξωτερικό διακομιστή

Οι Βιβλιοθήκες

Αυτός ο κώδικας χρησιμοποιεί πολλές βιβλιοθήκες. Τα περισσότερα από τα δοχεία μπορούν να βρεθούν μέσω του "Library Manager" του Arduino IDE. Σε περίπτωση που δεν βρείτε καταχωρημένη βιβλιοθήκη, κάντε google.

Wire.hRTClib.h - αυτή είναι η βιβλιοθήκη από το https://github.com/MrAlvin/RTClibSPI.h - Απαιτείται από Ethernet shieldNexaCtrl.h - ελεγκτής συσκευής NexaEthernet.h - Για να ενεργοποιήσετε και να εμφανίσετε την ασπίδα EthernetRCSwitch.h - Απαιτείται για PIRTime.h - Απαιτείται για το RTCTimeAlarms.h - Διαχείριση συναγερμού ώραςaREST.h - για υπηρεσίες RESTful API που εκμεταλλεύονται εξωτερικά serverair/wdt.h - Χειρισμός χρονοδιακόπτη Watchdog

Το Σκίτσο

Το παρακάτω σκίτσο διαθέτει μια άλλη γεύση του ίδιου πράγματος, ενισχύοντας αυτή τη φορά τις δυνατότητες που μπορεί να δώσει ένας εξωτερικός διακομιστής ιστού. Όπως ήδη αναφέρθηκε στην εισαγωγή, Ο εξωτερικός διακομιστής απαιτεί τη ρύθμιση ενός εξωτερικού διακομιστή web PHP. Αυτή η ρύθμιση είναι πιο περίπλοκη και δεν υποστηρίζεται από αυτό το σεμινάριο, ωστόσο, ο κώδικας/σελίδα PHP για έλεγχο και καθοδήγηση του Arduino παρέχεται με βασικές λειτουργίες.

Πριν ανεβάσετε τον κώδικα στο Arduino, ίσως χρειαστεί να διαμορφώσετε τα ακόλουθα:

  • SenderId: πρέπει πρώτα να μυρίσετε το SenderId, ανατρέξτε στην ενότητα Δέσπασμα των κωδικών Nexa στο προηγούμενο βήμα
  • PIR_id: πρέπει πρώτα να μυρίσετε το SenderId, δείτε το Sniffing the Nexa codes στο προηγούμενο βήμα
  • Διεύθυνση IP LAN: ορίστε μια IP του LAN σας στην ασπίδα Ethernet Arduino. Προεπιλεγμένη τιμή: 192.168.1.99

Για τη διαδικασία μυρωδιάς κώδικα Nexa, ανατρέξτε στο Βήμα #1.

Συμπληρωματικό αρχείο

Ανεβάστε το συνημμένο αρχείο nexardu4.txt στον εξωτερικό σας διακομιστή PHP και μετονομάστε το σε nexardu4.php

Ρυθμίστηκε η ώρα RTC

Για να ορίσετε την ώρα/ημερομηνία στο RTC χρησιμοποιώ το σκίτσο SetTime που συνδυάζει τη βιβλιοθήκη DS1307RTC.

Βήμα 4: Πολύτιμες πληροφορίες

Πολύτιμες Πληροφορίες
Πολύτιμες Πληροφορίες
Πολύτιμες Πληροφορίες
Πολύτιμες Πληροφορίες

Καλό είναι να γνωρίζουμε τη συμπεριφορά

  1. Όταν το Arduino βρίσκεται υπό "Αυτόματο έλεγχο φωτός", μπορεί να περάσει από τέσσερις διαφορετικές καταστάσεις σε σχέση με τον φωτισμό περιβάλλοντος και την ώρα της ημέρας:

    1. Ξυπνητικά: Ο Arduino περιμένει τη νύχτα που θα έρθει.
    2. Ενεργό: Έφτασε η νύχτα και το Arduino έχει ανάψει τα φώτα.
    3. Δυστυχώς: Τα φώτα είναι αναμμένα αλλά έρχεται η ώρα να τα σβήσετε. Ξεκινάει στο "time_to_turn_off - PIR_time", δηλαδή, αν η ώρα_για_κατάβαση έχει οριστεί στις 22:30 και ο χρόνος PIR_ έχει οριστεί σε 20 λεπτά, τότε το Arduino θα εισέλθει σε υπνηλία κατάσταση στις 22:10.
    4. Κοιμισμένος: Η νύχτα περνά, ο Arduino έχει σβήσει τα φώτα και ο Arduino περιμένει την αυγή να ξυπνήσει.
  2. Το Arduino ακούει πάντα τα σήματα που στέλνονται από τα τηλεχειριστήρια. Αυτό διαθέτει τη δυνατότητα εμφάνισης της κατάστασης των φώτων (ενεργοποίησης/απενεργοποίησης) στον ιστό όταν χρησιμοποιείται τηλεχειριστήριο.
  3. Ενώ το Arduino είναι ξαφνικά προσπαθεί να σβήσει τα φώτα όλη την ώρα ως εκ τούτου, τα σήματα ON που στέλνονται από ένα χειριστήριο remonte για να ανάψουν τα φώτα ενδέχεται να καταγραφούν από το Arduino. Εάν συμβεί αυτό, το Arduino θα προσπαθήσει να σβήσει ξανά τα φώτα.
  4. Ενώ το Arduino είναι ενεργό προσπαθεί να ανάβει συνεχώς τα φώτα, επομένως, τα σήματα OFF που στέλνονται από ένα τηλεχειριστήριο για να σβήσουν τα φώτα ενδέχεται να καταγραφούν από το Arduino. Εάν συμβεί αυτό, το Arduino θα προσπαθήσει να ανάψει ξανά τα φώτα.
  5. Σε κατάσταση υπνηλίας τα φώτα μπορούν να ενεργοποιηθούν/απενεργοποιηθούν με τηλεχειριστήριο. Το Arduino δεν θα αντιδράσει.
  6. Σε κατάσταση αδράνειας, η αντίστροφη μέτρηση PIR θα αρχίσει να επαναρυθμίζεται από "time_to_turn_off - PIR_time" και έτσι ο χρόνος_στο_turn_off παρατείνεται κατά 20 λεπτά κάθε φορά που ο PIR ανιχνεύει κίνηση. Ένα "Σήμα PIR εντοπίστηκε!" το μήνυμα θα εμφανιστεί στο πρόγραμμα περιήγησης ιστού όταν συμβεί αυτό.
  7. Ενώ το Arduino είναι αδρανές, τα φώτα μπορούν να ενεργοποιηθούν και να απενεργοποιηθούν μέσω του τηλεχειριστηρίου. Το Arduino δεν θα αντιδράσει.
  8. Ένας κύκλος επαναφοράς ή τροφοδοσίας του Arduino θα το φέρει σε ενεργή λειτουργία. Αυτό σημαίνει ότι εάν το Arduino έχει γίνει επαναφορά μετά το time_turn_off τότε το Arduino θα ανάψει τα φώτα. Για να αποφευχθεί αυτό, το Arduino πρέπει να τεθεί σε χειροκίνητη λειτουργία (επιλέξτε "Light Automatic Control") και περιμένετε μέχρι το πρωί για να το επιστρέψετε στο "Light Automatic Control".
  9. Όπως προαναφέρθηκε, ο Arduino περιμένει το ξημέρωμα για να ενεργοποιηθεί ξανά. Εξαιτίας αυτού, το σύστημα μπορεί να ξεγελαστεί κατευθύνοντας ένα αρκετά δυνατό φως προς τον αισθητήρα φωτός που πρέπει να ξεπεράσει το όριο "ελάχιστης φωτεινότητας". Εάν συμβεί αυτό, τότε το Arduino θα αλλάξει σε ενεργή κατάσταση.
  10. Η τιμή ανοχής είναι μεγάλης σημασίας προκειμένου να αποφευχθεί το αναβοσβήσιμο και απενεργοποίηση του συστήματος γύρω από την τιμή κατωφλίου Minimum Luminosity. Τα φώτα LED, λόγω του τρεμόπαιγμα και της υψηλής απόκρισης, μπορούν να αποτελέσουν πηγή συμπεριφοράς χτυπήματος. Αυξήστε την τιμή ανοχής εάν αντιμετωπίσετε αυτό το πρόβλημα. Χρησιμοποιώ την τιμή 7.

Καλό είναι να γνωρίζουμε τον κώδικα

  1. Όπως μπορείτε να παρατηρήσετε, ο κώδικας είναι πολύ μεγάλος και χρησιμοποιεί σημαντικό αριθμό βιβλιοθηκών. Αυτό θέτει σε κίνδυνο την ποσότητα της ελεύθερης μνήμης που απαιτείται για το σωρό. Έχω παρατηρήσει ασταθή συμπεριφορά στο παρελθόν που έχει σταματήσει το σύστημα, ειδικά μετά από κλήσεις στο διαδίκτυο. Ως εκ τούτου, η μεγαλύτερη πρόκληση που είχα ήταν να περιορίσω το μέγεθός του και τη χρήση διαφόρων μεταβλητών προκειμένου να καταστεί το σύστημα σταθερό.
  2. Ο κώδικας που εκμεταλλεύεται τον εσωτερικό διακομιστή -χρησιμοποιείται από εμένα στο σπίτι, λειτουργεί τώρα από τον Φεβρουάριο του 2016 χωρίς προβλήματα.
  3. Έχω καταβάλει σημαντικές προσπάθειες για τον εμπλουτισμό του κώδικα με επεξηγήσεις. Επωφεληθείτε από αυτό για να παίξετε με διάφορες παραμέτρους, όπως αριθμό αποστολών κώδικα Nexa ανά ριπή, χρόνο συγχρονισμού NTP κ.λπ.
  4. Ο κωδικός δεν διαθέτει θερινή ώρα. Αυτό πρέπει να προσαρμοστεί μέσω του προγράμματος περιήγησης ιστού όταν ισχύει.

Μερικά σημεία που πρέπει να λάβετε υπόψη

  1. Προσθέστε τις κεραίες στις μονάδες ραδιοσυχνοτήτων TX και RX (RF). Θα σας εξοικονομήσει χρόνο για παράπονα για δύο κύρια σημεία: την ανθεκτικότητα και το εύρος του σήματος RF. Χρησιμοποιώ ένα σύρμα 50Ohms 17,28cm (6,80in).
  2. Αυτό το άκαμπτο μπορεί να λειτουργήσει με άλλα συστήματα αυτοματισμού σπιτιού, όπως το Proove, για παράδειγμα. Μία από τις πολλές προϋποθέσεις που πρέπει να πληρούνται είναι να λειτουργούν με συχνότητα 433,92MHz.
  3. Ένας μεγάλος πονοκέφαλος με το Arduino είναι να ασχολείστε με βιβλιοθήκες που μπορεί να ενημερώνονται με την πάροδο του χρόνου και ξαφνικά να μην είναι συμβατές με το "παλιό" σκίτσο σας. το ίδιο πρόβλημα μπορεί να προκύψει κατά την αναβάθμιση του Arduino IDE. Προσοχή ότι αυτό θα μπορούσε να είναι η περίπτωσή μας εδώ -ναι, το πρόβλημά μου επίσης.
  4. Πολλαπλοί ταυτόχρονοι υπολογιστές -πελάτες με διαφορετικούς τρόπους φωτισμού δημιουργούν μια κατάσταση "αναβοσβήνει".

Στιγμιότυπο οθόνης

Στο παραπάνω καρουζέλ εικόνας, θα βρείτε ένα στιγμιότυπο οθόνης της ιστοσελίδας που εμφανίζεται όταν καλείτε το Arduino μέσω του προγράμματος περιήγησής σας. Δεδομένης της προεπιλεγμένης διαμόρφωσης IP του κώδικα, η διεύθυνση URL θα ήταν

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

Αναλυτική/Προηγμένη τεκμηρίωση

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

Το Arduino_NexaControl_IS.pdf παρέχει τεκμηρίωση για τη λύση εσωτερικού διακομιστή.

Το Arduino_NexaControl_ES.pdf παρέχει τεκμηρίωση για τη λύση Εξωτερικού διακομιστή.

Εξωτερικές αναφορές

Nexa System (Σουηδικά)

Βήμα 5: Ολοκληρώθηκε

Πεπερασμένος!
Πεπερασμένος!

Εκεί τα έχετε τελειώσει και σε δράση!

Η θήκη Arduino Uno βρίσκεται στο Thingiverse ως "Arduino Uno Rev3 με θήκη Ethernet Shield XL".

Συνιστάται: