Vous allez utiliser Scratch 3 en conjonction avec HOME IO :

  •   
    • Dans cette application ou page Scratch 3 non officielle, il n'est pas possible d'avoir un compte. Par contre, dans le menu "Fichier", il est possible de sauvegarder sur son ordinateur ou de charger depuis son ordinateur un programme !

      Vous devrez tout le temps penser à sauvegarder vos travaux dans le répertoire "Documents/Home IO", puis à déposer votre travail dans Moodle en fin de séance !
      Donc vous avez deux fichiers à déposer : l'un de Home IO finissant par ".xml" et l'autre de Scratch 3 finissant par ".sb3".
  •  
    • Revenons à cette page Scratch 3 de l'Université de Reims. En bas à gauche il y a une icône , cliquez dessus puis choisissez "Home I/O (FR)", vous aurez désormais dans la barre de gauche un groupe supplémentaire .
      Ce groupe contient les fonctions, tests et variables pour travailler avec Home IO !
    • Exemple POUR TESTER LA CONNECTIVITE ! : mettez en bleu le store 1 de la pièce A, puis exécutez le bloc  et vérifiez que le store monte !

Notez que pour utiliser des programmes réalisées dans Scratch 3 dans HOME IO, il faut que les capteurs et actionneurs correspondants soient configurés en mode externe, i.e. en bleu ! (dans HOME IO, il est possible de mixer les trois modes : câblé, console et externe.)
La documentation Home IO pour cet usage est ici : https://docs.realgames.co/homeio/fr/scratch3/

 

Mettons-nous à la programmation !

Tout d'abord, dans Scratch 3 : après avoir importé l'extension "Home I/O (FR)", sauvegardez votre projet dans votre ordinateur avec le nom "HOME IO - Scratch 3.sb3"
Dans HOME IO :, enregistrez votre programme dans une nouvelle simulation nommée "HOME IO - Scratch 3".
Ensuite pour penserez à enregistrer votre travail très régulièrement dans Scratch 3,  et  dans Home IO !

 

Placez votre programme dans un bloc "répéter indéfiniment", sinon le programme se termine après une seule exécution.
Aussi, dans chaque boucle "répéter indéfiniment", assurez vous qu'une temporisation d'environ 0.4s soit exécutée systématiquement, sous peine de plantage du tout, car sinon le programme peut envoyer à HOME IO des dizaines d'ordres par seconde ! De même, il faut que la lecture des états des boutons ne se fasse pas elle non plus plusieurs fois par seconde, sinon un appui sur un bouton peu être interprété comme plusieurs appuis...

Voici ce que cela donne : 

Dans ce cas, des appuis sur les boutons (murs, télécommande, etc...) doivent durer un temps suffisant... pour être pris en compte.

 ATTENTION - obligation :  tout programme doit être rédigé dans votre cahier de brouillon sous forme d'un  algorithme  (voir précédemment) avant d'être programmé.
De cette manière, vous comprenez ce que vous faites, et je peux vous aider. Sans cela, je ne peux pas vous aider.

 Algorithme réalisez ce petit programme pour débuter et voir à quoi sert une  variable d'état , ici elle permet de mémoriser dans notre programme l'état de l'éclairage : allumé ou éteint, pour le retrouver car il est impossible de le demander à Home IO, puis vérifiez que la lumière réagit bien !

Mettre la variable E-Lumiere à 0.
Eteindre la lumière E

Faire indéfiniment :
    Attendre 0.4 secondes.
    Si l’interrupteur 1 est appuyé
         Alors :
        Si E-Lumiere = 0
        Alors :
            Allumer la lumière E
            Mettre 
E-Lumiere à 1
        Sinon :
            Eteindre la lumière E
            Mettre 
E-Lumiere à 0
        Fin Si
    Fin Si

Séances Home IO - Scratch 3 :
    • pas de cahier = pas d'accès à l'ordinateur
    • pas d'algorithme écrit, juste et bien indenté = pas d'aide à l'écran de l'ordinateur.

 

Occupons-nous du garage :

Porte de garage (quatre étapes à suivre et valider) :

    1. Programmez l'ouverture / fermeture de la porte de garage avec le bouton 1 de la télécommande.
      Lorsque cela fonctionne, observez ce qui se passe lorsque vous appuyez sur le bouton de la télécommande pendant que la porte s'ouvre, ou se ferme ?
    2. Ordonnez votre programme pour que l'appui sur le bouton durant le déplacement de la porte provoque son ouverture !
    3. Maintenant, ajouter ce qu'il faut pour que la porte de garage s'arrête lorsqu'un obstacle est détecté.
    4. Enfin assurez vous que, lorsque la porte est stoppé dans sa course, elle s'ouvre systématiquement en cas d'appuie sur le bouton 1 de la télécommande.

Portail : faire de même avec le bouton 2 de la télécommande, mais en tenant compte des trois capteurs d'obstacle ! Choisissez une solution privilégiant la sécurité.
On peut par exemple, comme dans un ascenseur en cours de fermeture, forcer l'ouverture en cas de présence en zones capteurs infrarouges 1 ou 2, mais stopper prioritairement en cas de présence en zone 3 pour éviter un écrasement.
Attention : votre solution de gestion des obstacles sur chaque capteur infrarouge doit être rédigée sur votre cahier de brouillon AVANT de commencer leur programmation !

Lumière :

Faites de sorte que lorsqu'il y a une présence, la lumière s'allume, et sinon elle s'éteint.

Ensuite, lorsque cela fonctionne, faites de sorte que la lumière s'éteigne au bout de 10 secondes. Si avant ce délai, une présence est détectée, alors elle ne s'éteint pas.

