Luigi Trenti è tornato con un altro strabiliante progetto la Locomotiva VLC 75, o meglio una riproduzione del modello VLC 75.
Luigi ha descritto in questo modo la locomotiva ed il suo progetto:
nata in America a partire dal 1860 e ne sono state costruite circa 30.000 esemplari, venduti non solo in America ma anche in tutta Europa con le caratteristiche di suono europee ( niente campana come in America) L’ho voluta raffigurare in uno scenario del suo tempo, tutto americano, come tu potrai vedere. E’ stato uno dei primi lavori dove mi sono avvalso di Arduino per la gestione del programma di funzionamento, la rimanente parte elettronica è tutta auto costruita ( fatta eccezione della scheda della loco sound che arriva dall’Australia dove hanno espresso apprezzamenti per il treno )
e come non avrebbero potuto esprimere apprezzamenti per un lavoro di precisione, passione e capacità artistica del livello di Luigi.
Dalle foto vedi subito che sia l’ambientazione sia la riproduzione è incredibile, non sono un esperto di locomotive e di certo non sono in grado di giudicare l’accuratezza del progetto alla locomotiva originale, so di certo che un lavoro come quello fatto da Luigi richiede tanto tempo, passione, capacità di realizzazione e volontà.
Nota come anche i particolari dell’ambiente circostante siano precisi nella ricostruzione:
le luci danno alla locomotiva un aspetto non solo realistico ma quasi magico:
Lo sketch della locomotiva VLC 75
La centralina che controlla la locomotiva vlc 75 è stata realizzata da Luigi come hai letto sopra e si avvale di Arduino, eccone una foto:
e l’autore del progetto ha anche scritto lo sketch con cui controlla la locomotiva, la sirena e le luci:
//VARIANTI int velocitaA; // variante per la VELOCITA' int motorePin = 9; // velocit‡ del motore-treno //=================================================================== void setup() { Serial.begin(9600); pinMode(13, OUTPUT); // INVERSIONE DI MARCIA pinMode(12, OUTPUT); //CAMPANA---LOC- AMERICANA pinMode(11, OUTPUT); //FISCHIO---LOC- EUROPA pinMode(10, OUTPUT); //FARI ANTERIORI pinMode(8, OUTPUT); //LUCE CABINA pinMode(5, OUTPUT); //ALIMENTAZIONE SCHEDA SUONI } void loop() { Serial.println("-INIZIO CICLO--ACC FISCHIO "); //===================================================== digitalWrite(5, HIGH); Serial.println("-ACCENDI LUCE CABINA "); digitalWrite(8, HIGH); //ACCENDI LUCE CABINA digitalWrite(11, HIGH); //FISCHIO --acceso delay(1500); digitalWrite(11, LOW); // FISCHIO --spento delay(500); digitalWrite(11, HIGH); delay(500); digitalWrite(11, LOW); delay(500); digitalWrite(11, HIGH); delay(300); digitalWrite(11, LOW); Serial.println("- ACCENDI FARI ANTERIORI "); digitalWrite (10, HIGH); delay(500); //================================================================= // PRIMA PARTENZA CON ACCELERAZIONE LENTA ( marcia avanti )///// int fadeValue = 0; Serial.println("-PRIMA PERTENZA-"); for (fadeValue = 0; fadeValue <= 100; fadeValue += 2) { analogWrite(motorePin, fadeValue); delay(400); } digitalWrite(10, LOW); //SPEGNI FARI-ANTERIORI- delay(1500); digitalWrite(8, LOW); digitalWrite(11, HIGH); //FISCHIO --acceso delay(1500); digitalWrite(11, LOW); // FISCHIO --spento delay(500); Serial.println("- SPEGNI FARI ANTERIORI. "); digitalWrite (10, LOW); Serial.println("-SECONDA ACCELERAZIONE-"); for (fadeValue = 125; fadeValue <= 255; fadeValue += 2) { analogWrite(motorePin, fadeValue); delay(300); } //================================================================== Serial.println("- MANTIENI VELOCITA MASIMA-"); digitalWrite(motorePin, HIGH); delay(2000); //MANTIENI fischio --(EUROPEO) digitalWrite(11, HIGH); delay(1000); digitalWrite(11, LOW); delay(300); digitalWrite(11, HIGH); delay(300); digitalWrite(11, LOW); delay(300); //================================================================ Serial.println("-INIZIO RALLENTAMENTO-"); for (int fadeValue = 255 ; fadeValue >= 50; fadeValue -= 3) { analogWrite(motorePin, fadeValue); delay(300); } Serial.println("-ACCENDI FARI ANTERIORI "); digitalWrite (10, HIGH); digitalWrite(11, HIGH); delay(1500); digitalWrite(11, LOW); Serial.println("-12-RIPARTENZA DA MINIMA-"); for (fadeValue = 50; fadeValue <= 255; fadeValue += 3) { analogWrite(motorePin, fadeValue); delay(300); } digitalWrite(11, HIGH); delay(1500); digitalWrite(11, LOW); Serial.println("- SPEGNI FARI ANTERIORI "); digitalWrite(10, LOW); Serial.println("- MANTIENI VELOCITA-"); digitalWrite(motorePin, HIGH); delay(3000); Serial.println("- II RALLENTAMENTO-"); for (int fadeValue = 255 ; fadeValue >= 0; fadeValue -= 2) { analogWrite(motorePin, fadeValue); delay(300); } Serial.println("-MANTIENI LOCOMOTIVA FERMA-"); digitalWrite(motorePin, LOW); delay(3000); Serial.println("- ACCENDI SUONO AMERICANO CON CAMPANA"); digitalWrite (5, LOW); delay(300); digitalWrite (12, HIGH); digitalWrite (5, HIGH); delay(3000); Serial.println("- IMPOSTA RETROMARCIA "); digitalWrite(13, HIGH); digitalWrite(8, HIGH); Serial.println("-INDIETRO PIANO--"); for (int fadeValue = 0 ; fadeValue <= 50; fadeValue += 2) { analogWrite(motorePin, fadeValue); delay(300); } Serial.println("-RALLENTA RETROMARCIA-"); for (int fadeValue = 50 ; fadeValue >= 0; fadeValue -= 2) { analogWrite(motorePin, fadeValue); delay(400); } Serial.println("-INSERISCI --MARCIA AVANTI"); digitalWrite(13, LOW); Serial.println("-SPEGNI LUCE CABINA "); digitalWrite(8, LOW); delay(500); //inserimento fischio (AMERICANO) digitalWrite(11, HIGH); delay(1500); digitalWrite(11, LOW); digitalWrite(11, HIGH); delay(1000); digitalWrite(11, LOW); delay(1500); Serial.println("-SPEGNI SUONO CAMPANA "); digitalWrite (5, LOW); // CAMBIO SUONO delay(300); digitalWrite (12, LOW); //SPEGNI CAMPANA-- digitalWrite (5, HIGH); delay(3000); //=============================================================== Serial.println("--FRENATA -"); for (fadeValue = 0; fadeValue <= 125; fadeValue += 2) { analogWrite(motorePin, fadeValue); delay(400); } digitalWrite(motorePin, LOW); delay(5000); digitalWrite(11, HIGH); //FISCHIO --EUROPA delay(1200); digitalWrite(11, LOW); delay(1000); digitalWrite(11, HIGH); delay(500); digitalWrite(11, LOW); delay(300); digitalWrite(11, HIGH); delay(500); digitalWrite(11, LOW); delay(500); Serial.println("- MARCIA INDIETRO LENTO-"); digitalWrite(13, HIGH); for (int fadeValue = 0 ; fadeValue <= 50; fadeValue += 1) { analogWrite(motorePin, fadeValue); delay(300); } Serial.println("--FRENATA BRUSCA--"); digitalWrite(motorePin, LOW); delay(2000); Serial.println("- MARCIA---AVANTI--"); digitalWrite(13, LOW); for (fadeValue = 0 ; fadeValue <= 50; fadeValue += 2) { analogWrite(motorePin, fadeValue); delay(400); } Serial.println("-LUCE CABINA E AVANTI PIANO-"); digitalWrite(8, HIGH); //ACCENSIONE LUCE BLU--CABINA----- delay(5300); digitalWrite(8, LOW); //SPEGNI LUCE CABINA delay(8000); Serial.println("-RIPARTENZA DA VEL MINIMA--"); for (fadeValue = 50; fadeValue <= 255; fadeValue += 3) { analogWrite(motorePin, fadeValue); delay(300); } Serial.println("-MANTIENI VELOCITA-"); digitalWrite(motorePin, HIGH); delay(1000); //=============================================================== Serial.println("--NUOVO RALLENTAMENTO-255//0"); for (int fadeValue = 255 ; fadeValue >= 0; fadeValue -= 2) { analogWrite(motorePin, fadeValue); delay(300); } Serial.println("-37-MANTIENI FERMA LOCOMOTIVA--0"); digitalWrite(motorePin, LOW); delay(5000); Serial.println("==== TORNA A CAPO === "); }
lo sketch è lungo ma non complesso, leggiamo lo insieme:
linea 02: definisci una variabile che utilizzi per memorizzare la velocità a cui imposti il motore;
linea 03: definisci una variabile il cui valore è il pin a cui hai connesso il motore;
linee 09-14: imposta tutti i pin coinvolti come pin di tipo PUTPUT;
linea 20: porta il pin 5 ad HIGH in modo da attivare la scheda suoni;
linea 22: porta il pin 8 ad HIGH per accendere le luci in cabina;
linee 25-33: alterna il valore del pin 11 da HIGH a LOW intervallandolo a delay successivi di 1500,500,500,500,300;
linea 35: porta ad HIGH il valore del pin 10 a cui sono connessi i fari anteriori, in pratica accendi le luci;
linea 40: imposta la variabile “fadeValue” a 0;
linee 42-45: inizia un ciclo da 0 a 100 con incremento 2 in cui ad ogni passaggio del ciclo trasferisci al motore il valore di velocità e attendi 400 millisecondi;
linea 46: spegni i fari anteriori;
linea 48 spegni le luci in cabina;
linee 49-52: accendi e spegni con una tempo di 1500 millisecondi il pin 11 corrispondente al fischio del treno;
linea 54: spegni i fari anteriori ( in pratica penso ad un errore logico, commesso da Luigi, in quanto i fari sono già spenti )
linee 56-59: costriusci un nuovo ciclo for da 125 a 255 con incremento 2 e distanziando i passaggi del ciclo a 300 millisecondi l’uno dall’altro;
linea 62: imposta il motore a massima velocità;
linea 63: mantieni la velocità massima per 2 secondi;
linee 65-72: alterna i valori HIGH e LOW per il pin 11 che controlla il fischio per ottenere l’effetto di “fischio europeo”. N.B.: anche durante questa fase il motore sta andando al massimo per cui oltre ai 2 secondi impostati alla linea 63 devi attenderti che il motore continui a girare anche durante i tempi di attesa e funzionamento del fischio ( quasi altri 2 secondi );
linee 76-79: crea un ciclo for in cui rallenti l’andamento del motore passando da 255 a 50 a step di 3 attendendo 300 millisecondi tra un passaggio ed il successivo.
linee 82-85: accendi i fari anteriori e fischia per 1,5 secondi;
linee 87-90: accelera nuovamente da 50 a 255 incrementando di 3 step con un tempo distante tra step e successivo sempre di 300 millisecondi;
linee 91-93: emetti un fischio da 1,5 secondi;
linea 95: spegni i fari anteriori;
linea 97: porta il pin relativo al motore ad HIGH, questa operazione non é necessaria in quanto il motore è già a regime massimo;
linea 98: attendi 3 secondi;
linee 100-103: rallenta fino a fermare il motore;
linea 105: porta a 0 il pin del motore, anche questa linea è superflua il motore è già a 0;
linea 106: attendi 3 secondi;
linee 108-112: togli alimentazione alla scheda sonora. Porta il pin 12 ad HIGH e successivamente attiva nuovamente la scheda sonora per 3 secondi;
linea 114-115: porta ad HIGH i pin per l’accensione delle luci di retromarcia ed il cambio della rotazione del motore ( pin 13 );
linee 117-125: crea due cicli for da 0 a 50 e da 50 a 0 in cui acceleri e deceleri in retromarcia;
linea 127: porta LOW il pin 13 per invertire nuovamente la rotazione del motore;
linea 129: spegni le luci in cabina;
linee 132-138: attiva il fischio Amercano alternando valori di HIGH e LOW intervallati tra loro con tempi differenti;
linee 140-144: spegni il suono della campana e riattiva solo la scheda sonora per i futuri utilizza;
linee 148-206: si ripetono nuovamente le operazioni viste fino a questo momento in cui la locomotiva VLC 75 accelera e decelera con tempi e modi differenti di volta in volta e alternando il fiscio europeo e l’accensione delle luci della locomotiva.
Nel video che segue vedrai lo sketch in funzione.
Il video della locomotiva VLC 75 di Luigi
Il video che ti mostro è stato realizzato dall’autore della locomotiva e condiviso per la gioia di tantissimi appassionati nel mondo.