3.9 KiB
Build a nightlight - Raspberry Pi
In this part of the lesson, you will add a light sensor to your Raspberry Pi.
Hardware
The sensor for this lesson is a light sensor that uses a photodiode to convert light to an electrical signal. This is an analog sensor that sends an integer value from 0 to 1,023 indicating a relative amount of light that doesn't map to any standard unit of measurement such as lux.
The light sensor is an eternal Grove sensor and needs to be connected to the Grove Base hat on the Raspberry Pi.
Connect the light sensor
The Grove light sensor that is used to detect the light levels needs to be connected to the Raspberry Pi.
Task
Connect the light sensor
-
Insert one end of a Grove cable into the socket on the light sensor module. It will only go in one way round.
-
With the Raspberry Pi powered off, connect the other end of the Grove cable to the analog socket marked A0 on the Grove Base hat attached to the Pi. This socket is the second from the right, on the row of sockets next to the GPIO pins.
Program the light sensor
The device can now be programmed using the Grove light sensor.
Task
Program the device.
-
Power up the Pi and wait for it to boot
-
Open the nightlight project in VS Code that you created in the previous part of this assignment, either running directly on the Pi or connected using the Remote SSH extension.
-
Open the
app.py
file and remove all code from it -
Add the following code to the
app.py
file to import some required libraries:import time from grove.grove_light_sensor_v1_2 import GroveLightSensor
The
import time
statement imports thetime
module that will be used later in this assignment.The
from grove.grove_light_sensor_v1_2 import GroveLightSensor
statement imports theGroveLightSensor
from the Grove Python libraries. This library has code to interact with a Grove light sensor, and was installed globally during the Pi setup. -
Add the following code after the code above to create an instance of the class that manages the light sensor:
light_sensor = GroveLightSensor(0)
The line
light_sensor = GroveLightSensor(0)
creates an instance of theGroveLightSensor
class connecting to pin A0 - the analog Grove pin that the light sensor is connected to.💁 All the sockets have unique pin numbers. Pins 0, 2, 4, and 6 are analog pins, pins 5, 16, 18, 22, 24, and 26 are digital pins.
-
Add an infinite loop after the code above to poll the light sensor value and print it to the console:
while True: light = light_sensor.light print('Light level:', light)
This will read the current light level on a scale of 0-1,023 using the
light
property of theGroveLightSensor
class. This property reads the analog value from the pin. This value is then printed to the console. -
Add a small sleep of one second at the end of the
loop
as the light levels don't need to be checked continuously. A sleep reduces the power consumption of the device.time.sleep(1)
-
From the VS Code Terminal, run the following to run your Python app:
python3 app.py
You should see light values being output to the console. Cover and uncover the light sensor to see the values change:
pi@raspberrypi:~/nightlight $ python3 app.py Light level: 634 Light level: 634 Light level: 634 Light level: 230 Light level: 104 Light level: 290
💁 You can find this code in the code-sensor/pi folder.
😀 Adding a sensor to your nightlight program was a success!