DIORAMA ANIMATO PER PLASTICO FERROVIARIO IN SCALA H0 DI UN ELICOTTERO DEI CARABINIERI.

Edgardo Rosatti   Ottobre 2, 2022   Commenti disabilitati su DIORAMA ANIMATO PER PLASTICO FERROVIARIO IN SCALA H0 DI UN ELICOTTERO DEI CARABINIERI.
Print Friendly, PDF & Email

Questo diorama utilizza un Arduino Nano e riproduce un piccolo scenario dove è presente un elicottero dei Carabinieri. Il tutto è collocato all’interno di un plastico ferroviario in scala H0 per realizzare una scenetta animata. Questo lavoro mi è stato richiesto dall’amico modellista, nonché socio GAS TT, Gian Luca Giovannini (Littlejonn).
Trattandosi di un elicottero, ovviamente di ferroviario ha ben poco. Tuttavia, le tecniche usate possono essere sfruttate per realizzare anche altri tipi di scenette in diversi contesti rispetto a quello proposto qui.

La premessa è che l’elicottero in oggetto sta effettuando un soccorso per incidente stradale e deve decollare dalla suddetta scena effettuando una “cold startup”. Cioè una partenza da spento o a freddo.

La lista delle azioni da eseguire, prevede che vengano accese gradualmente ed in sequenza le luci dell’elicottero e contemporaneamente vengano avviati i motori facendo girare le pale del rotore tramite un piccolo motorino in corrente continua.
L’ultima azione non meno importante da eseguire, sarà quella della riproduzione dell’audio, cioè far sentire il suono dei motori che si stanno avviando con relativo flappeggio delle pale; il tutto sincronizzato con movimento rotore e accensione luci.

Il progetto è suddiviso in due fasi ben distinte:
– il modello;
– il circuito elettronico.

Il modello, è un kit di montaggio in plastica (scala 1:87) dell’elicottero Bell UH1-1D “SAR” della Herpa codice 744423 (434).
È di buona fattura e riproduce anche una parte dell’interno cabina. É una versione militare tedesca della SAR, ma a noi serve quella dei Carabinieri come richiesto dal committente.

Interni

Piloti

Rotore

LED interni

Interni completi

Iniziamo ad assemblare il modello e ad inserire al suo interno una serie di led SMD che serviranno per simulare le luci di posizione e navigazione stobo (rosse e verdi), più una bianca per decollo e atterraggio.
Tutti i led sono SMD tipo 0603 (1,6 * 0,8 mm.) e come filo conduttore ho usato del filo smaltato da 0,1 mm. Va bene anche del filo da 0,2 0 da 0,3.
In alternativa, sul sito Ebay Ledbaron si trovano dei led SMD già cablati di tutti i tipi.

Colorazione finestrini verde trasparente

La colorazione degli interni sarà nera con i sedili rossi e vi saranno anche due piloti colorati di verde militare. L’interno si vedrà poco, quindi lo si può lasciare spartano senza evidenziare troppi dettagli.
I finestrini vanno incollati dall’interno e i due superiori hanno una colorazione verde trasparente.
Per ottenere questo effetto, miscelare qualche goccia di colore verde con della vernice trasparente da applicare dall’interno.

Motore dempoltiplicato da 12 volt

Ora va modificato il rotore principale, in quanto dovrà essere fatto ruotare da un piccolo motorino in corrente continua.
Per tale modifica, ho usato una serie di tubetti in rame da 2, 1,5 e 1 mm per realizare un piccolo alberino che fuoriesce dal ventre del modello e prosegue sotto il piano del diorama. Questo alberino verrà poi calettato all’albero del motore elettrico.
Infine, è importante realizzare anche un piccolo foro di uscita, sempre nel ventre del modello, per portare i sottili fili di alimentazione dei led nel sottoplancia.
Al termine dell’assemblaggio del modello, fili led ed alberino rotore risultano nascosti.

Alberino in tubetto di rame e fili luci.

Rotore principale e alberino in rame

