Progetto funivia automatica

Ciao a tutti. Appena iscritto e appena presentato sono già qui a presentarvi una mia idea che vorrei poter trasformare in realtà. Ma prima di fare ciò ho bisogno di sapere da voi utenti più esperti se questo progetto è realmente fattibile.
Ho comprato un modellino di funivia elettronica da mettere nella vetrina del mio negozio. Ahimè, la direzione di marcia va governata con un pulsante "avanti-indietro". Non va bene, ho bisogno che il cambio di senso del motore avvenga automaticamente. Ma non solo: per renerla più realistica mi piacerebbe che nei pressi delle due stazioni a valle e a monte le cabine rallentassero dimezzando la velocità (come succede nella realtà), per poi fermarsi una volta entrate nelle stazioni, fare una breve pausa e ripartire al contrario, subito lentamente e poi accelerando. E così via. Pensavo di avvalermi di due sensori a ultrasuoni per il rilevamento della cabina in arrivo, che dialoghino con i motori garantendone il rallentamente adeguato. Gli stessi sensori, una volta impostata la giusta distanza, determineranno l'arresto delle cabine.
Sono due settimane che cerco sul web e sui forum, ma trovo dei frammenti delle varie funzioni che ho menzionato e comunque mai applicate alla realizzazione di un progetto così (sul web si preferiscono i trenini alle funivie).
Oltre ovviamente all'Arduino e ai sensori, dispongo anche del driver motore L298N.

Allora, dite che è realizzabile? In quel caso mi metto a studiare e proverò a proporvi una bozza di codice.

Vi ringrazio.

Certo che è realizzabile, e mi sembra anche un bel progettino da sviluppare per chi è agli inizi.

Il driver L298N è un po' datato, ma può andar bene lo stesso.
Il mio dubbio invece è sulla scelta dei sensori: non so quanto siano grandi questi modellini di funivia, ma i sensori ad ultrasuoni hanno un cono di emissione piuttosto ampio ed il rischio è che vadano a beccare un po' quello che capita.

Io piuttosto che misurare la distanza, userei dei sensori di finecorsa come ad esempio un sensore ottico oppure un sensore ad effetto hall (in questo caso andrebbe inserito un piccolo magnete sul modellino per attivare il sensore)

Molto interessante, in effetti nelle simulazione su Tinkercad ho visto che il cono è ambio. Me li procuro entrambi e magari faccio qualche test su banco per apprendere i codici.
Come driver se mi dici uno più aggiornato lo prendo senza problemi.
Quindi senza sensore a ultrasuoni dovrei impostare accelerazione e rallentamento della cabina magari impostando un tempo dall'avvio del motore, possibile?

Io di solito uso i DRV8833 però molto dipende dal motore (corrente e tensione di lavoro).
Ad ogni modo se hai già un L298N, va benissimo tranquillo.

Non ho capito che intendi... hai qualche immagine di riferimento?
L'elettronica di controllo dov'è che si troverebbe, all'interno o all'esterno della cabina?

Poniamo che sia qualcosa del genere

Una possibile soluzione sarebbe quella di mettere sensori ad effetto hall come questi ed un piccolo magnete incollato sul carrello della cabina.

Quando la cabina entra nella giostra (non ho idea di come si chiami, perdonami), il magnete passa sopra il sensore e a quel punto fai decelerare, in uscita un secondo sensore ti dirà invece quando puoi nuovamente accelerare.

P.S.
Mia curiosità... ma sei sicuro che la cabina debba rallentare? Quelle reali non mi pare che lo facciano.

Sì, altro che! Si sganciano dalla fune di trazione e passano a un trascinamento a bassa velocità per permettere ai passeggeri di salire e scendere.

Potresti anche mettere un solo sensore di qualche tipo per sincronizzare e poi, data per costante la velocità, basarti solo sul tempo dall'ultimo impulso di sincronismo:

