<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="fr">
	<id>https://fablabo.net/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Jean-Marc+CHARLOT</id>
	<title>fablabo - Contributions [fr]</title>
	<link rel="self" type="application/atom+xml" href="https://fablabo.net/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Jean-Marc+CHARLOT"/>
	<link rel="alternate" type="text/html" href="https://fablabo.net/index.php/Sp%C3%A9cial:Contributions/Jean-Marc_CHARLOT"/>
	<updated>2026-05-06T09:07:18Z</updated>
	<subtitle>Contributions</subtitle>
	<generator>MediaWiki 1.42.3</generator>
	<entry>
		<id>https://fablabo.net/index.php?title=AeroTempo&amp;diff=35732</id>
		<title>AeroTempo</title>
		<link rel="alternate" type="text/html" href="https://fablabo.net/index.php?title=AeroTempo&amp;diff=35732"/>
		<updated>2021-12-26T18:19:54Z</updated>

		<summary type="html">&lt;p&gt;Jean-Marc CHARLOT : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Projet&lt;br /&gt;
|status=Fonctionnel&lt;br /&gt;
|status_pub=Brouillon&lt;br /&gt;
|description=Temporisateur d&#039;aérateur de toilettes&lt;br /&gt;
|license=CC-by-sa-3.0 - Creative Commons Attribution CC-by-sa-3.0 France&lt;br /&gt;
|contributeurs=Jean-Marc CHARLOT,&lt;br /&gt;
|ingrédients=Électronique, Bois,&lt;br /&gt;
|source=AeroTempoV0e.ino&lt;br /&gt;
}}&lt;br /&gt;
Cet article décrit la réalisation d&#039;un temporisateur pour aération de toilettes.&lt;br /&gt;
Le principe est de détecter l&#039;entrée dans les toilettes pas l&#039;allumage de la lumière.&lt;br /&gt;
Cet allumage déclenche une première temporisation à l&#039;issue de laquelle, si la lumière ne s&#039;éteint pas, l&#039;aérateur se déclenche pour une seconde temporisation.&lt;br /&gt;
A l&#039;issue de cette seconde temporisation, si la lumière ne se rallume pas, l&#039;aérateur s&#039;éteint.&lt;br /&gt;
&lt;br /&gt;
Techniquement, l&#039;AéroTempo est basé sur un automate d&#039;états finis à 4 états et 4 transitions.&lt;br /&gt;
&lt;br /&gt;
Les 4 états : Off, T1, On, T2&lt;br /&gt;
&lt;br /&gt;
Les 4 transitions : LightOn, LightOff, FinT1, FinT2&lt;br /&gt;
&lt;br /&gt;
Le schéma de l&#039;automate est le suivant :&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
Automate.jpg|Le schéma de l&#039;automate d&#039;états finis de l&#039;AéroTempo.&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Le code source commenté à héberger sur une carte Arduino Uno ou Duomilanove :&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
/******************************************************&lt;br /&gt;
   AeroTempo : Temporisateur pour aérateur de toilettes&lt;br /&gt;
   Principe : 1) A la détection de l&#039;apparition de la lumière dans les toilettes :&lt;br /&gt;
              2) - mise en route d&#039;une première temporisation t1,&lt;br /&gt;
              3) - mise en route du ventilagteur/extracteur via un relai 220v&lt;br /&gt;
              4) A la disparition de la lumière :&lt;br /&gt;
              5) - mise en route d&#039;une seconde temporisation t2,&lt;br /&gt;
              6) - extinction du ventilateur.&lt;br /&gt;
    Version V0 : Montage initial pour test(POC), t1 = 1 min., t2 = 2 min. fixées en dur dans le code&lt;br /&gt;
                Utilisation d&#039;un écran LCD inspiré de l&#039;exemple Hello Word de la librairie LyquidCryqtal de l&#039;ID Arduino&lt;br /&gt;
                The circuit:&lt;br /&gt;
               * LCD VSS pin (1) to ground               &lt;br /&gt;
               * LCD Vdd pin (2) to 5V               &lt;br /&gt;
               * 10K resistor (j&#039;ai mis un potentiomètre pour régler le contraste :&lt;br /&gt;
               *    ends to +5V and ground&lt;br /&gt;
               *    wiper to LCD VO pin (3)&lt;br /&gt;
               * LCD RS pin (4) to digital pin 12 Arduino&lt;br /&gt;
               * LCD R/W pin (5) to ground&lt;br /&gt;
               * LCD Enable pin (6) to digital pin 11&lt;br /&gt;
               * LCD DB4 pin (11) to digital pin 5&lt;br /&gt;
               * LCD DB5 pin (12) to digital pin 4&lt;br /&gt;
               * LCD DB6 pin (13) to digital pin 3&lt;br /&gt;
               * LCD DB7 pin (14) to digital pin 2&lt;br /&gt;
    Version V0a : Reprise du code de l&#039;exemple Hello Word de la librairie LyquidCryqtal de l&#039;IDE Arduino&lt;br /&gt;
    Version V0b : Intégraion de la LDR (selon mon cours au MDC) et intégration du relai&lt;br /&gt;
               Le Circuit :&lt;br /&gt;
               * LDR en série avec R1k entre +5v et Gnd&lt;br /&gt;
               * Point milieu avec A0&lt;br /&gt;
               * Relay +5v et Gnd et In1 avec broche 7&lt;br /&gt;
    Version V0c : Mise en place des deux temporisations (en dur dans le code)&lt;br /&gt;
               * t1 =&amp;gt; délai d&#039;attente après l&#039;établissement de la lumière avant déclenchement de l&#039;aérateur&lt;br /&gt;
               *    (pour éviter le déclenchement sur une simple ouverture de porte de courte durée)&lt;br /&gt;
               * t2 =&amp;gt; temps de fonctionnement de l&#039;aérateur après l&#039;extinction de la lumière &lt;br /&gt;
               * Recours à un automate d&#039;états finis cf. &lt;br /&gt;
               * https://forum.arduino.cc/t/programmation-automate-fini-machine-a-etat/452532/5&lt;br /&gt;
    Version V0d :&lt;br /&gt;
               - Mise en place d&#039;un reset matériel&lt;br /&gt;
               * Le circuit :&lt;br /&gt;
               *   R2k entre la broche 8 et le Reset&lt;br /&gt;
               *   /!\ Attention à ne pas utiliser la broche 13 qui est en PullUp et repasse à 0 à chaque Reset,&lt;br /&gt;
               *   donc le premier Soft Reset déclenche une infinité de Reset =&amp;gt; la carte reste bloquée et ne redémarre pas !&lt;br /&gt;
               - Passage de l&#039;affichage en pourcentage de luminosité :&lt;br /&gt;
                        0% Nuit noire (1023 lu sur la LDR)&lt;br /&gt;
                      100% Pleine lumière (0 lu sur la LDR)&lt;br /&gt;
               - Mise en place d&#039;un mode Run et d&#039;un mode Test :&lt;br /&gt;
                      qui permet une modification des valeurs des tempos&lt;br /&gt;
                      Changement de mode par un PushButton à bascule sur la broche 9&lt;br /&gt;
    Version V0e : &lt;br /&gt;
               - Le mode initial et après chaque reset est Run&lt;br /&gt;
               - Renommage du mode Test en mode Test (t)&lt;br /&gt;
               - Affichage de la tempo à rebours (décompte) pendant les états etT1 et etT2 &lt;br /&gt;
 *******************************************************************************/&lt;br /&gt;
