Dömemeter
Elmélet
A Dömemeter egy analóg faliórára hasonlító szerkezet, amely mutatja, hogy hány látogatója van Dió Döme sétálójának. Az egyszerűség kedvéért Dió Döme weblapját átalakítottam úgy, hogy a látogatók számát mindig kiírja egy weben keresztül elérhető text fileba. Ebben a fileban semmi más nincs, csak ez a szám. Szóval a feladat annyi, hogy a raspberry letölti a file-t az adott url-ről, számmá alakítja és ha ez a szám nagyobb, mint a legutóbb kiolvasott, akkor a mutató elforgatja a léptető motor segítségével.
A szerkezet iskola bemutatóhoz készült, fából, talppal, hogy az egész osztályban lehessen látni. A faragás, csavarozás, ragasztás
Megvalósítás
A korábban már ismertett automatikusan indított kódot és léptető motor kezelése kell a projekthez. Az újdonság a web requestek használata.
Web requesteket Pythonban könnyű használni, csak importálni kell a requests-t. A hibakezelés miatt külön függvénybe tettem.
Teljes forráskód:
import RPi.GPIO as GPIO
import time
import requests
requests.packages.urllib3.disable_warnings()
prev=0
steps=0
GPIO.setmode(GPIO.BCM)
coil_A_1_pin = 18
coil_A_2_pin = 23
coil_B_1_pin = 24
coil_B_2_pin = 25
GPIO.setup(coil_A_1_pin, GPIO.OUT)
GPIO.setup(coil_A_2_pin, GPIO.OUT)
GPIO.setup(coil_B_1_pin, GPIO.OUT)
GPIO.setup(coil_B_2_pin, GPIO.OUT)
print("Domemeter started")
def netCall(url):
answer=""
try:
page=requests.get(url, verify=False)
answer = page.text
except IOError:
answer=0
pass
return answer
def backwards1p(delay, steps):
for i in range(0, steps):
setStep(0, 0, 0, 1)
time.sleep(delay)
setStep(0, 0, 1, 0)
time.sleep(delay)
setStep(0, 1, 0, 0)
time.sleep(delay)
setStep(1, 0, 0, 0)
time.sleep(delay)
def setStep(w1, w2, w3, w4):
GPIO.output(coil_A_1_pin, w1)
GPIO.output(coil_A_2_pin, w2)
GPIO.output(coil_B_1_pin, w3)
GPIO.output(coil_B_2_pin, w4)
prev=int(netCall('https://radiosd.hu/mese/visitorstoday.txt'))
try:
while True:
i=int(netCall('https://radiosd.hu/mese/visitorstoday.txt'))
steps=(i-prev)*20;
if(steps>0):
backwards1p(0.005, int(steps))
prev=i
setStep(0, 0, 0, 0)
time.sleep(10)
except KeyboardInterrupt:
GPIO.cleanup()
print("Domemeter stopped")
Comments are closed.