Il circuito elettronico è composto da una serie di moduli già assemblati e da una manciata di componenti:

– scheda a microcontrollore Arduino Nano;
– modulo MP3 DFPlayer Mini;
– modulo mini amplificatore stereo PAM8403;
– modulo regolatore di tensione 5V/6W;
– una scheda di memoria microSD per la memorizzazione dell’audio dell’elicottero (minimo 1 Gb);
– due altoparlanti da 4/8 OHM;
– un piccolo motore elettrico da 12V possibilmente demoltiplicato.

Per i componenti vari come pulsanti, morsettiere, resistenxe, condensatori, mosfet ecc. fare riferimento allo schema elettrico allegato e alle foto.

Schema elettrico

Il tutto è stato assemblato su una basetta sperimentale “millefori” e collocato all’interno di un mobiletto in plastica con una piccola plancia per
i comandi.

Millefori circuito

Millefori plancia di comando.

Funzionamento.

Alla scheda microcontrollore Arduino Nano, sono collegati 5 pulsanti normalmente aperti.
4 sono collegati ai pin D5, D6, D7 e D8 tramie resistenze di “pulldown” da 2200 OHM che servono rispettivamente a gesire le funzioni di:
– << (brano precedente);
– >> (brano successivo);
– STOP;
– PLAY.

Uno è collegato al pin RST (reset) verso massa per avere la possibilità di resettare il sistema direttamente dalla plancia.

Il modulo MP3 DFPlayer Mini è collegato tramite i suoi pin 2 RX e 3 TX rispettivamente ai pin D11 e D10 di Arduino. Tra il pin D11 e il pin RX va interposta una resistenza da 330 OHM.

I pin 4 e 5 del modulo MP3 sono le uscite audio (DAC R e DAC L) che sono collegate al connettore JP10 dell’amplificatore audio.

I 5 led delle luci sono collegati direttamente ai pin D2, D3, D4, D12 e D13 di Arduino e anche ai morsetti di uscita X5 e X3.
Sulla scheda sono presenti dei led di monitor posizionati sulla plancia.
NOTA: sui led posizionati all’interno dell’elicottero vanno aggiunte le resistenze di caduta.

Infine, il motore viene gestito dall’uscita PWM D9 di Arduino tramite un mosfet IRF520 e un paio di resistenze da 100 e 100000 OHM, un condensatore da 1 microFarad ed un diodo al silicio 1N4004.

Collegamenti esterni:
– X1, motore e uscita audio +L OUT;
– X2, uscite audio -L OUT, +R OUT e -R OUT:
– X3, Luci 1, 2 e 3;
– X4, GND e +12VCC;
– X5, luci 4, 5 e GND.

Sulla scheda è presente un interruttore di accensione S1 con relativo led spia ed un ponticello JP3+JP4 che va tolto durante la programmazione di Arduino.
In pratica, questo ponticello è collegato al pin VIN e se rimosso toglie l’alimentazione di 12 VCC, permettendo ad Arduino di essere alimentato dalla porta USB.
Al termine della programmazione togliere il cavo USB e reinserire il ponticello JP3+JP4.

Disegni schematici.

Disposizione componenti

Scheda motore sottoplancia.

Serigrafia plancia di comando.

Software.

Il programma fa uso di un paio di librerie:
SoftwareSerial.h e DFRobotDFPlayerMini.h.

Una volta avviato, il sistema esegue un test delle luci e del motore. Se ciò non avviene premere il pulsante di RESET.

Dopo il test, premendo PLAY inizierà la sequenza di avviamento vera e propria con luci strobo, avvio del motore e riproduzione dell’audio.

Al termine dell’esecuzione di avviamento, sarà possibile usare il circuito come lettore MP3 musicale.
Per fare questo, basta copiare all’interno della scheda di memoria microSD i brani desiderati.
I brani devono contenere all’inizio del nome un numero progressivo che parte da 00002. Il brano 00001 è l’mp3 dell’elicottero e non va modificato.

