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.