This commit is contained in:
andrea
2026-04-29 23:10:16 +02:00
parent 35716fcfb1
commit a9e6c6c640
34 changed files with 62560 additions and 31122 deletions

259
timeline.py Normal file
View File

@@ -0,0 +1,259 @@
import matplotlib.pyplot as plt
import numpy as np
# =========================
# CONFIGURAZIONE
# =========================
m1pwmap =40
m1pwmch=60
m2pwmap=70
m2pwmch= 70
m3pwmap= 35
m3pwmch= 40
m4pwmap= 40
m4pwmch= 40
m1rampstart= 20
m2rampstart= 20
m3rampstart= 20
m4rampstart= 20
t1ap= 280
t2ap= 4
t3ap= 10
t4ap= 40
twap= 1
t1ch= 27
t2ch= 10
t3ch= 30
t4ch= 1
twch= 1
# 0,
# 0,
# 0,
tramp1= 100
m1pwmMan= 60
m2pwmMan= 70
m3pwmMan= 40
m4pwmMan= 40
trampman= 50
tramp= 100
# Ogni fase è:
# (tempo_inizio, tempo_fine, velocita_iniziale, velocita_finale)
motori = {
"Motore1": [
(0, 300, 0, 80), # rampa salita
(300, 700, 80, 80), # mantenimento
(700, 900, 80, 0) # rampa discesa
],
"Motore2": [
(20, 20+tramp, m2rampstart, m2pwmap),
(20+tramp, 20+tramp+t1ap, m2pwmap, m2pwmap),
(20+tramp+t1ap, 20+tramp+t1ap+tramp, m2pwmap, 0)
],
"Motore3": [
(1800, 2100, 0, 100),
(2100, 2600, 100, 100),
(2600, 2900, 100, 0)
],
"Motore4": [
(2900, 3200, 0, 50),
(3200, 3600, 50, 50),
(3600, 3900, 50, 0)
]
}
# Buzzer ON/OFF: (inizio, fine)
buzzer = [
(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, 55),
(60, 65),
(70, 75),
(80, 85),
(90, 95),
(100, 105),
(110, 115),
(120, 125),
(130, 135),
(140, 145),
(150, 155),
(160, 165),
(170, 175),
(180, 185),
(190, 195),
(200, 205),
(210, 215),
(220, 225),
(230, 235),
(240, 245),
(250, 255),
(260, 265),
(270, 275),
(280, 285),
(290, 295),
(300, 305),
(310, 315),
(320, 325),
(330, 335),
(340, 345),
(350, 355),
(360, 365),
(370, 375),
(380, 385),
(390, 395),
(400, 405),
(410, 415),
(420, 425),
(430, 435),
(440, 445),
(450, 455),
(460, 465),
(470, 475),
(480, 485),
(490, 495),
(500, 505),
(510, 515),
(520, 525),
(530, 535),
(540, 545),
(550, 555),
(560, 565),
(570, 575),
(580, 585),
(590, 595),
(600, 605),
(610, 615),
(620, 625),
(630, 635),
(640, 645),
(650, 655),
(660, 665),
(670, 675),
(680, 685),
(690, 695),
(700, 705),
(710, 715),
(720, 725),
(730, 735),
(740, 745),
(750, 755),
(760, 765),
(770, 775),
(780, 785),
(790, 795),
(800, 805),
(810, 815),
(820, 825),
(830, 835),
(840, 845),
(850, 855),
(860, 865),
(870, 875),
(880, 885),
(890, 895),
(900, 905),
(910, 915),
(920, 925),
(930, 935),
(940, 945),
(950, 955),
(960, 965),
(970, 975),
(980, 985),
(990, 995),
]
tasto = [
(0, 30),
]
# =========================
# CREAZIONE GRAFICO
# =========================
fig, ax = plt.subplots(figsize=(13, 6))
# Motori: linee di velocità
for nome, fasi in motori.items():
tempi = []
velocita = []
for start, end, v0, v1 in fasi:
t = np.linspace(start, end, 50)
v = np.linspace(v0, v1, 50)
tempi.extend(t)
velocita.extend(v)
ax.plot(tempi, velocita, marker="o", markersize=2, label=nome)
# Buzzer: riga separata in basso
y_buzzer = -15
for start, end in buzzer:
ax.broken_barh(
[(start, end - start)],
(y_buzzer, 8),
facecolors="red",
alpha=0.7
)
# Scritta "Buzzer"
ax.text(
-120,
y_buzzer + 4,
"Buzzer",
va="center",
ha="right"
)
# tasto: riga separata in basso
y_tasto = -35
for start, end in tasto:
ax.broken_barh(
[(start, end - start)],
(y_tasto, 8),
facecolors="yellow",
alpha=0.7
)
# Scritta "tasto"
ax.text(
-120,
y_tasto + 4,
"Tasto",
va="center",
ha="right"
)
# =========================
# FORMATTAZIONE
# =========================
ax.set_xlabel("Tempo (ms)")
ax.set_ylabel("Velocità motore (%)")
ax.set_title("Timeline motori con rampe + buzzer")
ax.set_ylim(-50, 110)
ax.grid(True)
ax.legend()
# Salva immagine
plt.savefig("timeline_completa.png", dpi=300, bbox_inches="tight")
plt.show()