Motore sotto plancia per deviatoi con servocomando
Moderatori: MrMassy86, adobel55, lorelay49, cararci
-
- Socio GAS TT
- Messaggi: 4994
- Iscritto il: venerdì 28 ottobre 2011, 0:59
- Nome: Edgardo
- Regione: Lombardia
- Città: Muggiò
- Età: 60
- Stato: Non connesso
Motore sotto plancia per deviatoi con servocomando
Il telaio è composto da soli 4 pezzi e può essere realizzato in forex o in semplice legno di compensato da 2/3 millimetri di spessore, inoltre potrebbe essere un'idea per realizzarlo in stampa 3D.
Il servo utilizzato è il tipo SG 90 da 9 grammi di peso e dal costo di circa 3 euro. In realtà, il servo in oggetto completo di vite e squadretta di rinvio pesa 12 grammi.
Datasheet:
Il montaggio del telaio e del supporto è visibile qui: Stesso file, ma in pdf (scala 1:1):
Notare sulla destra del disegno la dima per la realizzazione dei fori di fissaggio sotto plancia e dell'asola per il passaggio dell'astina di comando in acciaio armonico.
Qui invece la dima su foglio A4 per realizzae 14 telaietti: e il file pdf in scala 1:1:
Per il controllo dei servi è in fase di progettazione un sistema basato su Arduino Nano in grado di comandare fino a 6 deviatoi tramite pulsanti o bus I2c
-
- Socio GAS TT
- Messaggi: 7762
- Iscritto il: domenica 29 gennaio 2012, 14:40
- Nome: Rolando
- Regione: Liguria
- Città: La Spezia
- Ruolo: Moderatore
- Stato: Non connesso
-
- Socio GAS TT
- Messaggi: 15693
- Iscritto il: sabato 10 novembre 2012, 15:42
- Nome: Massimiliano
- Regione: Toscana
- Città: Capannori
- Ruolo: Moderatore
- Stato: Non connesso
Re: Motore sotto plancia per deviatoi con servocomando

Massimiliano
-
- Messaggi: 4065
- Iscritto il: domenica 26 aprile 2015, 17:22
- Nome: Salvatore
- Regione: Emilia Romagna
- Città: Bologna
- Ruolo: Moderatore
- Stato: Non connesso
Re: Motore sotto plancia per deviatoi con servocomando
-
- Socio GAS TT
- Messaggi: 4994
- Iscritto il: venerdì 28 ottobre 2011, 0:59
- Nome: Edgardo
- Regione: Lombardia
- Città: Muggiò
- Età: 60
- Stato: Non connesso
Re: Motore sotto plancia per deviatoi con servocomando
É per ottimizzare lo spazio a disposizione; se hai molti binari con i deviatoi affiancati penso sia la soluzione migliore.
-
- Messaggi: 4065
- Iscritto il: domenica 26 aprile 2015, 17:22
- Nome: Salvatore
- Regione: Emilia Romagna
- Città: Bologna
- Ruolo: Moderatore
- Stato: Non connesso
Re: Motore sotto plancia per deviatoi con servocomando
questo per esempio ha un ulteriore supporto per micro switch per vari utilizzi, utile in analogico questo piuttosto ridotto con inserimento servo a clip, da considerare però la distanza utile per l'asta Se a qualcuno può interessare ho disegnato il tuo modello in 3D qui sotto il file in stl già pronto per la stampa
-
- Socio GAS TT
- Messaggi: 4994
- Iscritto il: venerdì 28 ottobre 2011, 0:59
- Nome: Edgardo
- Regione: Lombardia
- Città: Muggiò
- Età: 60
- Stato: Non connesso
Re: Motore sotto plancia per deviatoi con servocomando
Cioè, con il montaggio verticale del servo hai comunque un minore ingombro anche per le scale minori, mentre per le commutazioni, se si sfruttano tutte le porte di un Arduino Nano, possiamo usare 6 relè a doppia commutazione per 6 servi e con le porte A0/A7 inserire pulsanti e/o una comunicazione I2C.
In sostanza l'idea è quella di sfruttare il più possibile il Nano pe avere un modulo compatto che gestisca 6 deviatoi.
Ci sto lavorando su e a breve posso proporre il progetto. Per ora guarda qui: Pin D3, D5, D6, D9, D10, D11 = comando PWM dei 6 servi
Pin D2, D4, D7, D8, D12, D13 = comando digitale dei 6 relè (qui visualizzato solo uno)
Pin A2, A3, A4, A5, A6, A7 = comando interruttori di gestione dei servi (qui visualizzato solo uno)
Pin A0 e A1 = gestione del bus seriale I2c.
Come vedi, sfuttiamo tutte le porte della scheda, inoltre lasciamo anche uno spazio per un collegamento I2c con più moduli.
Questa è solo una bozza.
Grazie per il file 3D

