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

DIY φωτογραφικό φωτόμετρο: 5 βήματα
DIY φωτογραφικό φωτόμετρο: 5 βήματα

Βίντεο: DIY φωτογραφικό φωτόμετρο: 5 βήματα

Βίντεο: DIY φωτογραφικό φωτόμετρο: 5 βήματα
Βίντεο: Πώς Να Βγάλεις Λεφτά Πουλώντας AI Φωτογραφίες 2024, Ιούλιος
Anonim
DIY φωτογραφικό φωτόμετρο
DIY φωτογραφικό φωτόμετρο
DIY φωτογραφικό φωτόμετρο
DIY φωτογραφικό φωτόμετρο

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

Καθώς το Instructables δεν θα με αφήσει να βάλω τα δικά μου βίντεο, δοκιμάστε αυτόν τον σύνδεσμο:

www.youtube.com/embed/avQD10fd52s

Ο στόχος για μένα ήταν ένας μετρητής φωτός να συνοδεύσει την κάμερα μεσαίου φορμά Bronica ETRSi.

Πράγματα που ήθελα να έχει:

  • single ASA (100) επειδή χρησιμοποιώ σχεδόν μόνο ταινία ASA 100
  • όσο το δυνατόν μικρότερο
  • Δώστε μου μόνο συνδυασμούς που μπορεί να αναπαράγει η Bronica μου, που σημαίνει f2.8-f22 και 1sec έως 1/500th sec
  • χωρίς ανοησίες, εκτός από τους απλούς χρόνους και τις τιμές διαφράγματος

Πράγματα που χρησιμοποίησα:

  • Adafruit (Vishay) VEML 7700 digital Lux-meter (περίπου 5 $)
  • Μικρός ελεγκτής Adafruit Trinket M0 (περίπου 9 $)
  • Οθόνη OLED 128x32 (περίπου 10 $)
  • ένα κουμπί για να το ενεργοποιήσετε προσωρινά (μερικά λεπτά)
  • ένα μικρό κομμάτι λωρίδας, γιατί προσπαθώ να μην χρησιμοποιώ καλώδια, αλλά σίγουρα μπορείτε επίσης να χρησιμοποιήσετε καλώδια

Βήμα 1: Βασικοί υπολογισμοί | Lux προς EV

Βασικοί υπολογισμοί | Lux προς EV
Βασικοί υπολογισμοί | Lux προς EV
Βασικοί υπολογισμοί | Lux προς EV
Βασικοί υπολογισμοί | Lux προς EV

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

  • εξάγει τιμές lux 16bit αντί τιμών φωτός "χωρίς διάσταση"
  • εξάγει τις τιμές μέσω I2C

Ένας φωτογραφικός μετρητής φωτός χρησιμοποιεί Exposure Values (EV) που ο αισθητήρας που αγόρασα χρησιμοποιεί τιμές Lux, η οποία είναι εντελώς διαφορετική κλίμακα. Έτσι, το πρώτο βήμα είναι να αποκτήσετε EV από τις τιμές Lux που παρέχονται από τον αισθητήρα.

Μια γρήγορη ματιά στη wikipedia και μπορείτε να βρείτε έναν τύπο για μέτρηση συμβάντων και να μετατρέψετε το EV σε Lux:

Ε = 2,5 * 2^EV

όπου το E μετριέται σε Lux.

Καθώς έχουμε ήδη πάρει την τιμή Lux από τον αισθητήρα και θέλουμε την τιμή EV, πρέπει να διαμορφώσουμε ξανά τον τύπο, ο οποίος μας οδηγεί σε:

EV = log2 (E/2.5)

Αυτός είναι λοιπόν ο πρώτος υπολογισμός που πρέπει να γίνει για να βγάλουμε τις φωτογραφικές τιμές από το φωτόμετρο.

Στον συνημμένο πίνακα αναζήτησης μπορείτε να δείτε όλες τις τιμές που θα χρησιμοποιηθούν σε αυτό το φωτόμετρο, μαζί με τις αντίστοιχες τιμές Lux και EV.

