top of page
Difficile de faire plus simple : une seule pièce d'habitation et un toit plat.
Dimensions extérieures : environ 45 x 54 x 33 mm.
Quatre ouvertures dont une porte.
... et c'est tout.
Plus modeste, on peut pas.
Les murs ont une épaisseur de 3 mm.
Difficile de faire plus simple : une seule pièce d'habitation et un toit plat.
Dimensions extérieures : environ 45 x 54 x 33 mm.
Quatre ouvertures dont une porte.
... et c'est tout.
Plus modeste, on peut pas.
Les murs ont une épaisseur de 3 mm.
Pour imprimer cette petite maison j'ai choisi du fil PolyWood. C'est un PLA avec du bois qui donne à la pièce un aspect "bois mat" ou "terre sèche". Facile à enduire et à peindre.
Suivant l'imprimante utilisée, il sera nécessaire de réduire au papier de verre les dimensions du toit pour qu'il s'encastre correctement et vienne en appui sur les petites nervures qui ceinturent le bâtiment à l'intérieur des murs.
Pour éviter l'affaissement des linteaux l'impression est paramétrée avec "supports d'impression", c'est à dire que les porte et fenêtres (ben oui, ya qu'une porte ! ) seront remplies d'une sorte de nid d'abeille qui supportera les linteaux au moment de leur impression.
Il faudra ensuite désoperculer toutes les ouvertures pour les débarrasser de ces supports, puis ébavurer correctement.
La maison, avec son toit, et la porte partiellement désoperculée.
Note :
Cette petite maison peut être facilement imprimée à l'échelle "N".
Il suffit, dans CURA by Dagoma, d'utiliser les mêmes fichiers ".stl" et d'appliquer le coefficient de réduction 0,54. (Hé oui ! Pas besoin de redessiner).
L'impression prendra 20 minutes et 4 grammes de PLA pour un coût matière de l'ordre de 0,20€ !
Si l'échelle 1:43 vous tente, il suffit d'appliquer un coefficient x2 dans CURA.
Il faudra 5 heures d'impression et 73 grammes de PLA (moins de 4€).
C'est encore jouable.
Ah ! petite remarque : le bâtiment est marqué "HUGO 2017" à l'intérieur.
Mon petit fils voulait que "son œuvre" soit signée ! (c'est la seule chose que j'ai faite sur ce modèle).
Téléchargements :
Petite maison en adobe
Un de mes petits fils voulait absolument dessiner et imprimer une maison en 3D.
J'ai orienté son choix vers un modèle simple : une petite maison de paysan modeste de la région de Santa Fe, en adobe, qui va me servir sur mon réseau. Tant qu'à faire...
Nombre de visites :
Compteur de visites
MAISON «VIVANTE» n°2
Éclairage aléatoire de plusieurs pièces d'un bâtiment
Le programme est développé avec ARDUBLOCKLY, version
«in line» accessible ici :
https://ardublockly.embeddedlog.com/demo/#
Date de création : 27/01/2021
Dernière modification : 08/12/2021
00:00 / 00:16
Nombre de visites :
10
L'icône ci-contre indique que nous allons utiliser CocoBLOCKLY, un équivalent de ARDUBLOCKLY, mais avec beaucoup plus de fonctions.
CocoBLOCKLY fonctionne « en ligne ».
PROJET
Dans ce nouveau programme, le but est de s'affranchir de la création et du remplissage fastidieux des tables horaires.
Le but est aussi de voir s'il est possible de modifier le minimum de paramètres pour adapter le programme à un nombre différent de sorties.
VOICI LE PROGRAMME COMPLET
-
1 seule liste qui contient les numéros des sorties de l'ARDUINO utilisées pour les LED ;
-
1 fonction de test pour capter l'état d'un contact sur l'entrée n°5 ;
-
... dans laquelle une fonction «chronomètre» exécute la boucle de comptage à intervalle d'une «heure fictive» (ici, 4 secondes pour la phase de mise au point) ;
-
1 boucle de comptage pour lire la liste des sorties et commander leur état, et cela quel que soit le nombre de sorties.
Ben ! Te réjouis pas trop vite.
Y'a rien dans ton programme...
T'es sûr que ça fonctionne ?
Bien sûr !
Je vais t'expliquer...
LA LISTE
La liste nommée «LISTE_SORTIES» contient les numéros des broches de sorties sur lesquelles seront connectées les 4 LED.
Ici ce sont les sorties 2, 3, 4 et 6, dans cet ordre.
Chaque n° de sortie est donc rangé à une position précise, appelée «index».
-
la sortie n°2 est à l'index «0» ;
-
la sortie n°3 est à l'index «1» ;
-
...
-
la sortie n°6 est à l'index «3».
C'est grâce à cet index que le programme pourra connaître le numéro de chaque sortie des LED.
METTRE UNE SORTIE à «HIGH» ou «LOW»
de façon ALÉATOIRE
Dans le programme on a créé une variable «SORTIE_COURANTE» qui contiendra le numéro de la sortie en cours de traitement.
Cette sortie prendra soit la valeur «0», soit la valeur «1», c'est à dire «LOW» ou «HIGH», c'est à dire «éteinte» ou «allumée».
Ceci est obtenu grâce à la fonction «random integer from 0 to 2 is even» qui renvoie de façon aléatoire un nombre inférieur à 2, càd soit «0», soit «1».
La fonction «set digital pin # SORTIE_COURANTE» se charge d'appliquer ce résultat à la sortie en cours de traitement.
(le signe «#» signifie «n°» ).
⇒ la LED connectée sur «SORTIE_COURANTE» sera donc allumée ou éteinte suivant que la valeur aléatoire sera «1» ou «0».
APPLIQUER CETTE FONCTION ALÉATOIRE SUCCESSIVEMENT À CHACUNE DES SORTIES DE LA LISTE_SORTIES
Il faut traiter successivement chacune des sorties dont les numéros sont stockés dans la liste, de l'index «0» à l'index maxi.
Ce traitement s'effectue grâce à une boucle de comptage décrite plus bas.
Cette boucle a besoin de connaître :
-
le numéro de la sortie situé à l'index «0» de la liste ;
-
le numéro de la sortie situé au dernier index de la liste ;
Récupérer le numéro de la première sortie, celui situé à l'index «0» de la liste «LISTE_SORTIES» :
Avec la LISTE_SORTIES ci-dessus, cette fonction vaut (ou «renvoie» ) la valeur «3», qui est effectivement le premier numéro de sortie inscrit dans la liste.
Récupérer le numéro de la dernière sortie, celui situé à l'index maxi de la liste «LISTE_SORTIES» :
Il suffit de connaître le numéro maxi de l'index de la liste.
Une instruction fait cela automatiquement pour nous : «get item at [the length of LISTE_SORTIES – 1]»
⇒ dans notre cas, cette instruction prendra la valeur «3».
On inclut cette double instruction en lieu et place de la valeur «0» de la fonction :
«from LISTE_SORTIES get item at [..]»
Ainsi construite, cette instruction restera valable quel que soit le nombre de sorties présentes dans LISTE_SORTIES
Mais au fait, pourquoi «the length of LISTE_SORTIES [– 1] ?
J'explique :
-
la fonction ci-contre calcule la longueur de la liste, càd le nombre d'éléments qui y sont stockés, quel que soit le nombre de sorties utilisées, et quel que soient leurs numéros.
Dans le cas de la liste ci-dessus cette longueur vaut 4.
Aïe ! On a vu plus haut que l'index maxi vaut 3.
Qu'à cela ne tienne : on inclut «the length of...» dans une instruction mathématique qui permet d'effectuer – dans notre cas – une soustraction :
-
la fonction ci-contre soustrait «1» à la valeur de la taille de la liste et donne donc automatiquement la valeur maximale de l'index : 4 – 1 = 3. Gagné !
-
la fonction complexe renvoie alors le numéro de la sortie stocké dans la dernière position de la liste c'est-à-dire à l'index «maxi».
Fonction complète de scrutation des numéros de sorties :
La boucle de comptage ci-dessous va donc parcourir LISTE_SORTIES, de l'index «0» à l'index «maxi», et récupérer l'un après l'autre les numéros des sorties, quel que soit leur nombre.
Et bien entendu, à chaque tour, l'instruction contenue dans la boucle va attribuer de façon aléatoire la valeur «LOW» ou «HIGH» à la sortie correspondante grâce à l'instruction ci-dessous :
«L'HEURE FICTIVE»
Ce groupe de blocs est le CŒUR du PROGRAMME
La boucle «count with...» est incluse dans une boucle de comptage de temps «Every 4 secondes» (bloc de couleur jaune, englobant la boucle de comptage), c'est-à-dire :
«toutes les 4 secondes, faire ce qui suit».
«Every x secondes» est la durée de «l'heure fictive».
En phase de mise au point je l'ai réglée à 4 secondes.
En utilisation normale ce temps sera réglé à votre convenance entre 1 et 10 minutes, c'est-à-dire entre 60 et 600. (mais on peut aller au delà).
LE TEST DU CONTACT MARCHE / ARRÊT
On pourrait se contenter du programme précédent. Il est parfaitement fonctionnel, mais le cycle d'éclairage est permanent.
Si par contre on désire activer ou désactiver le cycle pour éviter d'éclairer l'intérieur du bâtiment en plein jour (par exemple) :
-
on ajoute un contact sur une entrée de l'ARDUINO. Ici, on utilise l'entrée n°5 ;
-
on englobe la partie «CŒUR DU PROGRAMME» dans une fonction qui teste ce contact ;
-
on ajoute la partie du programme qui force la mise à «LOW» de toutes les sorties si le contact est ouvert.
(else...)
MISE à «LOW» de TOUTES LES SORTIES
C'est ni plus, ni moins que le «cœur du programme» auquel on a retiré la fonction «random integer from...» pour la remplacer par une forçage à «LOW» de toutes les sorties.
... ET DE NOUVEAU LE PROGRAMME COMPLET
avec les commentaires.
LE CODE C++
(CLIC sur l'image pour agrandir)
Étonnant !
Ce programme paraît tout simple et pourtant il comprend environ 55 lignes de code.
Ce sont les boucles de comptage qui sont très volumineuses.
La fonction «boucle de comptage» en version BLOCKLY a été conçue pour être universelle : elle compte aussi bien en valeurs croissantes qu'en valeurs décroissantes sans qu'on ait à se soucier du signe de l'incrément.
D'autre part un contrôle de la cohérence des valeurs de début et de fin est effectué avant la boucle elle-même.
Cette préparation automatique prend de la place.
Si on avait programmé nous-même ces boucles « en lignes de code », le code de ces 2 boucles tiendrait sur 2 lignes au lieu d'une vingtaine dans le cas présent.
Cela étant dit, le code généré par BLOCKLY est de la très belle programmation !
ET SI MAINTENANT ON VEUT AJOUTER
2 AUTRES SORTIES ?
Voilà ce qui change : 2 éléments de plus dans la liste des numéros de sorties.
Le reste du programme ne change absolument pas !
Pas mal, non ?
CONCLUSION
Ici encore, mieux vaut programmer cette petite application en BLOCKLY plutôt qu'en lignes de code !
Petit bémol : «l'heure fictive» est obligatoirement exprimée en secondes.
La fonction «Every x secondes» n'a pas de petite sœur exprimée en minutes.
Note concernant la fonction C++ « pinMode(..., INPUT) ; »
Au tout début du code généré en C++ par BLOCKLY, dans void setup(), on remarque l'instruction pinMode(5, INPUT) ;
Cette instruction teste l'état de l'entrée n°5 sur laquelle est connecté le contact.
Mais...
Lorsque le contact est ouvert, quel est l'état de cette entrée ? «0» ou «1» ?
Eh bien voilà une question intéressante.
Une entrée «en l'air», c'est à dire non reliée à un potentiel précis par le contact, risque fort de n'être ni à «0» ni à «1» !
Solutions :
-
soit on câble une résistance de 10 à 22 kΩ entre l'entrée n°5 et le «+5volts».
Ainsi, lorsque le contact est ouvert, l'entrée n°5 est fixée à «+5V», càd au niveau logique «HIGH». -
soit on utilise une propriété de l'ARDUINO qui permet de connecter «en interne par le programme» une résistance entre l'entrée et le «+5volts».
Dans le langage électronique, ce type de résistance est appelée «résistance pullup».
Si donc on veut être rigoureux et ne pas avoir d'ennuis, avant de téléverser le programme, on complétera l'instruction, directement dans le texte en C++ :
« pinMode(5, INPUT) ; » qui deviendra « pinMode(5, INPUT_PULLUP) ; »
Note concernant la fonction Blockly «Every ...seconds ; »
Cette fonction est construite à partie de la fonction «milli()» du langage C++.
Son immense intérêt est que, contrairement à la fonction «wait » de Blockly, la fonction «Every ... seconds» n'est pas bloquante.
En effet, pendant toute la durée d'une fonction «wait» («delay() ; » en C++ ), aucune autre action ne peut être effectuée.
Dans le cas présent, si on utilisait la fonction «wait» pour la durée de l'heure fictive, on serait dans l'impossibilité d'arrêter le cycle immédiatement en actionnant le contact.
Pour que le cycle puisse s'arrêter :
-
il faudrait tout d'abord que le contact soit un switch à contact non fugitif.
-
ensuite l'arrêt du cycle n'interviendrait qu'à la fin de l'heure fictive en cours.
Notes concernant «PULLUP»
Certaines versions de Blockly Arduino proposent un bloc qui permet de sélectionner l'option «PULLUP».
C'est le cas de la version proposée par http://blockly-arduino.ac-rouen.fr/
Notes concernant «PULLUP»
Certaines versions de Blockly Arduino proposent un bloc qui permet de sélectionner l'option «PULLUP».
C'est le cas de la version proposée par http://blockly-arduino.ac-rouen.fr/
Dommage qu'aucune de toutes ces versions ne propose la totalité des blocs existants.
Là ce serait vraiment génial !
Autre site (celui-là je l'aime bien) :
http://greich.fr/BlocklyDuino/
-
le jeu de blocs est très complet ;
-
l'option «PULLUP» existe ;
-
le bloc «LISTE» génère un code correct, contrairement à CocoBLOCKLY ;
-
c'est en français !
-
infrarouge, servo, moteurs PaP.
Encore un :
https://code.makewitharduino.com/
Réalisations avec BLOCKLY
bottom of page