Arduino & Modélisme

Bonjour,

Est-ce qu'il y a des membres du forum qui font du modélisme?

Personnellement, je fait des maquettes statistiques et des dioramas. Plus précisément des maquettes de science-fiction et aussi d'engins spatial. Mais je m'intéresse aussi à d'autres thèmes.

Je compte utiliser des arduinos et autres esp32 pour éclairer et animer certaines parties de mes créations.

J'aimerais trouver d'autres personnes pour partager et échanger sur le sujet.

à défaut d'amateurs comme vous, on sera ravi de répondre à des questions si vous en avez pour réaliser vos projets

Bonjour,

Je fais aussi du modélisme, du modélisme ferroviaire en HO / HOe.
Je suis dans un club ou nous faisons pas mal de petites animations sonore et lumineuses avec l'Arduino.

@guillaume_lrt J'ai déjà vu de belles choses faîtes avec Arduino dans le modélisme ferroviaire. Il y a un site bien fait, Locoduino.

@J-M-L Merci. :slight_smile:

Mon prochain projet de modèlisme. :slight_smile:

Un gunpla RG (un mecha à l'échelle 1/144 super détaillé), le MSN-04 Sazabi:

Outre le montage et la mise en peinture à l’aérographe et les détails aux pinceaux...

  • Les yeux et d'autres "capteurs" seront éclairer par de la fibre optique connectée à des leds.
  • la sortie des réacteurs et d'autres parties du gunpla seront éclairé par des leds smd ou ws2812b.

Le challenge dans ce genre de projet, c'est de faire passer les "fils" et placer les composants sur la maquette. Une fois le gunpla monté, il reste peu de place et dans l'idéal tout le câblage doit être invisible.

Mes gunplas je les mets en scène dans des dioramas... Du coup, l'essentiel de l'électronique est caché dans le décor.

Pour le côté pratique, j'utilise des esp32 s3, ils ont l'avantage de disposer du wifi sans rien devoir ajouter pour un budget moindre (6 euros la carte).

Je contrôle tout mes dioramas à partir d'un esp32 maître connecté à un écran en utilisant Esp-now. En gros c'est juste une télécommande.

Dans le diorama, je vais afficher des "hologrames", ce sera juste une feuille plastique transparente posèe à 45 degrés haut-dessus d'un tft.

Bonjour axelmaux

Super ESP-now, j'ai fait quelques trucs avec, ça rend la télécommande plus facile.
Par contre j'ai eu la surprise que les ESP32 utilisés en ESP-NOW, ne voulaient plus se connecter en Wi-Fi "classique", je dois mettre chaque fois cette ligne :
WiFi.mode(WIFI_STA)
Avant le lancement du Wi-Fi

Bonne journée !
jpbbricole

J'ai jamais testé pour le wifi classique mais merci c'est bon à savoir! :)

Bonjour

En fait, on peut utiliser le réseau WIFI (en mode AP comme en STA) avec des ESP32 qui sont connectés entre eux par ESP-NOW, mais il faut d'abord démarrer le point d'accès (pour le mode AP) ou se connecter d'abord au réseau WiFi de la box (pour le mode STA) et faire en sorte que le canal WIFI utilisé pour l'ESP-NOW sur chaque ESP32 et le canal WIFI utilisé pour le mode STA ou AP soient les mêmes.


C'est ÉNORME tout ce qu'on peut faire avec ESP-NOW, j'ai passé quelques temps à lire la doc, et j'y ai découvert des possibilités que je n'aurai même pas envisagé possibles.
Mais je n'ai pas encore fini de tout lire.

Je confirme! Je n'ai pas non plus encore explorer toutes les possibilités mais pour mes projets ESP-NOW est la meilleure solution par rapport au wifi "classique".

Salut,

super idée !
mes réalisations modelismes ne t'aideront pas par rapport à ton besoin, cependant, j'ai déjà manipulé avec succès des NEOPIXELS, et des écrans subminiatures (1cm).
ça peut être sympa d'utiliser ça sur des maquettes, surtout dans le domaine spatial.

Ce genre d'écran m'intéresse au plus haut point! :slight_smile:

Des neopixel j'en utilise couramment dans mes dioramas.