Βήμα 2: Παρουσίαση των τιμών στην οθόνη | Βιβλιοθήκη Adafruit GFX

Παρουσίαση των τιμών στην οθόνη | Βιβλιοθήκη Adafruit GFX
Παρουσίαση των τιμών στην οθόνη | Βιβλιοθήκη Adafruit GFX
Παρουσίαση των τιμών στην οθόνη | Βιβλιοθήκη Adafruit GFX
Παρουσίαση των τιμών στην οθόνη | Βιβλιοθήκη Adafruit GFX
Παρουσίαση των τιμών στην οθόνη | Βιβλιοθήκη Adafruit GFX
Παρουσίαση των τιμών στην οθόνη | Βιβλιοθήκη Adafruit GFX

Προσπάθησα πρώτα να παρουσιάσω τις τιμές σε ολόκληρα βήματα, γιατί σε αυτό μπορώ να βάλω την Bronica μου, αλλά αυτό με οδηγεί σε ένα πρόβλημα:

Ας υποθέσουμε ότι ο αισθητήρας Lux εξάγει μια τιμή ακριβώς 20480, αυτό θα σήμαινε ότι είναι ακριβώς το EV 13, οπότε θα μπορούσα, για παράδειγμα, να θέσω την κάμερά μου σε f4 και 1/500 του δευτερολέπτου και θα ήταν καλό να πάω

Στη συνέχεια, ας υποθέσουμε ότι ο αισθητήρας Lux θα έβγαζε 20479 Lux, 1 Lux κάτω από το EV13, που θα έβγαζε τιμή EV 12, αλλά απέχει μόλις ένα Lux από το EV13

Έτσι, θα έβαζα τη φωτογραφική μου μηχανή στα f2.8 και στο 1/500 του δευτερολέπτου, κάτι που θα υπερεκθέτει 1 στάση χωρίς να ξέρω καν πόσο κοντά ήμουν στο EV13.

Συμπέρασμα: χρειαζόμαστε κάποιο είδος αναλογικής εμφάνισης των τιμών για να δούμε τουλάχιστον πόσο κοντά ή μακριά είναι ο μετρητής από το επόμενο ή το προηγούμενο βήμα EV.

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

Ένα για τις τιμές διαφράγματος, ένα για τις φορές.

Η βιβλιοθήκη GFX χρησιμοποιεί τιμές 8bit για την παρουσίαση γραφικών, οπότε έφτιαξα ένα φύλλο xls (δείτε την εικόνα παραπάνω).

  • κάθε τιμή έχει την ίδια ακριβώς ποσότητα εικονοστοιχείων ανά τιμή
  • οι χρόνοι και τα ανοίγματα έχουν ακριβώς τον ίδιο αριθμό τιμών ανά σειρά
  • Πρόσθεσα το απαραίτητο "B" στην αρχή κάθε byte και το "," στο τέλος
  • Στη συνέχεια το εξήγαγα σε απλό κείμενο και voila: επισυνάπτω το τρίτο γραφικό

Οι τιμές χρόνου ξεκινούν κατά 1/8 του δευτερολέπτου και οι τιμές διαφράγματος ξεκινούν κατά f2.8

Χρησιμοποιώντας τον πίνακα αναζήτησης του προηγούμενου βήματος γνωρίζουμε ότι αυτό αντιπροσωπεύει 160 Lux ή EV6.

Οι πιο σκοτεινές τιμές θα είναι τότε f22 και 1/500 του δευτερολέπτου

Και πάλι μέσω του πίνακα αναζήτησης μπορούμε να δούμε ότι σημαίνει 655360 Lux ή EV18

Μέχρι εδώ καλά.

Έτσι, στο EV6 το γραφικό διάφραγμα πρέπει να είναι στα αριστερά, οι χρόνοι στα δεξιά και αντίστροφα στο EV18

Βήμα 3: Ανάγνωση και αντιστάθμιση των τιμών Lux | VEML7700

