Ελέγχουμε ασύρματα την DSLR μας από το laptop/κινητό με το Arduino
- Πέμπτη, 04 Δεκεμβρίου 2014 15:34
Εκτός από το σπίτι μας που ελέγχουμε από το Android κινητό μας (ναι, και την καφετιέρα μας), εκτός από το αυτοκίνητό μας που είχε την ίδια τύχη (write-up pending), συνεχώς ασχολούμαστε και με νέα σχετικά projects.
Είναι ασφαλές να πούμε ότι στο greeceandroid μας αρέσει να καταστρέφουμε φτιάχνουμε πράγματα, με την DSLR μας (Nikon D3200) να μπήκε και αυτή στην λίστα των αντικειμένων που "πειράξαμε" επιτυχώς.
Φυσικά "συνεργούς" σε όλα αυτά τα Projects έχουμε πολλές Development Boards, αλλά ειδικά το Arduino έχει την τιμητική του χάρη στην χαμηλή τιμή του και στην γενικότερη ευκολία που παρέχει.
Όλες οι DSLR έχουν δυνατότητα ασύρματου ελέγχου του κλείστρου με χειριστήριο υπερύθρων της εκάστοτε εταιρείας. Η Nikon D3200 μου (και ~30 τουλάχιστον ακόμα Nikon) χρησιμοποιούν το ML-L3.
Η λογική του project περιλαμβάνει να διαβάσουμε με παλμογράφο την κυματομορφή που παράγει το συγκεκριμένο χειριστήριο και στην συνέχεια να προγραμματίσουμε το Arduino να μπορεί να την αναπαράξει και στην συνέχεια να την μεταφέρει σε IR LED.
Επέλεξα να μην χρησιμοποιήσω κάποια από τα έτοιμα libraries για IR που υπάρχουν για το Arduino, αλλά να κάνω τα πάντα χειροκίνητα γιατί μου αρέσει να ταλαιπωρώ τον εαυτό μου. Ok, ίσως δεν μου αρέσει να ταλαιπωρώ τον εαυτό μου, αλλά θεωρώ ότι ένα έτοιμο IR library σου αφαιρεί μέρος του ελέγχου στον κώδικά σου και χάνεις και "μέρος" της διαδικασίας κατασκευής ενός project.
Στην τελική υλοποίηση χρησιμοποίησα την tone() που παράγει τετραγωνικούς παλμούς της συχνότητας που θα ορίσουμε (38Khz είναι το φέρον σήμα μας), με το μεγαλύτερο πρόβλημα που αντιμετώπισα να είναι ο χρόνος μεταξύ των παλμών που όριζα που χρειαζόταν fine-tuning. Ούτε η delay() ούτε η delayMicroseconds() είναι απολύτως ακριβείς, αλλά και οι λοιπές εντολές χρειάζονται κάποιο χρόνο για να εκτελεστούν, το οποίο έβγαζε εκτός το timing των παλμών. Για τους παλμούς των 0,5ms όρισα 0,2ms delay μέχρι την επόμενη εντολή για να πετύχω το ίδιο αποτέλεσμα.
Φτιάχνοντας λίγο τα timings πετυχαίνουμε να παράξουμε ακριβώς το ίδιο σήμα στο Arduino που παράγει και το ML-L3, το οποίο οδηγήσαμε σε IR LED (μαζί φυσικά και με μία αντίσταση).
Εκτός από την κατασκευή της "σωστής" κυματομορφής, υλοποιήσαμε και κάποιες ακόμα λειτουργίες που παρουσιάζω στο παρακάτω βίντεο:
Δίνοντας το "1" στην COM Port, το IR LED στέλνει την κυματομορφή και η DSLR λαμβάνει μία φωτογραφία. Δίνοντας το "2" στην COM Port, η κυματομορφή στέλνεται πολλές φορές με interval που έχουμε ορίσει. Για τις ανάγκες του βίντεο έχουμε βάλει 5 φωτογραφίες με interval ενός δευτερολέπτου. Τέλος, δίνοντας το "3" στην COM Port, το Arduino μπαίνει σε ένα αυτόματο πρόγραμμα που φτιάξαμε, που παίρνει φωτογραφίες όταν δωθεί ένα trigger από κάποιον αισθητήρα. Ενδεικτικά στο βίντεο δείχνουμε να παίρνει δεδομένα από αισθητήρα φωτός, και να παίρνει φωτογραφία όταν η φωτεινότητα πέσει κάτω από κάποιο όριο.
Να αναφέρω φυσικά ότι στην "COM" Port του Arduino (χάρη στο FTDI chip) μπορούμε να στείλουμε το 1/2/3 και από το κινητό μας, χρησιμοποιώντας USB-OTG καλώδιο.
Ένα ακόμα άψογο βίντεο που αξίζει να παραθέσω για όσους θέλουν να μπουν σε αντίστοιχη διαδικασία κατασκευής είναι το παρακάτω:
Το point φυσικά δεν είναι -μόνο- το γεγονός ότι μπορούμε να ελέγξουμε την DSLR μας (και οποιαδήποτε Nikon DSLR με τον ίδιο κώδικα), αλλά η δυνατότητα που έχουμε να "αντιγράψουμε" στο Arduino οποιαδήποτε κυματομορφή υπέρυθρου χειριστηρίου. Έτσι ανοίγει ο δρόμος για οποιαδήποτε αυτοματοποίηση. Για παράδειγμα όταν ένας LM-35 δείξει ότι η θερμοκρασία σε ένα δωμάτιο έπεσε κάτω από κάποιο όριο, το IR LED να στέλνει στο κλιματιστικό εντολή ενεργοποίησής του κτλ.