Projet yaourtière

Bonjour à tous.
Je vous plante le décors, je suis actuellement dans une licence pro en informatique avec une option informatique embarqué. Donc j’ai pu découvrir le monde incroyable d’arduino (que je connaissais que de nom).

Nos professeur, nous ont donné durant l’année divers énoncés de projet qui utilise l’arduino notamment utiliser l’arduino pour faire une yaourtière en combinant notre arduino avec un capteur de température DS18B20 avec un bus OneWire et une résistance chauffante.

Ce projet aurait dû être normalement fait mais suite au confinement c’est tombé à l’eau. La confection de ce projet aurait dû avaloir lieu avant le début de notre stage qui est aussi tombé à l’eau et remplacé par un projet à faire à distance.

En parallèle au notre projet en groupe censé remplacé notre stage en entreprise, j’ai décidé de faire de manière virtuel ce projet yaourtière.

Pour le moment voici ce que j’ai pu faire :

#include <SPI.h>
#include <OneWire.h>
#include <Wire.h>
const byte ledRouge = 13;
const byte ledVerte = 12;
const byte resistance = 11;
int tempMin = 30; //Température minimale
int tempMax = 60; //Température maximale
int tempsMin = 15; //Durée minimale
int tempsMax = 240; //durée maximale

///Saisie clavier
String saisieTime = ""; // Saisie clavier
String saisieTemp = "";

///Sélection curseur
/*
int potTemp = A0; 
int potTime = A1;
*/
int valTemp = 0 ;
int valTime = 0 ;

const int DS18B20_ID = 0x28;
OneWire capteurTemp(10);
byte type_s;


float getTemp(  )
{
  byte i;
  byte data[12];
  byte addr[8];
  float temp = 0.0;

  capteurTemp.search(addr);

  //Vérification les données du capteur
  if (addr[0] != DS18B20_ID) {
    Serial.println("L'équipement trouvé n'est pas un DS18B20");
    return false;
  }

  //On récupère les données du capteur
  capteurTemp.reset();
  capteurTemp.select(addr);
  capteurTemp.write(0x44);
  delay(850);
  capteurTemp.reset();
  capteurTemp.select(addr);
  capteurTemp.write(0xBE);

  //On transforme les données en bit du capteur en température en Degré
  for ( i = 0; i < 9; i++) {
    data[i] = capteurTemp.read();
  }
  temp = ( (data[1] << 8) + data[0] ) * 0.0625;
  return temp;
}
void setup() {
  // put your setup code here, to run once:
  Serial.begin(9600);
  Wire.begin();
/*
  pinMode(potTemp, INPUT);
  pinMode(potTime, INPUT);
*/
}

void loop() {
  //valTemp = analogRead(potTemp);
  //valTime = analogRead(potTime);
 
  // put your main code here, to run repeatedly:
  reglageTemp(valTemp);

  reglageDuree(valTime);

  fabrication();
}

String Lecture_chaine_saisie_moniteur()
{
  String Msg_receveid = ""; // initialiser la variable pour récupérer tous les char
  while (Serial.available() > 0) // tant que les données sont disponibles
  {
    char buff = Serial.read(); // lire un byte (char)
    delay(2); // délai de lecture de la variable depuis le port série (souvent 1ms)
    Msg_receveid += buff; // stroker
  }
  return Msg_receveid; // la fonction renvoie la chaine de caractère reçue.
}

///Réglage de le temperature de fabrication du yaourt(en °C)
bool reglageTemp(int Temp)
{
  if (Serial.available())
  {
    Serial.print("Saisie temperature : ");

    saisieTemp = Lecture_chaine_saisie_moniteur();
    Temp = saisieTemp.toInt();
    Serial.print(Temp);
    Serial.println(" °C");
    if (Temp >= tempMin && Temp <= tempMax)
    {
      Serial.println("Bon");
      valTemp=Temp;
      return true;
    }
    if (Temp < tempMin)
    {
      Serial.println("Trop froid");
      return false;
    }


    if (Temp > tempMax)
    {
      Serial.println("Trop chaud");
      return false;
    }
  }
}

///Réglage du temps de fabrication du yaourt(en minute)
bool reglageDuree(int duree)
{
  if (Serial.available())
  {
    Serial.print("Saisie duree : ");

    saisieTime = Lecture_chaine_saisie_moniteur();
    duree = saisieTime.toInt();
    Serial.print(duree);
    Serial.println(" min");
    if (duree >= tempsMin && duree <= tempsMax)
    {
      Serial.println("Duree conforme");
      valTime=duree;
      return true;
    }
    if (duree < tempsMin)
    {
      Serial.println("Trop court");
      return false;
    }


    if (duree > tempsMax)
    {
      Serial.println("Trop long");
      return false;
    }
  }
}


