Οι άνθρωποι είναι φυσικά προγραμματισμένοι να ξυπνήσουν με την ανατολή του ηλίου. δυστυχώς σύγχρονη ζωή υπαγορεύεται από αυθαίρετο ρολόι, που συχνά αναγκάζει μας να ξυπνήσουμε όταν δεν υπάρχει φυσικό φως. Σήμερα, θα φτιάξουμε ξυπνητήρι, που θα σας ξυπνήσει απαλά και αργά χωρίς να καταφύγετε σε μια επιθετική μηχανή θορύβου.
Εάν κάνετε ένα ξυπνητήρι ανατολής είναι λίγο πολύ για σας, ελέγξτε έξω αυτές τις εφαρμογές iPhone και Android Χρησιμοποιήστε αυτές τις εφαρμογές για να σας βοηθήσουν να κοιμηθείτε καλύτερα [Android & iOS] Χρησιμοποιήστε αυτές τις εφαρμογές για να σας βοηθήσουμε να κοιμηθείτε καλύτερα [Android & iOS] Μετά από μια ταραχώδη ημέρα, το καλύτερο που μπορείτε να κάνετε είναι να πάρετε μια ευεργετική ποσότητα ύπνου. Υπάρχουν πάντα νέες μελέτες που εμφανίζονται ότι αποδεικνύουν πόσο σημαντικός ύπνος είναι πραγματικά σε ένα πρόσωπο, βελτιώνοντας ... Διαβάστε περισσότερα που ανιχνεύουν πότε καλύτερα να σας ξυπνήσει από τις κινήσεις του σώματος Μπορεί μια εφαρμογή πραγματικά να σας βοηθήσει να κοιμηθείτε καλύτερα; Μπορεί μια εφαρμογή να σας βοηθήσει πραγματικά να κοιμηθείτε καλύτερα; Πάντα ήμουν λίγος πειραματιστής ύπνου, έχοντας για μεγάλο μέρος της ζωής μου κρατούσε ένα σχολαστικό ημερολόγιο ονείρων και μελετούσε όσο μπορούσα για να κοιμηθώ στη διαδικασία. Υπάρχει ένα ... Διαβάστε περισσότερα, εξασφαλίζοντας ότι δεν είστε τράβηξε μακριά από αυτό το φοβερό όνειρο, αλλά αντ 'αυτού, ξυπνήστε αισθάνεται φωτεινά και ανανεωμένα - που πραγματικά δουλειά.
Περίγραμμα έργου
Το κύριο μέρος του έργου θα είναι περίπου 5 μέτρα φως LED ταινία που γύρω από το κρεβάτι. Θα τα τροφοδοτήσουμε με μια εξωτερική τροφοδοσία 12 volt, αλλάζοντας με τρανζίστορ MOSFET N. Η ρύθμιση για αυτό το μέρος θα είναι ίδια με το δυναμικό σύστημα φωτισμού Δημιουργήστε το δικό σας δυναμικό φωτισμό περιβάλλοντος για ένα κέντρο πολυμέσων Δημιουργήστε το δικό σας δυναμικό φωτισμό περιβάλλοντος για ένα κέντρο πολυμέσων Αν παρακολουθήσετε πολλές ταινίες στον υπολογιστή σας ή στο κέντρο πολυμέσων, βεβαιωθείτε ότι έχετε αντιμετωπίσει το δίλημμα φωτισμού. απενεργοποιείτε εντελώς όλα τα φώτα; Τους κρατάτε σε πλήρη έκρηξη; Ή ... Διαβάστε περισσότερα Έχω χτίσει πριν.
Ο χρονομέτρης θα είναι ένα ζήτημα - δεδομένου ότι αυτό είναι ένα πρωτότυπο, θα ρυθμίσω το Arduino να μετράει από κάθε φορά που επαναφέρεται. Θεωρητικά, θα πρέπει να χάσουμε μόνο ένα δευτερόλεπτο ή δύο κάθε μέρα, αλλά ιδανικά θα συμπεριλάβαμε ένα τσιπ "ρολογιού πραγματικού χρόνου" για να το κάνουμε αυτό πιο αξιόπιστα. Ο συναγερμός ανατολής θα ξεκινήσει 30 λεπτά πριν από την ώρα αφύπνισης και θα αυξήσει αργά το επίπεδο εξόδου έως ότου φτάσει σε 100% φωτεινότητα - αυτό θα πρέπει να είναι αρκετό για να μας ξυπνήσει, αν και είναι καλή ιδέα να συνεχίσετε να χρησιμοποιείτε το τακτικό ξυπνητήρι σας μέχρι το σώμα σας Συνηθισμένος σε αυτό.
Θα ενσωματώσω επίσης ένα νυχτερινό φως σε αυτό το έργο, το οποίο ανιχνεύει την κίνηση και ενεργοποιεί ένα διακριτικό φως χαμηλού επιπέδου κάτω από το κρεβάτι με ένα χρονικό διάστημα 3 λεπτών, ξεχωριστό από τα φώτα των οδηγήσεων καθώς αυτά θα προκαλούσαν τόσο τη γυναίκα μου όσο και εγώ να ξυπνήσω . Ο φωτισμός κάτω από το κρεβάτι θα είναι μια εμπορική μονάδα ηλεκτρικού ρεύματος, οπότε θα κλέψω ένα ρελέ μέσα σε μια πρίζα για να την ενεργοποιήσω και να σβήσω. Εάν δεν είστε ικανοποιημένοι με την παροχή ρεύματος 110-240v AC κάτω από οποιεσδήποτε συνθήκες (και αυτό είναι γενικά ένας καλός κανόνας για να έχετε), τότε καλώδιο ένα ασύρματο πομπό 433 MHz με πρίζες, όπως περιγράφεται στο Raspberry Pi Arduino οικιακό έργο αυτοματισμού Οδηγός αυτοματισμού οικιακής χρήσης με Raspberry Pi και Arduino Οδηγός αυτοματισμού κατοικιών με Raspberry Pi και Arduino Η αγορά αυτοματισμού κατοικιών πλημμυρίζεται από ακριβά καταναλωτικά συστήματα, ασύμβατα μεταξύ τους και δαπανηρά για την εγκατάσταση. Εάν έχετε ένα Raspberry Pi και ένα Arduino, μπορείτε βασικά να επιτύχετε το ίδιο πράγμα στο ... Διαβάστε περισσότερα.
Λίστα εξαρτημάτων και Σχηματική
- Arduino
- Σετ λυχνιών LED RGB LED
- Τροφοδοσία 12 volt
- 3 x τρανζίστορ MOSFET N (χρησιμοποιώ τον τύπο STP16NF06FP)
- Ρελέ και υποδοχή ρεύματος ή ασύρματες ελεγχόμενες υποδοχές και κατάλληλο πομπό
- Η επιλογή σας για το νυχτερινό φως (κανονικό δίκτυο τροφοδοτείται με βύσμα είναι μια χαρά)
- Αισθητήρα κίνησης PIR (HC-SR501) ή σόναρ SC-04 (δεν είναι τόσο αποτελεσματικός)
- Αισθητήρας φωτός
- Κωδικός έργου - αλλά διαβάζετε για να βεβαιωθείτε ότι καταλαβαίνετε πώς να προσαρμόσετε τα πάντα.
Εδώ είναι το πλήρες σχηματικό.
Καλωδίωση ενός ρελέ
Σημείωση : Περάστε αυτή την ενότητα αν θέλετε να χρησιμοποιήσετε τις λυχνίες RGB και ως νυχτερινό φως - ειδικά για την ενεργοποίηση ενός ξεχωριστού φωτός με τροφοδοσία από το δίκτυο.
Για την τροφοδοσία ρεύματος, ο ηλεκτρονόμος σας θα πρέπει να έχει ονομαστική τάση - 110V ή 240V AC ανάλογα με τον τόπο κατοικίας σας - και περισσότερο από το συνολικό ρεύμα που θα αλλάζετε. Αυτό που έχω χρησιμοποιήσει από αυτό το πακέτο αισθητήρα (αποκήρυξη: αυτό είναι το κατάστημά μου) είναι 250VAC / 10A, οπότε πρέπει να είμαστε ασφαλείς. Τα ρελέ έχουν μια θύρα com, συνήθως στο κέντρο, η οποία θα πρέπει να συνδεθεί με το ζωντανό σύρμα που μπαίνει στο βύσμα. στη συνέχεια, συνδέστε τον τερματικό ζεύξης στην υποδοχή NO (κανονικά ανοικτή). Δεν θα έπρεπε να σου πω να μην κάνεις αυτό το λάθος είναι συνδεδεμένο σε μια πρίζα, ή πρόκειται να πεθάνεις. Αν φοβάστε να βρεθείτε σε ρεύμα, χρησιμοποιήστε ασύρματα πρίζες.
Τα γείωση και τα ουδέτερα καλώδια πρέπει να κατευθύνονται κατευθείαν στην πρίζα και να μην αγγίζουν το ρελέ. Μπορεί να μην έχετε μια γείωση στις ΗΠΑ. Είναι δική σας ευθύνη να γνωρίζετε τη χρωματική κωδικοποίηση των καλωδίων στην περιοχή σας - αν δεν μπορούσατε να μεταφέρετε μια κανονική πρίζα στο σπίτι σας ή να επανασυνδέσετε ένα βύσμα, μην προσπαθήσετε να ενσωματώσετε ένα ρελέ σε ένα!
Για να ελέγξετε, συνδέστε τον ακροδέκτη του σήματος ρελέ σε 12 και, στη συνέχεια, εκτελέστε ένα απλό πρόγραμμα αναβοσβήνει τροποποιημένο για να λειτουργήσει στον ακροδέκτη 12, όχι το 13 όπως είναι προεπιλεγμένο. Η υποδοχή σας θα πρέπει να ανάβει και να απενεργοποιείται κάθε λίγα δευτερόλεπτα. Ο λόγος για τον οποίο δεν χρησιμοποιώ τον ακροδέκτη 13 είναι επειδή κατά τη διάρκεια της διαδικασίας φόρτωσης, το LED του σκάφους ανάβει γρήγορα για να δείξει σειριακή δραστηριότητα, πράγμα που θα μπορούσε να προκαλέσει την ενεργοποίηση του ρελέ.
Λάβετε σωστά το χρονοδιάγραμμα
Οι λειτουργίες χρονομέτρησης και ρολογιού είναι δύσκολες χωρίς πρόσβαση σε σύνδεση δικτύου ή αποκλειστικό ρολόι πραγματικού χρόνου (αυτές περιλαμβάνουν τις δικές τους μπαταρίες για να κρατήσουν το ρολόι ακόμη και όταν το κύριο Arduino δεν έχει ισχύ). Για να κρατήσει το κόστος χαμηλό, θα εξαπατήσω. Θα κάνω σκληρό κώδικα για μια ώρα έναρξης για το Arduino να αρχίσει η αντίστροφη μέτρηση. οι χρονισμοί θα είναι επομένως σχετικοί με αυτήν την ώρα έναρξης. Κάθε 24 ώρες, το ρολόι θα επαναρυθμιστεί. Ο παρακάτω κωδικός λειτουργίας ρολογιού διασφαλίζει ότι οι συνολικές μεταβλητές currentMillis και currentMinutes είναι σωστές κάθε μέρα. Το Arduino δεν πρέπει να χάσει περισσότερο από μερικά δευτερόλεπτα κάθε 45 ημέρες. Ωστόσο, αυτό το σκληρό κωδικοποιημένο στυλ χρονισμού είναι αρκετά περιορισμένο επειδή μια διακοπή ρεύματος ή τυχαία επαναφορά θα σπάσει τα πάντα, οπότε αυτό είναι σίγουρα ένας τομέας που θα μπορούσε να βελτιωθεί. Αν ο συγχρονισμός δεν καταλήγει σε συγχρονισμό, επαναφέρετε απλώς το Arduino στην καθορισμένη ώρα έναρξης.
Ο κώδικας πρέπει να είναι κατανοητός.
void clock(){ if(millis()>= previousMillis+86400000){ // a full day has elapsed, reset the clock; previousMillis +=86400000; } currentMillis = millis() - previousMillis; // this keeps our currentMillis the same each day currentMinutes = (currentMillis/1000)/60; }
Λειτουργία φωτισμού νυκτός
Έχω διαχωρίσει τους κύριους βρόχους σε ξεχωριστές λειτουργίες, ώστε να είναι ευκολότερο να διαβαστούν και να αφαιρεθούν ή να προσαρμοστούν. Η λειτουργία nightlight () λειτουργεί μόνο μεταξύ των ωρών κατά τις οποίες το Arduino επαναρυθμίστηκε (υποθέτω ότι πιθανότατα θα το κάνετε αυτό σε ή γύρω από τον ύπνο, όταν είναι σκοτεινός) και μέχρι να ξεκινήσει ο συναγερμός ανατολής. Αρχικά προσπάθησα να χρησιμοποιήσω μια αντίσταση που εξαρτάται από το φως, αλλά δεν είναι πολύ ευαίσθητες στο μπλε φως (που συμβαίνει να είναι το χρώμα που χρησιμοποιώ για το φως της νύχτας) και είναι δύσκολο να βαθμονομηθώ σωστά. Η χρήση του ρολογιού έχει μεγαλύτερη σημασία, ούτως ή άλλως. Θα χρησιμοποιήσουμε τη μεταβλητή global currentminutes, η οποία γίνεται επαναφορά κάθε μέρα.
Ο αισθητήρας PIR μπορεί να είναι λίγο περίεργος αν δεν έχετε χρησιμοποιήσει ποτέ πριν, αν και η καλωδίωση δεν είναι δύσκολη - θα βρείτε VCC, GND, και OUT σαφώς επισημασμένο στην πλάτη. Υπάρχουν δύο μεταβλητές αντιστάσεις σας επίσης? αυτό που ονομάζεται RX καθορίζει το εύρος (μέχρι περίπου 7m), και ένα άλλο επισημασμένο TX καθορίζει την καθυστέρηση. Η καθυστέρηση είναι 5 δευτερόλεπτα στη χαμηλότερη ρύθμιση (πλήρως αριστερόστροφα) και σημαίνει ότι οποιαδήποτε στιγμιαία κίνηση θα προκαλέσει τουλάχιστον 5 δευτερόλεπτα από την κατάσταση "on" από τον αισθητήρα. Ωστόσο, καθορίζει επίσης την καθυστέρηση μεταξύ των ενεργών καταστάσεων - οπότε αν περάσουν 5 δευτερόλεπτα και δεν εντοπιστεί καμία κίνηση, ο αισθητήρας θα στείλει ένα χαμηλό σήμα για τουλάχιστον 5 δευτερόλεπτα ακόμα κι αν υπάρχει κίνηση κατά τη διάρκεια αυτής της περιόδου. Αν έχετε καθυστέρηση που έχει οριστεί σε περίπου 30 δευτερόλεπτα, μπορεί να φαίνεται σαν να έχει σπάσει ο αισθητήρας.
Εάν κοιμάστε μόνοι σας και δεν σας πειράζει να χρησιμοποιείτε τις ίδιες λυχνίες λωρίδας RGB τόσο για το ηλιοβασίλεμα όσο και για το νυχτερινό φως, θα πρέπει να είστε σε θέση να προσαρμόσετε τον κώδικα αρκετά εύκολα.
void nightlight(){ // Only work between the hours of reset ->sunrise. if(currentMinutes< minutesUntilSunrise){ if(digitalRead(trigger) == 1){ nightLightTimeOff = millis()+nightLightTimeOut; // activate, or extend the time until turning off the light Serial.println("Activating nightlight"); } } //Turn light on if needed if(millis()< nightLightTimeOff){ digitalWrite(nightLight, HIGH); } else{ digitalWrite(nightLight, LOW); } }
Ξυπνητήρι Sunrise
Για απλότητα, θα χρησιμοποιήσω την τιμή χρώματος RGB 255.255, 0 για μια βαθιά κίτρινη ανατολή - με αυτόν τον τρόπο η αύξηση και στα δύο κανάλια χρώματος θα είναι η ίδια. Εάν διαπιστώσετε ότι σας ξυπνά πολύ νωρίς, σκεφτείτε να αρχίσετε με ένα βαθύ κόκκινο και να ξεθωριάζει προς το κίτρινο ή το λευκό. Η ράμπα που έχω χρησιμοποιήσει απλά γραμμική - μπορεί να θέλετε να ερευνήσετε χρησιμοποιώντας μια πιο φυσική καμπύλη για τιμές φωτεινότητας.
Η λειτουργία είναι απλή - καταρτίζει πόσο το φως πρέπει να αυξάνεται ανά δευτερόλεπτο, όπως είναι σε πλήρη φωτεινότητα μετά από μια περίοδο 30 λεπτών. τότε πολλαπλασιάζει αυτό με όσο καιρό δευτερόλεπτα είναι αυτή τη στιγμή στην ανατολή του ηλίου. Αν είναι ήδη σε πλήρη φωτεινότητα, παραμένει για άλλα 10 λεπτά για να βεβαιωθείτε ότι είστε επάνω (και αν δεν είστε ακόμα πάνω, θα πρέπει πιθανώς να έχετε ένα εφεδρικό συναγερμό στη θέση του).
void sunrisealarm(){ //each second during the 30 minite period should increase the colour value by: float increment = (float) 255/(30*60); //red 255, green 255 gives us full brightness yellow if(currentMinutes>= minutesUntilSunrise){ //sunrise begins! float currentVal = (float)((currentMillis/1000) - (minutesUntilSunrise*60)) * increment; Serial.print("Current value for sunrise:"); Serial.println(currentVal); //during ramp up, write the current value of minutes X brightness increment if(currentVal< 255){ analogWrite(RED, currentVal); analogWrite(GREEN, currentVal); } else if(currentMinutes - minutesUntilSunrise< 40){ // once we're at full brightness, keep the lights on for 10 minutes longer analogWrite(RED, 255); analogWrite(GREEN, 255); } else{ //after that, we're nuking them back to off state analogWrite(RED, 0); analogWrite(GREEN, 0); } } }
Παγίδες και μελλοντικές αναβαθμίσεις
Έχω χρησιμοποιήσει αυτό για τις τελευταίες εβδομάδες τώρα και πραγματικά βοηθά να ξυπνήσει αισθάνεται πιο αναζωογονημένο και σε ένα αξιοπρεπή χρόνο? το νυχτερινό φως λειτουργεί πολύ καλά. Δεν είναι τέλειο, όμως, εδώ είναι μερικά πράγματα που χρειάζονται εργασία και τα διδάγματα που αντλήθηκαν κατά τη διάρκεια της κατασκευής.
Κατά την πραγματοποίηση αυτού του έργου, αντιμετώπισα πολλά ζητήματα αντιμετώπισης μεγάλων αριθμών, οπότε αν σκοπεύετε να τροποποιήσετε τον κώδικα, λάβετε υπόψη αυτό το θέμα. Στη γλώσσα C, η πληκτρολόγηση των μεταβλητών σας είναι πολύ σημαντική - ένας αριθμός δεν είναι πάντα μόνο ένας αριθμός. Για παράδειγμα, θα πρέπει να χρησιμοποιηθούν μεγάλες μεταβλητές που δεν έχουν υπογραφεί για την αποθήκευση υπερβολικά μεγάλων αριθμών, όπως συμβαίνει όταν μιλάμε για χιλιοστά του δευτερολέπτου, αλλά ακόμη και ένας αριθμός μικρότερος των 60.000 δεν μπορεί να αποθηκευτεί ως κανονικός ακέραιος αριθμός (ένα unsigned int θα ήταν αποδεκτό για μέχρι 68.000 ) . Το ζήτημα είναι να διαβάσετε τους τύπους των μεταβλητών σας όταν χρησιμοποιείτε μεγάλους αριθμούς και εάν βρίσκετε περίεργα σφάλματα, πιθανώς επειδή μια από τις μεταβλητές σας δεν έχει αρκετά κομμάτια!
Βρήκα επίσης ένα πρόβλημα με πολύ χαμηλές διαρροές τάσης φωτεινότητας - που οδηγούν στο μικρότερο ποσοστό εκπομπής φωτός ακόμη και όταν εκπέμπεται σήμα digitalWrite (RED, 0) - Δεν νομίζω ότι είναι πρόβλημα υλικού με τις λωρίδες από τότε που δουλεύουν πρόστιμο με τους επίσημους ελεγκτές. Αν κάποιος μπορεί να λύσει αυτό το πρόβλημα, όπως φαίνεται παρακάτω, θα ήμουν πολύ ευγνώμων. Έχω δοκιμάσει τραβήξτε κάτω αντιστάσεις, και τον περιορισμό της τάσης εξόδου από τις καρφίτσες Arduino. Μπορεί να χρειαστεί να προσθέσω ένα απλό κύκλωμα εναλλαγής ισχύος για να τροφοδοτεί μόνο τη λωρίδα LED όταν χρειάζεται πραγματικά. ή θα μπορούσε να είναι ελαττωματικά MOSFET.
Για μελλοντική δουλειά, ελπίζω να προσθέσω έναν δέκτη υπερύθρων και να αντιγράψω μερικά από τα χαρακτηριστικά του αρχικού ελεγκτή - τουλάχιστον την ικανότητα να αλλάξω τα χρώματα ως ένα γενικό φως χρήσης, καθώς τώρα το έργο μετατρέπει την ταινία σε μια ξεχωριστή νύχτα φως. Μπορεί ακόμη και να προσθέσω μια αυτόματη λειτουργία χρονικού ορίου 30 λεπτών.
Δοκιμάσατε αυτό, κάνατε βελτιώσεις ή πήρατε άλλες ιδέες; Επιτρέψτε μου να μάθω στα σχόλια!