In this article we will connect a Si1145 sensor to an Raspberry Pi
First the sensor
The Si1145/46/47 is a low-power, reflectance-based, infrared proximity, ultraviolet (UV) index, and ambient light sensor with I2C digital interface and programmableevent interrupt output. This touchless sensor IC includes an analog-to-digital converter, integrated high-sensitivity visible and infrared photodiodes, digital signal processor, and one, two, or three integrated infrared LED drivers with fifteen selectable drive levels. The Si1145/46/47 offers excellent performance under a wide dynamic range and a variety of light sources including direct sunlight. The Si1145/46/47 can also work under dark glass covers.
The photodiode response and associated digital conversion circuitry provide excellent immunity to artificial light flicker noise and natural light flutter noise. With two or more LEDs, the Si1146/47 is capable of supporting multiple-axis proximity motion detection. The Si1145/46/47 devices are provided in a 10-lead 2×2 mm QFN package and are capable of operation from 1.71 to 3.6 V over the –40 to +85 °C temperature range.
We chose a Pi Zero, any Raspberry Pi should work just fine.
The example library and code examples come from https://github.com/THP-JOE/Python_SI1145
I used the simpletest.py example
#!/usr/bin/python # Author: Joe Gutting # With use of Adafruit SI1145 library for Arduino, Adafruit_GPIO.I2C & BMP Library by Tony DiCola # # Permission is hereby granted, free of charge, to any person obtaining a copy # of this software and associated documentation files (the "Software"), to deal # in the Software without restriction, including without limitation the rights # to use, copy, modify, merge, publish, distribute, sublicense, and/or sell # copies of the Software, and to permit persons to whom the Software is # furnished to do so, subject to the following conditions: # # The above copyright notice and this permission notice shall be included in # all copies or substantial portions of the Software. # # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN # THE SOFTWARE. # Can enable debug output by uncommenting: #import logging #logging.basicConfig(level=logging.DEBUG) import time import SI1145.SI1145 as SI1145 # Default constructor will pick a default I2C bus. # # For the Raspberry Pi this means you should hook up to the only exposed I2C bus # from the main GPIO header and the library will figure out the bus number based # on the Pi's revision. # # For the Beaglebone Black the library will assume bus 1 by default, which is # exposed with I2C1_SCL = P9_17 and I2C1_SDA = P9_18 # Header pinout: http://beagleboard.org/static/images/cape-headers-i2c.png # Configure the pins for I2C with these pins: # sudo config-pin p9.17 i2c # sudo config-pin p9.18 i2c sensor = SI1145.SI1145() print 'Press Cntrl + Z to cancel' while True: vis = sensor.readVisible() IR = sensor.readIR() UV = sensor.readUV() uvIndex = UV / 100.0 print 'Vis: ' + str(vis) print 'IR: ' + str(IR) print 'UV Index: ' + str(uvIndex) time.sleep(3)
you can run this by typing the following in the terminal
sudo python simpletest.py
In the terminal you should see something like this