Raspberry: měření světelné intenzity s BH1750

BH1750 je levný obvod pro měření světelné intenzity. Uvažuji o tom, že bych jím rozšířil meteostanici a měřil ještě navíc světelnou intenzitu. Obvod komunikující po I2C. Proto abychom mohli komunikovat musíme povolit I2C komunikaci. Přihlašte se do Raspberry a zadejte příkaz:

sudo raspi-config

Vyberte možnost 8) Advenced Options -> A7 I2C ( povolte I2C komunikaci)

Poté restartujte Raspberry a jdeme propojit Raspberry a BH1750. Nepotřebujete žádné součástky, pouze oba obvody propojíme.

Schéma zapojení

Manuál BH1750

BH1750-raspberry

 

Napájení je 3,3V!!!

Instalace i2c-tools

apt-get install i2c-tools

Nyní si zobrazíme zařízení na I2C sběrnici:

i2cdetect 1
i2cdetect 1
WARNING! This program can confuse your I2C bus, cause data loss and worse!
I will probe file /dev/i2c-1.
I will probe address range 0x03-0x77.
Continue? [Y/n]
     0  1  2  3  4  5  6  7  8  9  a  b  c  d  e  f
00:          -- -- -- -- -- -- -- -- -- -- -- -- --
10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
20: -- -- -- 23 -- -- -- -- -- -- -- -- -- -- -- --
30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
50: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
70: -- -- -- -- -- -- -- --

Je vidět že na adrese 23 je naše čidlo světelné intenzity. Pro zjištění světelné intenzity použijeme programovací jazyk Python. Pro komunikaci ještě zvýbá nainstalovat modul smbus:

apt-get install python-smbus

Získání hodnoty osvětlení

vim bh1750.py

#!/usr/bin/python
import time
import smbus

# Simple function to convert 2 bytes of data
# into a decimal number
def convertToNumber(data):
  return ((data[1] + (256 * data[0])) / 1.2)

DEVICE = 0x23 # I2C device address
bus = smbus.SMBus(1)  # Rev 2 Pi uses 1

while True:
  data = bus.read_i2c_block_data(DEVICE,0x11)
  print "Light Level : " + str(convertToNumber(data)) + " lx"
  time.sleep(0.5)

Souboru nastavíme oprávnění pro spuštění

chmod ogu+x bh1750.py

Měření spustíme:

sudo python bh1750.py

Arduino: měření světelné intenzity s BH1750

Dnes malinko odbočím a podíváme se do elektroniky. Hledám vhodné čidlo pro moji meteostanici.

Co budeme potřebovat

  • Arduino
  • modul BH1750

Schéma zapojení:

arduino-bh1750

 

BH1750 budeme napájet 5V, ovšem je možné napájet i 3.3V.

Konektor Add na BH1750 je nutné připojit na GND!

Práci si ulehčíme naimportováním této knihovny do projektu: https://github.com/claws/BH1750

Knihovnu stáhněte, rozbalte a přejmenujte na BH1750. Složku BH1750 nahrajte do adresáře názvem libraries který je ve složce kde je nainstalováno Arduino (v mém případě c:\Program Files (x86)\Arduino\libraries\). Restartujte IDE.

Výkonný kód pro měření intenzity světla bude velice jednoduchý:

/*
 
BH1750 library
 
This example initalises the BH1750 object using the default
high resolution mode and then makes a light level reading every second.
 
Connection:
 VCC-5v
 GND-GND
 SCL-SCL(analog pin 5)
 SDA-SDA(analog pin 4)
 ADD-NC or GND
*/
 
#include <Wire.h>
#include <BH1750.h>
 
BH1750 lightMeter;
 
void setup(){
  Serial.begin(9600);
  lightMeter.begin();
  Serial.println("Running...");
}
 
void loop() {
  uint16_t lux = lightMeter.readLightLevel();
  Serial.print("Light: ");
  Serial.print(lux);
  Serial.println(" lx");
  delay(1000);
}

Výstup v konzoli:

Light: 99 lx
Light: 99 lx
Light: 101 lx
Light: 101 lx
Light: 101 lx
Light: 99 lx
Light: 46 lx
Light: 1344 lx
Light: 1665 lx
Light: 17 lx
Light: 5 lx
Light: 1485 lx

Čím menší číslo tím menší intenzita světla.