-
- Messaggi: 4065
- Iscritto il: domenica 26 aprile 2015, 17:22
- Nome: Salvatore
- Regione: Emilia Romagna
- Città: Bologna
- Ruolo: Moderatore
- Stato: Non connesso
Re: Motore sotto plancia per deviatoi con servocomando
-
- Socio GAS TT
- Messaggi: 4994
- Iscritto il: venerdì 28 ottobre 2011, 0:59
- Nome: Edgardo
- Regione: Lombardia
- Città: Muggiò
- Età: 60
- Stato: Non connesso
Re: Motore sotto plancia per deviatoi con servocomando
Il blog è uno spazio condiviso in cui anche io sono in parte ospite e ha una zona commenti che attivo per me, ma non per gli ospiti, in quanto non potrei gestire le eventuali richieste di informazione da parte degli utenti che leggono gli articoli scritti non da me. Ecco perchè era necessario pubblicare la tua email. Col senno di poi, ho pensato che per evitare eventuali tracciature si potrebbe scrivere l'indirizzo email così: "nome.cognome(chiocciola)pippo.it"
Non so, magari srivendo chiocciola tra parentesi al posto di @.
Cercando nei miei archivi ho trovato solo un tuo progetto che fa uso dei tag RFID e di una scheda di memoria SD.
-
- Messaggi: 4065
- Iscritto il: domenica 26 aprile 2015, 17:22
- Nome: Salvatore
- Regione: Emilia Romagna
- Città: Bologna
- Ruolo: Moderatore
- Stato: Non connesso
Re: Motore sotto plancia per deviatoi con servocomando
-
- Messaggi: 336
- Iscritto il: giovedì 23 novembre 2017, 14:11
- Nome: Nicola
- Regione: Lombardia
- Città: Milano
- Stato: Non connesso
Re: Motore sotto plancia per deviatoi con servocomando
https://www.thingiverse.com/thing:3134588
https://www.thingiverse.com/thing:3645615
-
- Messaggi: 336
- Iscritto il: giovedì 23 novembre 2017, 14:11
- Nome: Nicola
- Regione: Lombardia
- Città: Milano
- Stato: Non connesso
-
- Socio GAS TT
- Messaggi: 4994
- Iscritto il: venerdì 28 ottobre 2011, 0:59
- Nome: Edgardo
- Regione: Lombardia
- Città: Muggiò
- Età: 60
- Stato: Non connesso
Re: Motore sotto plancia per deviatoi con servocomando
I link non funzionanoNick8526 ha scritto: ↑giovedì 16 gennaio 2020, 14:31 https://www.thingiverse.com/thing:2762924
https://www.thingiverse.com/search?q=se ... 06560e1a74
-
- Socio GAS TT
- Messaggi: 7762
- Iscritto il: domenica 29 gennaio 2012, 14:40
- Nome: Rolando
- Regione: Liguria
- Città: La Spezia
- Ruolo: Moderatore
- Stato: Non connesso
Re: Motore sotto plancia per deviatoi con servocomando
Rolando
-
- Messaggi: 336
- Iscritto il: giovedì 23 novembre 2017, 14:11
- Nome: Nicola
- Regione: Lombardia
- Città: Milano
- Stato: Non connesso
Re: Motore sotto plancia per deviatoi con servocomando
Ciao
-
- Socio GAS TT
- Messaggi: 4994
- Iscritto il: venerdì 28 ottobre 2011, 0:59
- Nome: Edgardo
- Regione: Lombardia
- Città: Muggiò
- Età: 60
- Stato: Non connesso
-
- Socio GAS TT
- Messaggi: 4994
- Iscritto il: venerdì 28 ottobre 2011, 0:59
- Nome: Edgardo
- Regione: Lombardia
- Città: Muggiò
- Età: 60
- Stato: Non connesso
Re: Motore sotto plancia per deviatoi con servocomando
Lo schema prevede l'uso di un Arduino Nano visibile in basso a destra.
I 6 servi sono collegati a dei connettori con alimentazione esterna da 5 VCC (SV1, SV2 e SV3) visibili in basso a sinstra. Tali connettori sono collegati alle 6 porte PWM di Arduino (D3, D5, D6, D9, D10 e D11) a + VCC esterni e a GND.
Nella parte alta possiamo vedere 6 driver per comandare 6 relè a 5 VCC utili per attuare dispositivi in contemporanea all'attivazione dei servi; per es. polarizzazione del cuore, stato segnali ecc. I relè non sono presenti sulla scheda. Ogni drive è dotato di un led rosso che ne indica lo stato (on/off).
Le porte di uscita digitali destinate ai driver sono: D2, D4, D7, D8, D12 e D13.
Nella parte centrale è presente una pulsantiera a 12 tasti per comandare manualmente i servi. Tale scheda, nel progetto del pcb è separabile per poter essere installata comodamente su una plancia di comando.
Il sistema della pulsantiera utilizza 6 partitori resistivi collegati alle porte analogiche di ingresso A0, A1, A2, A3, A6 e A7.
Le porte analogiche di ingresso A4 e A5 sono destinate alla gestione dell'interfaccia seriale I2c per l'espansione del sistema che vedremo in futuro.
A destra la pulsantiera ed a sinistra la logica
Un preview di Eagle: Questo circuito utilizza tutte le porte disponibili di Arduino Nano nel modo corretto e può essere utilizzato per molti altri scopi, questo è il bello della logica programmabile.
Appena possibilie verranno pubblicati i primi test di funzionamento.
-
- Socio GAS TT
- Messaggi: 4994
- Iscritto il: venerdì 28 ottobre 2011, 0:59
- Nome: Edgardo
- Regione: Lombardia
- Città: Muggiò
- Età: 60
- Stato: Non connesso
Re: Motore sotto plancia per deviatoi con servocomando
Il tastierino è separabile dal pcb principale per poter essere installato comodamente su una plancia.
É composto da 12 resistenze da 1000 OHM e da 12 pulsantini in modo da formare 6 partitori resistivi.
Ogni partitore usa 2 pulsanti e funziona nel seguente modo:
Se non si preme nulla, dal partitore escono 5 volt.
Se si preme il pulsante 1, dal partitore escono 2,5 volt.
Se si preme il pulsante 2, dal partitore escono 0 volt.
Gli ingressi analogici di Arduino a cui sono collegate le uscite dei 6 partitori quantizzano i dati letti a 10 bit.
Quindi i valori numerici letti dopo la quantizzazione saranno:
- 1023 per 5 volt;
- 511 per 2,5 volt;
- 0 per 0 volt.
Vi saranno comunque sempre delle minime tolleranze, quindi il software dovrà tenerne conto.
Lo schema elettrico dei 6 partitori è evidenziato qui: Sul connettore SV4 vi sono 8 fili; il primo va al polo negativo del circuito (GND), il secondo va all'alimentazione del circuito (5VCC) e gli altri 6 sono le uscite dai partitori resistivi.
Lo schema del PCB è questo: Lo so che per ora non servirà a nulla, ma è mia intenzione realizzare un PCB professionale e rendere disponibile in kit di montaggio questo progetto.
Concludo questa prima parte dicendo che questo tastierino per comandare 6 servi può essere usato anche per scopi diversi da quelli pensati originariamente e può essere sostituito da altri tipi di sensori.
Qui il software del tastierino:
Codice: Seleziona tutto
// Tastiera a 12 pulsanti per comandare 6 servocomandi su porte A0, A1, A2, A3, A6 e A7 su Arduino Nano
int pservo1 = A0;
int pservo2 = A1;
int pservo3 = A2;
int pservo4 = A3;
int pservo5 = A6;
int pservo6 = A7;
int pval1 = 0;
int pval2 = 0;
int pval3 = 0;
int pval4 = 0;
int pval5 = 0;
int pval6 = 0;
void setup() {
Serial.begin(9600);
}
void loop() {
pval1=analogRead(pservo1);
pval2=analogRead(pservo2);
pval3=analogRead(pservo3);
pval4=analogRead(pservo4);
pval5=analogRead(pservo5);
pval6=analogRead(pservo6);
if (pval1 > 700) {
Serial.print("Valore tasto per servo 1 = Non premuto = ");
Serial.println(pval1);
}
else if(pval1 < 700 && pval1 > 300) {
Serial.print("Valore tasto per servo 1 = Premuto 2 = ");
Serial.println(pval1);
}
else if(pval1 < 300) {
Serial.print("Valore tasto per servo 1 = Premuto 1 = ");
Serial.println(pval1);
}
if (pval2 > 700) {
Serial.print("Valore tasto per servo 2 = Non premuto = ");
Serial.println(pval2);
}
else if(pval2 < 700 && pval2 > 300) {
Serial.print("Valore tasto per servo 2 = Premuto 2 = ");
Serial.println(pval2);
}
else if(pval2 < 300) {
Serial.print("Valore tasto per servo 2 = Premuto 1 = ");
Serial.println(pval2);
}
if (pval3 > 700) {
Serial.print("Valore tasto per servo 3 = Non premuto = ");
Serial.println(pval3);
}
else if(pval3 < 700 && pval3 > 300) {
Serial.print("Valore tasto per servo 3 = Premuto 2 = ");
Serial.println(pval3);
}
else if(pval3 < 300) {
Serial.print("Valore tasto per servo 3 = Premuto 1 = ");
Serial.println(pval3);
}
if (pval4 > 700) {
Serial.print("Valore tasto per servo 4 = Non premuto = ");
Serial.println(pval4);
}
else if(pval4 < 700 && pval4 > 300) {
Serial.print("Valore tasto per servo 4 = Premuto 2 = ");
Serial.println(pval4);
}
else if(pval4 < 300) {
Serial.print("Valore tasto per servo 4 = Premuto 1 = ");
Serial.println(pval4);
}
if (pval5 > 700) {
Serial.print("Valore tasto per servo 5 = Non premuto = ");
Serial.println(pval5);
}
else if(pval5 < 700 && pval5 > 300) {
Serial.print("Valore tasto per servo 5 = Premuto 2 = ");
Serial.println(pval5);
}
else if(pval5 < 300) {
Serial.print("Valore tasto per servo 5 = Premuto 1 = ");
Serial.println(pval5);
}
if (pval6 > 700) {
Serial.print("Valore tasto per servo 6 = Non premuto = ");
Serial.println(pval6);
}
else if(pval6 < 700 && pval6 > 300) {
Serial.print("Valore tasto per servo 6 = Premuto 2 = ");
Serial.println(pval6);
}
else if(pval6 < 300) {
Serial.print("Valore tasto per servo 6 = Premuto 1 = ");
Serial.println(pval6);
}
delay(1000);
Serial.println();
}
Vengono create 6 variabili numeriche intere "pservo" da 1 a 6 a cui vengono assegnate le porte analogiche A0, A1, A2, A3, A6 e A7.
Vengono create 6 variabili numeriche intere "pval" da 1 a 6 a cui verranno assegnati i valori numerici letti dalle porte analogiche viste sopra.
Nella procedura di "setup" viene creata l'istanza della porta seriale ad una velocità di 9600 baud.
Nella procedura di "loop" vengono letti i valori delle porte analogiche assegnate sopra e memorizzaii nelle variabili "pval".
Da qui, tramite una serie di comandi decisionali "if" ed "else if", vengono stampati dei messaggi sul monitor seriale in base ai tasti premuti.
In questo caso sono stati premuti 2 pulsanti; uno per "servo2" ed uno per "servo5".
Quado realizzerò la scheda vera e propria per il comando dei servi, vedremo come interpretare queste informazioni per muoverli definitivamente.
-
- Socio GAS TT
- Messaggi: 11128
- Iscritto il: venerdì 18 novembre 2011, 15:51
- Nome: Adolfo
- Regione: Lazio
- Città: Roma
- Ruolo: Moderatore
- Stato: Non connesso
Re: Motore sotto plancia per deviatoi con servocomando
-
- Socio GAS TT
- Messaggi: 4994
- Iscritto il: venerdì 28 ottobre 2011, 0:59
- Nome: Edgardo
- Regione: Lombardia
- Città: Muggiò
- Età: 60
- Stato: Non connesso
Re: Motore sotto plancia per deviatoi con servocomando
Abbiate pazienza che alla fine sarà più semplice di come ce lo si può immaginare.
-
- Socio GAS TT
- Messaggi: 4994
- Iscritto il: venerdì 28 ottobre 2011, 0:59
- Nome: Edgardo
- Regione: Lombardia
- Città: Muggiò
- Età: 60
- Stato: Non connesso
Re: Motore sotto plancia per deviatoi con servocomando
Qui un cablaggio quasi completo: Si vedono 4 servi ed un alimentatore esterno da 5VCC per i servi ed i relè.
C'è un problema con i cablaggi della scheda verso 2 servi che non funzionano, ma essendo questo un prototipo è quasi normale.
Comunque la logica funziona perfettamente e a breve potrò presentare il progetto definitivo.
Lo schema a blocchi dell'impianto è questo: Alla scheda principale arrivano i segnali di ingresso della pulsantiera e degli alimentatorei che qui per forza di cose devono essere 2; uno per i servi a 5 VCC + i relè esterni ed uno per la scheda (da 7 a 12 VCC) con Arduino Nano.
Le uscite sono collegate ai relè ed ai servocomandi.
In base a come programmiamo Arduino e a cosa gli colleghiamo in ingresso al posto della pulsantiera, possiamo programmare questo circuito per utilizzarlo in molti modi diversi come: blocco elettrico, automatismo per stazioni nascoste, fasci di deviatoi, gestione di diorami, ecc.
Sto redando un articolo sul GAS TT Lab che è ancora in fase di stesura e se volete seguirlo cliccate qui:
http://gasttlab.altervista.org/gasttlab ... analogico/
-
- Socio GAS TT
- Messaggi: 4994
- Iscritto il: venerdì 28 ottobre 2011, 0:59
- Nome: Edgardo
- Regione: Lombardia
- Città: Muggiò
- Età: 60
- Stato: Non connesso
Re: Motore sotto plancia per deviatoi con servocomando
Ciao neh!
-
- Messaggi: 17
- Iscritto il: domenica 27 dicembre 2015, 22:28
- Nome: claudio
- Regione: Toscana
- Città: Firenze
- Stato: Non connesso
Re: Motore sotto plancia per deviatoi con servocomando
Devo dire che, prima di accorgermi di questo post , avevo cercato anch'io una soluzione per azionare con quel modello di servo i deviatoi del mio costruendo plastico ( in scala perfeTTa) pilotati con arduino . Nel mio caso uso una versione Mega2560 che a regime piloterà 11 deviatoi. Ho fatto uso degli ingressi digitali di Arduino che possono assumere due stati :
1) presenza di tensione --> stato logico 1--> deviatoio posizionato su "deviata"
2) assenza di tensione --> stato logico 0 --> deviatoio posizionato su "corretto tracciato"
Ogni ingresso è protetto da una resistenza da 1Kohm,mentre un'altra resistenza da 10Kohm lo pone a massa in assenza di tensione. Per la commutazione uso deviatori a levetta che aiutano (guardando la posizione della levetta ) a capire la posizione del deviatoio.
Se si scelgono quelli a due vie (sei piedini) possiamo usarne un lato per l'ingresso di Arduino e gli altri tre piedini serviranno per alimentare alternativamente dei led di stato sulla consolle di comando.
lo schema di collegamento è il seguente :