Inizio: la cabina 1 arriva alla stazione A: sincronismo e rallenta (oppure prendi il sincronismo con un semplice microswitch quando già sta dentro: la prima volta dall'accensione non rallenta).
Dopo 5 secondi accelera nuovamente.
Dopo altri 5 secondi rallenta (stazione B).
Dopo altri 5 secondi accelera.
Dopo altri 5 secondi arriva un altro impulso di sincronismo (stazione A) e ricomincia a contare i tempi.

Ah ecco, infatti mi chiedevo come.

Se rallentasse la fune principale, immagino che le cabine inizierebbero ad oscillare pericolosamente, giusto?

Ah non ti preoccupare, è da quando avevo 5 anni che sono fissato con gli impianti a fune, ma so che le persone normali di solito non distinguono troppo un impianto dall'altro :rofl: la funivia ha solo 2 cabine, una che scende e una che sale, non fanno il giro nella stazione come quella del video. Rallenta a una cinquantina di metri dalla stazione, si ferma dentro, le persone salgono per una decina di minuti e poi riparte.

In questo caso non rallenta, ma a me piacerebbe farlo per cercare di renderla più "vera"

L'ultima volta che sono salito su una funivia sarà stato tipo 15 anni fa :rofl:

Ad ogni modo, il punto della questione a questo punto è: dove vuoi far iniziare a rallentare la cabina?
Perché se vuoi che rallenti molto prima di entrare nella stazione, allora il sensore magnetico che suggerivo prima non va bene (a meno di non allungare quanto basta la pensilina della stazione) ed è necessario tornare all'idea originale di misurare la distanza, magari usando dei sensori ToF laser (Time of Flight) al posto di quello ultrasuoni come ad esempio il VL53L0X o analogo.

Come regolare velocità e verso? Ponte con PWM sull'Inhibit, con rallentamento e accelerazione progressivi?

Aspetta, ti faccio vedere quest'altro video che ti fa capire bene.

Quello che intendevo dire prima (e chiedo venia se sono sciocchezze) è se fosse possibile impostare accelerazione e rallentamento impostando un tempo di ritardo dall'ultimo imput rilevato. Come ha detto Datman. Forse è una soluzione più percorribile.
Comunque oggi magari vi do le specifiche del motorino in dotazione nel modello.
La regolazione della velocità al momento è ancora utopia per me, devo studiare :sweat_smile:

Se il tragitto è breve e ci sono solo due cabine, rallentano e si fermano contemporaneamente. Se, però, ci sono molte cabine, funzionerebbe come la ruota panoramica, che si ferma ogni volta che una cabina raggiunge la base.

Ci sono due sole cabine

La modifica sarebbe concettualmente semplice

Ma bisognerebbe avere lo schema rilevato dal vero del modellino

E anche sapere come se la cava @alberto141 con collegamenti e programmazione

Comunque io eviterei cose ad ultrasuoni o timer
Due microinterruttori per lo stop, e due per il rallentamento
Casomai il rallentamento può essere a tempo
Mai lo stop

Vi ringrazio per i continui suggerimenti. Sono all’inizio con queste cose, il kit Arduino spiega le cose in modo validissimo ma comunque “basic”, i progetti che propongono solo davvero distanti da questa cosa…io farei così, cerco di lavorare su uno schema che preveda solo lo stop finale e la ripartenza in senso contrario. Se tutto fila liscio valuto anche la questione del rallentamento e dell’accelerazione…il modellino finirà in vetrina poco prima di Natale, quindi ho ancora un po’ di tempo per studiare.

Per fare tutto basta un microswitch o un reed in una stazione, poi prosegue tutto a tempo fino al ritorno in quella stazione. Ecco un esempio, in cui mancano tutte le temporizzazioni e le operazioni sul motore:

#define PIN_REED 2 // Ampollina reed verso massa con 100nF in parallelo
                   // (dentro alla stazione A).
#define PIN_CICALINO 3 // Cicalino passivo che fa bip al momento del sincronismo.

bool reed_prec=true;
bool sinc=false;
uint32_t t0; // Memorizza il momento in cui è arrivata la cabina.
uint8_t stato=0; // uint8_t: solo numeri positivi.

void setup()
{
pinMode(PIN_REED, INPUT_PULLUP); 
pinMode(PIN_CICALINO, OUTPUT);
// ...
// Parte il motore accelerando (si può fare qui bloccante, oppure nel
// loop prima dello stato 0 rinumerando o usando enum o usando numeri
// negativi con int8_t stato).
}

void loop()
{
if(!digitalRead(PIN_REED) // Cabina 1 presente
  {
  if(reed_prec) // Un attimo fa non era presente
    {
    t0=millis();
    reed_prec=false;
    sinc=true;
    }
  }
else reed_prec=true; // Appena la cabina 1 si allontana, reed_prec torna true.


switch(stato)
  {
  case 0:
  if (sinc) stato=1; // Attende il sinc
  break;

  case 1: 
  sinc=false;
  tone(CICALINO, 1000, 150); // Bip!
  // Imposta la bassa velocità (solo per il primo passaggio).
  stato=2;
  break;

  case 2: 
  // Attende che la cabina 1 esca dalla stazione A, poi
  stato=3;
  break;

  case 3: 
  // Accelera fino alla velocità di crociera, poi
  stato=4;
  break;

  case 4:
  // Attende l'arrivo vicino alla stazione B, poi
  stato=5;
  break;

  case 5:
  // Rallenta in vista della stazione B, poi
  stato=6;
  break;

  case 6:
  // Attende che la cabina 1 esca dalla stazione B, poi
  stato=7;
  break;

  case 7:
  // Accelera fino alla velocità di crociera, poi
  stato=8;
  break;

  case 8:
  // Attende l'arrivo vicino alla stazione A, poi
  stato=9;
  break;

  case 9:
  // Rallenta in vista della stazione A, poi
  stato=0;
  break;
  }
}

Questi sensori IR funzionano bene. La lettura è analogica e non è lineare con la distanza, ma questo non è un problema. Misurano dai 6 cm in poi, basta vedere che lettura danno alla distanza a cui si vuole rallentare.

Per lo stop magnetino sotto la cabina e sensore hall o reed al punto di arrivo. Se non ho capito male le cabine sono due, quindi il tutto replicato anche per l'altra.

Sono due, in posizione simmetrica rispetto alle due stazioni

Come si muove una si muove l'altra
Un magnete, un sensore

Manca ancora lo schema rilevato dal vero
Ma io ho pazienza

1 Like

Quanto detto al #14 si può fare, meglio, con un magnetino su ciascuna cabina: in questo caso, così come con un sensore che rilevi indistintamente le due cabine, il programma funzionerà solo tra lo stato 0 e lo stato 6, perché a quel punto arriverà un nuovo sincronismo, e all'accensione le cabine faranno al massimo mezzo giro senza rallentare se è stato spento poco dopo il sincronismo.

Anche questo si risolve

All'avviamento gli si fa fare lo homing
Ovvero avanti lento fino al sensore
Da li ciclo automatico

Due sensori

Uno per stazione

Una sola cabina può essere presente in stazione a valle o stazione a monte

???... E' ovvio che una sola cabina può essere presente in una stazione...

Basta rilevare la presenza di una cabina in una stazione: sicuramente è presente anche l'altra nell'altra stazione. Basta, quindi, un solo sensore che rilevi la presenza di una delle due cabine nella stazione più comoda. Non ci interessa sapere se è stato compiuto un giro intero o solo mezzo giro.