Esempio:
00001_elicottero.mp3
00002_brano_1.mp3
00003_brano_2.mp3



00045_brano_44.mp3


00358_brano_357.mp3

Per ascoltare i brani successivi a 00001 premere >>.
Per ascoltare i brani precedenti premere <<.
Per interrompere l’esecuzione premere STOP.

/*
 * Software di gestione diorama modellistico composto da un elicottero che esegue l'avviamento del rotore
 * e l'accensione delle luci esterne.
 * Scritto da Edgardo Rosatti per l'amico Gianluca Giovannini (c) gennaio 2021
*/
 
#include <DFRobotDFPlayerMini.h>
 
#include "SoftwareSerial.h"
 
//Inizializzazione della porta seriale software sui pin 10 e 11
SoftwareSerial mySoftwareSerial(10, 11); // RX, TX
DFRobotDFPlayerMini myDFPlayer;
char command;
int pausa = 0;
int pulsante1 = 8;
int pulsante2 = 7;
int pulsante3 = 6;
int pulsante4 = 5;
 
//pulsanti
int play;
int sttop;
int avanti;
int indietro;
 
//luci
int luce1 = 3; //strobo superiore rossa
int luce2 = 2; //strobo inferiore bianca
int luce3 = 12; //posizione sinistra rossa e destra verde
int luce4 = 13; //strobo posteriore destra bianca
int luce5 = 4; // strobo posteriore sinistra rossa
 
//motore elettrico 12 vcc
int rotore = 9;
 
//contatori
int startup = 0; //avvio sequenza luci
int pos = 0; // accensione luci di posizione
int vel = 0; // velocità rotore
 
void setup()
{
// definizione pulsanti del lettore MP3
pinMode(pulsante1,INPUT); //stop
pinMode(pulsante2,INPUT); //play
pinMode(pulsante3,INPUT); //avanti
pinMode(pulsante4,INPUT); //indietro
 
// definizione luci led 1 2 e 3
pinMode(luce1,OUTPUT);
pinMode(luce2,OUTPUT);
pinMode(luce3,OUTPUT);
pinMode(luce4,OUTPUT);
pinMode(luce5,OUTPUT);
 
// definizione PWM motore elettrico 12 vcc
pinMode(rotore,OUTPUT);
 
//Comunicazione serial software con modulo mp3
mySoftwareSerial.begin(9600);
//Inizializzazione della porta seriale di Arduino
Serial.begin(115200);
//Verifica se il modulo sta rispondendo e se la
//scheda SD è inserita
Serial.println();
Serial.println(F("DFRobot DFPlayer Mini"));
Serial.println(F("Initializing DFPlayer module ... Wait!"));
 
if (!myDFPlayer.begin(mySoftwareSerial))
{
Serial.println(F("Not initialized:"));
Serial.println(F("1. Check the DFPlayer Mini connections"));
Serial.println(F("2. Insert an SD card"));
while (true);
}
 
Serial.println();
Serial.println(F("DFPlayer Mini module initialized!"));
 
//Definizioni iniziali modulo mp3
myDFPlayer.setTimeOut(500); //Timeout serial 500ms
myDFPlayer.volume(24); //volume 24
myDFPlayer.EQ(0); //Equalizzazione normale
menu_opcoes();
 
//Test led e motore
digitalWrite(luce1,HIGH);
delay(500);
digitalWrite(luce2,HIGH);
delay(500);
digitalWrite(luce3,HIGH);
delay(500);
digitalWrite(luce4,HIGH);
delay(500);
digitalWrite(luce5,HIGH);
delay(1000);
 
digitalWrite(luce1,LOW);
delay(500);
digitalWrite(luce2,LOW);
delay(500);
digitalWrite(luce3,LOW);
delay(500);
digitalWrite(luce4,LOW);
delay(500);
digitalWrite(luce5,LOW);
delay(2000);
 
analogWrite(rotore,50);
delay(1500);
analogWrite(rotore,150);
delay(1500);
analogWrite(rotore,255);
delay(3000);
analogWrite(rotore,0);
 
// attendi 3 secondi alla fine del test
delay (3000);
}
 