Ho preparato anche un prototipo su breadboard che fa uso due servo collegato così:

-
- Messaggi: 17
- Iscritto il: domenica 27 dicembre 2015, 22:28
- Nome: claudio
- Regione: Toscana
- Città: Firenze
- Stato: Non connesso
Re: Motore sotto plancia per deviatoi con servocomando
Codice: Seleziona tutto
#include <Servo.h>
Servo srv1;
Servo srv2;
Servo srv;
int posmin=40;
int posmax=145;
int rit(12);// costante di ritardo routine
int pos=posmin;
int srv1pin = 2;
int srv2pin = 3;
int selettore1 = 22; // ingresso selettore al pin 22
int selettore2 = 23; // ingresso selettore al pin 23
//definizione delle variabili
int val1 = 0; // si userà val1 per conservare lo stato del pin input1
int val2 = 0; // si usera val2 per conservare lo stato del pin input2
int vecchioval1 = 0;
int vecchioval2 = 0;
// routine spostamento dei servo
void deviata()
{for(pos=posmin;pos<posmax;pos+=1)
{srv.write(pos); //sposta in posizione deviata
delay (rit);}}
void normale()
{for(pos=posmax;pos>posmin;pos-=1)
{srv.write(pos); // sposta in posizione normale
delay (rit);}}
void setup() {
pinMode(selettore1,INPUT);
pinMode(selettore2,INPUT) ;
srv1.attach(srv1pin);
srv2.attach(srv2pin);
srv1.write(pos); //posiziona in posizione normale
srv2.write(pos); //posiziona in posizione normale
}
void loop() {
// controllo stato selettori e spostamento servo
val1 = digitalRead(selettore1); // legge il valore dell'input1 e lo conserva
if ((val1 == 1)&&(vecchioval1==0))
{vecchioval1=val1;
srv=srv1;
deviata();}
if (( val1==0 )&&( vecchioval1==1 ))
{vecchioval1=val1;
srv=srv1;
normale();}
val2 = digitalRead(selettore2); // legge il valore dell'input1 e lo conserva
if ((val2 == 1)&&(vecchioval2 == 0))
{vecchioval2=val2;
srv=srv2;
deviata();}
if (( val2 == 0 )&&( vecchioval2== 1))
{ vecchioval2=val2;
srv=srv2;
normale();}}
A grandi linee il programma all'inizio posiziona i servo al minimo poi passa a leggere in successione ogni ingresso. La variabile val (val1 per il primo ,val2 per il secondo) conterrà il valore letto . A questo punto viene fatto un confronto con il vecchio valore di val stabilendo se è cambiato uno stato ..... di conseguenza vengono richiamate le routine di spostamento servo che ho chiamato "deviata" e "normale". tutto semplice e stabile ,ma c'è un piccolo neo ,tra l'altro facilmente aggirabile . Succede che all'accensione, se uno dei selettori è posizionato su deviata , il servo corrispondente si porta velocemente alla posizione di zero e poi ruota normalmente(leggi lentamente) alla posizione scelta. Curiosando in vari forum pare che tale comportamento sia intrinseco dei servo scelti .... al limite basterà posizionare tutti i selettori in posizione di "corretto tracciato" prima di spegnere,infatti i servo in questa posizione non hanno questo per così dire bug. Il software è facilmente implementabile per gestire altri servo e può essere usato anche con altre versioni di Arduino . Chiaramente dovremmo adattarlo ai pin diversi dei due modelli . Spero che il programmino vi sia utile e che magari qualcuno sappia come ovviare al piccolo bug descritto.
-
- Socio GAS TT
- Messaggi: 4994
- Iscritto il: venerdì 28 ottobre 2011, 0:59
- Nome: Edgardo
- Regione: Lombardia
- Città: Muggiò
- Età: 60
- Stato: Non connesso
Re: Motore sotto plancia per deviatoi con servocomando
L'uso dei servi con Arduino è sempre un po' impegnativo, ma penso anche in generale con altri metodi di gestione degli stessi.
Nel software che hai pubblicato vedo che usi 2 variabili "posmin" e "posmax" con valori 40 e 145 come limiti di escursione in gradi della squadretta montata sul servo.
Va bene, ma per risolvere il problema del posizionamento iniziale che hai dovresti usare 0 per "posmin" e (145-40) 95 per "posmax".
Quando nella procedura di "setup", cioè all'ccensione, Arduino leggerà:
srv1.write(pos); //posiziona in posizione normale
srv2.write(pos); //posiziona in posizione normale
partirà da 0 e non da 40; pos è la variabile usata nel ciclo "for".
É che dovrai smontare la squadretta dei servi, riposizionare i perni col sofrtware aggiornato e infine ricalettare le squadrette.
A me funziona bene e quando accendo il sistema i servi stanno a 0.
Per la memorizzazione dell'ultima posizione impostata prima dello spegnimento, come ti dicevo in privato dovremo usare la libreria EEPROM.h.
Spero che risolverai questo intoppo e ti invito a portare le tue esperienze qui.
ED