ESP32 -microcontroler ala Arduino
- Poganja zvonove in bitje, timing, različne melodije zvonenj in bitja četert
- Rabimo 4 releje za bitje
- in 10 relejev za 5 zvonov naprej in nazaj
- spodaj bi moralo biti dovolj žic za dodatne povezave
Raspberry Pi bi upravljal z Internetno povezavo, s časi in tipi zvonenj, ki jih pošilja ESP32
Z Raspberry Pi bomo posneli čase vklopov in izklopov (impulze) zvonenj in bitja
Postojna tedenske maše - speminjanje stalnih
| ned: | 8:00 D | | 10:00 N | | 19:00 D | | Uz 05:50 | | ||
| pon: | 19:00 D | | Uk 01:50 | | Uz 05:50 | | Uk 23:50 | ||
| tor: | 19:00 D | | Uz 05:50 | | Uk 23:50 | |||
| sre: | 19:00 D | | Uz 05:50 | | Uk 23:50 | |||
| čet: | 19:00 D | | Uz 05:50 | | Uk 23:50 | |||
| pet: | 19:00 D | | Uz 05:50 | | Uk 23:50 | |||
| sob: | 19:00 D | | Uz 05:50 | | Uk 23:50 |
v Ponedeljek 16.9 gre maša iz 19h na 16h
18.9 podaljša bitje ure do 3h ponoči (recimo polnočnica)
20.9 konča bitje ob 19:50 (v Križankah je koncert ob 20h)
(ali večernice in nočemo da nas ura dekoncentrira :)
(ali velik cetrtek in gredo zvonovi v Rim do vigilije damo konec Bitja ob 05:55)
Glede na cerkveno leto se lahko tudi navodila spodaj spreminjajo
Shema:
konfiguracijska datoteka: za Raspberry Pi
Lahko jo RPi sam zahteva ali se mu jo pošlje - da je možno posodobit na daljavo
Vse nastavitve za določeno cerkev
Postojna:
pin32 - GPIO12 - Bitje ura - vel zvon
pin36 - GPIO16 - Bitje Četrt1
pin38 - GPIO20 - Bitje Četrt2
pin40 - GPIO21 - Bitje Četrt3
pin29 - GPIO5 - Zvonenje - Veliki zvon
pin31 - GPIO6 - Zvonenje - zvon 2
pin33 - GPIO13 - Zvonenje - zvon 3
pin35 - GPIO19 - Zvonenje - zvon 4
pin37 - GPIO26 - Zvonenje - zvon 5
da lahko priljucimo še display
1 izhod za poganjanje Ure - motor 1min
1 vhod za zaznavanje pozicij kazalcev 12 in polnoč
| ID | Raspberry pi - Studeno | konfiguracijska datoteka |
| 1 | 15min | 1x mali |
| 2 | 30min | 2x mali |
| 3 | 45min | 3x mali |
| 4 | ura | 4x mali - 8s pred polno uro |
| 5 | bitje ure | Veliki - začne točno ob uri |
| 6 | motor ure | Premakne uro za 1min naprej |
| 11 | Jutranje 7:00 | 90s Veliki |
| 12 | opoldne | 90s Veliki |
| 13 | večerno | 60s Veliki | 30s pavza | 60s mali |
| 14 | petek Jezusovo trplenje | 90s Veliki |
| 15 | sobota delopust | 60s Veliki | 90s Veliki in mali |
| 16 | delopust praznik | 60s Veliki | 90s Veliki in mali | pritrkavanja |
| 21 | Maša prvo | 90s Veliki - če je dovolj mrzlo lahko starta ogrevanje za 90min |
| 22 | Maša 3/4 | 120s M in V |
| 23 | Maša | 90s Veliki |
| 24 | Nedeljska prvo | 90s Veliki - če je dovolj mrzlo lahko starta ogrevanje za 90min |
| 25 | Nedeljska 3/4 | 120s M in V |
| 26 | Nedeljska | 90s Veliki |
| 27 | Slovesna Maša/praznik prvo | 90s Veliki - če je dovolj mrzlo lahko starta ogrevanje za 90min |
| 28 | Slovesna Maša/praznik 3/4 | 120s M in V |
| 29 | Slovesna Maša/praznik | 90s Veliki | 60s mali |
| lahko še dodatne praznične maše | ||
| 41 | Mrliško otrok | 60s mali |
| 42 | Mrliško ženka | 60s mali | 30s pavza | 60s mali |
| 43 | Mrliško moški | 60s mali | 30s pavza | 60s mali | 30s pavza | 60s mali |
| 44 | Mrliško župnik | 90s Veliki |
| 45 | Mrliško Jutranje | 90s Veliki | 30s pavza | 90s mali |
| 46 | Mrliško Opoldne | 90s Veliki | 30s pavza | 90s mali |
| 47 | Mrliško Večerno | 90s mali | 30s pavza | 60s Veliki | 30s pavza | 60s mali |
| 51 | Vsi sveti 1.11 | 60s Veliki in mali | 30s pavza | 60s Veliki in mali | 30s pavza | 60s Veliki in mali |
| dodatni | ||
| 81 | Gretje | Če je dovolj mrzlo (termostat) vklopi gretje pred mašo in greje xx minut |
| 82 | Odklepanje cerkve | pri elektricnih kljucavnicah odklene 20min pred mašo |
| 90 | Bitje ure zacetek | prižge potrebne luči, če je tema ko odklene vrata |
| 91 | Bitje ure konec | prižge potrebne luči, če je tema ko odklene vrata |
| 92 | Prižiganje večernih luči | prižge potrebne luči, če je tema ko odklene vrata |
| 93 | Prižiganje mašne luči dan | prižge luči za mašo 5min prej |
| 94 | Prižiganje mašne luči večer | prižge luči za večerno mašo 5min prej |
| 95 | Nočne luči | če imamo zunanjo rzsvetljavo |
| ID | Internet | ura | tip |
| 1 | Jutranje | 7:00 | 11 |
| 2 | opoldne | 12:00 | 12 |
| 3 | večerno | po datumih | 13 |
| 4 | petek Jezusovo trplenje | petek 15:00 | 14 |
| 5 | sobota delopust | sobota 15:00 | 15 |
| 10 | maša | -60min | 21 |
| -15min | 22 | ||
| 0 | 23 | ||
| 11 | Nedeljska masa | -60min | 24 |
| -15min | 25 | ||
| 0 | 26 | ||
| 12 | Slovesna/Praznicna | -1dan 15:00 | 16 |
| lahko tudi vec razlicnih | -60min | 27 | |
| -15min | 28 | ||
| 0 | 29 | ||
| 20 | Pogreb, otrok | 10min po objavi | 41 |
| 21 | Pogreb, ženska | 10min po objavi | 42 |
| 22 | Pogreb, moški | 10min po objavi | 43 |
| 23 | Pogreb, duhovnik | 10min po objavi | 44 |
| Pogreb vsi | +1dan 7:00 | 45 | |
| +1dan 12:00 | 46 | ||
| +1dan AveM | 47 | ||
| dan pogreba | +Xdan 7:00 | 45 | |
| ce ni dopoldne | +Xdan 12:00 | 46 | |
| -60min | 21 | ||
| -15min | 22 |
Hardware:
https://www.galagomarket.com/
16 relejev z optocoupler-ji - 19€