Si tu fais des maquettes "spatial", cela m'intéresse aussi. Je ne fait pas que des gunplas. Il y a quelques mois, j'ai fait le LEM (dans un diorama) posé sur la Lune. J'aimerais bien faire la navette Atlantis mais je ne trouve pas de maquette convainquante. J'ai aussi en projet (j'ai déjà la maquette) de faire l'A380 mais j'ai pas trop d'idées pour le mettre en situation.

Tu as un lien vers tes réalisations?

Bonjour axelmaux

J'ai fait récemment pour un membre du forum, une sorte de pseudo langage pour gérer l'allumage de ces LED.
Si ça peut t'intéresser... :wink:

Bonne soirée
jpbbricole

Désolé j'ai pas de lien sur mes utilisations, peut être sur youtube, je te chercherai ça.

J'avais fais le code du robot de mon entreprise (partie arduino), et je sortais les variables intéressantes sur 10 neopixels, ça facilitait la mise au point car en fonction de la LED et sa couleur, on savait direct ce que le MCU avait dans le ventre et l'état des variables d'environnement (capteur et lois de correction).
En modélisme j'avais également fait une commande automatique de pompe d'étrave quand la commande gouvernail dépassait une certaine consigne (observation du signal servo et en fonction de la valeur, allumage des pompes).

Les écrans, j'ai pensé à du modelisme direct, pour des tableaux de bord ou des écrans d'informations (gare par exemple).
je les utilise actuellement sur un projet (en cours de dev) pour faire un genre de "sérigraphie dynamique" pour une console de jeux de lumière, il me fallait donc des écrans assez petits pour en avoir un sous chaque touches "dynamiques". Les plus petits que j'ai trouvé c'est 0,42", il fait 15x15mm.

Actuellement j'ai la version MK1 très basique qui tourne, elle pilote mes lasers et spots en DMX et 400 neopixels que j'ai sur ma devanture DJ. Sur le neopixels j'affiche des animations à la con que je me suis codé (barres, carrés, drapeaux, pacman, effet pétillant comme sur la tour Eiffel...) et un vu mètre audio.

j'avais fait une vidéo du vu mètre quand je l'ai implémenté : https://www.youtube.com/shorts/8siH4fQw5Z0

c'est un peu loin du modélisme, mais si je peux t'aider ça sera avec plaisir, bien que note que mes compétences en codage sont assez hasardeuses.
Par contre je pense avoir très peu de limite en électronique (mes limites sont surtout dans la RF et dans les routages adaptés 3D type DDR5 par exemple), donc si tu as besoin n'hésite pas).

Sur ton A380, une utilisation typique des neopixels serait pour les feux de navigation, et si t'es chaud pour faire une piste d'aéroport, c'est la fête coté lights (tant en quantité qu'en couleurs).

Autre chose à propos de cet avion, si tu veux faire une maquette de folie, tu peux faire le MSN001 ; en version 2025 ! Actuellement ils le modifie pour lui greffer un cinquième réacteur...sur le fuselage. ça serait inédit d'avoir un modèle réduit de ce labo volant.

Bonjour :slight_smile:

Oui ça peut m'intéresser, merci. :slight_smile:

C'est ce genre de choses que je suis occupé à faire sur mon diorama en cours. C'est un diorama urbain futuriste avec des panneaux publicitaires, des enseignes lumineuses et des "hologrames", etc...

Comme je travaille à l'échelle 1/144, il me faut de très petits écrans, je trouve facilement des écrans 0,96' pour trouver plus petit je galère.

L'idée me plait. :slight_smile:

C'est celui là ?

La maquette est déjà disponible ?

Bonjour axelmaux

Ce programme a été développé pour gérer des feux tricolores réalisés avec des LED adressables.

On part d’un réseau de x nombre de LED sur un seul bus connecté sur la pin 12 (ledBusPin).

Quelque part, sur le bus, il y a 1 feu tricolore dont la première LED est la 12, un bout plus loin il y a une maison dont l’éclairage débute LED 16 et une rue avec 6 candélabres dont le premier est en position 20.
L'allumage des LED se fait par des commandes comme :
LED016w allume la LED 16 en blanc
SEQ012xOx Au feu tricolore on allume la LED du milieu en orange clignotant.
SEQ012rO. On ajoute la LED rouge en fixe.

SEQ020wwwwwW On allume les 6 candélabres en fixe.
SEQ020wwwxww On éteint le 4ème.
SEQ020.....b On passe le dernier en bleu sans changer les autres

Ces commandes peuvent être introduites depuis la ligne de commande du moniteur (115200) ou comme montré dans le programme.

Dans le programme il y a des exemples avec 2 boutons (bibliothèque JC_Button.h).
Le premier bouton allume une partie du feu tricolore, le deuxième, allume la rue et une longue pression sur le premier, éteint tout.

La syntaxe des ordres se trouve expliquée dans le sketch, au-dessus de void cmdExecute.
Les lettre des couleurs reconnues sont dans la variable ledColInitial.

Je te laisse essayer, à ta disposition pour toutes questions.

Le programme:

