Quelle différence trouvez-vous entre ces deux questions?
- Quel temps fait-il?
- Pleut-il?
Bien, il y a pas mal de différences: la première contient 3 mots, et la seconde un seul, par exemple.
Mais la véritable raison, c'est d'attirer votre attention sur la première question, car elle est ce qu'on appelle une question ouverte; Il peut faire beau, venteux, brumeux ou toutes autres sortes d'événements.
La seconde question n'a que deux réponses possibles: Oui ou Non.
Lorsque vous programmez votre robot, vous devez comprendre que la plupart du temps, il ne peut vous renseigner que par ces deux réponses: Oui ou Non. En d'autres circonstances, il ne peut comprendre seulement qu'une réponse Oui ou Non. Et cette façon de renseigner ou de comprendre se fera par les capteurs qui sont justement conçus pour réagir dans ce sens.
C'est ce que je vais essayer d'expliquer au cours de cette leçon.
Mais d'abord, rappel ici des règles:
* Première règle: familiarisez-vous avec les outils de programmation.
* 2ème règle: les capteurs doivent être connectés aux ports d’entrée (1,2,3 & 4) et les moteurs doivent être connectés aux ports de sortie (A, B & C).
* 3ème règle: Un bloc ne peut accomplir qu'une seule tâche à la fois. Il faut autant de blocs que de tâches à accomplir.
* 4ème règle: un programme NXT-G se termine une fois le dernier bloc exécuté.
* 5ème règle: les seules données qui peuvent circuler entre les blocs sont du TEXTE, des NOMBRES et du type LOGIQUE - et seulement ces trois.
L'un ou l'autre.
Reprenons notre travail avec BONG et jouons à nouveau au jeu des questions/réponses.
LEO

(BONG ne réagit pas et reste immobile…)
LEO

(BONG ne réagit pas et reste immobile…)
Humm… BONG me semble peu réceptif aujourd'hui! Je crois me souvenir que BONG préfère répondre aux questions par Oui ou par Non. Essayons autrement.
LEO