CRON tab
CRON ob določenih intervalih kliče določene python skripte
min ure dan mesec (dan v tednu 0=nedelja 6=sobota)
59 23 31 12 6 - ce je * recimo na drugem mestu potem vsako uro
* * * * * - vsako minuto - recimo premakni uro za 1min - poglej ce sta kazalca na 12 oz 24 in pocakaj da je ura 12/24
15 * * * * - pogleda ce je ura enable - bije 1/4 - pogleda če je zvonenje
30 * * * * - pogleda ce je ura enable - bije 1/2 - pogleda če je zvonenje
45 * * * * - pogleda ce je ura enable - bije 3/4 - pogleda če je zvonenje
0 * * * * - pogleda ce je ura enable - bije polno uro - pogleda če je zvonenje
3,18,33,48 * * * * - vsako uro 3min 18, 33 in 48minut se poveži na server in poglej ce je ura točna in ce je kaj za prenest
0 15 * * 5 - vsak petek ob 15:00 zvoni 14 Jezusovo trplenje
0 15 * * 6 - vsako soboto ob 15:00 zvoni 15 Delopust
Zdaj pa zares
CRONtab
* * * * * python ~/vsakominuto.py (premika uro, nastavi lokalne spremenljivke) 0,15,30,45 * * * * python ~/zvonenje.py (bije in zvoni na 15min) 8,23,38,53 * * * * python ~/prenos.py (4x na uro pogleda spremembe na serverju)nastavitve.py
# nastavitve.py - definira nastavitve hardware-a bitje1 = 36 #pin 36 GPIO16 bitje2 = 38 #pin 38 GPIO20 bitje3 = 40 #pin 40 GPIO21 bitje_p = .5 # četrt bitje pavza .5s bitje_i = .5 # četrt bitje impulz .5s ure = 32 #pin 32 GPIO12 ure_p = 2.5 # ura bitje pavza 2.5s med udarci ure_i = .5 # ura impulz 0.5s dolzina signala na izhodu zvon1 = 29 #pin 29 GPIO5 - veliki zvon zvon2 = 31 #pin 31 GPIO6 - zvon 2 zvon3 = 33 #pin 33 GPIO13 - zvon 3 zvon4 = 35 #pin 35 GPIO19 - zvon 4 zvon5 = 37 #pin 37 GPIO26 - mali zvon
#stalno.py - iz serverja nastavitve za stalno tedensko zvonenje #stalno zvoni neodvisno tudi ce internet pade dol za recimo 1 mesec #70700, 21 - 7=nedelja 07:00, 21=prvo delavnik, (1=pon, 7=ned) stalno = [70700, 21, 70745, 22, 70800, 23, 70900, 24, 70945, 25, 71000, 26, 71200, 12, 71800, 21, 71845, 22, 71900, 23, 10700, 11, 11200, 12, 11800, 21, 11845, 22, 11900, 23, 20700, 11, 21200, 12, 21800, 21, 21845, 22, 21900, 23, 30700, 11, 31200, 12, 31800, 21, 31845, 22, 31900, 23, 40700, 11, 41200, 12, 41800, 21, 41845, 22, 41900, 23, 50700, 11, 51200, 12, 51500, 14, 51800, 21, 51845, 22, 51900, 23, 60700, 11, 61200, 12, 61500, 15, 61800, 21, 61845, 22, 61900, 23 ]
#tedensko.py - iz serverja nastavitve za tedenske/14dnevne spremembe zvonenja #tedensko prenese spremembe zvonenj za 14dni - po prenosu lahko 14dni brez interneta, ce ni novih sprememb seveda # 1909080900, 0 - 2019 09mes 08 09:00, 0=ukine stalno zvonenje, premaknjena masa tedensko = [1909080900, 0, 1909080945, 0, 1909081000, 0, 1909101700, 21, 1909101745, 22, 1909101800, 23]
#tipizvon.py - Funkcija tipizvonenja(tip) ki jo klice glavni program
# Nastavimo zvonove, cass zvonenj, case pavz
# zvon1 = 10 off, 11 on recimo Veliki
# zvon2 = 20 off, 21 on recimo mali
# zvon3 = 30 off, 31 on
# zvon, pavza, zvon,...
#tip9 = [11, 60, 10, 30, 21, 60, 20, 0] #V1, 60s, V0, 30s, M1, 60s, M0 - veliki 60s, 30s pavza, mali 60s konc, moramo koncati z 0 da dobimo parno stevilo
#zamiki zacetka zvonenja, prim: tip9 = [11, 5, 21, 60, 10, 5, 20, 0]Veliki, 5s kasneje Mali, zvonita 60s, Veliki se ustavi in 5s za njim se Mali
def tipizvonenja(tip):
import time
#Studeno
tip0 = [10, 0, 20, 0, 30, 0, 40, 0, 50, 0] #ustavi vse zvonove
tip11 = [11, 90, 10, 0] #Jutranje 7:00
tip12 = [11, 90, 10, 0] #opoldne
tip13 = [11, 60, 10, 30, 21, 60, 20, 0] #večerno
tip14 = [11, 90, 10, 0] #petek Jezusovo trplenje
tip15 = [11, 60, 21, 90, 10, 0, 20, 0] #sobota delopust
tip16 = [11, 90, 21, 120, 20, 15, 10, 0] #praznik delopust
tip21 = [11, 90, 10, 0] # Maša prvo
tip22 = [11, 3, 21, 120, 10, 3, 20, 0] # Maša 3/4
tip23 = [11, 90, 10, 0] # Maša zadnje
tip24 = [11, 90, 10, 0] # Ned. Maša prvo
tip25 = [11, 3, 21, 120, 10, 3, 20, 0] # Ned. Maša 3/4
tip26 = [11, 90, 10, 0] # Ned. Maša zadnje
tip27 = [11, 90, 10, 0] # Praz. Maša prvo
tip28 = [11, 3, 21, 120, 10, 3, 20, 0] # Praz. Maša 3/4
tip29 = [11, 90, 10, 0] # Praz. Maša zadnje
#...
tip41 = [21, 60, 20, 0] #mrlisko naznanitev -otrok
tip42 = [21, 60, 20, 30, 21, 60, 20, 0] #mrlisko naznanitev -zenska
tip43 = [21, 60, 20, 30, 21, 60, 20, 30, 21, 60, 20, 0] #mrlisko naznanitev -moski
tip44 = [11, 60, 10, 30, 11, 60, 10, 30, 11, 60, 10, 0] #mrlisko naznanitev -duhovnik
tip45 = [11, 90, 10, 30, 21, 90, 20, 0] #mrlisko Jutranje 7:00
tip46 = [11, 90, 10, 30, 21, 90, 20, 0] #mrlisko opoldne
tip47 = [21, 90, 20, 30, 11, 60, 10, 30, 21, 60, 20, 0] #mrlisko večerno
tip51 = [11, 0, 21, 60, 10, 0, 20, 30, 11, 0, 21, 60, 10, 0, 20, 30, 11, 0, 21, 60, 10, 0, 20, 0] #vsi sveti 3x oba 60s in 30s pavza
#interno zvonenje prozenje z gumbom, daljincem ali aplikacijo
tip61 = [11, 90, 10] #povzdigovanje
tip62 = [11, 0, 21, 60, 10, 0, 20, 0] #zahvalna
tip63 = [11, 0, 21, 90, 10, 0, 20, 0] #zahvalna2 vel.cetr.
#mrliski sprevod timer
tip71 = [21, 60, 20, 0] #mrlisko 60s
tip72 = [21, 90, 20, 0] #mrlisko 90s
tip73 = [21, 120, 20, 0] #mrlisko 120s
tip74 = [21, 150, 20, 0] #mrlisko 150s
tip75 = [21, 180, 20, 0] #mrlisko 3m
tip75 = [21, 240, 20, 0] #mrlisko 4m
tip79 = [10, 0, 20, 0, 30, 0, 40, 0, 50, 0] #ustavi vse zvonove
#tip = 28 #test
tipstr = "tip"+str(tip) #naredi ime Arraya tip28
tipx =(vars()[tipstr]) #prepise tip28 v tipx
i = len(tipx) #pogleda stevilo elementov
print(tipx)
print(i)
k = 0
while k < i: #bere pare spremenljivk
zvon = tipx[k] #zvon - kateri zvon
cas = tipx[k+1] #cas - pavza do naslednjega dogodka
print ("zvon", zvon)
print ("sekunde", cas)
time.sleep(cas/4) #!!!POPRAVI cas/4 - za testiranje 4x hitreje
k += 2
zvonenje.py
import sys
import time
import tipizvon
from nastavitve import *
from stalno import stalno
from tedensko import tedensko
from datetime import datetime
now = datetime.now() # test - 17/9/2019 18:45
datum = int(now.strftime("%y%m%d%H%M")) # 1909171845
dan = int(now.strftime("%w")) # 2 - torek
if dan == 0:
dan = 7
stalni = int(now.strftime("%w%H%M")) # 21845 - torek 18:45
minute = int(now.strftime("%M")) # 45 - tričetrt
ura = int(now.strftime("%I")) # 6 - ura na 12h
#testiranje - 17/9/2019 18:45
datum = 1909171844 # daj na 44 - 1909171844 da gre na stalno
#dan = 2
stalni = 70900 # daj na 44 - 21844 da preskoci stalno
minute = 45 # test bitja 0, 15, 30, 45
#ura = 6
print('test ura = ', datum)
print(' ')
print('------------ BITJE --------------')
print('Bitje ure', minute, 'min')
if minute == 15:
mali = 1
veliki = 0
elif minute == 30:
mali = 2
veliki = 0
elif minute == 45:
mali = 3
veliki = 0
elif minute == 0:
mali = 4
veliki = ura
print('cetrt', mali)
print('ura', veliki)
##GPIO.output(bitje1, true)
##time.sleep(bitje_p)
##GPIO.output(bitje1, false)
while mali > 0:
print('cetrt', mali)
print('bitje1 - 1')
time.sleep(bitje_p)
print('bitje1 - 0')
print('bitje2 - 1')
time.sleep(bitje_p)
print('bitje2 - 0')
print('bitje3 - 1')
time.sleep(bitje_p)
print('bitje3 - 0')
time.sleep(2)
mali -= 1
while veliki > 0:
time.sleep(ure_p)
print('ura', veliki)
print('Ura - 1')
time.sleep(ure_i)
print('Ura - 0')
veliki -= 1
# BITJE URE bo verjetno treba narest tukaj
# da ne bo zvonilo takoj ko zacne biti
# zvonenje pa lahko s funkcijo
print(' ')
time.sleep(2.5)
print('------------ ZVONENJE --------------')
try:
pozt = tedensko.index(datum)
#print(pozt)
zvot = tedensko[pozt+1]
print('tedensko zvonenje', tedensko[pozt], 'tip ', zvot)
tipizvon.tipizvonenja(zvot)
#sys.exit()
except ValueError:
print('ni tedenskega zvonenja - preveri stalno')
try:
pozs = stalno.index(stalni)
#print(pozs)
zvos = stalno[pozs+1]
print('stalno zvonenje', stalno[pozs], 'tip ', zvos)
tipizvon.tipizvonenja(zvos)
except ValueError:
print('ni stalnega zvonenja - zakljuci')
time.sleep(2.5)
print(' ')
print(' ------------------------------------------------------ ')
print(' ')
print('------------ izpis spremenljivk ------------')
print(now)
print(datum)
print(dan)
print(minute)
print(ura)
print(tedensko)
print(stalno)