/*
    Name:       LEDneopixerLangage.ino
    Created:	01.05.2025
    Author:     jpbbricole
	Remarque:	Pseudo langage pour commander une bande de LED  adressables
				Commandes reconnues, voir au-dessus de void cmdExecute(String cmdRx)
*/
#include <Adafruit_NeoPixel.h> // Gestion des LED RGB Neopixel     https://github.com/adafruit/Adafruit_NeoPixel
#include <JC_Button.h> // https://github.com/JChristensen/JC_Button

//------------------------------------- LED
const int ledNombre = 100; // Nombre de LED
const int ledBusPin = 12; // Connexion du bus
const int ledBrightMax = 70;     // LED Luminosité maximum
int feuxLedNum = 0; // Numéro de la LED

Adafruit_NeoPixel leds = Adafruit_NeoPixel(ledNombre, ledBusPin, NEO_GRB + NEO_KHZ800); // Création de l'objet Neopixel signLed

const String ledColInitial = "RVBJOPWX"; // Initiale des couleurs X = tout éteindre
enum ledColorsIndex {ledColRed, ledColGreen, ledColBlue, ledColYellow, ledColOrange, ledColPurple, ledColWithe, ledColOff, ledColNombre};
uint32_t ledColors[ledColNombre]; // Valeurs RGB pour les couleurs (Tableau)

struct ledClignDef // Pour le clignotement des LE
{
	boolean etatOn; // Si LED on ou off
	int couleur; // Couleur de la LED, si ledColOff, pas de clignotement
};
ledClignDef ledsClign[ledNombre];

unsigned long ledsClignTempo = 250;  // Tempo en millisecondes
unsigned long ledsClignMillis = millis();  // Tempo en millisecondes, chrono

//------------------------------------- Boutons (btn)
const int btnPin[] = {6, 7}; // Connexion des boutons

Button btn[] = {Button (btnPin[0]), Button (btnPin[1])}; // Définition des boutons
const int btnNombre = sizeof(btn) / sizeof(btn[0]); // Nombre de boutons

void setup()
{
	Serial.begin(115200);
	
	for (int b = 0; b < btnNombre; b ++)
	{
		btn[b].begin();     // Démarrage des boutons
	}

    //-------------------------------- LED des feux
    ledInitialisation();
	
	ledsClignAllOff(); // Arrêter tout les clignotement

	Serial.println("\nSysteme de feux avec " + String(ledNombre) + " LED");

}

void loop()
{
	for (int b = 0; b < btnNombre; b ++) // Lecture des boutons
	{
		btn[b].read() ;
	}


	if (btn[0].pressedFor(1000))
	{
		cmdExecute("LEDOFF"); // Tout éteindre
	}
	else
	{
		if (btn[0].wasPressed()) // Si le bouton 0 a été pressé
		{
			cmdExecute("SEQ012rO"); // Allumer ^feux tricolore
		}
		else if (btn[1].wasPressed()) // Si le bouton 1 a été pressé
		{
			cmdExecute("SEQ020wwwwww"); // Allumer la rue
		}
	}
	
	//--------------------------------- Clignotement
	if (millis() - ledsClignMillis >= ledsClignTempo) // Si moment de clignoter
	{
		for (int l = 0; l < ledNombre; l ++)
		{
			if (ledsClign[l].couleur != ledColOff)
			{
				if (ledsClign[l].etatOn) // Si allumée
				{
					leds.setPixelColor(l, ledColors[ledColOff]);
				} 
				else
				{
					leds.setPixelColor(l, ledColors[ledsClign[l].couleur]);
				}
				leds.show();
				ledsClign[l].etatOn = !ledsClign[l].etatOn; // Inverser l'état
			}
		}
		ledsClignMillis = millis(); // Redémarrer le chrono
	}

	//--------------------------------- Commandes moniteur
	if (Serial.available()) // Si commande reçue
	{
		cmdExecute(Serial.readStringUntil('\n')); // Lire jusqu'à nouvelle ligne
	}
}

/*
	Commandes depuis le moniteur, les commandes sont sensibles à la casse.

	Commandes reconnues:
	LEDnnnc			allume la LED nnn à la couleur c (ledColInitial) 
					si c en majuscule la couleur clignote. Si c = . on ne fait rien sur cette LED
					si c = X, on éteind cette LED.
	SEQnnncCc...	Allumage d'une séquence de LED, 
					nnn est le numéro (de 0 à ..) de la première LED et cCc... couleur de la ou les LED suivantes
	LEDOFF			Tout éteindre
*/