Pour cela, il faut utiliser un compteur (créer une variable) et dans une boucle, compter chaque seconde durant laquelle il n'y a personne.

    • On peut, par exemple, initialiser le compteur à 10 lorsque l'on allume la lumière (présence détectée).
    • Lorsqu'il n'y a personne, on enlève 1 au compteur, chaque seconde (avec une temporisation de 1s de la boucle "Répéter indéfiniment").
    • S'il y a une présence, on remet le compteur à 10 et on allume la lumière.
    • Si le compteur arrive à 0, alors la lumière peut être éteinte !

Bonus - pour les meilleurs -> vous pouvez modifier le programme du portail pour faire ceci : le portail se referme automatiquement 10 seconde après une détection de passage en zones 1 + 2, ou sinon au bout d'une minute.

Une solution alternative pour les éclairages :

Programmez ceci : lorsque l'interrupteur 5 de l'entrée E est appuyé (ou le bouton 3 de la télécommande si vous voulez), la lumière 2 de la cuisine D doit changer d'état (s'allumer ou s'éteindre) ! Mais cette fois, tentez d'utiliser le capteur de lumière idoine pour faire votre choix.

Voici une démarche :

    • Mesurons la lumière dans les cas extrèmes !
      Ouvrez le store de la pièce D.
      Créez une variable D-Lumière pour ranger dedans la mesure de luminosité de la pièce D sous forme d'une tension représentant la quantité de lumière mesurée.
      Utilisez les blocs suivant pour effectuer les tests et mesures :

      Relevez les tensions obtenues de nuit et de jour (plein soleil, on peut même trouver un meilleur emplacement sur le globe terrestre !) avec la Lumière 2 de la pièce D éteinte et allumée.
      Utilisez le tableau suivant dans votre cahier:
        Nuit Jour (plein soleil)
      Lumière 2 pièce D éteinte tension ? tension ?
      Lumière 2 pièce D allumée tension ? tension ?
    • A partir de l'observation de ces valeurs, faite de sorte que un appuie sur l'interrupteur change l'état de la lumière en fonction de la valeur renvoyée par le capteur de lumière de la pièce.
      Posez-vous la question : à quelle valeur comparer la mesure de lumière pour savoir si la Lumière 2 de la pièce est allumée ou éteinte ?
      Testez et validez-en le bon fonctionnement de nuit comme de jour.
    • Cette solution à des limites. Tout d'abord, en réalité, ça ne fonctionnerait pas forcément aussi bien que cela. Et puis sa mise en œuvre est plus délicate que celle d'une variable d'état. Malgré cela elle présente aussi des avantages...
      Réfléchissez bien puis rédiger un petit texte expliquant les avantages et inconvénients et limites de cette solution dans une bulle de commentaire que vous créez sur le "Répéter indéfiniment" avec le bouton droit de la souris :

        

Un peu de régulation de température :

Maintenant, nous allons tester la régulation de température dans la chambre H.

Rendez-vous dans la chambre H et fermez la porte.

Réglez les températures Min à -10°C et Max à -5°C, et le vent à 50km/h, et l'humidité à 80%

Maintenant, vous allez programmer le thermostat pour piloter le radiateur de la chambre ainsi :

Utilisez la consigne de température de confort programmée sur le thermostat de la pièce pour faire ce programme : nommons la <consigne>.

Programme : le radiateur maintient une température minimum de <consigne>, avec une fenêtre d'hystérésis de 0,5°C (voir la page suivante pour comprendre ce terme), telle que la température de la pièce doit être comprise entre <consigne> et <consigne>+0,5°C : le radiateur s'allume à <consigne> et s'éteint à <consigne>+0,5°C.

Voici des blocs utiles de Scratch :

Testez en tenant en compte ce ceci : lorsque vous avancez le temps en mode accéléré dans Home IO, la temporisation de la boucle de Scratch s'exécute en temps "réel" (celui de notre ordinateur). Donc dans ce cas, la simulation n'est pas du tout réaliste. Pour pouvoir simuler en mode accéléré et observer le thermostat, il faut ne pas mettre de temporisation dans la boucle dans Scratch, et ne simuler que le programme du radiateur (et pas les autres), en ne cliquant que sur le "Répéter indéfiniment" du radiateur ! Et même comme cela, il ne faut pas dépasser le mode accéléré à trois flèches !

Expliquez dans un commentaire appliqué sur le "Répéter indéfiniment" pourquoi il faut une hystérésis, c'est-à-dire pourquoi on ne met pas dans la pratique juste l'allumage du radiateur s'il fait plus de <consigne>, en particulier dans une maison ou le chauffage est centralisé (gaz, pellets, fioul, etc) !?!

Un dernier test : mettez les deux températures extérieures au minimum, et l'humidité et le vent au maximum. Simulez en vitesse 3 et observez la température du thermostat de la chambre. Qu'observez vous ? Expliquez pourquoi ?

Pour les plus rapides : faites en sorte que la nuit la température soit maintenue deux degrés en dessous de la consigne de confort.

 

Pour aller plus loin :

    • créer une variable "jour_de_la_semaine" qui prend la valeur dimanche à samedi en fonction des informations "jour", "mois" et "année" ! Voici une page ressource (vous pouvez en trouver d'autres).
      Aide : dans la section de création des variables, vous pouvez créer une liste des jours de la semaine. Ainsi, vous aurez les index 1 à 7 de la liste qui correspondent aux noms "lundi" à dimanche". Pour le reste, à vous de jouer.
    • ...
Modifié le: lundi 7 avril 2025, 10:54