- Johdanto digitaaliseen BH1750-valosensorimoduuliin
- Arduino
- Arduinon ohjelmointi BH1750-valosensorin liittämistä varten
Kun otat puhelinta auringonpaisteessa tai kirkkaassa valaistuksessa, se säätää kirkkauden automaattisesti valaistusolosuhteiden mukaan. Suurimmalla osalla näyttölaitteista päivinä, olipa kyseessä sitten televisio tai matkapuhelin, on ympäristön valaistusanturi sisällä kirkkauden säätämiseksi automaattisesti. Tänään tässä opetusohjelmassa käytämme yhtä tällaista anturia BH1750 -valoanturimoduulia ja liitämme sen Arduinoon ja näytämme Lux-arvon 16x2 LCD: n yli.
Johdanto digitaaliseen BH1750-valosensorimoduuliin
BH1750 on digitaalinen ympäröivän valon anturi tai valon intensiteettianturi, jota voidaan käyttää näytön kirkkauden automaattiseen säätämiseen matkapuhelimissa, LCD-näytöissä tai autojen ajovalojen kytkemiseen päälle / pois päältä ulkovalaistusolosuhteiden perusteella.
Anturissa käytetään I 2 C -sarjayhteysprotokollaa, mikä helpottaa käyttöä mikro-ohjainten kanssa. I2C-tiedonsiirtoa varten siinä on SDI- ja SDA-nastat. Pinout BH1750 Ympäröivän valon tunnistin on esitetty alla:
Tämän anturin lähtö on LUX (lx), joten se ei vaadi muita laskelmia. Lux on yksikkö, jolla mitataan valon voimakkuutta. Se mittaa voimakkuutta tietylle alueelle osuvan valon määrän mukaan. Yksi lux on yhtä suuri kuin yksi ontelo neliömetriä kohti.
Anturi toimii jännitteillä 2,4 V - 3,6 V (tyypillisesti 3,0 V) ja kuluttaa 0,12 mA: n virtaa. Tällä anturilla on laaja kantama ja korkea resoluutio (1-65535lx), ja lisäksi mittausvaihtelu on myös pieni (noin +/- 20%). Se voi toimia myös itsenäisesti ilman ulkoisia komponentteja.
Vaikka LDR-anturia voidaan käyttää myös laitteiden ohjaamiseen valaistusolosuhteiden perusteella, mutta se ei ole niin tarkka. Olemme käyttäneet LDR-anturia rakentaaksemme monia valohallittuja sovelluksia:
- Arduino-valotunnistinpiiri LDR: n avulla
- Tumma ilmaisin, joka käyttää LDR- ja 555 Timer IC -laitteita
- Yksinkertainen LDR-piiri valon havaitsemiseksi
- Arduino-värisekoitusvalaisin, jossa on RGB-LED ja LDR
Arduino
Piirikaavio on kytkeä BH1750 Valoanturi Arduino on esitetty alla.
BH1750: n I2C-tiedonsiirtotapit SDA ja SCL on kytketty Arduino-nastoihin A4 ja A5 vastaavasti I 2 C -yhteyttä varten. Kuten tiedämme, anturin käyttöjännite on 3,3 V, joten BH1750: n VCC ja GND on kytketty Arduinon 3,3 V: iin ja GND: hen. Nestekidenäytössä datanastat (D4-D7) on kytketty Arduinon digitaalisiin nastoihin D2-D5 ja RS- ja EN-nastat Arduinon D6- ja D7-liittimiin. Nestekidenäytön V0 on kytketty pottiin ja 10k pottia käytetään LCD-näytön kirkkauden säätämiseen.
Arduinon ohjelmointi BH1750-valosensorin liittämistä varten
Ohjelmointiosa tämän LUX-anturin käyttämiseksi Arduinon kanssa on erittäin helppoa. Vaikka tälle anturille on saatavana kirjasto, mutta voimme käyttää sitä myös ilman sitä.
Ensinnäkin olemme sisällyttäneet otsikkotiedostot LCD- ja I 2 C -protokollia varten.
#sisältää
In setup toiminto, olemme alustetaan sekä LCD-anturi ja painetut aukon viestin LCD.
void setup () { Wire.begin (); lcd-alku (16,2); lcd.print ("BH1750-valo"); lcd.setCursor (0,1); lcd.print ("Intensiteettianturi"); viive (2000); }
Tässä BH1750_Read- ja BH1750_Init- funktioita käytetään vastaavasti Lux-arvojen lukemiseen ja kirjoittamiseen. Toimintoa Wire.beginTransmission () käytetään lähetyksen aloittamiseen ja Wire.requestFrom (osoite, 2) -toimintoa käytetään lukemaan rekistereitä, joissa 2 ilmaisee rekisterien lukumäärän.
Edelleen Wire.endTransmission () -toimintoa käytetään lähetyksen lopettamiseen ja Wire.write () -toimintoa käytetään siirtymään haluttuun rekisteriin kirjoittamalla kyseisen rekisterin osoite siihen.
int BH1750_Lue (int-osoite) { int i = 0; Wire.beginTransmission (osoite); Wire.requestFrom (osoite, 2); kun taas (Wire.available ()) { buff = Wire.read (); i ++; } Wire.endTransmission (); paluu i; } void BH1750_Init (int-osoite) { Wire.beginTransmission (osoite); Wire.write (0x10); Wire.endTransmission (); }
In loop -toiminto, olemme tulostamalla reaaliajassa luksiarvon yli LCD. Vertaa ensin palautusarvoa funktiosta BH1750_Read funktioon 2 ja aloita sitten Lux-arvojen tulostus, jos se on yhtä suuri kuin 2. Tässä arvoja verrataan arvoon 2, koska funktio BH1750_Read palauttaa rekisterilaskurin arvon ja luemme vain 2 rekisteriä. Joten kun se saavuttaa arvon 2, ohjelma alkaa tulostaa valon voimakkuuden LUX-arvoja.
Sitten käytetään kaavaa arvojen saamiseksi molemmista rekistereistä ja jakamalla ne arvolla 1,2, mikä on mittaustarkkuus.
void loop () { int i; uint16_t-arvo = 0; BH1750_Init (BH1750-osoite); viive (200); if (2 == BH1750_Lue (BH1750osoite)) { arvo = ((buff << 8) -huhde) / 1,2; lcd.clear (); lcd.print ("Intensiteetti LUX-muodossa"); lcd.setCursor (6,1); lcd.print (arvo); } viive (150); }
Käynnistä lopuksi Arduino ja lataa ohjelma Arduinoon. Heti kun ohjelma on ladattu, LCD alkaa näyttää valon voimakkuutta LUX-yksiköissä. Voit myös muuttaa arvoja muuttamalla valon voimakkuutta anturin ympärillä alla olevan videon mukaisesti.