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/virtual-device-proximity.md

107 lines
3.7 KiB

# Detect proximity - Virtual IoT Hardware
In this part of the lesson, you will add a proximity sensor to your virtual IoT device, and read distance from it.
## Hardware
The virtual IoT device will use a simulated distance sensor.
In a physical IoT device you would use a sensor with a laser ranging module to detect distance.
### Add the distance sensor to CounterFit
To use a virtual distance sensor, you need to add one to the CounterFit app
#### Task - add the distance sensor to CounterFit
Add the distance sensor to the CounterFit app.
1. Open the `fruit-quality-detector` code in VS Code, and make sure the virtual environment is activated.
1. Install an additional Pip package to install a CounterFit shim that can talk to distance sensors by simulating the [rpi-vl53l0x Pip package](https://pypi.org/project/rpi-vl53l0x/), a Python package that interacts with [a VL53L0X time-of-flight distance sensor](https://wiki.seeedstudio.com/Grove-Time_of_Flight_Distance_Sensor-VL53L0X/). Make sure you are installing this from a terminal with the virtual environment activated.
```sh
pip install counterfit-shims-rpi-vl53l0x
```
1. Make sure the CounterFit web app is running
1. Create a distance sensor:
1. In the *Create sensor* box in the *Sensors* pane, drop down the *Sensor type* box and select *Distance*.
1. Leave the *Units* as `Millimeter`
1. This sensor is an I<sup>2</sup>C sensor, so set the address to `0x29`. If you used a physical VL53L0X sensor it would be hardcoded to this address.
1. Select the **Add** button to create the distance sensor
![The distance sensor settings](../../../images/counterfit-create-distance-sensor.png)
The distance sensor will be created and appear in the sensors list.
![The distance sensor created](../../../images/counterfit-distance-sensor.png)
## Program the distance sensor
The virtual IoT device can now be programmed to use the simulated distance sensor.
### Task - program the time of flight sensor
1. Create a new file in the `fruit-quality-detector` 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.
1. Start a connection to CounterFit with the following code:
```python
from counterfit_connection import CounterFitConnection
CounterFitConnection.init('127.0.0.1', 5000)
```
1. Add the following code below this:
```python
import time
from counterfit_shims_rpi_vl53l0x.vl53l0x import VL53L0X
```
This imports the sensor library shim for the VL53L0X time of flight sensor.
1. Below this, add the following code to access the sensor:
```python
distance_sensor = VL53L0X()
distance_sensor.begin()
```
This code declares a distance sensor, then starts the sensor.
1. Finally, add an infinite loop to read distances:
```python
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.
1. Run this code.
> 💁 Don't forget this file is called `distance-sensor.py`! Make sure to run this via Python, not `app.py`.
1. You will see distance measurements appear in the console. Change the value in CounterFit to see this value change, or use random values.
```output
(.venv) ➜ fruit-quality-detector python distance-sensor.py
Distance = 37 mm
Distance = 42 mm
Distance = 29 mm
```
> 💁 You can find this code in the [code-proximity/virtual-iot-device](code-proximity/virtual-iot-device) folder.
😀 Your proximity sensor program was a success!