///Fabrication yaourte
void fabrication()
{
  int tempActuel = 0;
  if (reglageTemp(valTemp) == true && reglageDuree(valTime) == true)
  {
    digitalWrite(resistance, HIGH);
  }
  tempActuel = getTemp();

  if (tempActuel == valTemp)
  {
    while (valTime > 0)
    {
      Serial.print("Temperature choisis: ");
      Serial.println(tempActuel);
      Serial.print("Temps restant : ");
      Serial.println(valTime);
      delay(60000);
      digitalWrite(ledVerte, HIGH);
      digitalWrite(ledRouge, LOW);

      valTime--;
    }
    if (valTime == 0)
    {
      Serial.println("Fabrication des yaourts achever");
      digitalWrite(resistance, LOW);      
      digitalWrite(ledVerte, LOW);
      digitalWrite(ledRouge, HIGH);

    }
  }

}

Pour tout ce qui est partie réglage du temps et de la température j’ai eu 2 idées :soit via 2 potentiomètres un pour le temps et un pour la température(mais le problème je ne trouve pas cette idées très précise) soit en utilisant un pavé numérique. Pour le moment l’affichage des données se fait via le moniteur série, mais à terme j’aimerais faire que l’affichage de mes données (et des infos de saisies) sa fasse via un un écran LCD.
Il y aurait une autre possibilité c’est l’utilisation d’un écran tactile permettant la saisie des données et l’affichage de ces dernières.

Ensuite, j’aimerais savoir si la manière de faire mon décompte est bonne.

N’ayant pas le matériel chez moi, j’ai décidé de faire virtuellement mon circuit (pour voir si je fais pas tout péter XD) sur le site tinkercad et je me demandais si je peux faire passer ma résistance chauffante comme une simple résistance (car il me semble que leur confectionneur de circuit ne contient pas de résistance chauffante) ? J’aurais aussi besoin d’indication pour le montage car pour certains éléments je vois comment les brancher mais pour d’autre comme le pavé numérique.

Merci pour votre future aide.
Cordialement

kilikamars: Pour tout ce qui est partie réglage du temps et de la température j'ai eu 2 idées :soit via 2 potentiomètres un pour le temps et un pour la température(mais le problème je ne trouve pas cette idées très précise) soit en utilisant un pavé numérique.

Pour faire un choix éclairé, il faut d'abord définir le besoin. Quelle plage de température dois-tu définir? Avec quelle précision? Quelle plage de temps dois-tu définir? Avec quelle précision?

Pour une yaourtière, la température doit se situer dans une plage 40 à 45°C environ, soit 5 degrés. Pour la précision, le degrés est largement suffisant. Donc si tu utilises un potentiomètre qui va te retourner une valeur entre 0 et 1023 tu as largement de quoi programmer ta température. En ce qui concerne le temps de fermentation on va dire entre 5 et 12 heures. Pour la précision, une résolution de 5 minutes est largement suffisante (je pense même que 15 minutes conviendrait très bien). Encore une fois, avec un potentiomètre c'est tout à fait possible. Le curseur sur le bouton du potentiomètre fait en même temps fonction d'affichage de la consigne. La consommation est minimale. Le fonctionnement est simple et intuitif.

Après, tu peux faire un exercice de style avec un écran graphique, voir même la programmation par ton téléphone portable en ajoutant une liaison WiFi. Mais, n'est-ce pas un peu "over engineered" pour faire des yaourts.

Personnellement, j'ai une yaourtière depuis plus de 15 ans. Il y a juste un curseur pour le temps (plage de 5 à 11heures, arrêté sur la position 9h depuis des temps immémoriaux) et les yaourts sont parfaits.

Moins y'a de réglage, moins y'a de plantage.......

Quel tête en l'air je fais merci de m'avoir rappeler ça donc voici pour les données de temps et de température: température : programmable de 30° à 60° suivant le type de yaourt. temps de chauffe réglable de 15 minute à 4 heures j'ai tout convertis en minute, je pense plus facile pour les compte à rebours. Après peut être la possibilité de convertir le temps rentrer pour l'avoir sous la forme heure/minute.