BH1750 - Digital Lihgt Sensor

Moderator: bbiernat

Post Reply
User avatar
pancio
Administrator
Posts: 67
Joined: 18 September 2013, 23:02 - Wed
Location: SILESIA

BH1750 - Digital Lihgt Sensor

Post by pancio »

Poniższy tutorial prezentuje możliwość sterowania układami z wykorzystaniem taniego czujnika natężenia światła BH1750. Temat jest rozwinięciem i prezentacją kolejnego urządzenia sterowanego z wykorzystaniem magistrali I2C - GPIO w Cubietruck z poziomu Pythona. Powinieneś zapoznać się z częścią tego artykułu dotyczącą konfiguracji jądra systemu i pinów GPIO.

Założenia:
- Cubietruck
- DVK570 (niewymagana, jednak jeśli nie masz kitu - musisz sam zadbać o odpowiednie parametry prądowe np dla diod LED)
- CTdebian 4.1 (do pobrania ze strony Igora Pecovnik-a lub z działu Wsady)

Przestroga 1.
Wszystkie operacje wykonuję jako uprzywilejowany użytkownik root . Nie jest to dobra praktyka więc proponuję używać sudo i wykonywać wszystkie komendy z poziomu normalnego użytkownika...

Uwaga.
Dystrybucja, której używam to kompilacja ze źródeł CTDebian Igora Pecovnik-a. Możesz pobrać najnowszą wersję ze strony Igora lub skorzystać z mojej kompilacji.

Przestroga 2
Wszystko co robisz - robisz na własną odpowiedzialność. W trakcie tutoriala wykonywane są czynności, które mogą uszkodzić twoje urządzenie...

Z czego korzystamy:
Wykorzystany moduł BH1750
Wykorzystany moduł BH1750
BH1750.jpg (25.74 KiB) Viewed 28090 times
Wymagany skrypt:
Z racji, że obsługa sensora z poziomu Cubieboard-a niczym nie różni się od obsługi na Raspberry Pi można skorzystać z bardzo prostego skryptu w Pythonie, który cytuje poniżej za stroną: http://www.raspberrypi-spy.co.uk/2015/0 ... ty-sensor/:

Code: Select all

#!/usr/bin/python
#--------------------------------------
#    ___  ___  _ ____          
#   / _ \/ _ \(_) __/__  __ __ 
#  / , _/ ___/ /\ \/ _ \/ // / 
# /_/|_/_/  /_/___/ .__/\_, /  
#                /_/   /___/   
#
#           bh1750.py
#  Read data from a digital light sensor.
#
# Author : Matt Hawkins
# Date   : 15/04/2015
#
# http://www.raspberrypi-spy.co.uk/
#
#--------------------------------------
import smbus
import time

# Define some constants from the datasheet

DEVICE     = 0x23 # Default device I2C address

POWER_DOWN = 0x00 # No active state
POWER_ON   = 0x01 # Power on
RESET      = 0x07 # Reset data register value

# Start measurement at 4lx resolution. Time typically 16ms.
CONTINUOUS_LOW_RES_MODE = 0x13
# Start measurement at 1lx resolution. Time typically 120ms
CONTINUOUS_HIGH_RES_MODE_1 = 0x10
# Start measurement at 0.5lx resolution. Time typically 120ms
CONTINUOUS_HIGH_RES_MODE_2 = 0x11
# Start measurement at 1lx resolution. Time typically 120ms
# Device is automatically set to Power Down after measurement.
ONE_TIME_HIGH_RES_MODE_1 = 0x20
# Start measurement at 0.5lx resolution. Time typically 120ms
# Device is automatically set to Power Down after measurement.
ONE_TIME_HIGH_RES_MODE_2 = 0x21
# Start measurement at 1lx resolution. Time typically 120ms
# Device is automatically set to Power Down after measurement.
ONE_TIME_LOW_RES_MODE = 0x23

#bus = smbus.SMBus(0) # Rev 1 Pi uses 0
bus = smbus.SMBus(1)  # Rev 2 Pi uses 1

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

def readLight(addr=DEVICE):
  data = bus.read_i2c_block_data(addr,ONE_TIME_HIGH_RES_MODE_1)
  return convertToNumber(data)

def main():

  while True:
	  s = "%8.2f readLight()
	  
    print "Light Level : " + str(readLight()) + " lx"
    time.sleep(0.5)
  
if __name__=="__main__":
   main()



Rezultat:
Rezultat wykonania skryptu
Rezultat wykonania skryptu
Attachments
bh1750fvi-e.pdf
(545.46 KiB) Downloaded 1929 times

Post Reply