void cmdExecute(String cmdRx)
{
	int cmdParInt = 0; // Paramètre integer
	
	cmdRx.trim(); // Nettoyage
	cmdRx.replace(" ", ""); // Sans espaces
	cmdRx.replace(",", "."); // Pour les décimales
	Serial.println("Commande recue: " + cmdRx);

	if (cmdRx == (F("LEDOFF")))
	{
		ledsClignAllOff();
		leds.clear();
		leds.show();
	}
	else if (cmdRx.startsWith(F("LED")))
	{
		cmdRx.replace(F("LED"), ""); // Ne garder que le paramètre
		ledAllumer(cmdRx.substring(0, 3).toInt(), cmdRx.substring(3, 4));
	}
	else if (cmdRx.startsWith(F("SEQ")))
	{
		cmdRx.replace(F("SEQ"), ""); // Ne garder que le paramètre
		ledAllumerSeq(cmdRx.substring(0, 3).toInt(), cmdRx.substring(3));
	}
	else if (cmdRx == (F("TEST")))
	{

	}
	else if (cmdRx == (F("TESTOFF")))
	{

	}
	else
	{
		Serial.println("Commande inconnue: " + cmdRx);
	}
}

void ledsClignAllOff()
{
	for (int l = 0; l < ledNombre; l ++)
	{
		ledsClign[l].couleur = ledColOff; // Arrêter clignotement
	}
}

//------------------------------------ LED
void ledAllumerSeq(int ledFirst, String ledColors) // Envoi d'une séquence de couleur sur une suite de LED
{
	for (int ls = 0; ls < ledColors.length(); ls ++)
	{
		ledAllumer(ledFirst + ls, ledColors.substring(ls, ls+1));
	}
}

void ledAllumer(int ledIndex, String ledColor) // Si ledColor est en majuscule = LED clignotante
{
	if (ledColor == ".") // Ne riuen faire
	{
		return;
	}
	
	String colorUper = ledColor;
	colorUper.toUpperCase();
	boolean ledClign = (ledColor == colorUper) ? true : false;

	int colorIndex = ledCouleurIndex(ledColor);
	if (colorIndex == -1) // Si couleur inconnue
	{
		Serial.println("Couleur inconnue " + ledColor);
	}
	else
	{
		leds.setPixelColor(ledIndex, ledColors[colorIndex]);
		leds.show();
		
		if (colorIndex == ledColOff) // Si extnction de la LED
		{
			ledsClign[ledIndex].couleur = ledColOff; // Arrêter le clignotement
		} 
		else
		{
			if (ledClign)
			{
				Serial.println("Couleur clignotante " + ledColor);
				ledsClign[ledIndex].couleur = colorIndex;
			}
			else
			{
				Serial.println("Couleur fixe " + ledColor);
				ledsClign[ledIndex].couleur = ledColOff; // Arrêter le clignotement
			}
		}
	}
}

int ledCouleurIndex(String ledColor) // Retourne l'index de la couléeur
{
	ledColor.toUpperCase();
	for (int c = 0; c < ledColNombre; c ++)
	{
		if (ledColInitial.charAt(c) == ledColor.charAt(0))
		{
			return c; // Couleur trouvée dans la liste
		}
	}
	return -1; // Pas trouvée
}

void ledInitialisation()
{
	ledColors[ledColRed] = leds.Color(255, 0, 0);     // Définition des couleurs
	ledColors[ledColGreen] = leds.Color(0, 255, 0);
	ledColors[ledColBlue] = leds.Color(0, 0, 255);
	ledColors[ledColYellow] = leds.Color(255, 255, 0);
	ledColors[ledColOrange] = leds.Color(255, 165, 0);
	ledColors[ledColPurple] = leds.Color(128, 0, 128);
	ledColors[ledColWithe] = leds.Color(255, 255, 255);
	ledColors[ledColOff] = leds.Color(0, 0, 0);

	leds.begin();
	leds.setBrightness(ledBrightMax);
	leds.clear();
	leds.show();
}

Bonne après-midi.
jpbbricole

Oui et non,
oui parceque c'est bien cet avion dans l'article.
non parceque le liens que tu mets ça concerne une modif moteur qu'il avait intégré pour avaler de l'huile de friture diluée à quelques % dans le kérosène.

Il va être modifié (encoooore) pour lui ajouter un moteur supplémentaire sur le coté du fuselage en position arrière haute. (entre l'aile et l’empennage).
Meme si la finalité de cette modif est hautement discutable, esthétiquement ça sera assez unique !
Il aura une livré peinture spéciale pour l'occasion, et devrait être testé au vortex de Blagnac (je passe souvent devant, je vous ferez des photos si on peut les mettre sur le forum).

https://www.futura-sciences.com/tech/actualites/technologie-airbus-va-tester-moteur-hydrogene-liquide-102157/

Ok merci! :slight_smile:

Il suffit d'un simple copié-collé ou un drag and drop dans la fenêtre d'édition du message.