Πίνακας περιεχομένων:
- Βήμα 1: Αλλά.. Πώς;
- Βήμα 2: Μάθετε πώς να ενεργοποιείτε την κάμερα
- Βήμα 3: Τρόποι ενεργοποίησης
- Βήμα 4: Γράψτε τον Κώδικα για την ενεργοποίηση
- Βήμα 5: Διάστημα κλάσης {};
- Βήμα 6: Χειρισμός του διαστήματος μέσω του Arduino
- Βήμα 7: Εμφάνιση του διαστήματος
- Βήμα 8: Το βάζουμε όλα μαζί
- Βήμα 9: Προσθήκη ενός τελευταίου πράγματος
- Βήμα 10: Περιέχει το χάος
- Βήμα 11: Sens0rs
- Βήμα 12: PoweeEeEer
- Βήμα 13: Περίφραξη.. Kinda
- Βήμα 14: Fin
Βίντεο: Pimp My Cam: 14 βήματα (με εικόνες)
2024 Συγγραφέας: John Day | [email protected]. Τελευταία τροποποίηση: 2024-01-30 08:39
Εδώ είναι από πού προέρχεται αυτό το έργο.
Πριν από λίγο σκέφτηκα να γυρίσω κάποια timelaps. "Πως?" Ρώτησα τον εαυτό μου; Η πρώτη απάντηση ήταν "Λοιπόν.. απλά γυρίζεις κάτι και το επιταχύνεις και αυτό είναι". Είναι όμως τόσο απλό; Πρώτον, θέλω να χρησιμοποιήσω το DSLR για αυτό και το Nikon D3100 έχει χρονικό όριο 10 λεπτών για τη λήψη βίντεο. Δεύτερον, ακόμη και αν είχα μια κάμερα χωρίς χρονικό περιορισμό στη λήψη βίντεο, τι γίνεται αν θέλω να κάνω ένα πραγματικά μεγάλο timelapse, όπως 12 ώρες; Κάνω βίντεο διάρκειας 12 ωρών 1080p. Αμφιβάλλω ότι η μπαταρία θα διαρκέσει τόσο πολύ και, δεν είναι πολύ πρακτικό, έτσι; Εντάξει, διασχίζοντας την "ιδέα βίντεο γυρίσματα". Λοιπόν, υπάρχουν εικόνες. Λήψη φωτογραφίας στην κάμερα σε ένα συγκεκριμένο διάστημα και καταλήγοντας σε εκατοντάδες εικόνες τις οποίες επεξεργάζομαι μέσω λογισμικού για τη δημιουργία βίντεο..;
Μου φάνηκε μια εντάξει ιδέα, έτσι αποφάσισα να της δώσω μια ευκαιρία. Έτσι κατέληξα να θέλω να φτιάξω μια συσκευή στην οποία μπορώ να εισάγω μια χρονική περίοδο και με βάση αυτήν την περίοδο θα ενεργοποιούσε συνεχώς την κάμερά μου. Και ενώ είμαστε σε αυτό, γιατί να μην προσθέσουμε κάποια άλλα πράγματα, όπως κίνηση-σκανδάλη και ούτω καθεξής;
Βήμα 1: Αλλά.. Πώς;
ΠΩΣ? είναι η επόμενη ερώτησή μας που δεν έχει απάντηση. Λόγω χρονισμού, ενεργοποίησης, αισθητήρων και άλλων πραγμάτων δεν θα αποτελεί έκπληξη το γεγονός ότι το πρώτο που ήρθε στο μυαλό ήταν, φυσικά, ένα Arduino. Εντάξει, αλλά ακόμα, πρέπει να μάθουμε πώς να ενεργοποιούμε το κλείστρο στην κάμερά μας. Χμ.. σερβο ζεστό κολλημένο στην κάμερα του σώματος; Απολύτως όχι, θέλουμε να είναι αθόρυβο και αποδοτικό σε ισχύ. Εξοικονόμηση ενέργειας - γιατί; Επειδή θέλω να το κάνω φορητό και να του κολλήσω μια μπαταρία, δεν θα είμαι κοντά σε ένα βύσμα τροφοδοσίας κάθε φορά. Πώς να το ενεργοποιήσουμε λοιπόν.. είναι πραγματικά πολύ απλό.
Η Nikon ήδη ήξερε ότι θα θέλατε τηλεχειριστήριο και άλλα αξεσουάρ και είπαν "εντάξει, θα τους τα δώσουμε όλα αυτά, αλλά θα φτιάξουμε μια ειδική θύρα για να κερδίσουμε περισσότερα χρήματα σε αυτά τα αξεσουάρ", ντροπή σου Nikon Το Αυτή η θύρα ονομάζεται (στην περίπτωσή μου) MC-DC2 και ο φθηνότερος τρόπος για να την πιάσουμε είναι να αγοράσουμε μια απομακρυσμένη απελευθέρωση κλείστρου στο eBay για 2-3 $ και να χρησιμοποιήσουμε μόνο το καλώδιο.
*Ορισμένες άλλες κάμερες, όπως η Canon, έχουν μια απλή υποδοχή ακουστικών 3,5 mm για την ίδια χρήση, ώστε να μπορείτε να χρησιμοποιήσετε κάποιο καλώδιο από παλιά ηχεία/ακουστικά.
Βήμα 2: Μάθετε πώς να ενεργοποιείτε την κάμερα
Τέλος πάντων, εδώ είναι η συμφωνία, το λιμάνι θα έχει 3 συνδέσεις που θα μας ενδιαφέρουν (Ground, Focus και Shutter) και θα έχετε αυτές στο τέλος του καλωδίου σας του πρόσφατα αγορασμένου τηλεχειριστηρίου που μόλις καταστρέψατε. Αυτές οι τρεις συνδέσεις είναι σημαντικές για εμάς, διότι αν κοντύνουμε το Ground και το Focus, η κάμερα θα εστιάσει ακριβώς όπως πατάτε το κουμπί εστίασης και, στη συνέχεια, όσο αυτή η σύνδεση παραμένει, μπορείτε να κοντύνετε το Ground και το Shutter και η κάμερα θα τραβήξει μια φωτογραφία σαν να πατήσατε το κουμπί κλείστρου στην κάμερα.
Μπορείτε να το δοκιμάσετε βραχυκυκλώνοντας κυριολεκτικά τα ζωντανά καλώδια στο τέλος του καλωδίου για να προσδιορίσετε ποιο σύρμα είναι ποιο. Μόλις το κάνετε αυτό, για ευκολότερο προσδιορισμό, θα τα χρωματίσουμε έτσι:
Γη = ΜΑΥΡΟ? Εστίαση = ΛΕΥΚΟ? Κλείστρο = ΚΟΚΚΙΝΟ.
Εντάξει, τώρα πρέπει να μάθουμε στο Arduino να το κάνει αυτό για εμάς.
Βήμα 3: Τρόποι ενεργοποίησης
Το πιο απλό πράγμα που μπορούμε να πούμε σε ένα Arduino να στείλει στον εξωτερικό κόσμο είναι το ψηφιακό σήμα εξόδου. Αυτό το σήμα μπορεί είτε να είναι Υ HIGHΗΛΟ (λογικό '1') είτε ΧΑΜΗΛΟ (λογικό '0'), εξ ου και το όνομα "ψηφιακό", ή όταν μετατραπεί σε βασικό του νόημα: 5V για λογικό Υ HIGHΗΛΟ και 0V για λογικό ΧΑΜΗΛΟ.
Τι πρέπει να κάνουμε με αυτά τα ψηφιακά σήματα; Δεν μπορούμε απλά να τα συνδέσουμε με την κάμερα και να περιμένουμε ότι η κάμερα θα ξέρει τι θέλουμε. Όπως είδαμε, πρέπει να συντομεύσουμε τις συνδέσεις στην κάμερα για να αντιδράσει, οπότε πρέπει να χρησιμοποιήσουμε τα ψηφιακά σήματα του Arduino για να οδηγήσουμε μερικά εξαρτήματα που μπορούν να βραχυκυκλώσουν τους ακροδέκτες τους, ανάλογα με αυτό το ηλεκτρικό σήμα που της στέλνουμε Το *Με τον τρόπο που το περιέγραψα, μπορεί να σκέφτεστε "Αχ, ρελέ!" αλλα οχι οχι Ο ρελέ θα έκανε τη δουλειά αλλά έχουμε να κάνουμε με τόσο μικρά ρεύματα που μπορούμε εύκολα να χρησιμοποιήσουμε τη μαύρη μαγεία των ημιαγωγών.
Το πρώτο συστατικό που θα δοκιμάσω είναι ένα οπτικό ζεύγος. Τα έχω δει να εφαρμόζονται περισσότερο για αυτό και είναι ίσως η καλύτερη λύση. Το Optocoupler είναι ένα ηλεκτρικό εξάρτημα με το οποίο ελέγχετε το κύκλωμα εξόδου ενώ το κύκλωμα εισόδου είναι εντελώς απομονωμένο από αυτό. Αυτό επιτυγχάνεται με τη μετάδοση πληροφοριών μέσω φωτός, το κύκλωμα εισόδου ανάβει ένα LED και το φωτοτρανζίστορ στην έξοδο αλλάζει ανάλογα.
Επομένως, θα χρησιμοποιήσουμε το οπτικό ζεύγος με αυτόν τον τρόπο: λέμε στο Arduino μας να στείλει ένα ψηφιακό HIGH σε ένα αν είναι ψηφιακές ακίδες, αυτό το σήμα είναι πρακτικά 5V που θα οδηγήσει το LED στο εσωτερικό του οπτικού ζεύκτη και το φωτοτρανζίστορ στο εσωτερικό του θα "βραχυκυκλώσει" είναι ακροδέκτες εξόδου όταν ανιχνεύει αυτό το φως και αντίστροφα, θα "αποσυνδέσει" τους ακροδέκτες του, καθώς δεν υπάρχει φως από το LED όταν στέλνουμε ένα ψηφιακό LOW μέσω του Arduino.
Πρακτικά, αυτό σημαίνει: μία από τις ψηφιακές ακίδες του Arduino είναι προσαρτημένη στην καρφίτσα ANODE του οπτικού ζεύγους, το GND του Arduino είναι προσαρτημένο στο CATHODE, το GND της κάμερας είναι προσαρτημένο στον ΕΚΠΟΜΠΗ και το FOCUS (ή το κλείστρο) στον ΣΥΛΛΕΚΤΗ. Ανατρέξτε στο φύλλο δεδομένων του οπτικού ζεύκτη που χρησιμοποιείτε για να βρείτε αυτές τις καρφίτσες στη δική σας. Χρησιμοποιώ το 4N35, ώστε να μπορείτε να ακολουθήσετε τυφλά το δικό μου σχηματικό, αν δεν σας ενδιαφέρει πραγματικά τι συμβαίνει μέσα στο οπτικό ζεύγος. Περιττό να πούμε ότι θα χρειαστούμε δύο από αυτά, αφού πρέπει να ελέγχουμε τόσο την ΕΣΤΙΑΣΗ όσο και το ΚΛΕΙΣΤΟ της κάμερας.
Αφού είδαμε πώς λειτουργεί αυτό, με ένα φωτοτρανζίστορ στην έξοδο, γιατί να μην το δοκιμάσουμε μόνο με ένα απλό τρανζίστορ NPN. Αυτή τη φορά, θα φέρουμε το ψηφιακό σήμα απευθείας (σε αντίσταση) στη βάση του τρανζίστορ και θα συνδέσουμε τόσο την κάμερα όσο και το GND του Arduino στον πομπό και την εστίαση/κλείστρο της κάμερας στον συλλέκτη του τρανζίστορ.
Και πάλι, θα χρειαστούμε δύο από αυτά αφού ελέγχουμε δύο σήματα. Χρησιμοποιώ το BC547B και μπορείτε βασικά να χρησιμοποιήσετε οποιοδήποτε NPN για αυτό, καθώς το ρεύμα που ελέγχουμε είναι ένα μόνο milliamp.
Και τα δύο αυτά εξαρτήματα θα λειτουργήσουν, αλλά η επιλογή του οπτικού ζεύγους είναι πιθανώς η καλύτερη ιδέα, επειδή είναι ασφαλέστερη. Επιλέξτε τα τρανζίστορ μόνο αν γνωρίζετε τι κάνετε.
Βήμα 4: Γράψτε τον Κώδικα για την ενεργοποίηση
Όπως είπαμε και πριν, θα χρησιμοποιήσουμε τις ψηφιακές ακίδες του Arduino για σηματοδότηση. Το Arduino μπορεί να τα χρησιμοποιήσει τόσο για ανάγνωση δεδομένων από αυτό, είτε για εγγραφή σε αυτό, οπότε το πρώτο πράγμα που πρέπει να κάνουμε καθορίζει στη συνάρτηση setup () ότι θα χρησιμοποιήσουμε δύο από τις ψηφιακές ακίδες του Arduino για την έξοδο, όπως:
pinMode (FOCUS_PIN, OUTPUT);
pinMode (SHUTTER_PIN, OUTPUT);
όπου το FOCUS_PIN και το SHUTTER_PIN μπορούν είτε να οριστούν με "#define NAME value" είτε ως int πριν από τη συνάρτηση setup () επειδή μπορείτε να αλλάξετε την καρφίτσα, οπότε είναι ευκολότερο να αλλάξετε την τιμή μόνο σε ένα σημείο και όχι σε ολόκληρο τον κώδικα στη συνέχεια.
Το επόμενο πράγμα που θα κάνουμε είναι να γράψουμε μια συνάρτηση σκανδάλης () η οποία θα κάνει ακριβώς αυτό όταν εκτελείται. Θα συμπεριλάβω μια φωτογραφία με τον κωδικό. Το μόνο που πρέπει να γνωρίζετε είναι ότι κρατάμε πρώτα το FOCUS_PIN στο HIGH για ορισμένο χρονικό διάστημα, επειδή πρέπει να περιμένουμε να εστιάσει η κάμερα στο θέμα στο οποίο το δείχνουμε και στη συνέχεια για μια στιγμή (ενώ το FOCUS_PIN είναι ακόμα Υ HIGHΗΛΟ) βάλτε το SHUTTER_PIN στο HIGH για να τραβήξετε τη φωτογραφία.
Συμπεριέλαβα επίσης τη δυνατότητα παράβλεψης της εστίασης, διότι δεν θα υπάρχει καμία ανάγκη εάν τραβήξουμε ένα timelapse για κάτι που δεν αλλάζει την απόστασή του από την κάμερα στο χρόνο.
Βήμα 5: Διάστημα κλάσης {};
Τώρα που έχουμε ενεργοποιήσει την κάμερα από τον τρόπο που πρέπει να το μετατρέψουμε σε ένα μεσοσταθμιστή, προσθέτοντας τη λειτουργικότητα του χειρισμού της χρονικής περιόδου μεταξύ δύο λήψεων. Για να έχετε την εικόνα αυτού που κάνουμε, εδώ είναι ένας πρωτόγονος κώδικας για να αποδείξετε τη λειτουργικότητα που θέλουμε:
void loop () {
καθυστέρηση (διάστημα)? δώσει το έναυσμα για(); }
Θέλω να μπορώ να αλλάξω αυτό το διάστημα από, ας πούμε, 5 δευτερόλεπτα μέχρι και 20-30 λεπτά. Και εδώ είναι το πρόβλημα, αν θέλω να το αλλάξω από 5s σε 16s ή οτιδήποτε ενδιάμεσα θα χρησιμοποιήσω προσαύξηση 1s, όπου για κάθε μου αίτημα για αύξηση του διαστήματος, το διάστημα θα αυξάνεται για 1s. Αυτό είναι υπέροχο, αλλά τι γίνεται αν θέλω να πάω από 5 δευτερόλεπτα σε 5 λεπτά; Θα με έπαιρναν 295 αιτήματα σε προσαυξήσεις 1s, οπότε πρέπει προφανώς να αυξήσω την τιμή προσαύξησης σε κάτι μεγαλύτερο και πρέπει να καθορίσω σε ποια ακριβή τιμή διαστήματος (κατώφλι) θα αλλάξω την προσαύξηση. Υλοποίησα αυτό:
5s-60s: 1s αύξηση? 60s-300s: αύξηση 10s. 300s-3600s: αύξηση 60s?
αλλά έγραψα αυτήν την κλάση να είναι προσαρμόσιμη, ώστε να μπορείτε να ορίσετε τα δικά σας όρια και προσαυξήσεις (όλα σχολιάζονται στο αρχείο.h, ώστε να γνωρίζετε πού να αλλάξετε ποιες τιμές).
Το παράδειγμα που έδωσα για χειρισμό του διαστήματος προφανώς γίνεται σε υπολογιστή, τώρα πρέπει να το μεταφέρουμε στο Arduino. Όλη αυτή η τάξη, Interval, τοποθετείται μέσα σε ένα αρχείο κεφαλίδας που χρησιμοποιείται για την αποθήκευση δηλώσεων και ορισμών (όχι στην πραγματικότητα, αλλά μπορεί να γίνει σε αυτό το παράδειγμα χωρίς να βλάψει) την τάξη/τις συναρτήσεις μας. Για να εισαγάγουμε αυτό το αρχείο κεφαλίδας στον κώδικα arduino μας χρησιμοποιούμε το "#include" Interval.h "" (τα αρχεία πρέπει να βρίσκονται στον ίδιο κατάλογο), το οποίο διασφαλίζει ότι μπορούμε να χρησιμοποιήσουμε τις λειτουργίες που ορίζονται στο αρχείο κεφαλίδας στον κύριο κώδικα.
Βήμα 6: Χειρισμός του διαστήματος μέσω του Arduino
Τώρα θέλουμε να μπορούμε να αλλάξουμε την τιμή του διαστήματος, είτε να το αυξήσουμε είτε να το μειώσουμε. Αυτό είναι δύο πράγματα, οπότε θα χρησιμοποιήσουμε δύο ψηφιακά σήματα τα οποία θα ελέγχονται με δύο κουμπιά. Θα διαβάσουμε επανειλημμένα τις τιμές στις ψηφιακές καρφίτσες που ορίσαμε στα κουμπιά και θα τις αναλύσουμε στις συναρτήσεις checkButtons (int, int); που θα αυξήσει το διάστημα αν πατηθεί το κουμπί "πάνω" και θα μειωθεί το διάστημα αν το κουμπί "κάτω". Επίσης, αν πατηθούν και τα δύο κουμπιά, θα αλλάξει την τιμή της μεταβλητής εστίασης που ελέγχει εάν θα εστιάσει ή όχι κατά την ενεργοποίηση.
Μέρος του κώδικα ((millis () - prevBtnPress)> = debounceTime) χρησιμοποιείται για την αποκήρυξη. Με τον τρόπο που το έγραψα, σημαίνει ότι καταχωρώ το πρώτο πάτημα κουμπιού με boolean μεταβλητή btnPressed και θυμάμαι την ώρα που συνέβη. Τότε περιμένω για κάποιο χρονικό διάστημα (debounceTime) και αν το κουμπί είναι ακόμα πατημένο αντιδρώ. Κάνει επίσης μια "παύση" μεταξύ κάθε άλλου πατήματος του κουμπιού, ώστε να αποφεύγονται οι πολλαπλές πιέσεις όπου δεν υπάρχουν.
Και τέλος, με:
if ((millis () - prevTrigger) / 1000> = interval.getVal ()) {
prevTrigger = millis (); δώσει το έναυσμα για(); }
πρώτα ελέγχουμε αν ο χρόνος μεταξύ της τελευταίας ενεργοποίησης (prevTrigger) και του τρέχοντος χρόνου (millis ()) (όλα διαιρούνται με ένα 1000 επειδή είναι σε χιλιοστά του δευτερολέπτου και το διάστημα είναι σε δευτερόλεπτα) είναι ίσο ή μεγαλύτερο από το διάστημα θέλουμε, και αν είναι, θυμόμαστε την τρέχουσα ώρα ως την τελευταία φορά που ενεργοποιήσαμε την κάμερα και στη συνέχεια την ενεργοποιήσαμε.
Με αυτό το πλήρες, ουσιαστικά φτιάξαμε ένα μεσοδιακόπτη, αλλά δεν έχουμε τελειώσει. Ακόμα δεν βλέπουμε την τιμή του μεσοδιακόπτη. Εμφανίζεται μόνο στο Serial Monitor και δεν θα είμαστε πάντα κοντά σε έναν υπολογιστή, οπότε τώρα θα εφαρμόσουμε κάτι που θα μας δείχνει το διάστημα καθώς το αλλάζουμε.
Βήμα 7: Εμφάνιση του διαστήματος
Εδώ παρουσιάζουμε την οθόνη. Χρησιμοποίησα την τετραψήφια μονάδα που οδηγείται από το TM1637 επειδή πρέπει να τη χρησιμοποιήσω μόνο για την εμφάνιση χρόνου και τίποτα άλλο. Ο ευκολότερος τρόπος για να χρησιμοποιήσετε αυτές τις ενότητες που δημιουργήθηκαν για ένα Arduino είναι να χρησιμοποιήσετε ήδη δημιουργημένες βιβλιοθήκες για αυτά. Στον ιστότοπο Arduino υπάρχει μια σελίδα που περιγράφει το τσιπ TM1673 και ένας σύνδεσμος προς μια προτεινόμενη βιβλιοθήκη. Κατέβασα αυτήν τη βιβλιοθήκη και υπάρχουν δύο τρόποι με τους οποίους μπορείτε να εισαγάγετε αυτές τις βιβλιοθήκες στο Arduino IDE:
- από το λογισμικό Arduino μεταβείτε στο Sketch> Include Library> Add. ZIP Library και εντοπίστε το αρχείο.zip που μόλις κατεβάσατε
- μπορείτε να κάνετε αυτό που κάνει το Arduino χειροκίνητα και απλά να αποσυμπιέσετε τη βιβλιοθήκη στο φάκελο στον οποίο αποθηκεύει βιβλιοθήκες το Arduino, στα Windows: C: / Users / Username / Documents / Arduino / βιβλιοθήκες \.
Αφού συμπεριλάβετε τη βιβλιοθήκη, θα πρέπει να διαβάσετε το αρχείο "ReadMe" στο οποίο θα βρείτε τη σύνοψη του τι κάνουν οι διάφορες λειτουργίες. Μερικές φορές αυτό δεν είναι αρκετό, οπότε θα θελήσετε να εμβαθύνετε λίγο και να εξερευνήσετε τα αρχεία κεφαλίδας στα οποία μπορείτε να δείτε πώς εφαρμόζονται οι λειτουργίες και τι απαιτούν ως ορίσματα εισόδου. Και φυσικά ο καλύτερος τρόπος για να αποκτήσετε μια αίσθηση του τι μπορεί να κάνει μια βιβλιοθήκη προσφέρει συνήθως ένα παράδειγμα το οποίο μπορείτε να εκτελέσετε από το λογισμικό Arduino μέσω αρχείου> Παραδείγματα> Όνομα βιβλιοθήκης> Παράδειγμα. Αυτή η βιβλιοθήκη προσφέρει ένα παράδειγμα που σας συνιστώ να εκτελέσετε στην οθόνη σας μόνο για να δείτε αν η οθόνη σας λειτουργεί σωστά και σας ενθαρρύνω να τροποποιήσετε τον κώδικα που βλέπετε στο παράδειγμα και να δείτε μόνοι σας τι κάνει κάθε λειτουργία και πώς αντιδρά η οθόνη το. Το έκανα και αυτό κατάλαβα:
χρησιμοποιεί 4 ανυπόγραφους ακέραιους αριθμούς των 8 bit για κάθε ψηφίο (0bB7, B6, B5, B4, B3, B2, B1, B0). Και κάθε ένα από αυτά τα δυαδικά ψηφία B6-B0 χρησιμοποιούνται για κάθε τμήμα ενός συγκεκριμένου ψηφίου και αν το bit είναι 1 το τμήμα που ελέγχεται από αυτό ανάβει. Αυτοί οι ακέραιοι αριθμοί αποθηκεύονται σε έναν πίνακα που ονομάζεται δεδομένα . Η ρύθμιση αυτών των δυαδικών ψηφίων στην οθόνη επιτυγχάνεται με το display.setSegments (δεδομένα). ή μπορείτε φυσικά να έχετε πρόσβαση σε κάποιο από τα ψηφία ιδιαίτερα και να τα ορίσετε είτε χειροκίνητα (δεδομένα [0] = 0b01111001) είτε μπορείτε να χρησιμοποιήσετε τη συνάρτηση encodeDigit (int). και μετατρέψτε το ψηφίο που το στέλνετε σε δυαδικά ψηφία (δεδομένα [0] = display.encodeDigit (3)). Το bit B7 χρησιμοποιείται μόνο από το δεύτερο ψηφίο ή δεδομένα [1], για την ενεργοποίηση του παχέος εντέρου.
Δεδομένου ότι έγραψα τις συναρτήσεις στη μάγισσα κλάσης INTERVAL, στις οποίες μπορώ να λάβω ορισμένα ψηφία του διαστήματος με τη μορφή M1M0: S1S0, όπου το Μ αντιπροσωπεύει για λεπτά και το S για δευτερόλεπτα, είναι φυσικό να χρησιμοποιώ το encodeDigitFunction (int). για την εμφάνιση του διαστήματος ως εξής:
displayInterval () {
δεδομένα [0] = display.encodeDigit (interval.getM1 ()); δεδομένα [1] = 0x80 | display.encodeDigit (interval.getM0 ()); δεδομένα [2] = display.encodeDigit (interval.getS1 ()); δεδομένα [3] = display.encodeDigit (interval.getS0 ()); display.setSegments (δεδομένα); }
Τώρα, όποτε χρειαστεί να εμφανίσω το Διάστημα στην οθόνη, μπορώ να καλέσω τη λειτουργία displayInterval ().
*Σημειώστε το "0x80 |…" στα δεδομένα [1]. Χρησιμοποιείται για να διασφαλίσει ότι το bit B7 των δεδομένων [1] είναι πάντα 1, οπότε το παχύ έντερο ανάβει.
Τελευταίο πράγμα για την οθόνη, κατανάλωση ενέργειας. Μπορεί να μην έχει μεγάλη σημασία αφού δεν θα το διατηρήσουμε για μεγάλο χρονικό διάστημα, αλλά αν σας ενδιαφέρει να το κάνετε ακόμα πιο φιλικό προς την μπαταρία, τότε σκεφτείτε να μειώσετε τη φωτεινότητα της οθόνης, καθώς αντλεί 3 φορές περισσότερο ρεύμα στη μέγιστη φωτεινότητα από το χαμηλότερο.
Βήμα 8: Το βάζουμε όλα μαζί
Γνωρίζουμε πώς να ενεργοποιήσουμε την κάμερα, πώς να χειριστούμε το διάστημα και πώς να εμφανίσουμε το ίδιο διάστημα σε μια οθόνη. Τώρα πρέπει απλώς να συγχωνεύσουμε όλα αυτά τα πράγματα μαζί. Θα ξεκινήσουμε, φυσικά, από τη συνάρτηση βρόχου (). Θα ελέγχουμε συνεχώς για πατήματα κουμπιών και θα αντιδρούμε ανάλογα με τα κουμπιά ελέγχου (int, int) και θα αλλάζουμε το διάστημα ανάλογα και θα εμφανίζουμε το μεταβαλλόμενο διάστημα. Επίσης στον βρόχο () θα ελέγχουμε συνεχώς αν έχει περάσει αρκετός χρόνος από την τελευταία ενεργοποίηση ή πατήστε το κουμπί και καλέστε τη λειτουργία σκανδάλης () εάν χρειαστεί. Για λόγους χαμηλότερης κατανάλωσης ενέργειας, θα απενεργοποιήσουμε την οθόνη μετά από κάποιο χρονικό διάστημα.
Πρόσθεσα ένα δίχρωμο led, (Κόκκινο και Πράσινο, κοινή κάθοδος) το οποίο θα ανάψει πράσινο ενώ η σκανδάλη () και θα ανάψει κόκκινο μαζί με την οθόνη εάν η εστίαση είναι ενεργοποιημένη και θα παραμείνει σβηστή εάν η εστίαση είναι μακριά από.
Επίσης, θα μεταναστεύσουμε σε ένα ακόμη μικρότερο Arduino, το Pro Mini.
Βήμα 9: Προσθήκη ενός τελευταίου πράγματος
Μέχρι τώρα.. έχουμε δημιουργήσει μόνο ένα Intervalometer. Χρήσιμο, αλλά μπορούμε καλύτερα.
Εδώ είναι αυτό που είχα στο μυαλό μου: το Intervalometer το κάνει αυτό από προεπιλογή ΕΚΤΟΣ, όταν συνδέουμε κάποιο είδος εξωτερικού διακόπτη/αισθητήρα ο οποίος στη συνέχεια σταματά το μεσοδιακόπτη και ανταποκρίνεται στην είσοδο του διακόπτη/αισθητήρα. Ας το ονομάσουμε αισθητήρα, δεν θα είναι απαραίτητα ένας συνδεδεμένος αισθητήρας, αλλά θα τον αναφέρω ως αυτό.
Πρώτον, πώς εντοπίζουμε ότι έχουμε συνδέσει τον αισθητήρα;
Οι αισθητήρες που θα χρησιμοποιήσουμε/θα κάνουμε όλοι θα χρειαστούν τρία καλώδια που θα τα συνδέσουν με το arduino (Vcc, GND, Signal). Αυτό σημαίνει ότι μπορούμε να χρησιμοποιήσουμε μια υποδοχή ήχου 3,5 mm ως υποδοχή εισόδου για τον αισθητήρα. Και πώς λύνει αυτό το πρόβλημά μας; Λοιπόν, υπάρχουν τύποι υποδοχής 3,5 χιλιοστών "με διακόπτη" που έχουν ακίδες που βραχυκυκλώνονται στις ακίδες του συνδέσμου εάν δεν υπάρχει αρσενικός σύνδεσμος σε αυτές και αποσπώνται όταν υπάρχει ένας συνδετήρας. Αυτό σημαίνει ότι έχουμε τις πληροφορίες με βάση την παρουσία του αισθητήρα. Θα χρησιμοποιήσω την πτυσσόμενη αντίσταση όπως φαίνεται (η ψηφιακή ακίδα θα διαβάσει Υ HIGHΗΛΗ χωρίς τον αισθητήρα και ΧΑΜΗΛΗ με τον προσαρτημένο αισθητήρα) στην εικόνα ή θα μπορούσατε επίσης να την προσαρτήσετε στην ψηφιακή ακίδα στην ακίδα του συνδετήρα που είναι κανονικά συνδεδεμένο στη γείωση και ορίστε αυτό το ψηφιακό pin ως INPUT_PULLUP, θα λειτουργήσει με κάθε τρόπο. Έτσι, τώρα πρέπει να τροποποιήσουμε τον κώδικά μας, ώστε να κάνει ό, τι έχουμε γράψει μέχρι τώρα μόνο εάν ο αισθητήρας δεν είναι παρών ή όταν ο ψηφιακός πείρος ελέγχει ότι είναι Υ HIGHΗΛΟΣ. Το τροποποίησα επίσης έτσι ώστε να εμφανίζει "SENS" στην οθόνη αντί για το διάστημα που είναι άχρηστο σε αυτήν τη λειτουργία, αλλά η εστίαση εξακολουθεί να είναι σχετική για εμάς, θα διατηρήσουμε τη λειτουργικότητα της εναλλαγής της εστίασης με το πάτημα και των δύο κουμπιών και δείχνει την κατάσταση εστίασης μέσω του κόκκινου led.
Τι κάνει πραγματικά ο αισθητήρας;
Το μόνο που χρειάζεται να κάνουμε είναι να βάλουμε 5V στο pin Signal όταν θέλουμε να ενεργοποιήσουμε την κάμερα. Αυτό σημαίνει ότι θα χρειαστούμε έναν άλλο ψηφιακό ακροδέκτη του Arduino για να ελέγξουμε την κατάσταση αυτού του πείρου και όταν εγγραφεί HIGH, το μόνο που χρειάζεται να κάνουμε είναι να καλέσουμε τη λειτουργία σκανδάλης () και η κάμερα να τραβήξει μια εικόνα. Το ευκολότερο παράδειγμα, και αυτό που θα χρησιμοποιήσουμε για να ελέγξουμε αν λειτουργεί, είναι ένα απλό κουμπί με μια αντίσταση αναδίπλωσης. Συνδέστε το κουμπί μεταξύ του Vcc του αισθητήρα και του πείρου σήματος και προσθέστε μια αντίσταση μεταξύ του πείρου σήματος και του GND, με αυτόν τον τρόπο ο πείρος σήματος θα είναι στο GND όταν δεν πατηθεί το κουμπί, καθώς δεν ρέει ρεύμα μέσω της αντίστασης και όταν το κουμπί πιέζεται βάζουμε τον ακροδέκτη σήματος απευθείας στο HIGH και το Arduino το διαβάζει και ενεργοποιεί την κάμερα.
Με αυτό ολοκληρώσαμε τη συγγραφή του κώδικα.
*Θα ήθελα να σημειώσω κάποια προβλήματα που αντιμετώπισα με τις υποδοχές ήχου που χρησιμοποίησα. Κατά την εισαγωγή του αρσενικού βύσματος στο σύνδεσμο, το GND και οποιαδήποτε από τις άλλες δύο ακίδες θα βραχυκυκλώσουν. Αυτό συμβαίνει άμεσα και μόνο κατά την τοποθέτηση της σύνδεσης, αλλά είναι ακόμα αρκετά μεγάλο χρονικό διάστημα για να καταχωρήσει το Arduino ένα σύντομο, έτσι ώστε το Arduino να επανεκκινήσει. Αυτό δεν συμβαίνει τόσο συχνά, αλλά μπορεί να εξακολουθεί να αποτελεί κίνδυνο και υπάρχει πιθανότητα καταστροφής του Arduino, οπότε αποφύγετε τις συνδέσεις που χρησιμοποίησα.
Βήμα 10: Περιέχει το χάος
Μπορείτε να δείτε από τις εικόνες ότι το breadboard γίνεται ακατάστατο και τελειώσαμε, οπότε πρέπει να τα μεταφέρουμε όλα σε μια σανίδα/PCB. Πήγα για PCB επειδή νομίζω ότι θα τα κάνω περισσότερα έτσι ώστε να μπορώ εύκολα να τα αναπαράγω.
Χρησιμοποίησα το Eagle για το σχεδιασμό του PCB και βρήκα σχέδια για όλα τα μέρη που χρησιμοποίησα. Υπάρχει ένα μικροσκοπικό πράγμα στο σχέδιό μου που θα ήθελα να μην το είχα κάνει και αυτό είναι ένα καλώδιο για το Vcc της οθόνης. Το έχω δει πολύ αργά και δεν ήθελα να καταστρέψω αυτό που σχεδίασα προηγουμένως και πήγα με τον τεμπέλη τρόπο να προσθέσω καλώδια και αργότερα να προσθέσω σύρμα σε αυτές τις συνδέσεις αντί για ίχνη χαλκού, οπότε προσέξτε αν χρησιμοποιείτε το δικό μου σχέδιο Το
Ο πίνακας Arduino και η οθόνη συνδέονται με το PCB μέσω γυναικείων κεφαλίδων αντί να κολληθούν απευθείας στο PCB, για προφανείς λόγους. Με αυτόν τον τρόπο υπάρχει άφθονος χώρος για άλλα εξαρτήματα κάτω από την οθόνη για άλλα εξαρτήματα όπως αντιστάσεις, τρανζίστορ και ακόμη και την υποδοχή ήχου.
Έχω βάλει τα κουμπιά μικροϋπολογιστή τα οποία, σύμφωνα με το σχέδιο, πρέπει να κολληθούν απευθείας, αλλά μπορείτε επίσης να χρησιμοποιήσετε τις οπές για τις επικεφαλίδες των θηλυκών καρφιτσών και να συνδέσετε κουμπιά με σύρμα εάν θέλετε να τοποθετηθούν στο περίβλημα και όχι στο PCB.
Θα βάλουμε επίσης μια άλλη θηλυκή υποδοχή ήχου για να συνδέσετε το καλώδιο που συνδέεται με την κάμερα. Με αυτόν τον τρόπο ο πίνακας γίνεται πιο ευέλικτος αφού έτσι θα μπορούμε να συνδεθούμε σε άλλες κάμερες με άλλες υποδοχές.
Βήμα 11: Sens0rs
Ας εξετάσουμε τρόπους εφαρμογής του αισθητήρα.
Έτσι, ο αισθητήρας θα έχει τάση τροφοδοσίας 5V και θα πρέπει να είναι σε θέση να παρέχει ψηφιακό HIGH στην ακίδα σήματος όταν θέλουμε να ενεργοποιήσουμε την κάμερα. Το πρώτο πράγμα που μου ήρθε στο μυαλό είναι ένας αισθητήρας κίνησης, ο PIR συγκεκριμένος. Υπάρχουν μονάδες που πωλούνται για το Arduino που έχουν αυτόν τον αισθητήρα και κάνουν ακριβώς αυτό που θέλουμε. Τροφοδοτούνται με 5V και διαθέτουν ακίδα εξόδου στην οποία βάζουν 5V όταν ενεργοποιούνται, απλά πρέπει να συνδέσουμε τις ακίδες του σε υποδοχή ήχου 3,5 mm και μπορούμε να το συνδέσουμε απευθείας στην πλακέτα. Ένα πράγμα που πρέπει να σημειωθεί είναι ότι αυτός ο αισθητήρας χρειάζεται χρόνο για να ζεσταθεί και να αρχίσει να λειτουργεί σωστά, οπότε μην περιμένετε να λειτουργήσει σωστά μόλις τον συνδέσετε, δώστε λίγο χρόνο και στη συνέχεια ρυθμίστε τον και ό, τι ζωντανό μπαίνει μέσα του Το εύρος ενεργοποιεί την κάμερα.
Δεδομένου ότι σκεφτόμαστε προς την κατεύθυνση των ήδη κατασκευασμένων πινάκων αισθητήρων Arduino, ένας άλλος έρχεται στο μυαλό, ο ήχος. Αυτές οι σανίδες είναι συνήθως κατασκευασμένες με τέτοιο τρόπο ώστε να έχουν μία ακίδα που εξάγει την αναλογική τιμή του ήχου που παίρνει και μια άλλη, ψηφιακή, που βγάζει ένα λογικό Υ HIGHΗΛΟ αν ο ήχος που παίρνει ξεπερνά ένα ορισμένο επίπεδο. Μπορούμε να ορίσουμε αυτό το επίπεδο έτσι ώστε ο αισθητήρας να αγνοεί τη φωνή μας αλλά να καταγράφει ένα χτύπημα. Με αυτόν τον τρόπο, κάθε φορά που χτυπάτε, ενεργοποιείτε την κάμερα.
Βήμα 12: PoweeEeEer
Νομίζω ότι ο ευκολότερος τρόπος για να τροφοδοτήσετε αυτό το πράγμα είναι με ένα power bank και όχι εξωτερικά. Θα διατηρήσουμε τη λειτουργικότητα της φόρτισης του τηλεφώνου μας ή οτιδήποτε άλλο και θα ελέγξουμε την τρέχουσα ροή στην πλακέτα μέσω ενός διακόπτη. Θα εντοπίσουμε τις ακίδες του συνδετήρα USB εξόδου στην πλακέτα κυκλώματος στην τράπεζα τροφοδοσίας που είναι GND και Vcc (5V) και καλώδια συγκόλλησης απευθείας πάνω τους και από εκεί στην πλακέτα μας.
Βήμα 13: Περίφραξη.. Kinda
Πραγματικά πάλεψα με αυτό. Όταν έβαλα το κουτί στο οποίο ήθελα να βάλω το υπάρχον PCB, συνειδητοποίησα ότι δεν υπάρχει καλός τρόπος για να χωρέσω τα πάντα όπως ήθελα και τότε αποφάσισα να σχεδιάσω ένα νέο PCB, αυτή τη φορά με οπτικά ζεύγη. Wantedθελα να τοποθετήσω το PCB ακριβώς κάτω από την πλευρά στην οποία θα ανοίξω τρύπες για ορισμένα εξαρτήματα που πρέπει να φανούν/αγγίξουν. Για να λειτουργήσει αυτό θα χρειαστεί να κολλήσω την οθόνη και το Arduino απευθείας στον πίνακα, χωρίς πρίζες ή κεφαλίδες, και εκεί έγκειται το πρώτο πρόβλημα. Absolutelyταν απολύτως φρικτό να αντιμετωπίσουμε οτιδήποτε αφού δεν ήμουν έτοιμος να το κολλήσω αμέσως μέχρι να δοκιμάσω ότι όλα λειτουργούν και δεν μπορούσα πραγματικά να δοκιμάσω τίποτα αφού δεν μπορούσα να το κολλήσω και ούτω καθεξής.. don μην το κανεις αυτο. Πρόβλημα numero dos, κάνοντας τρύπες στη θήκη. Υποθέτω ότι έκανα λάθος μετρήσεις γιατί καμία από τις τρύπες στη θήκη δεν ήταν ευθυγραμμισμένη με τα εξαρτήματα του PCB και έπρεπε να τα μεγεθύνω και τα κουμπιά ήταν πολύ ψηλά στο PCB και θα πατούσαν πάντα όταν έβαζα τον πίνακα στη θέση του και επειδή ήθελα τις υποδοχές ήχου στο πλάι, έπρεπε να διευρύνω αυτές τις τρύπες για να χωρέσουν πρώτα οι υποδοχές και στη συνέχεια να χαμηλώσω τον πίνακα για να εμφανιστούν η οθόνη και τα κουμπιά.. το αποτέλεσμα είναι τρομερό.
Έκανα τις φοβερές τρύπες λιγότερο φοβερές, επικαλύπτοντας την κορυφή με ένα λεπτό χαρτόνι στο οποίο έκοψα πιο λογικές τρύπες για τα εξαρτήματα και.. εξακολουθεί να είναι τρομερό αλλά πιο εύκολο στο μάτι νομίζω.
Ετυμηγορία, σας προτείνω να το κάνετε αγοράζοντας εξαρτήματα που τοποθετούνται στο περίβλημα και όχι απευθείας στο PCB. Με αυτόν τον τρόπο έχετε περισσότερη ελευθερία στην τοποθέτηση των εξαρτημάτων και λιγότερα μέρη για να κάνετε λάθη.
Βήμα 14: Fin
Τελείωσα, αλλά εδώ είναι κάτι που θα έκανα διαφορετικά:
Χρησιμοποιήστε καλύτερες υποδοχές ήχου 3,5 mm. Αυτά που χρησιμοποίησα τείνουν να βραχυκυκλώνουν τους ακροδέκτες ενώ εισάγω ή βγάζω το βύσμα, με αποτέλεσμα είτε να βραχυκυκλώσουμε την παροχή έτσι ώστε να επαναρυθμιστεί το Arduino είτε να παράγει απλώς ψεύτικες σκανδάλες. Το έχω πει αυτό στο προηγούμενο βήμα αλλά θα το ξαναπώ.. μην κολλήσετε τον πίνακα Arduino χωρίς κεφαλίδες/υποδοχή, απλώς κάνει κάθε είδους αντιμετώπιση προβλημάτων ή μεταφόρτωση νέου κώδικα και ούτω καθεξής πολύ πιο δύσκολα. Πιστεύω επίσης ότι το να έχει ένα σήμα led ότι το πράγμα είναι ενεργοποιημένο θα ήταν χρήσιμο επειδή συχνά δεν μπορώ να πω χωρίς να πατήσω το κουμπί αφού η οθόνη απενεργοποιείται. Και το τελευταίο πράγμα, μια λειτουργία παύσης. Φαντάζομαι ότι είναι χρήσιμο όταν, για παράδειγμα, όταν συνδέετε τον αισθητήρα PIR, επειδή χρειάζεται χρόνος για να ζεσταθεί ή απλά όταν το μετακινείτε δεν θέλετε να ενεργοποιηθεί, ώστε να μπορείτε απλά να διακόψετε τα πάντα, αλλά μπορείτε επίσης απλά να γυρίσετε εκτός της κάμερας έτσι.. ό.
Ένα άλλο τακτοποιημένο πράγμα είναι να το βάλετε με Velcro στο τρίποδο, καθώς πιθανότατα θα χρησιμοποιηθεί εκεί.
Μη διστάσετε να ρωτήσετε οτιδήποτε για αυτό το έργο στα σχόλια και θα ήθελα πολύ να μάθω αν το φτιάξατε και πώς βγήκε σε εσάς.
Συνιστάται:
Pimp Your LED Lamp: 4 Βήματα
Pimp Your LED Lamp: Όταν αγόραζε είδη παντοπωλείου στο σούπερ μάρκετ Lidl στην Ολλανδία, η σύζυγός μου έπεσε σε μια πολύ φθηνή λάμπα LED (2,99 Ευρώ) με ίνες στην κορυφή. Σε αυτόν τον λαμπτήρα LED υπάρχουν τρία LED, ένα κόκκινο, ένα πράσινο και ένα μπλε που δημιουργούν ένα απλό αλλά ωραίο αποτέλεσμα
ESP32-CAM Case System και 3D Printer Cam: 10 βήματα (με εικόνες)
ESP32-CAM Case System και 3D Printer Cam: Έψαχνα να αντικαταστήσω την κάμερα στον τρισδιάστατο εκτυπωτή μου με κάτι μικρό, απλό και λειτουργικό …. και φθηνό. Λίγες αναζητήσεις στο Google με οδήγησαν στην ενότητα ESP32-Cam. Μπορείτε να τα βρείτε με λιγότερο από 10 $, πολύ λιγότερο και έχουν πολύ καλή απόδοση
Ξεκινώντας με το ESP32 CAM - Ροή βίντεο χρησιμοποιώντας ESP CAM μέσω Wifi - Έργο κάμερας ασφαλείας ESP32: 8 βήματα
Ξεκινώντας με το ESP32 CAM | Ροή βίντεο χρησιμοποιώντας ESP CAM μέσω Wifi | ESP32 Security Camera Project: Σήμερα θα μάθουμε πώς να χρησιμοποιούμε αυτόν τον νέο πίνακα CAM ESP32 και πώς μπορούμε να τον κωδικοποιήσουμε και να τον χρησιμοποιήσουμε ως κάμερα ασφαλείας και να λάβουμε βίντεο ροής μέσω wifi
Cam Cam: 18 βήματα (με εικόνες)
Food Cam: Αυτό το έργο ήταν εμπνευσμένο από το πρόγραμμα της κάμερας τροφίμων που έγινε από το MIT Media Lab. Αυτό το έργο είναι μέρος της υπηρεσίας κολλεγίων Coding For Good at UWCSEA East στη Σιγκαπούρη. Ο στόχος αυτού του έργου είναι να μειώσει την ποσότητα τροφής που σπαταλάται από την κοινότητά μας κατά
Pimp Your USB Drive: 10 βήματα (με εικόνες)
Pimp Your USB Drive: Σας αρέσει να αποθηκεύετε δεδομένα. Σιγουρα το κάνεις. Αλλά όταν το βγάζετε στο δρόμο, ο κόσμος σας γελάει! Ναι, το ξέρω, δεν σε καταλαβαίνουν, σωστά; Λοιπόν, ίσως πρέπει να τους βοηθήσετε. Δώστε στον εαυτό σας μια μικρή πίστωση στο δρόμο, χτίζοντας μια αμμοβολή