// include the library code:&lt;br /&gt;
#include &amp;lt;LiquidCrystal.h&amp;gt;&lt;br /&gt;
// initialize the library by associating any needed LCD interface pin&lt;br /&gt;
// with the arduino pin number it is connected to&lt;br /&gt;
const int rs = 12, en = 11, d4 = 5, d5 = 4, d6 = 3, d7 = 2;&lt;br /&gt;
const int LdrAnalogIn = A0;&lt;br /&gt;
const int RelayPin = 7;  // Broche IN1 du relay qui pilote l&#039;aérateur&lt;br /&gt;
const int ModePin = 9;   // Broche du PushButton de changement de Mode&lt;br /&gt;
const String FirmWareVersion = &amp;quot;v0e&amp;quot;; // Version du FirmWare pour l&#039;affichage&lt;br /&gt;
&lt;br /&gt;
int LdrValue = 0;                 // Valeur lue sur la LDR (Valeur faible = forte luminosité)&lt;br /&gt;
int Col = 0;                      // Numéro de la colonne pour l&#039;écriture sur l&#039;écran LCD (entre 0 et 15)&lt;br /&gt;
unsigned long TimeStamp = 0;      // Top Chrono pour suivre l&#039;écoulement des délais t1 et t2&lt;br /&gt;
unsigned long timer = 0;          // Permet l&#039;affichage du temps qui s&#039;écoule&lt;br /&gt;
&lt;br /&gt;
int t1;             // Tempo (en secondes) entre détection de la lumière et mise en route de l&#039;aérateur&lt;br /&gt;
int t2;            // Tempo (en secondes) entre extinction de la lumière et arrêt de l&#039;aérateur&lt;br /&gt;
unsigned long T;    // Tempo (en secondes) entre deux Reset de la carte&lt;br /&gt;
&lt;br /&gt;
// Création de l&#039;afficheur LCD1604&lt;br /&gt;
LiquidCrystal lcd(rs, en, d4, d5, d6, d7);&lt;br /&gt;
&lt;br /&gt;
// Définition des deux modes de fonctionnement&lt;br /&gt;
enum :boolean {Test, Run} mode;&lt;br /&gt;
&lt;br /&gt;
// Définition des 4 états de l&#039;automate&lt;br /&gt;
enum :byte {etOff,etT1,etOn,etT2} etat;&lt;br /&gt;
&lt;br /&gt;
// Définition des 4 événements&lt;br /&gt;
boolean evLightOn() {           // Apparition de la lumière&lt;br /&gt;
  // Lecture de la luminosité&lt;br /&gt;
  LdrValue = analogRead(LdrAnalogIn);&lt;br /&gt;
  lcd.setCursor(0,1);                     // On place le curseur en début de ligne 1&lt;br /&gt;
  lcd.print(100-int(LdrValue/10.23));     // On affiche le pourcentage de luminosité à partir de la valeur lue sur la LDR : (0&amp;lt;LDR&amp;lt;1023)&lt;br /&gt;
  lcd.print(&amp;quot;% &amp;quot;);                        // Pour effacer l&#039;unité au cas où la valeur diminue d&#039;un ordre de grandeur.&lt;br /&gt;
  if (LdrValue &amp;lt; 500) {&lt;br /&gt;
    return true;&lt;br /&gt;
  } else {&lt;br /&gt;
    return false;&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
boolean evLightOff() {          // Disparition de la lumière&lt;br /&gt;
  return !evLightOn();&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
boolean evT1Out() {             // Fin de la tempo T1&lt;br /&gt;
  if (millis()/1000 - TimeStamp &amp;gt; t1) {&lt;br /&gt;
    return true;&lt;br /&gt;
  } else {&lt;br /&gt;
    return false;&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
boolean evT2Out() {             // Fin de la tempo T2&lt;br /&gt;
  if (millis()/1000 - TimeStamp &amp;gt; t2) {&lt;br /&gt;
    return true;&lt;br /&gt;
  } else {&lt;br /&gt;
    return false;&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// Cette fonction effectue un effaçage du Timer&lt;br /&gt;
// quelque soit sa longueur ( entre 1 et 5 caractères)&lt;br /&gt;
void effaceTimer() {&lt;br /&gt;
  lcd.setCursor(11,1);&lt;br /&gt;
  lcd.print(&amp;quot;     &amp;quot;); &lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// Cette fonction effectue un Reset matériel&lt;br /&gt;
void pushReset() { &lt;br /&gt;
  int resetPin = 8;                //!\\ ne pas utiliser la broche 13 cf. commentaires en intro&lt;br /&gt;
  pinMode(resetPin, OUTPUT);       // active la broche en sortie (OUTPUT) ce qui déclenche le reset&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void setup() {&lt;br /&gt;
  // Détermination des modes pour les broches&lt;br /&gt;
  pinMode(LdrAnalogIn,INPUT);&lt;br /&gt;
  pinMode(RelayPin,OUTPUT);&lt;br /&gt;
  pinMode(ModePin,INPUT);&lt;br /&gt;
&lt;br /&gt;
  // Initialisation de la liaison série&lt;br /&gt;
  Serial.begin(115200);&lt;br /&gt;
  &lt;br /&gt;
  // Paramétrage du LCD : Nb de colonnes, Nb de lignes&lt;br /&gt;
  lcd.begin(16, 2);&lt;br /&gt;
  // Affichage de la version du FirmWare.&lt;br /&gt;
  lcd.print(&amp;quot;AeroTempo&amp;quot;);&lt;br /&gt;
  lcd.setCursor(7,1);&lt;br /&gt;
  lcd.print(FirmWareVersion);&lt;br /&gt;
&lt;br /&gt;
  // Initialisation de l&#039;automate&lt;br /&gt;
  etat = etOff;&lt;br /&gt;
  TimeStamp = 0;&lt;br /&gt;
  mode = Run;&lt;br /&gt;
  Serial.println(&amp;quot;AeroTempo&amp;quot;);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void loop() {&lt;br /&gt;
  &lt;br /&gt;
   // Reglage du Bug d&#039;affichage : Cetrainment un parasite sur la broche 11 (Enable) qui reset l&#039;afficheur &lt;br /&gt;
   digitalWrite(11,LOW);&lt;br /&gt;
   &lt;br /&gt;
   // Détection du changement de mode entre Run et Test&lt;br /&gt;
   if (digitalRead(ModePin) == HIGH) {&lt;br /&gt;
     Serial.print(mode + &amp;quot; Bip &amp;quot;);&lt;br /&gt;
&lt;br /&gt;
     if (mode == Test) {&lt;br /&gt;
      mode = Run;&lt;br /&gt;
     } else {&lt;br /&gt;
      mode = Test;&lt;br /&gt;
     }&lt;br /&gt;
     Serial.println(mode);&lt;br /&gt;
   }&lt;br /&gt;
&lt;br /&gt;
  // Détermination des paramètres de tempo selon le mode (Run ou Test)&lt;br /&gt;
  switch (mode) {&lt;br /&gt;
    case Test :&lt;br /&gt;
      t1 = 5;&lt;br /&gt;
      t2 = 10;&lt;br /&gt;
      T = 50;&lt;br /&gt;
      break;&lt;br /&gt;
      &lt;br /&gt;
     case Run :&lt;br /&gt;
      t1 = 60;&lt;br /&gt;
      t2 = 300;&lt;br /&gt;
      T = 86400;&lt;br /&gt;
      break;&lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
  // Coeur de l&#039;automate d&#039;états finis&lt;br /&gt;
  switch (etat) {&lt;br /&gt;
    case etOff :&lt;br /&gt;
      lcd.setCursor(13,0);         // On place le curseur en bout de ligne 0&lt;br /&gt;
      lcd.print(&amp;quot;Off&amp;quot;);            // On affiche l&#039;état&lt;br /&gt;
      digitalWrite(RelayPin,HIGH);  // On arrète l&#039;aérateur&lt;br /&gt;
      if (evLightOn()) {            // la lumière est-elle allumée ?&lt;br /&gt;
        TimeStamp = millis()/1000;  // On note le top départ de t1&lt;br /&gt;
        etat = etT1;                // l&#039;automate change d&#039;état       &lt;br /&gt;
      }&lt;br /&gt;
      timer = (millis()/1000 - TimeStamp);&lt;br /&gt;
      break;&lt;br /&gt;
      &lt;br /&gt;
    case etT1 :&lt;br /&gt;
      lcd.setCursor(13,0);        // On place le curseur en bout de ligne 0&lt;br /&gt;
      lcd.print(&amp;quot; T1&amp;quot;);           // On affiche l&#039;état&lt;br /&gt;
      if (evLightOff()) {         // la lumière est-elle éteinte ?&lt;br /&gt;
        TimeStamp = 0;&lt;br /&gt;
        etat = etOff;             // l&#039;automate change d&#039;état&lt;br /&gt;
      } else if (evT1Out()){      // le délai de t1 est-il expiré ? &lt;br /&gt;
                                  //  (i.e. la lumière est-elle établie depuis suffisamment longtemps (t1 secondes)&lt;br /&gt;
        TimeStamp = 0;&lt;br /&gt;
        etat = etOn;              // l&#039;automate change d&#039;état&lt;br /&gt;
      }&lt;br /&gt;
      timer = t1-(millis()/1000 - TimeStamp);     &lt;br /&gt;
      break;&lt;br /&gt;
      &lt;br /&gt;
    case etOn :&lt;br /&gt;
      lcd.setCursor(13,0);         // On place le curseur en bout de ligne 0&lt;br /&gt;
      lcd.print(&amp;quot; On&amp;quot;);            // On affiche l&#039;état&lt;br /&gt;
      digitalWrite(RelayPin,LOW);  // On met en route l&#039;aérateur&lt;br /&gt;
      if (evLightOff()) {          // la lumière est-elle éteinte ?&lt;br /&gt;
        TimeStamp = millis()/1000; // On note le top départ de t2&lt;br /&gt;
        etat = etT2;               // l&#039;automate change d&#039;état&lt;br /&gt;
      }&lt;br /&gt;
      timer = (millis()/1000 - TimeStamp);      &lt;br /&gt;
      break;&lt;br /&gt;
      &lt;br /&gt;
    case etT2 :&lt;br /&gt;
      lcd.setCursor(13,0);          // On place le curseur en bout de ligne 0&lt;br /&gt;
      lcd.print(&amp;quot; T2&amp;quot;);             // On affiche l&#039;état&lt;br /&gt;
      if (evT2Out()) {              // le délai T2 est-il expiré ?&lt;br /&gt;
                                    //  (i.e. la lumière est-elle éteinte depuis suffisamment longtemps (t2 secondes)&lt;br /&gt;
        TimeStamp = 0;&lt;br /&gt;
        etat = etOff;                // l&#039;automate change d&#039;état&lt;br /&gt;
      } else if (evLightOn()) {&lt;br /&gt;
        TimeStamp = 0;               // On reset le TimeStamp&lt;br /&gt;
        etat = etOn;&lt;br /&gt;
      }&lt;br /&gt;
      timer = t2 - (millis()/1000 - TimeStamp);&lt;br /&gt;
      break;&lt;br /&gt;
  } // fin du switch case sur l&#039;état de l&#039;automate&lt;br /&gt;
  &lt;br /&gt;
  // Détermination de la colone où débute l&#039;affichage du Timer&lt;br /&gt;
  //timer = (millis()/1000 - TimeStamp);&lt;br /&gt;
  if (timer &amp;lt; 10) {&lt;br /&gt;
    Col = 15;&lt;br /&gt;
  } else if (timer &amp;lt; 100) {&lt;br /&gt;
    Col = 14; &lt;br /&gt;
  } else if (timer &amp;lt; 1000) {&lt;br /&gt;
    Col = 13; &lt;br /&gt;
  } else if (timer &amp;lt; 10000) {&lt;br /&gt;
    Col = 12; &lt;br /&gt;
  } else if (timer &amp;lt; 100000) {&lt;br /&gt;
    Col = 11; &lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
  // Affichage du mode&lt;br /&gt;
  lcd.setCursor(12,0);&lt;br /&gt;
  if (mode == Test) {&lt;br /&gt;
    lcd.print(&amp;quot;t&amp;quot;);&lt;br /&gt;
  } else {&lt;br /&gt;
    lcd.print(&amp;quot;r&amp;quot;);&lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
  // Affichage du timer&lt;br /&gt;
  effaceTimer();&lt;br /&gt;
  lcd.setCursor(Col,1);&lt;br /&gt;
  lcd.print(timer);&lt;br /&gt;
&lt;br /&gt;
  // Reset régulier bout T secondes&lt;br /&gt;
  if (millis()/1000  &amp;gt; T) { &lt;br /&gt;
    pushReset();&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  Serial.println(digitalRead(ModePin));&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;/div&gt;</summary>
		<author><name>Jean-Marc CHARLOT</name></author>
	</entry>
	<entry>
		<id>https://fablabo.net/index.php?title=AeroTempo&amp;diff=35731</id>
		<title>AeroTempo</title>
		<link rel="alternate" type="text/html" href="https://fablabo.net/index.php?title=AeroTempo&amp;diff=35731"/>
		<updated>2021-12-26T18:17:56Z</updated>

		<summary type="html">&lt;p&gt;Jean-Marc CHARLOT : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Projet&lt;br /&gt;
|status=Fonctionnel&lt;br /&gt;
|status_pub=Brouillon&lt;br /&gt;
|description=Temporisateur d&#039;aérateur de toilettes&lt;br /&gt;
|license=CC-by-sa-3.0 - Creative Commons Attribution CC-by-sa-3.0 France&lt;br /&gt;
|contributeurs=Jean-Marc CHARLOT,&lt;br /&gt;
|ingrédients=Électronique, Bois,&lt;br /&gt;
|source=AeroTempoV0e.ino&lt;br /&gt;
}}&lt;br /&gt;
Cet article décrit la réalisation d&#039;un temporisateur pour aération de toilettes.&lt;br /&gt;
Le principe est de détecter l&#039;entrée dans les toilettes pas l&#039;allumage de la lumière.&lt;br /&gt;
Cet allumage déclenche une première temporisation à l&#039;issue de laquelle, si la lumière ne s&#039;éteint pas, l&#039;aérateur se déclenche pour une seconde temporisation.&lt;br /&gt;
A l&#039;issue de cette seconde temporisation, si la lumière ne se rallume pas, l&#039;aérateur s&#039;éteint.&lt;br /&gt;
&lt;br /&gt;
Techniquement, l&#039;AéroTempo est basé sur un automate d&#039;états finis à 4 états et 4 transitions.&lt;br /&gt;
&lt;br /&gt;
Les 4 états : Off, T1, On, T2&lt;br /&gt;
&lt;br /&gt;
Les 4 transitions : LightOn, LightOff, FinT1, FinT2&lt;br /&gt;
&lt;br /&gt;
Le schéma de l&#039;automate est le suivant :&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
Automate.jpg|Le schéma de l&#039;automate d&#039;états finis de l&#039;AéroTempo.&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Le code source commenté à héberger sur une carte Arduino Uno ou Duomilanove :&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
/******************************************************&lt;br /&gt;
   AeroTempo : Temporisateur pour aérateur de toilettes&lt;br /&gt;
   Principe : 1) A la détection de l&#039;apparition de la lumière dans les toilettes :&lt;br /&gt;
              2) - mise en route d&#039;une première temporisation t1,&lt;br /&gt;
              3) - mise en route du ventilagteur/extracteur via un relai 220v&lt;br /&gt;
              4) A la disparition de la lumière :&lt;br /&gt;
              5) - mise en route d&#039;une seconde temporisation t2,&lt;br /&gt;
              6) - extinction du ventilateur.&lt;br /&gt;
              &lt;br /&gt;
    Version V0 : Montage initial pour test(POC), t1 = 1 min., t2 = 2 min. fixées en dur dans le code&lt;br /&gt;
                Utilisation d&#039;un écran LCD inspiré de l&#039;exemple Hello Word de la librairie LyquidCryqtal de l&#039;ID Arduino&lt;br /&gt;
&lt;br /&gt;
                The circuit:&lt;br /&gt;
               * LCD VSS pin (1) to ground               &lt;br /&gt;
               * LCD Vdd pin (2) to 5V               &lt;br /&gt;
               * 10K resistor (j&#039;ai mis un potentiomètre pour régler le contraste :&lt;br /&gt;
               *    ends to +5V and ground&lt;br /&gt;
               *    wiper to LCD VO pin (3)&lt;br /&gt;
               * LCD RS pin (4) to digital pin 12 Arduino&lt;br /&gt;
               * LCD R/W pin (5) to ground&lt;br /&gt;
               * LCD Enable pin (6) to digital pin 11&lt;br /&gt;
               * LCD DB4 pin (11) to digital pin 5&lt;br /&gt;
               * LCD DB5 pin (12) to digital pin 4&lt;br /&gt;
               * LCD DB6 pin (13) to digital pin 3&lt;br /&gt;
               * LCD DB7 pin (14) to digital pin 2&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
    Version V0a : Reprise du code de l&#039;exemple Hello Word de la librairie LyquidCryqtal de l&#039;IDE Arduino&lt;br /&gt;
    Version V0b : Intégraion de la LDR (selon mon cours au MDC) et intégration du relai&lt;br /&gt;
               Le Circuit :&lt;br /&gt;
               * LDR en série avec R1k entre +5v et Gnd&lt;br /&gt;
               * Point milieu avec A0&lt;br /&gt;
               * Relay +5v et Gnd et In1 avec broche 7&lt;br /&gt;
    Version V0c : Mise en place des deux temporisations (en dur dans le code)&lt;br /&gt;
               * t1 =&amp;gt; délai d&#039;attente après l&#039;établissement de la lumière avant déclenchement de l&#039;aérateur&lt;br /&gt;
               *    (pour éviter le déclenchement sur une simple ouverture de porte de courte durée)&lt;br /&gt;
               * t2 =&amp;gt; temps de fonctionnement de l&#039;aérateur après l&#039;extinction de la lumière &lt;br /&gt;
               * Recours à un automate d&#039;états finis cf. &lt;br /&gt;
               * https://forum.arduino.cc/t/programmation-automate-fini-machine-a-etat/452532/5&lt;br /&gt;
    Version V0d :&lt;br /&gt;
               - Mise en place d&#039;un reset matériel&lt;br /&gt;
               * Le circuit :&lt;br /&gt;
               *   R2k entre la broche 8 et le Reset&lt;br /&gt;
               *   /!\ Attention à ne pas utiliser la broche 13 qui est en PullUp et repasse à 0 à chaque Reset,&lt;br /&gt;
               *   donc le premier Soft Reset déclenche une infinité de Reset =&amp;gt; la carte reste bloquée et ne redémarre pas !&lt;br /&gt;
               - Passage de l&#039;affichage en pourcentage de luminosité :&lt;br /&gt;
                        0% Nuit noire (1023 lu sur la LDR)&lt;br /&gt;
                      100% Pleine lumière (0 lu sur la LDR)&lt;br /&gt;
               - Mise en place d&#039;un mode Run et d&#039;un mode Test :&lt;br /&gt;
                      qui permet une modification des valeurs des tempos&lt;br /&gt;
                      Changement de mode par un PushButton à bascule sur la broche 9&lt;br /&gt;
    Version V0e : &lt;br /&gt;
               - Le mode initial et après chaque reset est Run&lt;br /&gt;
               - Renommage du mode Test en mode Test (t)&lt;br /&gt;
               - Affichage de la tempo à rebours (décompte) pendant les états etT1 et etT2 &lt;br /&gt;
 *******************************************************************************/&lt;br /&gt;
                              &lt;br /&gt;
// include the library code:&lt;br /&gt;
#include &amp;lt;LiquidCrystal.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
// initialize the library by associating any needed LCD interface pin&lt;br /&gt;
// with the arduino pin number it is connected to&lt;br /&gt;
const int rs = 12, en = 11, d4 = 5, d5 = 4, d6 = 3, d7 = 2;&lt;br /&gt;
const int LdrAnalogIn = A0;&lt;br /&gt;
const int RelayPin = 7;  // Broche IN1 du relay qui pilote l&#039;aérateur&lt;br /&gt;
const int ModePin = 9;   // Broche du PushButton de changement de Mode&lt;br /&gt;
const String FirmWareVersion = &amp;quot;v0e&amp;quot;; // Version du FirmWare pour l&#039;affichage&lt;br /&gt;
&lt;br /&gt;
int LdrValue = 0;                 // Valeur lue sur la LDR (Valeur faible = forte luminosité)&lt;br /&gt;
int Col = 0;                      // Numéro de la colonne pour l&#039;écriture sur l&#039;écran LCD (entre 0 et 15)&lt;br /&gt;
unsigned long TimeStamp = 0;      // Top Chrono pour suivre l&#039;écoulement des délais t1 et t2&lt;br /&gt;
unsigned long timer = 0;          // Permet l&#039;affichage du temps qui s&#039;écoule&lt;br /&gt;
&lt;br /&gt;
int t1;             // Tempo (en secondes) entre détection de la lumière et mise en route de l&#039;aérateur&lt;br /&gt;
int t2;            // Tempo (en secondes) entre extinction de la lumière et arrêt de l&#039;aérateur&lt;br /&gt;
unsigned long T;    // Tempo (en secondes) entre deux Reset de la carte&lt;br /&gt;
&lt;br /&gt;
// Création de l&#039;afficheur LCD1604&lt;br /&gt;
LiquidCrystal lcd(rs, en, d4, d5, d6, d7);&lt;br /&gt;
&lt;br /&gt;
// Définition des deux modes de fonctionnement&lt;br /&gt;
enum :boolean {Test, Run} mode;&lt;br /&gt;
&lt;br /&gt;
// Définition des 4 états de l&#039;automate&lt;br /&gt;
enum :byte {etOff,etT1,etOn,etT2} etat;&lt;br /&gt;
&lt;br /&gt;
// Définition des 4 événements&lt;br /&gt;
boolean evLightOn() {           // Apparition de la lumière&lt;br /&gt;
  // Lecture de la luminosité&lt;br /&gt;
  LdrValue = analogRead(LdrAnalogIn);&lt;br /&gt;
  lcd.setCursor(0,1);                     // On place le curseur en début de ligne 1&lt;br /&gt;
  lcd.print(100-int(LdrValue/10.23));     // On affiche le pourcentage de luminosité à partir de la valeur lue sur la LDR : (0&amp;lt;LDR&amp;lt;1023)&lt;br /&gt;
  lcd.print(&amp;quot;% &amp;quot;);                        // Pour effacer l&#039;unité au cas où la valeur diminue d&#039;un ordre de grandeur.&lt;br /&gt;
  if (LdrValue &amp;lt; 500) {&lt;br /&gt;
    return true;&lt;br /&gt;
  } else {&lt;br /&gt;
    return false;&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
boolean evLightOff() {          // Disparition de la lumière&lt;br /&gt;
  return !evLightOn();&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
boolean evT1Out() {             // Fin de la tempo T1&lt;br /&gt;
  if (millis()/1000 - TimeStamp &amp;gt; t1) {&lt;br /&gt;
    return true;&lt;br /&gt;
  } else {&lt;br /&gt;
    return false;&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
boolean evT2Out() {             // Fin de la tempo T2&lt;br /&gt;
  if (millis()/1000 - TimeStamp &amp;gt; t2) {&lt;br /&gt;
    return true;&lt;br /&gt;
  } else {&lt;br /&gt;
    return false;&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// Cette fonction effectue un effaçage du Timer&lt;br /&gt;
// quelque soit sa longueur ( entre 1 et 5 caractères)&lt;br /&gt;
void effaceTimer() {&lt;br /&gt;
  lcd.setCursor(11,1);&lt;br /&gt;
  lcd.print(&amp;quot;     &amp;quot;); &lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// Cette fonction effectue un Reset matériel&lt;br /&gt;
void pushReset() { &lt;br /&gt;
  int resetPin = 8;                //!\\ ne pas utiliser la broche 13 cf. commentaires en intro&lt;br /&gt;
  pinMode(resetPin, OUTPUT);       // active la broche en sortie (OUTPUT) ce qui déclenche le reset&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void setup() {&lt;br /&gt;
  // Détermination des modes pour les broches&lt;br /&gt;
  pinMode(LdrAnalogIn,INPUT);&lt;br /&gt;
  pinMode(RelayPin,OUTPUT);&lt;br /&gt;
  pinMode(ModePin,INPUT);&lt;br /&gt;
&lt;br /&gt;
  // Initialisation de la liaison série&lt;br /&gt;
  Serial.begin(115200);&lt;br /&gt;
  &lt;br /&gt;
  // Paramétrage du LCD : Nb de colonnes, Nb de lignes&lt;br /&gt;
  lcd.begin(16, 2);&lt;br /&gt;
  // Affichage de la version du FirmWare.&lt;br /&gt;
  lcd.print(&amp;quot;AeroTempo&amp;quot;);&lt;br /&gt;
  lcd.setCursor(7,1);&lt;br /&gt;
  lcd.print(FirmWareVersion);&lt;br /&gt;
&lt;br /&gt;
  // Initialisation de l&#039;automate&lt;br /&gt;
  etat = etOff;&lt;br /&gt;
  TimeStamp = 0;&lt;br /&gt;
  mode = Run;&lt;br /&gt;
  Serial.println(&amp;quot;AeroTempo&amp;quot;);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void loop() {&lt;br /&gt;
  &lt;br /&gt;
   // Reglage du Bug d&#039;affichage : Cetrainment un parasite sur la broche 11 (Enable) qui reset l&#039;afficheur &lt;br /&gt;
   digitalWrite(11,LOW);&lt;br /&gt;
   &lt;br /&gt;
   // Détection du changement de mode entre Run et Test&lt;br /&gt;
   if (digitalRead(ModePin) == HIGH) {&lt;br /&gt;
     Serial.print(mode + &amp;quot; Bip &amp;quot;);&lt;br /&gt;
&lt;br /&gt;
     if (mode == Test) {&lt;br /&gt;
      mode = Run;&lt;br /&gt;
     } else {&lt;br /&gt;
      mode = Test;&lt;br /&gt;
     }&lt;br /&gt;
     Serial.println(mode);&lt;br /&gt;
   }&lt;br /&gt;
&lt;br /&gt;
  // Détermination des paramètres de tempo selon le mode (Run ou Test)&lt;br /&gt;
  switch (mode) {&lt;br /&gt;
    case Test :&lt;br /&gt;
      t1 = 5;&lt;br /&gt;
      t2 = 10;&lt;br /&gt;
      T = 50;&lt;br /&gt;
      break;&lt;br /&gt;
      &lt;br /&gt;
     case Run :&lt;br /&gt;
      t1 = 60;&lt;br /&gt;
      t2 = 300;&lt;br /&gt;
      T = 86400;&lt;br /&gt;
      break;&lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
  // Coeur de l&#039;automate d&#039;états finis&lt;br /&gt;
  switch (etat) {&lt;br /&gt;
    case etOff :&lt;br /&gt;
      lcd.setCursor(13,0);         // On place le curseur en bout de ligne 0&lt;br /&gt;
      lcd.print(&amp;quot;Off&amp;quot;);            // On affiche l&#039;état&lt;br /&gt;
      digitalWrite(RelayPin,HIGH);  // On arrète l&#039;aérateur&lt;br /&gt;
      if (evLightOn()) {            // la lumière est-elle allumée ?&lt;br /&gt;
        TimeStamp = millis()/1000;  // On note le top départ de t1&lt;br /&gt;
        etat = etT1;                // l&#039;automate change d&#039;état       &lt;br /&gt;
      }&lt;br /&gt;
      timer = (millis()/1000 - TimeStamp);&lt;br /&gt;
      break;&lt;br /&gt;
      &lt;br /&gt;
    case etT1 :&lt;br /&gt;
      lcd.setCursor(13,0);        // On place le curseur en bout de ligne 0&lt;br /&gt;
      lcd.print(&amp;quot; T1&amp;quot;);           // On affiche l&#039;état&lt;br /&gt;
      if (evLightOff()) {         // la lumière est-elle éteinte ?&lt;br /&gt;
        TimeStamp = 0;&lt;br /&gt;
        etat = etOff;             // l&#039;automate change d&#039;état&lt;br /&gt;
      } else if (evT1Out()){      // le délai de t1 est-il expiré ? &lt;br /&gt;
                                  //  (i.e. la lumière est-elle établie depuis suffisamment longtemps (t1 secondes)&lt;br /&gt;
        TimeStamp = 0;&lt;br /&gt;
        etat = etOn;              // l&#039;automate change d&#039;état&lt;br /&gt;
      }&lt;br /&gt;
      timer = t1-(millis()/1000 - TimeStamp);     &lt;br /&gt;
      break;&lt;br /&gt;
      &lt;br /&gt;
    case etOn :&lt;br /&gt;
      lcd.setCursor(13,0);         // On place le curseur en bout de ligne 0&lt;br /&gt;
      lcd.print(&amp;quot; On&amp;quot;);            // On affiche l&#039;état&lt;br /&gt;
      digitalWrite(RelayPin,LOW);  // On met en route l&#039;aérateur&lt;br /&gt;
      if (evLightOff()) {          // la lumière est-elle éteinte ?&lt;br /&gt;
        TimeStamp = millis()/1000; // On note le top départ de t2&lt;br /&gt;
        etat = etT2;               // l&#039;automate change d&#039;état&lt;br /&gt;
      }&lt;br /&gt;
      timer = (millis()/1000 - TimeStamp);      &lt;br /&gt;
      break;&lt;br /&gt;
      &lt;br /&gt;
    case etT2 :&lt;br /&gt;
      lcd.setCursor(13,0);          // On place le curseur en bout de ligne 0&lt;br /&gt;
      lcd.print(&amp;quot; T2&amp;quot;);             // On affiche l&#039;état&lt;br /&gt;
      if (evT2Out()) {              // le délai T2 est-il expiré ?&lt;br /&gt;
                                    //  (i.e. la lumière est-elle éteinte depuis suffisamment longtemps (t2 secondes)&lt;br /&gt;
        TimeStamp = 0;&lt;br /&gt;
        etat = etOff;                // l&#039;automate change d&#039;état&lt;br /&gt;
      } else if (evLightOn()) {&lt;br /&gt;
        TimeStamp = 0;               // On reset le TimeStamp&lt;br /&gt;
        etat = etOn;&lt;br /&gt;
      }&lt;br /&gt;
      timer = t2 - (millis()/1000 - TimeStamp);&lt;br /&gt;
      break;&lt;br /&gt;
  } // fin du switch case sur l&#039;état de l&#039;automate&lt;br /&gt;
  &lt;br /&gt;
  // Détermination de la colone où débute l&#039;affichage du Timer&lt;br /&gt;
  //timer = (millis()/1000 - TimeStamp);&lt;br /&gt;
  if (timer &amp;lt; 10) {&lt;br /&gt;
    Col = 15;&lt;br /&gt;
  } else if (timer &amp;lt; 100) {&lt;br /&gt;
    Col = 14; &lt;br /&gt;
  } else if (timer &amp;lt; 1000) {&lt;br /&gt;
    Col = 13; &lt;br /&gt;
  } else if (timer &amp;lt; 10000) {&lt;br /&gt;
    Col = 12; &lt;br /&gt;
  } else if (timer &amp;lt; 100000) {&lt;br /&gt;
    Col = 11; &lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
  // Affichage du mode&lt;br /&gt;
  lcd.setCursor(12,0);&lt;br /&gt;
  if (mode == Test) {&lt;br /&gt;
    lcd.print(&amp;quot;t&amp;quot;);&lt;br /&gt;
  } else {&lt;br /&gt;
    lcd.print(&amp;quot;r&amp;quot;);&lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
  // Affichage du timer&lt;br /&gt;
  effaceTimer();&lt;br /&gt;
  lcd.setCursor(Col,1);&lt;br /&gt;
  lcd.print(timer);&lt;br /&gt;
&lt;br /&gt;
  // Reset régulier bout T secondes&lt;br /&gt;
  if (millis()/1000  &amp;gt; T) { &lt;br /&gt;
    pushReset();&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  Serial.println(digitalRead(ModePin));&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;/div&gt;</summary>
		<author><name>Jean-Marc CHARLOT</name></author>
	</entry>
	<entry>
		<id>https://fablabo.net/index.php?title=AeroTempo&amp;diff=35730</id>
		<title>AeroTempo</title>
		<link rel="alternate" type="text/html" href="https://fablabo.net/index.php?title=AeroTempo&amp;diff=35730"/>
		<updated>2021-12-26T18:16:27Z</updated>

		<summary type="html">&lt;p&gt;Jean-Marc CHARLOT : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Projet&lt;br /&gt;
|status=Fonctionnel&lt;br /&gt;
|status_pub=Brouillon&lt;br /&gt;
|description=Temporisateur d&#039;aérateur de toilettes&lt;br /&gt;
|license=CC-by-sa-3.0 - Creative Commons Attribution CC-by-sa-3.0 France&lt;br /&gt;
|contributeurs=Jean-Marc CHARLOT,&lt;br /&gt;
|ingrédients=Électronique, Bois,&lt;br /&gt;
|source=AeroTempoV0e.ino&lt;br /&gt;
}}&lt;br /&gt;
Cet article décrit la réalisation d&#039;un temporisateur pour aération de toilettes.&lt;br /&gt;
Le principe est de détecter l&#039;entrée dans les toilettes pas l&#039;allumage de la lumière.&lt;br /&gt;
Cet allumage déclenche une première temporisation à l&#039;issue de laquelle, si la lumière ne s&#039;éteint pas, l&#039;aérateur se déclenche pour une seconde temporisation.&lt;br /&gt;
A l&#039;issue de cette seconde temporisation, si la lumière ne se rallume pas, l&#039;aérateur s&#039;éteint.&lt;br /&gt;
&lt;br /&gt;
Techniquement, l&#039;AéroTempo est basé sur un automate d&#039;états finis à 4 états et 4 transitions.&lt;br /&gt;
&lt;br /&gt;
Les 4 états : Off, T1, On, T2&lt;br /&gt;
&lt;br /&gt;
Les 4 transitions : LightOn, LightOff, FinT1, FinT2&lt;br /&gt;
&lt;br /&gt;
Le schéma de l&#039;automate est le suivant :&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
Automate.jpg|Le schéma de l&#039;automate d&#039;états finis de l&#039;AéroTempo.&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Le code source commenté à héberger sur une carte Arduino Uno ou Duomilanove :&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
AeroTempo.ino|Code source Arduino&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;/div&gt;</summary>
		<author><name>Jean-Marc CHARLOT</name></author>
	</entry>
	<entry>
		<id>https://fablabo.net/index.php?title=AeroTempo&amp;diff=35729</id>
		<title>AeroTempo</title>
		<link rel="alternate" type="text/html" href="https://fablabo.net/index.php?title=AeroTempo&amp;diff=35729"/>
		<updated>2021-12-26T18:03:01Z</updated>

		<summary type="html">&lt;p&gt;Jean-Marc CHARLOT : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Projet&lt;br /&gt;
|status=Fonctionnel&lt;br /&gt;
|status_pub=Brouillon&lt;br /&gt;
|description=Temporisateur d&#039;aérateur de toilettes&lt;br /&gt;
|license=CC-by-sa-3.0 - Creative Commons Attribution CC-by-sa-3.0 France&lt;br /&gt;
|contributeurs=Jean-Marc CHARLOT,&lt;br /&gt;
|ingrédients=Électronique, Bois,&lt;br /&gt;
|source=AeroTempoV0e.ino&lt;br /&gt;
}}&lt;br /&gt;
Cet article décrit la réalisation d&#039;un temporisateur pour aération de toilettes.&lt;br /&gt;
Le principe est de détecter l&#039;entrée dans les toilettes pas l&#039;allumage de la lumière.&lt;br /&gt;
Cet allumage déclenche une première temporisation à l&#039;issue de laquelle, si la lumière ne s&#039;éteint pas, l&#039;aérateur se déclenche pour une seconde temporisation.&lt;br /&gt;
A l&#039;issue de cette seconde temporisation, si la lumière ne se rallume pas, l&#039;aérateur s&#039;éteint.&lt;br /&gt;
&lt;br /&gt;
Techniquement, l&#039;AéroTempo est basé sur un automate d&#039;états finis à 4 états et 4 transitions.&lt;br /&gt;
&lt;br /&gt;
Les 4 états : Off, T1, On, T2&lt;br /&gt;
&lt;br /&gt;
Les 4 transitions : LightOn, LightOff, FinT1, FinT2&lt;br /&gt;
&lt;br /&gt;
Le schéma de l&#039;automate est le suivant :&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
Automate.jpg|Le schéma de l&#039;automate d&#039;états finis de l&#039;AéroTempo.&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;/div&gt;</summary>
		<author><name>Jean-Marc CHARLOT</name></author>
	</entry>
	<entry>
		<id>https://fablabo.net/index.php?title=AeroTempo&amp;diff=35728</id>
		<title>AeroTempo</title>
		<link rel="alternate" type="text/html" href="https://fablabo.net/index.php?title=AeroTempo&amp;diff=35728"/>
		<updated>2021-12-26T18:01:07Z</updated>

		<summary type="html">&lt;p&gt;Jean-Marc CHARLOT : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Projet&lt;br /&gt;
|status=Fonctionnel&lt;br /&gt;
|status_pub=Brouillon&lt;br /&gt;
|description=Temporisateur d&#039;aérateur de toilettes&lt;br /&gt;
|license=CC-by-sa-3.0 - Creative Commons Attribution CC-by-sa-3.0 France&lt;br /&gt;
|contributeurs=Jean-Marc CHARLOT,&lt;br /&gt;
|ingrédients=Électronique, Bois,&lt;br /&gt;
|source=AeroTempoV0e.ino&lt;br /&gt;
}}&lt;br /&gt;
Cet article décrit la réalisation d&#039;un temporisateur pour aération de toilettes.&lt;br /&gt;
Le principe est de détecter l&#039;entrée dans les toilettes pas l&#039;allumage de la lumière.&lt;br /&gt;
Cet allumage déclenche une première temporisation à l&#039;issue de laquelle, si la lumière ne s&#039;éteint pas, l&#039;aérateur se déclenche pour une seconde temporisation.&lt;br /&gt;
A l&#039;issue de cette seconde temporisation, si la lumière ne se rallume pas, l&#039;aérateur s&#039;éteint.&lt;br /&gt;
&lt;br /&gt;
Techniquement, l&#039;AéroTempo est basé sur un automate d&#039;états finis à 4 états et 4 transitions.&lt;br /&gt;
&lt;br /&gt;
Les 4 états : Off, T1, On, T2&lt;br /&gt;
&lt;br /&gt;
Les 4 transitions : LightOn, LightOff, FinT1, FinT2&lt;br /&gt;
&lt;br /&gt;
Le schéma de l&#039;automate est le suivant :&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
Exemple.jpg|Description 1&lt;br /&gt;
Exemple.jpg|Description 2&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;/div&gt;</summary>
		<author><name>Jean-Marc CHARLOT</name></author>
	</entry>
	<entry>
		<id>https://fablabo.net/index.php?title=AeroTempo&amp;diff=35727</id>
		<title>AeroTempo</title>
		<link rel="alternate" type="text/html" href="https://fablabo.net/index.php?title=AeroTempo&amp;diff=35727"/>
		<updated>2021-12-26T17:50:31Z</updated>

		<summary type="html">&lt;p&gt;Jean-Marc CHARLOT : Page créée avec « {{Projet |status=Fonctionnel |status_pub=Brouillon |description=Temporisateur d&amp;#039;aérateur de toilettes |license=CC-by-sa-3.0 - Creative Commons Attribution CC-by-sa-3.0 Fr... »&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Projet&lt;br /&gt;
|status=Fonctionnel&lt;br /&gt;
|status_pub=Brouillon&lt;br /&gt;
|description=Temporisateur d&#039;aérateur de toilettes&lt;br /&gt;
|license=CC-by-sa-3.0 - Creative Commons Attribution CC-by-sa-3.0 France&lt;br /&gt;
|contributeurs=Jean-Marc CHARLOT,&lt;br /&gt;
|ingrédients=Électronique, Bois,&lt;br /&gt;
|source=AeroTempoV0e.ino&lt;br /&gt;
}}&lt;br /&gt;
Cet article décrit la réalisation d&#039;un temporisateur pour aération de toilettes.&lt;br /&gt;
Le principe est de détecter l&#039;entrée dans les toilettes pas l&#039;allumage de la lumière.&lt;br /&gt;
Cet allumage déclenche une première temporisation à l&#039;issue de laquelle, si la lumière ne s&#039;éteint pas, l&#039;aérateur se déclenche pour une seconde temporisation.&lt;br /&gt;
A l&#039;issue de cette seconde temporisation, si la lumière ne se rallume pas, l&#039;aérateur s&#039;éteint.&lt;br /&gt;
&lt;br /&gt;
Techniquement, l&#039;AéroTempo est basé sur un automate d&#039;états finis à 4 états et 4 transistions.&lt;br /&gt;
Les 4 états :&lt;br /&gt;
- Off&lt;br /&gt;
- T1&lt;br /&gt;
- On&lt;br /&gt;
- T2&lt;br /&gt;
&lt;br /&gt;
Les 4 transitions :&lt;br /&gt;
- LightOn&lt;br /&gt;
- LightOff&lt;br /&gt;
- FinT1&lt;br /&gt;
- FinT2&lt;br /&gt;
&lt;br /&gt;
Le schéma de l&#039;automate est le suivant :&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
[[Fichier:Automate.jpg|vignette]]&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;/div&gt;</summary>
		<author><name>Jean-Marc CHARLOT</name></author>
	</entry>
	<entry>
		<id>https://fablabo.net/index.php?title=Fichier:Automate.jpg&amp;diff=35726</id>
		<title>Fichier:Automate.jpg</title>
		<link rel="alternate" type="text/html" href="https://fablabo.net/index.php?title=Fichier:Automate.jpg&amp;diff=35726"/>
		<updated>2021-12-26T17:50:04Z</updated>

		<summary type="html">&lt;p&gt;Jean-Marc CHARLOT : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Schéma de principe de l&#039;automate d&#039;états finis de l&#039;AéroTempo.&lt;/div&gt;</summary>
		<author><name>Jean-Marc CHARLOT</name></author>
	</entry>
	<entry>
		<id>https://fablabo.net/index.php?title=Fichier:AeroTempoV0e.ino&amp;diff=35725</id>
		<title>Fichier:AeroTempoV0e.ino</title>
		<link rel="alternate" type="text/html" href="https://fablabo.net/index.php?title=Fichier:AeroTempoV0e.ino&amp;diff=35725"/>
		<updated>2021-12-26T17:17:44Z</updated>

		<summary type="html">&lt;p&gt;Jean-Marc CHARLOT : Fichier source du temporisateur d&amp;#039;aérateur de toilettes à base d&amp;#039;automate à états finis.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Fichier source du temporisateur d&#039;aérateur de toilettes à base d&#039;automate à états finis.&lt;/div&gt;</summary>
		<author><name>Jean-Marc CHARLOT</name></author>
	</entry>
	<entry>
		<id>https://fablabo.net/index.php?title=Le_Remote_Snooze&amp;diff=7238</id>
		<title>Le Remote Snooze</title>
		<link rel="alternate" type="text/html" href="https://fablabo.net/index.php?title=Le_Remote_Snooze&amp;diff=7238"/>
		<updated>2014-04-03T08:36:39Z</updated>

		<summary type="html">&lt;p&gt;Jean-Marc CHARLOT : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Projet&lt;br /&gt;
|status=Experimental&lt;br /&gt;
|image=remoteSnooze.1erTest.png&lt;br /&gt;
|name=Remote Snooze&lt;br /&gt;
|description=Télécommander la commande Snooze d&#039;un radio réveil old school&lt;br /&gt;
|contributeurs=Jean-Marc CHARLOT&lt;br /&gt;
|materiaux=Composants électroniques et télécommande de récup&#039;&lt;br /&gt;
|url=http://mnesimages.fr/RemoteSnooze&lt;br /&gt;
}}&lt;br /&gt;
[[Catégorie:Electronique]]&lt;/div&gt;</summary>
		<author><name>Jean-Marc CHARLOT</name></author>
	</entry>
	<entry>
		<id>https://fablabo.net/index.php?title=Fichier:RemoteSnooze.1erTest.png&amp;diff=7228</id>
		<title>Fichier:RemoteSnooze.1erTest.png</title>
		<link rel="alternate" type="text/html" href="https://fablabo.net/index.php?title=Fichier:RemoteSnooze.1erTest.png&amp;diff=7228"/>
		<updated>2014-04-03T08:29:24Z</updated>

		<summary type="html">&lt;p&gt;Jean-Marc CHARLOT : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Jean-Marc CHARLOT</name></author>
	</entry>
	<entry>
		<id>https://fablabo.net/index.php?title=Le_Remote_Snooze&amp;diff=7132</id>
		<title>Le Remote Snooze</title>
		<link rel="alternate" type="text/html" href="https://fablabo.net/index.php?title=Le_Remote_Snooze&amp;diff=7132"/>
		<updated>2014-04-02T07:01:58Z</updated>

		<summary type="html">&lt;p&gt;Jean-Marc CHARLOT : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Projet&lt;br /&gt;
|status=Experimental&lt;br /&gt;
|image=http://mnesimages.fr/RemoteSnooze/DSCN0018.JPG&lt;br /&gt;
|name=Le Remote Snooze&lt;br /&gt;
|description=Télécommander la commande Snooze d&#039;un radio réveil old school&lt;br /&gt;
|contributeurs=Jean-Marc CHARLOT&lt;br /&gt;
|materiaux=Composants électroniques et télécommande de récup&#039;&lt;br /&gt;
|url=http://mnesimages.fr/RemoteSnooze&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
[[Catégorie:Electronique]]&lt;/div&gt;</summary>
		<author><name>Jean-Marc CHARLOT</name></author>
	</entry>
	<entry>
		<id>https://fablabo.net/index.php?title=Le_Remote_Snooze&amp;diff=7098</id>
		<title>Le Remote Snooze</title>
		<link rel="alternate" type="text/html" href="https://fablabo.net/index.php?title=Le_Remote_Snooze&amp;diff=7098"/>
		<updated>2014-04-01T14:41:09Z</updated>

		<summary type="html">&lt;p&gt;Jean-Marc CHARLOT : Page créée avec « {{Projet |image=http://mnesimages.fr/RemoteSnooze/DSCN0018.JPG |name=Le Remote Snooze |description=Télécommander la commande Snooze d&amp;#039;un radio réveil old school |contri... »&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Projet&lt;br /&gt;
|image=http://mnesimages.fr/RemoteSnooze/DSCN0018.JPG&lt;br /&gt;
|name=Le Remote Snooze&lt;br /&gt;
|description=Télécommander la commande Snooze d&#039;un radio réveil old school&lt;br /&gt;
|contributeurs=JM Charlot&lt;br /&gt;
|materiaux=Composants électroniques et télécommande de récup&#039;&lt;br /&gt;
|url=mnesimages.fr/RemoteSnooze&lt;br /&gt;
}}&lt;/div&gt;</summary>
		<author><name>Jean-Marc CHARLOT</name></author>
	</entry>
</feed>