You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
IoT-For-Beginners/4-manufacturing/lessons/4-trigger-fruit-detector/pi-proximity.md

3.7 KiB

Detect proximity - Raspberry Pi

In this part of the lesson, you will add a proximity sensor to your Raspberry Pi, and read distance from it.

Hardware

The Raspberry Pi needs a proximity sensor.

The sensor you'll use is a Grove Time of Flight distance sensor. This sensor uses a laser ranging module to detect distance. This sensor has a range of 10mm to 2000mm (1cm - 2m), and will report values in that range pretty accurately, with distances above 1000mm reported as 8109mm.

The laser rangefinder is on the back of the sensor, the opposite side to the Grove socket.

This is an I2C sensor.

Connect the time of flight sensor

The Grove time of flight sensor can be connected to the Raspberry Pi.

Task - connect the time of flight sensor

Connect the time of flight sensor.

A grove time of flight sensor

  1. Insert one end of a Grove cable into the socket on the time of flight sensor. It will only go in one way round.

  2. With the Raspberry Pi powered off, connect the other end of the Grove cable to one of the I2C sockets marked I2C on the Grove Base hat attached to the Pi. These sockets are on the bottom row, the opposite end to the GPI pins and next to the camera cable slot.

The grove time of flight sensor connected to the I squared C socket

Program the time of flight sensor

The Raspberry Pi can now be programmed to use the attached time of flight sensor.

Task - program the time of flight sensor

Program the device.

  1. Power up the Pi and wait for it to boot.

  2. Open the fruit-quality-detector code in VS Code, either directly on the Pi, or connect via the Remote SSH extension.

  3. Create a new file in this project called distance-sensor.py.

    💁 An easy way to simulate multiple IoT devices is to do each in a different Python file, then run them at the same time.

  4. Add the following code to this file:

    import time
    
    from grove.i2c import Bus
    from rpi_vl53l0x.vl53l0x import VL53L0X
    

    This imports the Grove I2C bus library, and a sensor library for the core sensor hardware built into the Grove time of flight sensor.

  5. Below this, add the following code to access the sensor:

    distance_sensor = VL53L0X(bus = Bus().bus)
    distance_sensor.begin()    
    

    This code declares a distance sensor using the Grove I2C bus, then starts the sensor.

  6. Finally, add an infinite loop to read distances:

    while True:
        distance_sensor.wait_ready()
        print(f'Distance = {distance_sensor.get_distance()} mm')
        time.sleep(1)
    

    This code waits for a value to be ready to read from the sensor, then prints it to the console.

  7. Run this code.

    💁 Don't forget this file is called distance-sensor.py! Make sure to run this via Python, not app.py.

  8. You will see distance measurements appear in the console. Position objects near the sensor and you will see the distance measurement:

    pi@raspberrypi:~/fruit-quality-detector $ python3 distance_sensor.py 
    Distance = 29 mm
    Distance = 28 mm
    Distance = 30 mm
    Distance = 151 mm
    

    The rangefinder is on the back of the sensor, so make sure you use hte correct side when measuring distance.

    The rangefinder on the back of the time of flight sensor pointing at a banana

💁 You can find this code in the code-proximity/pi folder.

😀 Your proximity sensor program was a success!