Zamontowałem wszystko i działa ;-)
Schemat połączeń wygląda tak:
Czujnik, który ma sprawdzać czy ktoś jest przy biurku został zamontowany na podstawie monitora, tak by "patrzał" w kierunku w którym powinien być "operator":
Czujnik, który ma ustalać na jakiej wysokości jest biurko został zamontowany na podstawce pod monitor i ślepi w górę:
Na razie wszystko kontroluje prosty programik, który jest przeróbką programu stąd.
Program wygląda tak:
import RPi.GPIO as GPIO #Import GPIO library
import time #Import time library
GPIO.setmode(GPIO.BCM) #Set GPIO pin numbering
# Define outputs & inputs
_TRIG1 = 23 # TRIG for checking if somebody is near desk
_ECHO1 = 24 # ECHO for checking if somebody is near desk
_TRIG2 = 25 # TRIG for sit/stand
_ECHO2 = 18 # ECHO for sit/stand
GPIO.setup([_TRIG1,_TRIG2],GPIO.OUT) #Set pins as GPIO out
GPIO.setup([_ECHO1,_ECHO2],GPIO.IN) #Set pins as GPIO in
def measure(TRIG1,ECHO1,txt):
GPIO.output(TRIG1, False) #Set TRIG as LOW
time.sleep(2) #Delay of 2 seconds
GPIO.output(TRIG1, True) #Set TRIG as HIGH
time.sleep(0.00001) #Delay of 0.00001 seconds
GPIO.output(TRIG1, False) #Set TRIG as LOW
while GPIO.input(ECHO1)==0: #Check whether the ECHO is LOW
pulse_start = time.time() #Saves the last known time of LOW pulse
while GPIO.input(ECHO1)==1: #Check whether the ECHO is HIGH
pulse_end = time.time() #Saves the last known time of HIGH pulse
pulse_duration = pulse_end - pulse_start #Get pulse duration to a variable
distance = pulse_duration * 17150 #Multiply pulse duration by 17150 to get distance
distance = round(distance, 2) #Round to two decimal points
GPIO.output(TRIG1,False)
return distance
while True:
dist1=measure(_TRIG1,_ECHO1,"Sensor1")
dist2=measure(_TRIG2,_ECHO2,"Sensor2")
print dist1,dist2
if dist2<150:
print "desk in STAND mode"
else:
print "desk in SIT mode"
if dist1<80:
print "somebody at the desk"
Po prostu instruuje Raspberry Pi by ustawiło na wyjściu (TRIG) 1 przez 10 µs, co powinno spowodować wyemitowanie ultradźwięku przez HC-SR04, po czym ustawiło 0 i czekało aż na wejściu (ECHO) pojawi się sygnał.
Gdy to się zdarzy liczy różnicę czasu między ustawieniem 1 na TRIG, a pojawieniem się 1 na ECHO.
W tym czasie dźwięk wystartuje z czujnika, doleci do celu, odbije się i wróci do czujnika. Pokona więc drogę 2 razy.
Przyjmujemy tutaj, że prędkość dźwięku w powietrzu to 343 m/s.
Stąd:
odległość = 343 m/s * czas / 2
A, że wynik chcemy w centymetrach to zamiast 343 m/s używamy 34300 cm / s, które to 34300 po podzieleniu przez dwa daje 17150.
Dokonujemy za każdym razem pomiaru na 2 czujnikach (w pętli) i jeśli z czujnika 1 dostaniemy odległość mniejszą niż 80 to zakładamy, że ktoś jest przy biurku. Gdy z czujnika 1 dostajemy informację, że do sufitu jest mniej niż 150 cm to stwierdzamy, że biurko jest w trybie stand :-)
Podobne postybeta
Roboty są trudne ;-)
Debugowanie sprzętu jest trudne....
~ - czyli "tak sobie"
Czy się stoi czy się siedzi.... kamerka w laptopie jako detektor tego czy biurko jest w trybie stand czy sit ;-)
Matematyczne podstawy zakupu skarpetek ;-)
Brak komentarzy:
Prześlij komentarz