(BONG

LEO

(BONG

Bon, j'ai l'impression d'avancer. BONG préfère communiquer avec moi par des Oui et des Non en réponses à mes questions.
Une autre façon de dire cela, est que BONG préfère communiquer à l'aide de réponses logiques: une réponse logique est tout simplement Oui ou Non.
Poursuivons notre conversation:
LEO

(BONG

LEO

(BONG

Apparemment, les capteurs de BONG savent envoyer une réponse à BONG qui peut à son tour me la transmettre. BONG "écoute" les réactions des capteurs, et répond par Vrai ou Faux.
En quoi tout cela concerne-t-il la programmation?
Et bien, retenez ceci: votre robot NXT peut envoyer et recevoir des réponses logiques à partir des capteurs, moteurs, boutons et autres dispositifs.
Voici un exemple:


Le bloc Capteur tactile que vous apercevez a son Hub déployé. Lorsque vous survolez à l'aide de la souris la petite icône v/x, vous voyez apparaître une "bulle" d'aide Oui/Non.
Cela vous informe que le plot de sortie peut, par le moyen d'un fil de données fournir une donnée de type logique à un autre bloc de programmation.
Mais, comment savoir si la sortie est un Oui ou un Non?
Facile, il suffit d'examiner le panneau de configuration du bloc Capteur tactile. La réponse réside dans le choix que vous ferez dans la zone "action". Ici, "Enfoncé" est sélectionné. Donc si le bouton est enfoncé, il enverra au bloc voisin une valeur logique "Oui" ou "Vrai" (les 2 termes ayant souvent la même signification).
Le bloc voisin est un bloc Variable (que nous étudierons plus tard) dont le type est logique; il est paramétré pour écrire une donnée logique dans sa mémoire (avec une valeur de défaut "Faux" identique à "Non").
Tant que le bouton du capteur tactile est relâché (valeur Faux), le bloc Variable garde dans sa mémoire une donnée logique "Faux".
Quand le capteur tactile est appuyé, il envoie une valeur "Vrai" au bloc Variable, qui reçoit par le canal du fil de données cette valeur "Vrai". Cette nouvelle valeur remplace la précédente et elle est ensuite stockée dans la mémoire du bloc Variable pour un autre usage.
Rappelez-vous, quand vous connectez des blocs de programmation par des fils de données, ces fils ne seront effectifs que s'ils relient impérativement des plots de même type (Logique, Texte, Nombre).
J'attire votre attention sur certains blocs qui par défaut contiennent une valeur Vrai ou Faux. Cette valeur peut être inversée par vos soins pour les besoins de vos programmes. Dans le cas de notre exemple, elle n'a pas été modifiée.
Le type de données Logique se retrouve dans plusieurs blocs, et en particulier dans les blocs de capteurs.

C'est dans l'utilisation des blocs Boucle et Commutateur que les données du type Logique affirment leur puissance. Elles sont très utiles quand un robot doit décider une action de sa propre initiative. Grâce à ces blocs, il peut développer des comportements complexes avec un meilleur contrôle de lui-même.
Le robot peut scruter des capteurs, moteurs ou autres sources d'entrées, et en fonction des réponses Oui/Non, prendre des décisions pour les actions suivantes.
Réactions
Votre kit Mindstorms NXT comporte une collection de moteurs et de capteurs; de plus, la brique NXT dispose aussi de boutons et de 3 minuteurs. Seriez-vous surpris d'apprendre que ces éléments sont susceptibles de fournir des informations à la brique, simplement par réaction?
Pour les capteurs, cela est évident puisqu'ils sont conçus pour répondre à des sollicitations externes, comme la lumière, le contact ou le son, et transmettent ces réactions au NXT. Mais, qu'en est-il des moteurs? Et comment un minuteur peut-il être utilisé comme entrée ou communiquer ses réactions à la brique? C'est ce que je tenterai d'expliquer dans ce qui suit.
Quelles sont vos conditions?
Nous commencerons avec ce mot: "CONDITION".
Prenons un exemple: Les feux de circulation automobiles sont soumis à trois conditions: ils peuvent-être rouge, jaune ou vert. Un interrupteur électrique ne comporte que deux conditions de fonctionnement: allumé ou éteint. A partir de ces deux exemples, nous allons soumettre à BONG quelques pseudo-codes.
LEO

LEO

Dans ces deux cas, je présume que BONG a des yeux et qu'il peut voir les feux ou l'interrupteur. Si BONG n'a pas d'yeux, il faut alors trouver un moyen pour que les feux de trafic ou l'interrupteur transmettent leur état à BONG. Ils pourraient alors communiquer leurs réactions, ou leurs entrées, à BONG.
Demander à des feux de trafic de fournir une entrée, n'est pas réaliste, mais, puisque le NXT est en mesure de recevoir des informations à partir des capteurs, modifions les pseudo-codes:
LEO

LEO

LEO

Les moteurs peuvent, eux aussi fournir des informations sur leur état.
LEO

LEO

J'ai signalé plus haut que le NXT disposait de 3 minuteurs internes, plus 3 boutons. Je pourrais aussi écrire ce pseudo-code:
LEO

Ou encore,
LEO

Bien, vous constatez que les capteurs, moteurs, boutons et minuteurs, peuvent fournir des données en entrées au NXT pour contrôler d'autres actions ( DEPLACER, SON, et autres blocs).
Lorsque vous programmerez vos robots ils devront accomplir des actions basées sur les conditions de ces dispositifs. Tout comme un interrupteur qui ne connaît que 2 états, vous devez connaître les différentes conditions liées aux capteurs, moteurs, boutons et minuteurs et qui peuvent-être transmises au NXT.
Paramétrer les capteurs.
Quelques remarques préliminaires:
En premier, les capteurs détectent le changement d'une condition qui peut-être le niveau de luminosité, le volume d'un son, la position (mouvement). Le capteur ne fait qu'attendre ce changement. Le capteur photosensible , par exemple, peut détecter un changement du niveau d'éclairement d'une chambre.
Deuxièmement, les blocs de programmation ne peuvent seulement répondre qu'à une condition à la fois. Un capteur photosensible, par exemple, ne peut-être configuré pour répondre à une valeur en-dessous de 70 et au-dessus de 30. Pour réaliser ces 2 conditions, il faudra utiliser 2 blocs capteur photosensible dans votre programme.
En fait, les capteurs ne fournissent qu'un type de réponse logique: Vrai ou Faux.
Dans l'exemple du trafic autos, on peut supposer que chaque véhicule dispose d'un capteur fixé sur son toit. Il est programmé pour réagir aux couleurs des feux. Les véhicules se déplaceront si la couleur est au vert et s'arrêteront au rouge. Ils ralentiront si le feu passe au jaune.
Ces capteurs ne devront détecter qu'une des 3 conditions: vert, rouge ou jaune. Un capteur NXT ne pouvant répondre qu'à une condition à la fois, il faudra donc utiliser 3 capteurs:
* si le 1er capteur détecte le vert, le véhicule continuera son avancée,
* si le 2ème capteur détecte le jaune, le véhicule ralentira,
* si le 3ème capteur détecte le rouge, le véhicule s'arrêtera.
A remarquer qu'une seule condition peut-être Vrai à un moment donné; les feux ne pouvant être en même temps vert et rouge par exemple. Il faudra donc procéder par paire en éliminant les incompatibilités (rouge et jaune ne peuvent pas provoquer un déclenchement d'action).
Capteur tactile

Notez que le port de connexion est le 1 par défaut. Mais rien ne vous empêche d'en choisir un autre.
Si vous acceptez le choix de défaut pour tous les capteurs, vous pourrez alors vous constituer une petite bibliothèque de programmes réutilisables quels que soient les robots conçus( à condition qu'ils soient tous câblés de la même manière).
Dans la zone Action, 3 cas sont envisagées; à remarquer que le choix Heurté signifie Enfoncé et Relâché rapidement (moins d'une demie seconde entre les deux). Ce choix est très utile quand il s'agit de compter par exemple des impulsions.
Enfin, n'oubliez pas qu'en survolant à l'aide de la souris sur les plots, vous affichez une "bulle" précisant le type de donnée.

Ce tableau est extrait du Menu Aide du logiciel NXT-G et il résume les valeurs transitant par les plots reliés par des fils de données.
Capteur Sonore
Ce bloc est un détecteur de sons. Il peut, via des fils de données, envoyer le niveau sonore actuel, ainsi qu'un signal logique (vrai/faux) qui varie selon que le niveau sonore actuel est supérieur ou inférieur à un point de déclenchement.

Le port de connexion de défaut est le 2.
Le point de déclenchement est la valeur précise, dans une plage de nombres, où se produit un changement de conditions. Par exemple, vous pouvez programmer votre robot pour qu'il n'avance que si le niveau sonore dépasse 40%. Le point de déclenchement vaut dans ce cas 40.
Dans la zone Comparer, vous choisissez une plage de valeurs de 1 à 100 à l'aide de la glissière, ou en entrant une valeur dans la zone de saisie.
Pour définir la plage (au-dessus ou en dessous du point de déclenchement) qui générera le signal « vrai », utilisez les cases d'option ou le menu déroulant. La partie « vrai » de la plage est colorée et la partie « faux » est grisée.
Par défaut, le bloc Capteur sonore est paramétré pour qu'un niveau sonore supérieur à 50% génère un signal « vrai ». Le bouton d'option à droite de la plage est activée et la glissière est réglée sur 50. Pour activer les parties « vraies » de la plage (définir les valeurs sous 50% comme étant « vraies »), activez le bouton d'option de gauche.
Astuce: réglage du point de déclenchement pour un capteur sonore
si vous voulez qu'un applaudissement sonore génère le signal « vrai », applaudissez à plusieurs reprises et observez les valeurs de niveau sonore affichées dans la zone jaune de rétroaction. Si vos applaudissement génèrent des niveaux sonores d'environ 80%, fixez la valeur de déclenchement à 70. Ce faisant, seuls les niveaux sonores au-delà de 70% (comme vos applaudissements) génèreront un signal « vrai ». Les sons moins forts seront ignorés.
Le point de déclenchement peut également être défini de manière dynamique via un fil de données en entrée.

Le capteur sonore offre à votre robot la faculté d’ « entendre » des sons. En vérité il n’entend pas comme un être vivant, mais il est capable de percevoir une pression acoustique, qui se traduit par une vibration sonore à un niveau plus ou moins fort. Cette pression est exprimées en décibels, unité de mesure.
Il existe deux types de décibels :
* Le décibel ajusté (en abrégé dBA) qui exprime une sensibilité adaptée à celle de l’oreille humaine. C’est celle que vos oreilles peuvent entendre.
* Le décibel standard (en abrégé dB) adapté à tous les sons, y compris ceux que l’oreille humaine ne peut pas entendre. On peut citer par exemple les sons à fréquences élevées auxquels les chiens sont sensibles. Tous les sons, dans ce cas, sont mesurés d’une manière identique.
La mesure des niveaux de pression étant d’une grande complexité qu’il est impossible d’aborder ici, les valeurs du capteur sonore sont affichés sur l’écran du NXT en pourcentages (%). A titre d’exemple, 4-5% correspond à un local silencieux. Un relevé de 5-10% s’obtient si une personne parle à une certaine distance de l’appareil. 10-30% correspond à une conversation normale à proximité du capteur, ou à de la musique d’ambiance à volume normal. Enfin, on obtient des relevés de 30-100% si des personnes crient ou si de la musique est diffusée à un volume élevé.
Capteur Photosensible
Ce capteur détecte la lumière ambiante (avoisinante). Il peut, via des fils de données, envoyer la valeur actuelle correspondant à la luminosité mesurée, ainsi qu'un signal logique (vrai/faux) qui varie selon que la valeur actuelle de la luminosité est supérieure ou inférieure à un point de déclenchement.

Le port de connexion de défaut est le 3.
Le point de déclenchement est la valeur précise, dans une plage de nombres, où se produit un changement de conditions. Par exemple, vous pouvez programmer votre robot pour qu'il n'avance que si la luminosité dépasse 60%. Le point de déclenchement vaut dans ce cas 60.
La zone Comparer s'utilise comme celle du capteur sonore.
Astuce: réglage du point de déclenchement pour un capteur photosensible
Si vous voulez qu'une torche dirigée vers votre robot génère le signal « vrai », dirigez la torche vers le robot à plusieurs reprises et observez les valeurs de luminosité affichées dans la zone jaune de rétroaction. Si la torche génère des niveaux de luminosité d'environ 80%, fixez la valeur de déclenchement à 70. Ce faisant, toute lumière au-delà de 70% (comme celle de la torche) génèrera un signal « vrai ». La lumière plus faible sera ignorée.
Si vous activez la case à cocher « Générer de la lumière », le capteur photosensible allume sa petite source lumineuse et détecte cette lumière si elle est réfléchie dans sa direction. Cette fonction est particulièrement utile dans des conditions lumineuses difficiles, comme une pièce très éclairée. Cette fonction permet au capteur photosensible de faire office de télémètre à courte portée. Lorsque l'option « Générer de la lumière » est activée, le capteur photosensible détecte un niveau de lumière réfléchie plus élevé s'il approche d'un objet réfléchissant. Il est dès lors possible d'utiliser ce capteur pour éviter de heurter des obstacles.
Le point de déclenchement peut également être défini de manière dynamique à l'aide d'un fil de données en entrée.

Capteur à Ultrasons
Ce bloc peut détecter des objets distants, au maximum, d'environ 250 cm. Il peut, via des fils de données, envoyer la valeur actuelle correspondant au relevé ultrasonique actuel, ainsi qu'un signal logique (vrai/faux) qui varie selon que le relevé ultrasonique actuel est supérieur ou inférieur à un point de déclenchement.

Le port de connexion de défaut est le 4.
Le point de déclenchement est la valeur précise, dans une plage de nombres, où se produit un changement de conditions. Par exemple, vous pouvez programmer votre robot pour qu'il attaque quand un objet s'approche de moins de 50 cm de la portée maximale du capteur d'ultrasons. Le point de déclenchement vaut dans ce cas 50.
La zone Comparer s'utilise comme celle du capteur sonore.
Astuce: réglage du point de déclenchement pour un capteur d'ultrasons
Si vous voulez qu'un intrus approchant de votre robot génère le signal « vrai », orientez le capteur d'ultrasons vers l'intrus (ou tout objet possédant la même réflectivité) en plaçant celui-ci à différentes distances du capteur. Observez les relevés ultrasoniques affichés dans la zone jaune de rétroaction. Si l'intrus génère un relevé ultrasonique d'environ 127 cm à la distance la plus proche selon laquelle vous voulez l'autoriser à approcher du robot, fixez la valeur de déclenchement à 127. De la sorte, si un objet possédant la même réflectivité s'approche de plus de 127 cm, le bloc Capteur d'ultrasons génère un signal « Vrai ». En connectant un fil de données à un bloc Déplacer ou Moteur, vous pouvez ordonner à votre robot d'attaquer ou de reculer.
Les valeurs peuvent être affichées en centimètres ou en pouces.
Si vous activez le bouton d'option à gauche de la glissière, le bloc sera déclenché lorsqu'il détecte un objet plus proche que la distance de déclenchement ; activez le bouton d'option à droite pour déclencher le bloc lorsqu'il détecte un objet plus éloigné que cette distance. Utilisez la glissière pour définir la distance de déclenchement, ou entrez directement une valeur dans la zone de saisie (0 à 250 si le bloc est configuré en centimètres et 0 à 100 s'il est configuré en pouces).
La plage de détection se situe entre 0 (distance la plus proche) et 255 cm (distance la plus éloignée) environ (précision +/- 3 cm).
N'oubliez pas que les surfaces très réfléchissantes peuvent être détectées à de plus grandes distances que les surfaces non réfléchissantes.
Remarque : si plusieurs capteurs d'ultrasons fonctionnent dans la même pièce, il se peut qu'ils perturbent leurs relevés respectifs.
Vous pouvez contrôler le bloc Capteur d'ultrasons de manière dynamique en connectant à son plot de données des fils de données (provenant des plots de données d'autres blocs).

A suivre…
A+
Roboleo