-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathvelocimetro_class.py
59 lines (44 loc) · 2.04 KB
/
velocimetro_class.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
import machine
import time
class Velocimetro(object):
def __init__(self):
self.pulse = 0
self.speed = 0.0
self.diametro= 0.55 #esta en metros diametro de rueda
self.circunferencia= 0.55 * 3.14 #circunferencia es igual al diametro por pi
self.relacion = 8.9 #relacion entre el moto r y rueda. cuantas veces gira el motor para que la rueda gire una vuelta
self.cant_imanes = 4
self.servo_duty_0 = 8000 #menor cantidad de pulsos en la ventana de tiempo equivalente a 5km/h
self.servo_duty_180 = 1333 #maxima cantidad de pulsos en la ventana de tiempo eqiuvalente a vel max 80km/h
self.velocidad_max = 80
# Ancho de pulsoz
self.duty = self.servo_duty_0
# pendiente de la recta pulsos(v)
self.m = (self.servo_duty_180 - self.servo_duty_0) / self.velocidad_max
self.pulse_count = 0
# GPIO para el servo de la aguja del velocimetro
#aca habia un global pwm
self.servo_pin = 20
def iniciar(self):
self.pwm = machine.PWM(machine.Pin(self.servo_pin))
self.pwm.freq(50)
# GPIO de entrada para el sensor de efecto hall
self.sensor_pin = machine.Pin(16, machine.Pin.IN)
self.sensor_pin.irq(trigger=machine.Pin.IRQ_RISING, handler=self.on_pulse)
# Timer para ventana de tiempo velocimetro
self.t = machine.Timer()
self.t.init(period=100, mode=machine.Timer.PERIODIC, callback=self.calculate_speed)
def calculate_speed(self, t):
speed = self.pulse_count * 10 / (self.relacion * self.cant_imanes) * self.circunferencia * 3.6 # velocidad en km/h
self.duty = int(self.m * self.speed + self.servo_duty_0)
self.pulse_count = 0
print("Velocidad: {:.1f} km/h".format(speed))
def on_pulse(self, t):
self.pulse_count += 1
velocimetro = Velocimetro()
velocimetro.iniciar()
try:
while True:
pass
except KeyboardInterrupt:
print("Fin del programa")