Ανάγνωση και αντιστάθμιση των τιμών Lux | VEML7700
Ανάγνωση και αντιστάθμιση των τιμών Lux | VEML7700
Ανάγνωση και αντιστάθμιση των τιμών Lux | VEML7700
Ανάγνωση και αντιστάθμιση των τιμών Lux | VEML7700

Κατά την περιήγηση στο φύλλο δεδομένων των χρήσεων του Vishay VEML7700 Adafruit για τον πίνακα τους, βρήκα μια μάλλον ανησυχητική ειδοποίηση:

Ο αισθητήρας λειτουργεί μόνο γραμμικά μεταξύ 0 και 1000Lux (!)

δείτε το στιγμιότυπο οθόνης με την πορτοκαλί (γραμμική) γραμμή και το μπλε (πραγματική έξοδο αισθητήρα)

Το ηλιακό φως (EV15) είναι περίπου 80.000 Lux, πράγμα που σημαίνει ότι χωρίς αντιστάθμιση του μη γραμμικού τμήματος του αισθητήρα θα ήταν εντελώς άχρηστο ως φωτόμετρο.

Ο Vishay το γνωρίζει αυτό, οπότε παρείχαν στους πελάτες τους ένα άλλο pdf που ονομάζεται Designing the VEML7700 Into an Application.

Σε αυτό το pdf μπορείτε να βρείτε έναν τύπο για να αντισταθμίσετε τους μη γραμμικούς αισθητήρες:

LUX_CORR = 6.0135e-13*pow (LUX, 4) -9.3924e-9*pow (LUX, 3)+8.1488e-5*pow (LUX, 2)+1.0023*LUX

Όπου LUX_CORR είναι το διορθωμένο Lux-Value και LUX είναι η τιμή που βγάζει ο αισθητήρας.

Αυτές είναι οι μεταβλητές που χρησιμοποίησα, οι διαφορετικές που χρησιμοποιήθηκαν στο φύλλο τους.

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

Έτσι τις πρώτες μέρες αναρωτιόμουν γιατί το φωτόμετρό μου βγάζει μόνο 20000 Lux το μέγιστο ακόμη και σε άμεσο ηλιακό φως.

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

Αλλά υπάρχει μια άλλη υπόδειξη που κρύβεται στην τεκμηρίωση του αισθητήρα:

Αυτός ο τύπος αντιστάθμισης λειτουργεί μόνο εάν ορίσετε τον αισθητήρα στα 25ms και λόγο κέρδους 1/8.

Αυτό γίνεται πολύ εύκολα με τη βιβλιοθήκη Adafruits προσθέτοντας:

veml.setGain (VEML7700_GAIN_1_8); veml.setIntegrationTime (VEML7700_IT_25MS);

στο κενό σας setup ()

Έτσι, αφού το ρυθμίσετε σε 1/8 και 25ms και προσθέσετε τον τύπο αντιστάθμισης, μπορείτε να μετρήσετε έως και 120000 lux, αρκετά για να καλύψετε το φως του ήλιου στα 80-100k Lux

Βήμα 4: Κωδικός Arduino / C

Καθώς εξαρτάται από τη χρησιμοποιούμενη οθόνη και τον προτιμώμενο ελεγκτή σας, δεν θα επεκταθώ σε λεπτομέρειες, μόνο μερικές σκέψεις και συμβουλές για προσθήκη, ειδικά όταν χρησιμοποιείτε τις βιβλιοθήκες Adafruit και το OLED 128x32 px:

στο void setup:

έθεσα το μέρος της βιβλιοθήκης VEML σε:

veml.setGain (VEML7700_GAIN_1_8);

veml.setIntegrationTime (VEML7700_IT_25MS);

veml.setLowThreshold (10000);

veml.setHighThreshold (20000);

veml.interruptEnable (true);

στον κενό βρόχο:

φροντίστε να προσθέσετε την αποζημίωση:

