Aquarium project 4 - v2.0

Ελεγκτής σταδιακής Ανατολής/Δύσης λαμπτήρων LED για το ενυδρείο που δεν επηρεάζεται από διακοπές ρεύματος

Έχοντας υλοποιήσει το Aquarium Project 4 v1.1 και κατόπιν συζήτησης με κάποιους φίλους σκέφτηκα να τροποποιήσω το κύκλωμα ώστε να μπορεί να λειτουργήσει χωρίς να επηρεάζεται από τις διακοπές ρεύματος. Μέχρι τώρα, όταν γινόταν διακοπή ρεύματος και το ρεύμα επανερχόταν, το κύκλωμα ξεκινούσε πάλι από την αρχή σαν να ήταν ένας νέος κύκλος Ανατολής/Δύσης. Έπρεπε οπότε να “γνωρίζει” το κύκλωμα τί ώρα είναι και αν ο κύκλος διακόπηκε λόγω διακοπής ρεύματος ή λόγω κανονικού ωραρίου. Για να το πετύχω αυτό πρόσθεσα στο κύκλωμά μου ένα Real Time Clock (DS3231 I2C RTC), το οποίο εφόσον του ορίσεις μια φορά την ημερομηνία/ώρα μπορεί και τη διατηρεί ακόμα και όταν δεν τροφοδοτείται με ρεύμα μέσω μιας μικρής μπαταρίας που βρίσκεται στην πλακέτα του, όπως φαίνεται στη διπλανή φωτογραφία. Η διάρκεια ζωής της μπαταρίας αυτής είναι περίπου 3-4 έτη.

DS3231 I2C RTC

Με τη χρήση του RTC πλέον δεν χρειάζεται η αγορά και χρήση του χρονοδιακόπτη 220V αφού το κύκλωμα δεν χρειάζεται να κλείσει ποτέ από το ρεύμα. 

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

Ένα ακόμα θέμα το οποίο με απασχόλησε ήταν η περίπτωση που κάποιος θα ήθελε να παρακάμψει την κατάσταση νύχτας και να ανάψει τα φώτα στο ενυδρείο του οποιαδήποτε στιγμή. Γι’ αυτό το λόγο χρησιμοποίησα ένα button το οποίο εάν το κρατήσουμε πατημένο και μετά τροφοδοτήσουμε το κύκλωμα με ρεύμα, καταλαβαίνει πως πρόκειται για emergency sunrise και ανάβει τα φώτα κάνοντας μια πολύ γρήγορη εξομοίωση ανατολής μέσα σε 3-4 δευτερόλεπτα.

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

  • Ο χρόνος που καθορίζει την ανατολή βρίσκεται στη συνάρτηση timersunrise() όπου κάνουμε uncomment τη γραμμή με το χρόνο που επιθυμούμε και comment αυτές που δεν θα χρησιμοποιήσουμε.
  • Ο χρόνος που καθορίζει τη δύση βρίσκεται στη συνάρτηση timersunset() όπου κάνουμε uncomment τη γραμμή με το χρόνο που επιθυμούμε και comment αυτές που δεν θα χρησιμοποιήσουμε.
  • Για να ορίσουμε για πρώτη φορά την ημερομηνία και ώρα στο RTC θα πρέπει να πάμε στη συνάρτηση setup(), να αφαιρέσουμε το ! από τη γραμμή if (! RTC.isrunning()) {, να ορίσουμε την τρέχουσα ημερομηνία και ώρα στη γραμμή RTC.adjust(DateTime(2017, 01, 9, 0, 21, 00)); και να φορτώσουμε τον κώδικα στο microcontroller. Κατόπιν τούτου, ξαναβάζουμε το ! και ξαναφορτώνουμε τον κώδικα στο microcontroller ελέγχοντας από τη σειριακή κονσόλα ότι η ώρα ρυθμίστηκε σωστά.
  • Στη συνάρτηση loop() στο σημείο για το quick sunrise κάνουμε uncomment τη γραμμή με το χρόνο που επιθυμούμε και comment αυτές που δεν θα χρησιμοποιήσουμε. Ο χρόνος αυτός είναι ο χρόνος γρήγορης ανατολής στην περίπτωση που το κύκλωμα επανέλθει από διακοπή ρεύματος.
  • Υπολογίζουμε την ώρα που θέλουμε να έχουμε ανατολή και δύση σε λεπτά και τοποθετούμε τις τιμές αυτές στη συνάρτηση loop() στα παρακάτω σημεία. Ο τρόπος μετατροπής είναι “ΩΡΑ*60 + ΛΕΠΤΑ”
    π.χ. 13:15 = 13*60 + 15 = 795.
    • if ((timeinmins == 870) && (flagnight == 1)) { – η ώρα ανατολής (14:30)
    • } else if ((timeinmins == 1415) && (flagnight == 0)) { – η ώρα δύσης (23:35)
    • } else if ((timeinmins > 870) && (timeinmins < 1410) && (flagnight == 1)) { – η ώρα ανατολής και δύσης μεταξύ των οποίων εάν υπάρξει διακοπή ρεύματος θα γίνει quick sunrise (μεταξύ 14:30 και 23:30). Η διαφορά των 5 λεπτών μεταξύ του χρόνου αυτού (1410) και του χρόνου δύσης (1415) είναι ο χρόνος του quick sunrise εάν η διακοπή ρεύματος γίνει λίγο πριν τη δύση.

Είναι περιττό πιστεύω να αναφέρω πως αν κάποιος από εσάς θελήσει να προσθέσει το module με τα dip switches αρκεί να μεταφέρει το button στο pin 12 ή 13 της πλακέτας του Arduino και να τροποποιήσει τον κώδικα προγραμματισμού ώστε να δουλέψουν και τα δύο παράλληλα (το module με τα dip switches στα pin 2-9 και το button στο pin 12 ή 13).

Εγώ στην κατασκευή μου χρησιμοποίησα ένα προφίλ αλουμινίου ψύκτρας για ταινίες LED, πάνω στο οποίο κόλλησα την ταινία LED για να ψύχεται καλύτερα. Επίσης, χρησιμοποίησα ένα ακόμη μικρό πράσινο led για να μου δείχνει πότε το κύκλωμα έχει ρεύμα και πότε όχι. Λεπτομέρειες μπορείτε να δείτε στις παρακάτω φωτογραφίες.

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

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

*Update 26/01/2017
Προστέθηκε ένα πράσινο λαμπάκι στο κύκλωμα που δείχνει πότε το κύκλωμα είναι στο ρεύμα (μέσω μιας αντίστασης 470Ω). Σχεδιάστηκε καλύτερα το κύκλωμα με τη χρήση του προγράμματος fritzing.

Επίσης, αν έχετε κάποια παρατήρηση ή κάποια άλλη ιδέα που αφορά το παρόν project μπορείτε να επικοινωνήσετε μαζί μου.

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

Αν σας άρεσε, μοιραστείτε το!

Leave a Reply