- Εισαγωγή στην ηλεκτρονική μονάδα αισθητήρα φωτός BH1750
- Arduino
- Προγραμματισμός Arduino για διασύνδεση αισθητήρα φωτός BH1750
Όταν παίρνετε το τηλέφωνό σας σε ηλιοφάνεια ή σε υψηλό φωτισμό, τότε ρυθμίζει αυτόματα τη φωτεινότητα ανάλογα με τις συνθήκες φωτισμού. Οι περισσότερες συσκευές προβολής τώρα μια μέρα, είτε πρόκειται για τηλεόραση είτε για κινητό τηλέφωνο, διαθέτουν τον αισθητήρα φωτισμού περιβάλλοντος για να ρυθμίζουν αυτόματα τη φωτεινότητα. Σήμερα σε αυτό το σεμινάριο, θα χρησιμοποιήσουμε έναν τέτοιο αισθητήρα BH1750 Light Sensor Module και θα το συνδέσουμε με το Arduino και θα δείξουμε την τιμή Lux πάνω από 16x2 LCD.
Εισαγωγή στην ηλεκτρονική μονάδα αισθητήρα φωτός BH1750
Το BH1750 είναι ένας ψηφιακός αισθητήρας φωτισμού περιβάλλοντος ή ένας αισθητήρας έντασης φωτός, ο οποίος μπορεί να χρησιμοποιηθεί για την αυτόματη ρύθμιση της φωτεινότητας της οθόνης σε κινητά, οθόνες LCD ή για την ενεργοποίηση / απενεργοποίηση των προβολέων σε αυτοκίνητα βάσει των εξωτερικών συνθηκών φωτισμού.
Ο αισθητήρας χρησιμοποιεί πρωτόκολλο σειριακής επικοινωνίας I 2 C που το καθιστά ευκολότερο στη χρήση με μικροελεγκτές. Για επικοινωνία I2C έχει καρφίτσες SDI και SDA. Το pinout του BH1750 Ambient Light Sensor φαίνεται παρακάτω:
Η έξοδος αυτού του αισθητήρα είναι σε LUX (lx), οπότε δεν απαιτεί περαιτέρω υπολογισμούς. Το Lux είναι η μονάδα μέτρησης της έντασης του φωτός. Μετρά την ένταση ανάλογα με την ποσότητα φωτός που χτυπά σε μια συγκεκριμένη περιοχή. Ένα lux ισούται με έναν αυλό ανά τετραγωνικό μέτρο.
Ο αισθητήρας λειτουργεί σε τάσεις από 2.4V έως 3.6V (συνήθως 3.0V) και καταναλώνει ρεύμα 0.12mA. Αυτός ο αισθητήρας έχει ευρύ φάσμα και υψηλή ανάλυση (1-65535lx) και επιπλέον, η παραλλαγή μέτρησης είναι επίσης μικρή (περίπου +/- 20%). Μπορεί επίσης να λειτουργεί ανεξάρτητα χωρίς εξωτερικό στοιχείο.
Αν και ένας αισθητήρας LDR μπορεί επίσης να χρησιμοποιηθεί για τον έλεγχο των συσκευών με βάση τις συνθήκες φωτισμού, αλλά δεν είναι τόσο ακριβής. Έχουμε χρησιμοποιήσει αισθητήρα LDR για την κατασκευή πολλών εφαρμογών ελεγχόμενου φωτός:
- Κύκλωμα αισθητήρα φωτός Arduino χρησιμοποιώντας LDR
- Dark Detector χρησιμοποιώντας LDR και 555 Timer IC
- Απλό κύκλωμα LDR για ανίχνευση φωτός
- Arduino Color Mixing Lamp χρησιμοποιώντας RGB LED και LDR
Arduino
Το διάγραμμα κυκλώματος για τη σύνδεση του αισθητήρα φωτός BH1750 με το Arduino φαίνεται παρακάτω.
Οι καρφίτσες επικοινωνίας I2C SDA και SCL του BH1750 συνδέονται με τον πείρο Arduino A4 και A5 αντίστοιχα για την επικοινωνία I 2 C. Όπως γνωρίζουμε, η τάση λειτουργίας για τον αισθητήρα είναι 3.3v, έτσι τα VCC και GND του BH1750 συνδέονται με 3.3V και GND του Arduino. Για LCD, οι ακίδες δεδομένων (D4-D7) συνδέονται με ψηφιακές ακίδες D2-D5 του Arduino και οι ακίδες RS και EN συνδέονται με D6 και D7 του Arduino. Το V0 της LCD συνδέεται με το δοχείο και ένα δοχείο 10k χρησιμοποιείται για τον έλεγχο της φωτεινότητας της LCD.
Προγραμματισμός Arduino για διασύνδεση αισθητήρα φωτός BH1750
Το τμήμα προγραμματισμού για τη χρήση αυτού του αισθητήρα LUX με το Arduino είναι πολύ εύκολο. Αν και υπάρχει διαθέσιμη βιβλιοθήκη για αυτόν τον αισθητήρα, αλλά μπορούμε επίσης να τη χρησιμοποιήσουμε χωρίς αυτό.
Πρώτον, έχουμε συμπεριλάβει αρχεία κεφαλίδας για πρωτόκολλο LCD και I 2 C.
#περιλαμβάνω
Στη λειτουργία εγκατάστασης , αρχικοποιήσαμε τόσο την οθόνη LCD όσο και τον αισθητήρα και εκτυπώσαμε το μήνυμα έναρξης στην οθόνη LCD.
άκυρη ρύθμιση () { Wire.begin (); lcd.begin (16,2); lcd.print ("BH1750 Light"); lcd.setCursor (0,1); lcd.print ("Αισθητήρας έντασης"); καθυστέρηση (2000); }
Εδώ BH1750_Read και BH1750_Init λειτουργίες χρησιμοποιούνται για να διαβάζουν και να γράφουν τις τιμές Lux αντίστοιχα. Η συνάρτηση Wire.beginTransmission () χρησιμοποιείται για να ξεκινήσει η μετάδοση και η συνάρτηση Wire.requestFrom (διεύθυνση, 2) χρησιμοποιείται για την ανάγνωση καταχωρητών όπου το 2 υποδεικνύει τον αριθμό των καταχωρητών.
Περαιτέρω Wire.endTransmission () χρησιμοποιείται για τον τερματισμό της μετάδοσης και η συνάρτηση Wire.write () χρησιμοποιείται για να μεταβείτε στον επιθυμητό καταχωρητή εισάγοντας τη διεύθυνση αυτού του μητρώου σε αυτό.
int BH1750_Read (int διεύθυνση) { int i = 0; Wire.beginTransmission (διεύθυνση); Wire.requestFrom (διεύθυνση, 2); ενώ (Wire.available ()) { buff = Wire.read (); i ++; } Wire.endTransmission (); επιστροφή i; } άκυρο BH1750_Init (διεύθυνση int) { Wire.beginTransmission (διεύθυνση); Wire.write (0x10); Wire.endTransmission (); }
Στη λειτουργία βρόχου , εκτυπώνουμε τις τιμές lux σε πραγματικό χρόνο μέσω LCD. Πρώτα συγκρίνετε την τιμή επιστροφής από τη συνάρτηση BH1750_Read με 2 και, στη συνέχεια, ξεκινήστε την εκτύπωση των τιμών Lux εάν είναι ίση με 2. Εδώ οι τιμές συγκρίνονται με το 2, επειδή η συνάρτηση BH1750_Read επιστρέφει την τιμή του αριθμού μητρώου και διαβάζουμε μόνο 2 καταχωρητές. Έτσι, όταν φτάσει στο 2, το πρόγραμμα ξεκινά την εκτύπωση των τιμών LUX έντασης φωτός.
Στη συνέχεια χρησιμοποιείται ένας τύπος για να λάβετε τις τιμές και από τους δύο καταχωρητές και να τις διαιρέσετε με 1.2, που είναι η ακρίβεια της μέτρησης.
κενός βρόχος () { int i; τιμή uint16_t = 0; BH1750_Init (διεύθυνση BH1750); καθυστέρηση (200) if (2 == BH1750_Read (BH1750address)) { τιμή = ((buff << 8) -buff) /1.2; lcd.clear (); lcd.print ("Ένταση σε LUX"); lcd.setCursor (6,1); lcd.print (τιμή); } καθυστέρηση (150) }
Τέλος, ενεργοποιήστε το Arduino και ανεβάστε το πρόγραμμα στο Arduino. Μόλις φορτωθεί το πρόγραμμα, η οθόνη LCD αρχίζει να δείχνει την ένταση του φωτός σε μονάδες LUX. Μπορείτε επίσης να αλλάξετε τις τιμές αλλάζοντας την ένταση του φωτός γύρω από τον αισθητήρα, όπως φαίνεται στο παρακάτω βίντεο.