int LUX_CORR = 6.0135e-13*pow (LUX, 4) -9.3924e-9*pow (LUX, 3)+8.1488e-5*pow (LUX, 2)+1.0023*LUX;

για να λάβετε ηλεκτρικά οχήματα από την Lux χρησιμοποιήστε αυτήν τη γραμμή:

float EV = log2 ((LUX_CORR/2.5));

μετακίνηση των bitmaps

για να βεβαιωθείτε ότι οι χάρτες bit μετακινούνται μόνο όταν οι τιμές είναι μεταξύ 160Lux και 655360Lux όπως αναφέρθηκε σε προηγούμενο βήμα, τυλίξτε το σε μια ρήτρα if όπως αυτή:

εάν (LUX_CORR> 159 && LUX_CORR <655361)

Στη συνέχεια, πρέπει να αντιστοιχίσουμε τις τιμές EV σε συντεταγμένες, καθώς το εύρος των EV είναι διψήφιο και θέλουμε να τα μετακινήσουμε από την οθόνη πάνω από 128 px σε ολόκληρη την οθόνη, χρειαζόμαστε μεγαλύτερες τιμές.

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

int EV_DSPL = EV*100;

και:

ΩΡΑ = χάρτης (EV_DSPL, 600, 1900, -260, 39); APERTURE = χάρτης (EV_DSPL, 600, 1900, 39, -260);

Όπως μπορείτε να δείτε στην περίπτωσή μου, η ελάχιστη θέση του bitmap θα είναι -260px και η μέγιστη 39px

Αυτό που μπορεί επίσης να δει εδώ είναι ότι άλλαξα τις συντεταγμένες έτσι ώστε οι δύο χάρτες bit να κινούνται προς την αντίθετη κατεύθυνση

Στη συνέχεια, πρέπει να μετακινήσουμε τους χάρτες bit σύμφωνα με τις συντεταγμένες κατά:

display.drawBitmap ((TIME), (0), TIMES_bmp, 352, 16, 1); display.drawBitmap ((APERTURE), (15), APERTURES_bmp, 352, 16, 1);

Και αυτό είναι το μόνο που πρέπει να γίνει

Ως μπόνους, εμφανίζω ευθείες τιμές EV και Lux όταν ο αισθητήρας εξάγει τιμές κάτω από 160Lux, μόνο και μόνο επειδή ήθελα να βλέπω πράγματα όταν το δοκιμάζω.

Βήμα 5: Το βάζουμε μαζί

Το βάζουμε μαζί
Το βάζουμε μαζί
Το βάζουμε μαζί
Το βάζουμε μαζί

Και τα δύο, η οθόνη και ο αισθητήρας χρησιμοποιούν το I2C για επικοινωνία, η δημιουργία του πραγματικού υλικού είναι τόσο απλή όσο μπορεί.

Απλώς συνδέστε τις γραμμές δεδομένων, ρολογιού γείωσης και 3V με το Arduino και είστε έτοιμοι να ξεκινήσετε.

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

Στο γραφικό μου, οι λευκές κουκίδες υποτίθεται ότι συνδέονται με την οθόνη και τον αισθητήρα και οι κίτρινες κουκίδες συνδέονται με το Trinket.

Η μόνη εξαίρεση θα ήταν η ακίδα δεδομένων της γραμμής I2C που συνδέεται με την οθόνη, η οποία συνδέεται επίσης με την ακίδα δεδομένων Trinkets.

Επέλεξα να μην χρησιμοποιήσω διακόπτη ενεργοποίησης/απενεργοποίησης, αλλά αντίθετα να χρησιμοποιήσω ένα κουμπί και δύο κυψέλες κουμπιών 3V για να τον ενεργοποιήσω προσωρινά, αρκεί να πατήσω το κουμπί. Δυναμώνει κάτω από το 1/10 του δευτερολέπτου, ώστε να είναι αρκετά γρήγορο για να διαθέσω ένα κουμπί και να το κάνω μικρότερο.

Συνιστάται: