Une âme généreuse pour me faire un petit programme ?

Bonjour à tous, je cherche quelqu'un qui pourrait me faire un petit programme , j'ai fait un petit peu d'Arduino il y a une dizaine d'années mais aujourd'hui à 55 ans je suis trop vieux pour me replonger là-dedans. Mais il me reste le matos.
Mon besoin est un programme d' Arduino Uno qui ferait qu'une sonde de température Lm 35 commande pour fermer un circuit contact sec pendant une seconde quand la température dépasse 30 degrés. Et de nouveau commander le contact sec quand la température redescend. Si quelqu'un est volontaire pour m'aider bien sûr je lui donnerai plus d'explications et le but de mon projet.
Merci de votre aide
Gérard

Salut @gelesfois
D'habitude, nous aidons les demandeurs à faire leur propre code, mais nous ne faisons pas le code a leur place.
Je serai ravi de t'aider sur ton projet, qui semble, à première vue, relativement facile :wink:
On trouve pleins de ressources sur Internet pour programmer une soude LM35 avec un Arduino :
https://www.carnetdumaker.net/articles/mesurer-une-temperature-avec-un-capteur-lm35-et-une-carte-arduino-genuino/
ou :

ou encore :
https://arduino-france.site/capteur-lm35/
enfin bref...
Ton capteur est il en module ?

Bonne bidouille

Amitiés
Pandaroux007

Allons allons c’est très jeune !!!

J’ai demandé à chatGPT juste avec votre message et voilà la proposition

// chatGPT a pondu cela

// Broche à laquelle la sonde LM35 est connectée
const int pinLM35 = A0;

// Broche à laquelle le relais est connecté
const int pinRelay = 2;

// Seuil de température en degrés Celsius
const float seuilTemperature = 30.0;

// Variable pour stocker la lecture de la sonde LM35 et l'état du relais
int lectureLM35;
bool relaisActive = false;

void setup() {
  // Initialisation de la broche du relais en tant que sortie
  pinMode(pinRelay, OUTPUT);
  // Commencer la communication série
  Serial.begin(115200);
}

void loop() {
  // Lecture de la tension de la sonde LM35
  lectureLM35 = analogRead(pinLM35);
  
  // Conversion de la lecture en degrés Celsius
  float temperature = (lectureLM35 * 5.0 / 1024.0) * 100.0;

  // Afficher la température dans le moniteur série
  Serial.print("Température : ");
  Serial.print(temperature);
  Serial.println(" °C");

  // Vérifier si la température dépasse le seuil
  if (temperature > seuilTemperature) {
    if (!relaisActive) {
      // Activer le relais pendant 1 seconde
      digitalWrite(pinRelay, HIGH);
      delay(1000);
      digitalWrite(pinRelay, LOW);
      relaisActive = true;
    }
  } else {
    relaisActive = false;
  }

  // Attendre un court délai avant la prochaine lecture
  delay(1000);
}

Ce serait bien sans doute de parler d’un hysteresis de 2° lui ai-je dit et il m’a donné cela


// Broche à laquelle la sonde LM35 est connectée
const int pinLM35 = A0;

// Broche à laquelle le relais est connecté
const int pinRelay = 2;

// Seuil de température en degrés Celsius
const float seuilTemperature = 30.0;
const float hysteresis = 2.0;

// Variable pour stocker la lecture de la sonde LM35 et l'état du relais
int lectureLM35;
bool relaisActive = false;

void setup() {
  // Initialisation de la broche du relais en tant que sortie
  pinMode(pinRelay, OUTPUT);
  // Commencer la communication série
  Serial.begin(115200);
}

void loop() {
  // Lecture de la tension de la sonde LM35
  lectureLM35 = analogRead(pinLM35);
  
  // Conversion de la lecture en degrés Celsius
  float temperature = (lectureLM35 * 5.0 / 1024.0) * 100.0;

  // Afficher la température dans le moniteur série
  Serial.print("Température : ");
  Serial.print(temperature);
  Serial.println(" °C");

  // Vérifier si la température dépasse le seuil supérieur
  if (temperature > (seuilTemperature + hysteresis)) {
    if (!relaisActive) {
      // Activer le relais pendant 1 seconde
      digitalWrite(pinRelay, HIGH);
      delay(1000);
      digitalWrite(pinRelay, LOW);
      relaisActive = true;
    }
  }
  // Vérifier si la température est inférieure au seuil inférieur
  else if (temperature < (seuilTemperature - hysteresis)) {
    relaisActive = false;
  }

  // Attendre un court délai avant la prochaine lecture
  delay(1000);
}

(Il a un peu merdé sur le déclenchement)

Merci de vos réponses j'ai bien testé de le faire à moi-même aider de chatgpt , seulement voilà cela ne me semble pas vraiment adapté à mon besoin de plus il donne que très peu d'indications pour les branchements. Je n'ai plus les compétences pour le faire moi-même, peut-être je ne l'ai jamais eu d'ailleurs.

Voici mon projet : je souhaite commander un vérin de portail (qui a toute son électronique et son alimentation) pour ouvrir et fermer des fenêtres d'une serre pour éviter qu'il fasse trop chaud à l'intérieur. L'électronique du vérin de portail peut-être commander parce que je crois qu'on appelle un "contact sec" c'est-à-dire il y a deux fils sans courant à l'intérieur que si on met en contact d'une seconde ça actionne le vérin dans un sens ouverture et si on refait le contact sec ça actionne le vérin dans l'autre sens fermeture.
Donc je voudrais à l'aide d'une carte Arduino Uno que je possède et une sonde de température LM35 faire en sorte que quand la température monte dans la serre, admettons 30 degrés ça actionne une première fois le contact sec pour ouvrir les fenêtres et quand la température redescend en dessous de 30 ou en dessous de 20 sa refait de le contact sec pour refermer le vérin.
Ça c'est la version simple de base. Cela me suffirait.
Mais en option une LED qui s'allumerait quand le contact est commandé ça serait pas mal et j'ajouterai un bouton poussoir pour commander les vérins manuellement ça encore je dois pouvoir le faire sans passer par l'Arduino.

Sans vouloir être désobligeant, qu'es ce qui à 55 ans t'empêche de t'y remettre ou même de t'y mettre.
Puisque tu semble avoir un besoin, c'est l'occasion?

Salut.
Même à 66 ans je n'ai pas l'impression d'avoir perdu mes neurones au point de ne plus pouvoir apprendre quoi que ce soit, bien au contraire.
Faux problème., ou flemmardise intellectuelle.
Mais il y a de bons samaritains sur le forum qui sauront te satisfaire, je n'en doute pas.

Si Rémy est partant ça lui fait un bon projet d’entraînement

Pour info il a 13 ans, donc s’il a pu s’y mettre, pas de raison que vous n’y arriviez pas

je ne peux plus me concentrer et j'ai perdu une partie de la vue depuis un petit avc il y a 5 ans, bien soignée mais des séquelle " je suis devenue idiot!", rien que pour utiliser ce forum je galère, je peux rester bloquer 15' devants une page sans savoir quoi faire, avant j'étais vif et je bidouillais pas mal l'informatique.
Du coup aujourd'hui je me passionne pour le bricolage manuel, cet été j'ai fabriqué une verrière en matériau de récupération, et j'aurai besoin de votre aide pour faire mon projet d'aération automatique, et même si vous me faite le programme j'aurai de gros effort à faire pour réapprendre à téléverser, connecter et finaliser au propre l'ensemble.

A 77 ans, tu es encore un gamin pour moi, :stuck_out_tongue_winking_eye:
Je ne vais pas t'aider pour le code mais pour le câblage.
La particularité du LM35 est qu'il ne faut pas le câbler n'importe comment.
On lit souvent que ce composant n'est pas précis, c'est faux il est précis, mais il délivre un signal analogique et il y a des choses simples à connaitre pour utiliser un signal analogique.

ESSENTIEL
Le lm35 délivre 10 mV par degré => il ne faut pas perdre ou gagner des "faux degrés" (10mV = 1°C) dans le câblage.

La difficulté est dans le fil de masse du LM35 qui ne doit servir qu'au LM35.
Strictement rien d'autre ne doit être connecté sur le fil de masse du LM35.

Toute la théorie électronique est basée sur le fait que la masse est partout uniforme , ce qui n'est pas vraiment possible. Le cuivre est un très bon conducteur mais il a une résistance, je rappelle qu'avec le LM35, on parle de mesurer des millivolts.

On câble au mieux et le mieux est de faire un câblage des fils de masse en étoile.

  • Le centre de l'étoile est la carte arduino
  • Les fils de masse pour les composants sont les rayons de l'étoile.
  • Il n'y a qu'un composant par rayon.

Merci pour l'info

Pas de flemmardise donc, désolé pour ma remarque.
Si tu n'annonces pas la couleur dès le départ on peut difficilement deviner ...

Je suppose que l'électronique du portail est pourvue d'un récepteur radio pour l'ouverture / fermeture par télécommande.
Cette histoire de contact sec me pose problème. Il est normalement prévu pour l'ouverture / fermeture manuelle du portail, notamment à partir d'un interphone. Le problème est que si l'ARDUINO utilise ce contact sec, il n'a aucune idée de la position réelle du portail. Il faudrait donc ajouter des contacts de fin de course.

Oui effectivement il faut donner la notion à l'Arduino de ne réactiver le contact sec que si la température redescend. Si on dit à l'Arduino de contrôler la température disons toutes les 5 minutes et que la température est toujours au-dessus de 30° disons 35° il va réactiver le contact et donc refermer.
Oui je peux rajouter des contacteurs de fin de course .

Déjà est-ce que l'Arduino peut établir ce contact sec ou faut-il passer par une platine relais ?
Sachant que le relais est déjà sur la carte-mère qui gère le vérin de portail, et que ce n'est qu'une continuité sans voltage qu'il faut faire pendant une seconde.
Ce n'est pas aussi simple qu'il n'y paraît, rien n'est jamais simple j'ai besoin de votre aide pour réalisé le programe.

Contact sec : le plus sûr est d'ajouter un relais, ou plutôt un module, directement commandable par l'ARDUINO :

En repartant du code de J-M-L :


// 1 lecture de la température par seconde pour tester, ensuite 15 minutes (900000ms)
#define POLL    1000

// tension d'alimentation
#define VCC     5.0

// Broche à laquelle la sonde LM35 est connectée
const int pinLM35 = A0;

// Broche à laquelle le relais est connecté
const int pinRelay = 2;

// Broches auxquelles les FDC sont reliés
const int pinCloseFDC = 3;
const int pinOpenFDC = 4;

// Seuil de température en degrés Celsius
const float seuilTemperature = 30.0;
const float hysteresis = 2.0;

// Variable pour stocker la lecture de la sonde LM35 et l'état du relais
int lectureLM35;

void contactSec(void)
{
  // Activer le relais pendant 1 seconde
  digitalWrite(pinRelay, HIGH);
  delay(1000);
  digitalWrite(pinRelay, LOW);
}

void setup() {
  // Initialisation de la broche du relais en tant que sortie
  pinMode(pinRelay, OUTPUT);
  // Initialisation des broches FDC en entrée
  pinMode(pinCloseFDC, INPUT_PULLUP);
  pinMode(pinOpenFDC, INPUT_PULLUP);
  // Commencer la communication série
  Serial.begin(115200);
  // au cas où aucun FDC n'est fermé
  if (digitalRead(pinOpenFDC) == HIGH && digitalRead(pinCloseFDC) == HIGH) {
    contactSec();
  }
}

void loop() {
  // Lecture de la tension de la sonde LM35
  lectureLM35 = analogRead(pinLM35);

  // Conversion de la lecture en degrés Celsius
  float temperature = (lectureLM35 * VCC / 1024.0) * 100.0;

  // Afficher la température dans le moniteur série
  Serial.print("Température : ");
  Serial.print(temperature);
  Serial.println(" °C");

  // Vérifier si la température dépasse le seuil supérieur
  if (temperature > (seuilTemperature + hysteresis)) {
    // on active le relais si la fenêtre est fermée
    if (digitalRead(pinCloseFDC) == LOW) {
      contactSec();
    }
  }
  // Vérifier si la température est inférieure au seuil inférieur
  else if (temperature < (seuilTemperature - hysteresis)) {
    // on active le relais si la fenêtre est ouverte
    if (digitalRead(pinOpenFDC) == LOW) {
      contactSec();
    }
  }
  // Attendre un court délai avant la prochaine lecture
  delay(POLL);
}

Le LM35 est sur A0.
Le module relais est sur D2.
Les FDC sont câblés entre entrée (D3 et D4) et GND.

Code à tester bien sûr. Il se compile, c'est tout.

Il est rare que le bon samaritain se réveille chez moi :wink: