Welcome to Hackster!
Hackster is a community dedicated to learning hardware, from beginner to pro. Join us, it's free!
Syarif HamdanMcn0b
Created February 4, 2025

Smart Retail Queue Tracker

Avoiding long queues and keep track of how long the queue is without having to actually go look.

21
Smart Retail Queue Tracker

Things used in this project

Story

Read more

Code

Python Code for M5Stack

Python
from m5stack import *
from m5ui import *
from uiflow import *
import time
import unit

setScreenColor(0x222222)
tof_0 = unit.get(unit.TOF, unit.PAHUB0)
pir_0 = unit.get(unit.PIR, unit.PORTB)
tof_1 = unit.get(unit.TOF, unit.PAHUB1)


first = None
detect = None
speed = None
second = None
diff = None
long2 = None
short = None
speedtype = None


oldDataundefined = None
LengthLabel = M5TextBox(61, 67, "Length:", lcd.FONT_Default, 0xFFFFFF, rotate=0)
length = M5TextBox(128, 66, "None", lcd.FONT_Default, 0xFFFFFF, rotate=0)
QueueLabel = M5TextBox(62, 92, "Speed:", lcd.FONT_Default, 0xFFFFFF, rotate=0)
queuestat = M5TextBox(128, 93, "-", lcd.FONT_Default, 0xFFFFFF, rotate=0)
test6 = M5TextBox(198, 147, "0", lcd.FONT_Default, 0xFFFFFF, rotate=0)
DetectLabel = M5TextBox(62, 119, "Detect:", lcd.FONT_Default, 0xFFFFFF, rotate=0)
DetectStatus = M5TextBox(128, 119, "-", lcd.FONT_Default, 0xFFFFFF, rotate=0)
SpeedLabel = M5TextBox(62, 147, "Count (Per min):", lcd.FONT_Default, 0xFFFFFF, rotate=0)

from numbers import Number




first = int(0)
detect = 0
speed = 0
length.setText('None')
length.setColor(0x33ff33)
while True:
  second = int((time.ticks_ms()))
  diff = second - first
  if (tof_1.distance) <= 1000 and (tof_0.distance) < 1000:
    long2 = 1
    short = 0
  elif (tof_1.distance) >= 1000 and (tof_0.distance) < 1000:
    long2 = 0
    short = 1
  elif (tof_1.distance) >= 1000 and (tof_0.distance) >= 1000:
    long2 = 0
    short = 0
  else:
    length.setText('Undefined')
    length.setColor(0xffffff)
    long2 = 2
    short = 2
  if long2 == 1:
    length.setText('Long')
    length.setColor(0xff0000)
  elif short == 1:
    length.setText('Short')
    length.setColor(0xffff66)
  elif short == 0 and long2 == 0:
    length.setText('None')
    length.setColor(0x33ff33)
  if pir_0.state != oldDataundefined:
    oldDataundefined = pir_0.state
    if (pir_0.state) == 0 and detect == 1:
      speed = (speed if isinstance(speed, Number) else 0) + 0
      detect = 0
  else:
    if (pir_0.state) == 1 and detect == 0:
      speed = (speed if isinstance(speed, Number) else 0) + 1
      detect = 1
    pass
  if diff >= 60000:
    first = int((time.ticks_ms()))
    if speed <= 1:
      queuestat.setText('Slow')
      speed = 0
      speedtype = 3
    elif speed <= 3 and speed > 1:
      queuestat.setText('Average')
      speed = 0
      speedtype = 2
    elif speed >= 3:
      queuestat.setText('Fast')
      speed = 0
      speedtype = 1
  if long2 + short == 0:
    rgb.setColorAll(0x33ff33)
  elif long2 == 1 and speedtype <= 2 or short == 1 and speedtype <= 3:
    rgb.setColorAll(0xffff33)
  else:
    rgb.setColorAll(0xff0000)
  if detect == 0:
    DetectStatus.setText('False')
  else:
    DetectStatus.setText('True')
  test6.setText(str(speed))
  wait_ms(2)

Credits

Syarif Hamdan
1 project • 0 followers
Contact
Mcn0b
3 projects • 0 followers
Contact

Comments

Please log in or sign up to comment.