void loop()
{
play = digitalRead(pulsante1);
sttop = digitalRead(pulsante2);
avanti = digitalRead(pulsante3);
indietro = digitalRead(pulsante4);
 
if (play == 1)
{
avviamento();
}
 
if (sttop == 1)
{
myDFPlayer.stop();
digitalWrite(luce1,LOW);
digitalWrite(luce2,LOW);
digitalWrite(luce3,LOW);
digitalWrite(luce4,LOW);
digitalWrite(luce5,LOW);
analogWrite(rotore,0);
menu_opcoes();
 
}
 
if (avanti == 1)
{
myDFPlayer.next();
menu_opcoes();
delay(400);
}
 
if (indietro == 1)
{
myDFPlayer.previous();
menu_opcoes();
delay(400);
}
 
//Waits for data entry via serial
while (Serial.available() > 0)
{
command = Serial.read();
 
if ((command >= '1') && (command <= '9'))
{
Serial.print("Music reproduction");
Serial.println(command);
command = command - 48;
myDFPlayer.play(command);
menu_opcoes();
}
 
//Reproduction
//Stop
 
if (command == 's')
{
myDFPlayer.stop();
Serial.println("Music Stopped!");
menu_opcoes();
}
 
//Pausa/Continua a musica
if (command == 'p')
{
pausa = !pausa;
if (pausa == 0)
{
Serial.println("Continue...");
myDFPlayer.start();
}
 
if (pausa == 1)
{
Serial.println("Music Paused!");
myDFPlayer.pause();
}
 
menu_opcoes();
}
 
 
//Increases volume
if (command == '+')
{
myDFPlayer.volumeUp();
Serial.print("Current volume:");
Serial.println(myDFPlayer.readVolume());
menu_opcoes();
}
 
if (command == '<') { myDFPlayer.previous(); Serial.println("Previous:"); Serial.print("Current track:"); Serial.println(myDFPlayer.readCurrentFileNumber()-1); menu_opcoes(); } if (command == '>')
{
myDFPlayer.next();
Serial.println("next:");
Serial.print("Current track:");
Serial.println(myDFPlayer.readCurrentFileNumber()+1);
menu_opcoes();
}
 
//Decreases volume
if (command == '-')
{
myDFPlayer.volumeDown();
Serial.print("Current Volume:");
Serial.println(myDFPlayer.readVolume());
menu_opcoes();
}
 
}
}
 
void menu_opcoes()
{
Serial.println();
Serial.println(F("=================================================================================================================================="));
Serial.println(F("Commands:"));
Serial.println(F(" [1-3] To select the MP3 file"));
Serial.println(F(" [s] stopping reproduction"));
Serial.println(F(" [p] pause/continue music"));
Serial.println(F(" [+ or -] increases or decreases the volume"));
Serial.println(F(" [< or >] forwards or backwards the track"));
Serial.println();
Serial.println(F("================================================================================================================================="));
}
 
void avviamento()
{
startup == 1;
if (pos == 0)
{
digitalWrite(luce3,HIGH);
delay(1000);
pos == 1;
myDFPlayer.play();
menu_opcoes();
}
for (vel = 0; vel <= 255; vel ++)
{
sttop = digitalRead(pulsante2);
digitalWrite(luce1,HIGH);
delay (100);
digitalWrite(luce1,LOW);
delay (100);
digitalWrite(luce2,HIGH);
delay (100);
digitalWrite(luce2,LOW);
delay (100);
digitalWrite(luce4,HIGH);
delay (100);
digitalWrite(luce4,LOW);
delay (100);
digitalWrite(luce5,HIGH);
delay (100);
digitalWrite(luce5,LOW);
delay (500);
analogWrite(rotore,vel);
Serial.println (vel);
if (sttop == 1)
{
analogWrite(rotore,0);
return;
}
}
}

Download.

Decalcomanie:

Elicottero_Carabinieri_H0