-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathDMO.py
156 lines (137 loc) · 5.7 KB
/
DMO.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
import socket
import requests
from datetime import datetime
from time import sleep
import os
import wiringpi
from adafruit_motorkit import MotorKit
from adafruit_motor import stepper
# string from webserver
url = 'http://yourdomain.xxx/positions.txt'
# this is for testing, leave it as is
test_modus = False
planeet_motor = True
if test_modus:
url = 'http://192.168.178.52/positions.txt'
# which planet are we?
planeet = socket.gethostname()
if (planeet == "DMO-Saturnus"):
totaal_stappen = 6683 # number of steps to make one full circle, 1% deviation
magneet_positie = 2 # position in degrees where the magnet of the planet is
beginpos_string = 15 # de beginpositie in de string bij de Curl van deze planeet
eindpos_string = 18 # de eindpositie in de string bij de Curl van deze planeet
richting = stepper.BACKWARD
stijl = stepper.DOUBLE
if (planeet == "DMO-Jupiter"):
totaal_stappen = 4326 # number of steps to make one full circle, 1% deviation
magneet_positie = 5 # position in degrees where the magnet of the planet is
beginpos_string = 12 # de beginpositie in de string bij de Curl van deze planeet
eindpos_string = 15 # de eindpositie in de string bij de Curl van deze planeet
richting = stepper.BACKWARD
stijl = stepper.DOUBLE
if (planeet == "DMO-Mars"):
totaal_stappen = 2045 # number of steps to make one full circle, 1% deviation
magneet_positie = 88 # position in degrees where the magnet of the planet is
beginpos_string = 9 # beginposition in the string
eindpos_string = 12 # endposition in the string
richting = stepper.FORWARD
stijl = stepper.DOUBLE
if (planeet == "DMO-Aarde"):
totaal_stappen = 1107 # number of steps to make one full circle, 1% deviation
magneet_positie = 106 # 6 september, position in degrees where the magnet of the planet is
beginpos_string = 6 # beginposition in the string
eindpos_string = 9 # endposition in the string
richting = stepper.BACKWARD
stijl = stepper.DOUBLE
if (planeet == "DMO-Venus"):
totaal_stappen = 1019 # aantal stappen om een rondje te maken, 1% afwijking per keer
magneet_positie = 281 # position in degrees where the magnet of the planet is
beginpos_string = 3 # beginposition in the string
eindpos_string = 6 # endposition in the string
richting = stepper.BACKWARD
stijl = stepper.DOUBLE
if (planeet == "DMO-Mercurius"):
totaal_stappen = 202 # aantal stappen om een rondje te maken, 1% afwijking per keer
magneet_positie = 83 # position in degrees where the magnet of the planet is
beginpos_string = 0 # beginposition in the string
eindpos_string = 3 # endposition in the string
richting = stepper.BACKWARD
stijl = stepper.DOUBLE
# reedswitch
os.system('gpio export 19 in')
sleep(0.5)
io = wiringpi.GPIO(wiringpi.GPIO.WPI_MODE_GPIO_SYS)
io.pinMode(19,io.INPUT)
# Adafruit
kit = MotorKit()
schakelaar = "open"
teller = 1
positiestring = ""
positiestring_oud = "001001001001001001001001001"
totaalteller = 1
offline_teller = 1
# first time startup wait 30 seconds for all background processes of RPI to startup, prevents bumpy ride in the beginning
sleep (30)
while True:
#timestamp DMO.log
now = datetime.now()
dt_string = now.strftime("%d/%m/%Y %H:%M:%S")
print ('-------------------------------')
print (totaalteller , ' ' + dt_string + ' ' + planeet)
try:
r = requests.get(url, timeout=4)
positiestring = r.text
print ('ONLINE')
offline_teller = 1
except requests.exceptions.ConnectionError:
positiestring = positiestring_oud
print ('OFFLINE ', offline_teller)
offline_teller +=1
if offline_teller > 10:
print ('RESTART ' + dt_string)
os.system('sudo cp /home/pi/DMO/DMO.log /home/pi/DMO/DMOlog.old')
os.system('sudo cp /home/pi/DMO/DMO.error /home/pi/DMO/DMOerror.old')
os.system('sudo shutdown -r now')
print ('Mer ',positiestring[0:3],' Ven ',positiestring[3:6],' Aar ',positiestring[6:9],' Mar ',positiestring[9:12],' Jup ',positiestring[12:15],' Sat ',positiestring[15:18])
# if there is a new position and we have got internet
if str(positiestring) != str(positiestring_oud):
# first drive to magnet
while (schakelaar == "open") and (not test_modus):
kit.stepper1.onestep(direction=richting, style= stijl)
if (io.digitalRead(19)):
schakelaar = "open"
else:
if teller > 200:
schakelaar = "dicht"
teller +=1
sleep(1)
# calculation number of steps
try:
nieuwe_positie_planeet = int(positiestring[beginpos_string:eindpos_string])
except:
print ('FOUT in conversie van: ', positiestring[beginpos_string:eindpos_string])
nieuwe_positie_planeet = 1
stappen_per_graad = totaal_stappen/360
if (nieuwe_positie_planeet < magneet_positie) and (nieuwe_positie_planeet > 0):
aantal_stappen_te_lopen = (magneet_positie - nieuwe_positie_planeet) * stappen_per_graad
else:
aantal_stappen_te_lopen = ((360- nieuwe_positie_planeet)+ magneet_positie) * stappen_per_graad
print ('nieuwe_positie_planeet ' , nieuwe_positie_planeet)
print ('stappen_per_graad ' , stappen_per_graad)
print ('magneet_positie ' , magneet_positie)
print ('aantal_stappen_te_lopen ' , aantal_stappen_te_lopen)
# drive to position
teller = 1
while (teller < aantal_stappen_te_lopen):
if planeet_motor:
kit.stepper1.onestep(direction=richting, style= stijl)
teller +=1
sleep (1)
# wait 10 seconds to prevent overload of webserver
sleep (10)
totaalteller +=1
if planeet_motor:
kit.stepper1.release()
positiestring_oud = positiestring
schakelaar = "open"
teller = 1