[PYTHON] Visualisieren Sie die Überlastung von Ereignissen im öffentlichen Raum mit einem Laser-Entfernungsmesser
Überblick
- Es wurde versucht, den Überlastungsstatus der Marken im öffentlichen Raum über einen Zeitraum von zwei Tagen zu zählen und zu visualisieren.
- Es ist notwendig, den Ein- und Ausgang einzugrenzen, um das Verkehrsaufkommen, die Anzahl der verbleibenden Personen und die Aufenthaltsdauer zu messen. Diesmal wird die Anzahl der Personen, die an einem bestimmten Punkt des Veranstaltungsortes vorbeikommen, als Grad der Überlastung angesehen.
- Die Anzahl der Besucher der Veranstaltung ist wertvolle Daten. Versuchen Sie zu sehen, wie viel Sie unbeaufsichtigt zählen können
- Wir möchten uns bei der Ekikita Town Development Conference (https://ekikita.jp) bedanken, die das Gebiet am Nordausgang der Hiroshima Station verwaltet.
【Referenz】
Über Gebietsmanagement (Ministerium für Land, Infrastruktur, Verkehr und Tourismus)
https://www.mlit.go.jp/common/001059393.pdf
Regionale Revitalisierung Stadtentwicklung - Flächenmanagement - (Kabinettssekretariat Stadt / Menschen / Schaffung von Arbeitsplätzen Hauptsitz Sekretariat)
https://www.kantei.go.jp/jp/singi/sousei/about/areamanagement/areamanagement_panf.pdf
Was vorzubereiten?
- Raspberry Pi3 Model B (4 ist wahrscheinlich in Ordnung)
- Fall für Raspberry Pi
- Kühlkörper und Lüfter für Raspberry Pi
- Raspberry Pi3 Modell B B + kompatibles Netzteil (5V 3.0A)
- vl53l1x Ultraschall-Abstandssensor (maximaler Messbereich 4 m)
- LED, 330Ω Widerstand
- 100 Yen Shop Stativ
- AirPods-Koffer in einem 100-Yen-Laden gekauft (als Sensorabdeckung verwendet)

Vorbereitung
- Richten Sie Raspberry Pi so ein, dass Sie eine Verbindung zu Wifi herstellen können.
https://www.raspberrypi.org/downloads/
- Stellen Sie die Ambient-Bibliothek (IoT-Visualisierungsdienst) zur Verfügung.
- Erstellen Sie ein Dashboard in Ambient und erhalten Sie die Kanal-ID und den Schreibschlüssel.
https://ambidata.io/refs/python/
- Stellen Sie die vl53l1x-Bibliothek für Python zur Verfügung
https://github.com/pimoroni/vl53l1x-python
Versammlung
- Verbinden Sie Raspberry Pi, Laser-Abstandssensor und LED wie folgt

Programmierung
- Programmieren mit Python3 zur Verwendung einer Universalbibliothek
- Ändern und verwenden Sie distance.py im Beispielordner der git-geklonten Bibliothek
- Der Wert des Laser-Abstandssensors wird geloopt und gelesen, und die Zahl unter dem Schwellenwert wird als Anzahl der Durchgänge gezählt.
- Schalten Sie die an den GPIO-Pin angeschlossene LED bei jeder Zählung ein / aus
- Senden Sie die Anzahl alle 5 Minuten zur Visualisierung an Ambient
distance.py
#!/usr/bin/env python
import time
import sys
import signal
import VL53L1X
import ambient
import datetime
import RPi.GPIO as GPIO
GPIO.setmode(GPIO.BCM)
GPIO.setup(25, GPIO.OUT) #Zum Blinken der LED
from time import sleep
print("""distance.py
Display the distance read from the sensor.
Uses the "Short Range" timing budget by default.
Press Ctrl+C to exit.
""")
ambi = ambient.Ambient(xxxxx, 'xxxxxxxxxxxxxxxx') #← Umgebungskanal-ID und Lichttaste
count = 0
sndcnt = 0
# Open and start the VL53L1X sensor.
# If you've previously used change-address.py then you
# should use the new i2c address here.
# If you're using a software i2c bus (ie: HyperPixel4) then
# you should `ls /dev/i2c-*` and use the relevant bus number.
tof = VL53L1X.VL53L1X(i2c_bus=1, i2c_address=0x29)
tof.open()
# Optionally set an explicit timing budget
# These values are measurement time in microseconds,
# and inter-measurement time in milliseconds.
# If you uncomment the line below to set a budget you
# should use `tof.start_ranging(0)`
tof.set_timing(66000, 70)
tof.start_ranging(0) # Start ranging
# 0 = Unchanged
# 1 = Short Range
# 2 = Medium Range
# 3 = Long Range
running = True
def exit_handler(signal, frame):
global running
running = False
tof.stop_ranging()
print()
sys.exit(0)
# Attach a signal handler to catch SIGINT (Ctrl+C) and exit gracefully
signal.signal(signal.SIGINT, exit_handler)
while running:
distance_in_mm = tof.get_distance()
print("Distance: {}mm".format(distance_in_mm))
now = datetime.datetime.now()
minute = '{0:%M}'.format(now)
second = '{0:%S}'.format(now)
print(minute)
print(second)
if distance_in_mm < 1300: #Schwelle zum Zählen oder nicht(mm)
count += 1
GPIO.output(25, GPIO.HIGH) #LED blinkt
sleep(0.5)
GPIO.output(25, GPIO.LOW)
sleep(0.5)
if int(minute) % 5 == 0 and int(second) == 0:
if sndcnt < 1:
r = ambi.send({'d1': count})
if r.status_code != 200:
continue
print(count)
print("***sended***\n")
count = 0
sndcnt += 1
else:
sndcnt = 0
time.sleep(0.1)
Installationsstand vor Ort

Ergebnis
- Während der gesamten Veranstaltungszeit konnte nicht normal gezählt werden.
- Anpassung Obwohl lokal Anpassungen vorgenommen wurden, z. B. das Ändern des Installationsorts und des Schwellenwerts, war eine stabile Zählung nicht möglich.
Roter Hintergrund: Der Teil, in dem die Daten erfasst wurden
Blauer Hintergrund: Anpassen
Grauer Hintergrund: Nach dem Ereignis

Fehlerinhalt
- Der Wert des Laser-Entfernungsmessers ist nicht stabil. Die Stabilität ändert sich je nach Material des Objekts (Stein, Holz, Papier) und der Unebenheit der Oberfläche.
- Das Passieren einer Person wird als zwei oder drei Personen gezählt. (Es hat sich bis zu einem gewissen Grad verbessert, indem es gewartet hat, als es entdeckt wurde.)
- Es scheint, dass es einen großen Unterschied in Helligkeit und Stabilität gibt, wenn es nicht dem Sonnenlicht ausgesetzt ist und wenn es nicht dem Sonnenlicht ausgesetzt ist.
- Alle paar Stunden erhalte ich einen HTTP MaxRetryError für eine Umgebungs-API-URL.
Da es zu Hause seit mehr als 10 Stunden Wifi in Betrieb ist, ist es sehr wahrscheinlich, dass es an den vor Ort gemieteten Wifi-Geräten liegt.
Für die Zukunft
- Aufgrund des Corona-Whirlpools ist es schwierig, eine Indoor-Veranstaltung abzuhalten, aber zuerst werden wir weiterhin Anpassungen vornehmen, damit wir in Innenräumen zuverlässig zählen können.
- Bei Problemen, die im Freien schwer zu zählen sind, sollten Sie andere Sensortypen in Betracht ziehen
- Wenn Sie einen Entfernungsmesser vom Typ ToF verwenden, bereiten Sie ein Objekt vor, das stabil reflektieren kann.
- Es ist erforderlich, im Voraus zu testen, ob ein Problem mit der Langzeitverbindung in der lokalen WLAN-Umgebung vorliegt.