Skip to content

Instantly share code, notes, and snippets.

@AyozeVera
Created April 29, 2018 19:40
Show Gist options
  • Save AyozeVera/5c892d74d9ac443ecf05e0ab9d11a6d8 to your computer and use it in GitHub Desktop.
Save AyozeVera/5c892d74d9ac443ecf05e0ab9d11a6d8 to your computer and use it in GitHub Desktop.
Arduino LightMetter & Relay
/*
Advanced BH1750 library usage example
This example has some comments about advanced usage features.
Connection:
VCC -> 3V3 or 5V
GND -> GND
SCL -> SCL (A5 on Arduino Uno, Leonardo, etc or 21 on Mega and Due, on esp8266 free selectable)
SDA -> SDA (A4 on Arduino Uno, Leonardo, etc or 20 on Mega and Due, on esp8266 free selectable)
ADD -> (not connected) or GND
ADD pin is used to set sensor I2C address. If it has voltage greater or equal to
0.7VCC voltage (e.g. you've connected it to VCC) the sensor address will be
0x5C. In other case (if ADD voltage less than 0.7 * VCC) the sensor address will
be 0x23 (by default).
*/
#include <Wire.h>
#include <BH1750.h>
/*
BH1750 can be physically configured to use two I2C addresses:
- 0x23 (most common) (if ADD pin had < 0.7VCC voltage)
- 0x5C (if ADD pin had > 0.7VCC voltage)
Library uses 0x23 address as default, but you can define any other address.
If you had troubles with default value - try to change it to 0x5C.
*/
BH1750 lightMeter(0x23);
long readedLight;
unsigned long maxLight;
int relay;
void setup(){
/*
BH1750 has six different measurement modes. They are divided in two groups;
continuous and one-time measurements. In continuous mode, sensor continuously
measures lightness value. In one-time mode the sensor makes only one
measurement and then goes into Power Down mode.
Each mode, has three different precisions:
- Low Resolution Mode - (4 lx precision, 16ms measurement time)
- High Resolution Mode - (1 lx precision, 120ms measurement time)
- High Resolution Mode 2 - (0.5 lx precision, 120ms measurement time)
By default, the library uses Continuous High Resolution Mode, but you can
set any other mode, by passing it to BH1750.begin() or BH1750.configure()
functions.
[!] Remember, if you use One-Time mode, your sensor will go to Power Down
mode each time, when it completes a measurement and you've read it.
Full mode list:
BH1750_CONTINUOUS_LOW_RES_MODE
BH1750_CONTINUOUS_HIGH_RES_MODE (default)
BH1750_CONTINUOUS_HIGH_RES_MODE_2
BH1750_ONE_TIME_LOW_RES_MODE
BH1750_ONE_TIME_HIGH_RES_MODE
BH1750_ONE_TIME_HIGH_RES_MODE_2
*/
Serial.begin(9600);
Serial.println(F("Connecting..."));
// Initialize the I2C bus (BH1750 library doesn't do this automatically)
Wire.begin();
// begin returns a boolean that can be used to detect setup problems.
if (lightMeter.begin(BH1750::ONE_TIME_HIGH_RES_MODE_2)) {
Serial.println(F("BH1750 Advanced begin"));
}
else {
Serial.println(F("Error initialising BH1750"));
}
readedLight = 0;
// Formula: 683 Lux = 1 W/m2
//maxLight = 683L * 800L;
maxLight = 200;
relay = 7;
pinMode(relay, OUTPUT);
digitalWrite(relay, LOW);
}
void loop() {
uint16_t lux = lightMeter.readLightLevel();
long luxes = lux;
readedLight = readedLight + luxes;
Serial.print("To measure:");
Serial.println(maxLight);
Serial.println("Measured: ");
Serial.println(readedLight);
if(readedLight >= maxLight) {
Serial.println("Activate Relay");
readedLight = 0;
Serial.println("Restarting...");
Serial.print("Total: ");
Serial.print(readedLight);
Serial.println("RELAY ON");
digitalWrite(relay, HIGH);
delay(5000);
Serial.println("RELAY OFF");
digitalWrite(relay, LOW);
}
delay(1000);
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment