Projet ventilation cheminée avec ventilateur pwm + sonde température + télécommande + afficheur 7 segment

Bonjour a tous ,

Je suis nouveaux sur le forum et également débutent sur arduino .

J'aurai besoin de votre aide pour mon projet qui consiste a contrôlés la ventilation d'air chaux de ma cheminée .

Je m'explique je veux contrôlés 2 ventilateur de pc 4 pin en utilisent le pwm pour varié la vitesse par le biais de la température et de forces la ventilation par une télécommande ir et je voudrais 3 plage de vitesse (petite 1 , moyenne 2 , grande vitesse 3 ) et pour finir je voudrais afficher ses vitesse (1 ,2 ,3 ) sur un afficheur 7 segment je crois qu'il et a anode commune (ça fais très longtemps que je l'ai donc je n'ai pas plus d’info, il faudrait que je le teste) .

Par contre j'ai un petit problème avec la télécommande ir je n'arrive pas a ope-tenir les code transmission , je pense avoir tous teste se que j'ai pu trouver sur le net. Voila se que j'ai :

Voici la liste des composant que j'ai en ma possession :

Carte arduino mega 2560

Alimentation 12v

Ventilation pc

sonde de temperature

télécommande ir

afficheur 7 segment anode commune ?:

Voici le code arduino que j'esseille d'utiliser (je c'est qu'il est incomplet mais je ne c'est pas ce qu'il manque ) :

#include <IRremote.h>
#include <Thermocouple.h>
#include <MAX6675_Thermocouple.h>
#include <SmoothThermocouple.h>

#define SCK_PIN 23 // temperature
#define CS_PIN 24  // temperature
#define SO_PIN 22  // temperature

/**
  Smoothing factor of a temperature value.
*/
#define SMOOTHING_FACTOR 5

Thermocouple* thermocouple = NULL;


const int fanPin = 13; // Broche <link category="SCIENCE">PWM</link> pour le ventilateur
const int displayPins[] = {40,41,42,43,44,45,46}; // Broches pour l'afficheur 7 segments (segments A, B, C, D, E, F, G)

const int temperatureThreshold = 25; // Seuil de température pour démarrer le ventilateur
const int minSpeed = 0; // Vitesse minimale du ventilateur (0-255)
const int maxSpeed = 255; // Vitesse maximale du ventilateur (0-255)

IRrecv irReceiver(12); // Broche digitale pour le récepteur infrarouge
decode_results irResults{ // Variable pour stocker les résultats de décodage infrarouge

};
void setup(){
  Serial.begin(9600);

  Thermocouple* originThermocouple = new MAX6675_Thermocouple(SCK_PIN, CS_PIN, SO_PIN);
  thermocouple = new SmoothThermocouple(originThermocouple, SMOOTHING_FACTOR);

  /* OR
    thermocouple = new SmoothThermocouple(
      new MAX6675_Thermocouple(SCK_PIN, CS_PIN, SO_PIN),
      SMOOTHING_FACTOR
    );
  */
}
  pinMode(fanpin, OUTPUT);
  irReceiver.enableIRIn();
  
void loop() {
  int temperature = readTemperature();
  
  if (temperature >= temperatureThreshold) {
    int fanSpeed = map(temperature, temperatureThreshold, 50, minSpeed, maxSpeed);
    analogWrite(fanPin, fanSpeed);
  } else {
    analogWrite(fanPin, 0);
  }
  
  if (irReceiver.decode(&irResults)) {
    switch (irResults.value) {
      // Ajouter les cas pour les commandes de la télécommande
    
    case  :Serial.print(F("1"));    
    analogWrite(100)
    break;
   
    case  :Serial.print(F("2"));    
    analogWrite(180)
    break;
    
    case  :Serial.print(F("3"));    
    analogWrite(250)
    break;
    }

   
    irReceiver.resume();
  }
  
  displaySpeed(fanSpeed);
}

int readTemperature() {
  int sensorValue = analogRead(temperaturePin);
  
  // Reads temperature
  const double celsius = thermocouple->readCelsius();
  
  // Output of information
  Serial.print("Temperature: ");
  Serial.print(celsius);
  Serial.print(" C, ");
  
  return temperature;
}

void displaySpeed(int speed) {
  // Faire l'affichage de la vitesse sur l'afficheur 7 segments

//chifre 1//
digitalWrite (A,HIGH);
digitalWrite (B,LOW);
digitalWrite (C,LOW);
digitalWrite (D,HIGH);
digitalWrite (E,HIGH);
digitalWrite (F,HIGH);
digitalWrite (G,HIGH);

//chifre 2//
digitalWrite (A,LOW);
digitalWrite (B,LOW);
digitalWrite (C,HIGH);
digitalWrite (D,LOW);
digitalWrite (E,LOW);
digitalWrite (F,HIGH);
digitalWrite (G,LOW);

//chifre 3//
digitalWrite (A,LOW);
digitalWrite (B,LOW);
digitalWrite (C,LOW);
digitalWrite (D,LOW);
digitalWrite (E,HIGH);
digitalWrite (F,HIGH);
digitalWrite (G,LOW);

}

Je pense n'avoir rien oublier , si toute fois ..... je répondrai le mieux que je peu .
Je remercie d’avance tous eu qui prendrons le temps de m'aider .

Bonsoir necron39

Est ce que la LED de réception du module IR, clignote quand tu presses une touche de la télécommande.
Tu peux tester l'émission IR de ta télécommande au moyen de l'appareil de photo de ton smartphone, tu dois y voir une petite bleue.

Cordialement
jpbbricole

Bonjour @necron39, comme la bibliothèque IR vous l'indique via le message sur le moniteur série, vous utilisez une forme d'ancien code non prise en charge par la bibliothèque actuelle que vous utilisez.
La méthode correcte actuelle serait :

#include "IRremote.h"

const int RECV_PIN = 11;

void setup() {  
  Serial.begin (9600);  
  IrReceiver.begin(RECV_PIN, ENABLE_LED_FEEDBACK);
}

void loop (){

  if (IrReceiver.decode()) {
    Serial.println (IrReceiver.decodedIRData.command);   
    IrReceiver.resume();
  }

}

Salutations.

Bonsoir ,oui la led de réception du module ir fonctionne parfaitement ( elle clignote ).

Et l'émission de la télécommande fonctionne bien aussi .

Cordialement

Bonsoir , mille merci ça alaire de fonctionner .
Voila se que job-tien :

1= 17:52:58.118->69

2= 17:52:28.641->70

3= 17:54:03.656->71

Cordialement

Bon, il ne vous reste plus qu'à remplacer le "switch-case" par les codes obtenus

if (IrReceiver.decode()) {
    switch (IrReceiver.decodedIRData.command) {
      // Ajouter les cas pour les commandes de la télécommande

      case 69 :
        Serial.print(F("1"));
        //analogWrite(100)
        break;

      case 70 :
        Serial.print(F("2"));
        //analogWrite(180)
        break;

      case 71 :
        Serial.print(F("3"));
        //analogWrite(250)
        break;
    }

    IrReceiver.resume();
  }

Bonsoir,

Merci pour votre aide .J'ai fait la modification , mais j'ai toujours des erreur .
Pouvez vous m'aider pour la suite ?

Cordialement

Quelles sont les erreurs ?
Téléchargez le code et expliquez-le bien.

Bonsoir,

Je crois que c'est le code entier qui a des erreur .
Voici la liste d'erreur qu'il me donne :

Arduino : 1.8.19 (Windows 7), Carte : "Arduino Mega or Mega 2560, ATmega2560 (Mega 2560)"

C:\Users\Nicolas\Documents\Arduino\cheminée\cheminee\cheminee.ino:31:1: warning: invalid conversion from 'int' to 'decode_type_t' [-fpermissive]

cheminee:33:1: error: expected ',' or ';' before 'void'

C:\Users\Nicolas\Documents\Arduino\cheminée\cheminee\cheminee.ino: In function 'void setup()':

cheminee:47:11: error: 'fanpin' was not declared in this scope

C:\Users\Nicolas\Documents\Arduino\cheminée\cheminee\cheminee.ino:47:11: note: suggested alternative: 'fanPin'

C:\Users\Nicolas\Documents\Arduino\cheminée\cheminee\cheminee.ino: In function 'void loop()':

C:\Users\Nicolas\Documents\Arduino\cheminée\cheminee\cheminee.ino:60:35: warning: 'bool IRrecv::decode(decode_results*)' is deprecated: Please use IrReceiver.decode() without a parameter and IrReceiver.decodedIRData. . [-Wdeprecated-declarations]

In file included from C:\Users\Nicolas\Documents\Arduino\cheminée\cheminee\cheminee.ino:1:0:

C:\Users\Nicolas\Documents\Arduino\libraries\IRremote\src/IRremote.h:20:6: note: declared here

bool IRrecv::decode(decode_results *aResults) {

  ^~~~~~

cheminee:65:20: error: too few arguments to function 'void analogWrite(uint8_t, int)'

In file included from sketch\cheminee.ino.cpp:1:0:

C:\Users\Nicolas\AppData\Local\Arduino15\packages\arduino\hardware\avr\1.8.5\cores\arduino/Arduino.h:139:6: note: declared here

void analogWrite(uint8_t pin, int val);

  ^~~~~~~~~~~

cheminee:69:20: error: too few arguments to function 'void analogWrite(uint8_t, int)'

In file included from sketch\cheminee.ino.cpp:1:0:

C:\Users\Nicolas\AppData\Local\Arduino15\packages\arduino\hardware\avr\1.8.5\cores\arduino/Arduino.h:139:6: note: declared here

void analogWrite(uint8_t pin, int val);

  ^~~~~~~~~~~

cheminee:73:20: error: too few arguments to function 'void analogWrite(uint8_t, int)'

In file included from sketch\cheminee.ino.cpp:1:0:

C:\Users\Nicolas\AppData\Local\Arduino15\packages\arduino\hardware\avr\1.8.5\cores\arduino/Arduino.h:139:6: note: declared here

void analogWrite(uint8_t pin, int val);

  ^~~~~~~~~~~

cheminee:81:16: error: 'fanSpeed' was not declared in this scope

C:\Users\Nicolas\Documents\Arduino\cheminée\cheminee\cheminee.ino:81:16: note: suggested alternative: 'maxSpeed'

C:\Users\Nicolas\Documents\Arduino\cheminée\cheminee\cheminee.ino: In function 'int readTemperature()':

cheminee:85:32: error: 'temperaturePin' was not declared in this scope

cheminee:95:10: error: 'temperature' was not declared in this scope

C:\Users\Nicolas\Documents\Arduino\cheminée\cheminee\cheminee.ino:95:10: note: suggested alternative: 'readTemperature'

C:\Users\Nicolas\Documents\Arduino\cheminée\cheminee\cheminee.ino: In function 'void displaySpeed(int)':

cheminee:102:15: error: 'A' was not declared in this scope

C:\Users\Nicolas\Documents\Arduino\cheminée\cheminee\cheminee.ino:102:15: note: suggested alternative: 'A9'

cheminee:103:15: error: 'B' was not declared in this scope

C:\Users\Nicolas\Documents\Arduino\cheminée\cheminee\cheminee.ino:103:15: note: suggested alternative: 'B1'

cheminee:104:15: error: 'C' was not declared in this scope

cheminee:105:15: error: 'D' was not declared in this scope

cheminee:106:15: error: 'E' was not declared in this scope

C:\Users\Nicolas\Documents\Arduino\cheminée\cheminee\cheminee.ino:106:15: note: suggested alternative: 'SE'

cheminee:107:15: error: 'F' was not declared in this scope

cheminee:108:15: error: 'G' was not declared in this scope

C:\Users\Nicolas\Documents\Arduino\cheminée\cheminee\cheminee.ino:108:15: note: suggested alternative: 'LG'

exit status 1

expected ',' or ';' before 'void'

Ces erreurs ne sont pas générées par le code du #1. Lequel utilisez-vous ?

Je suis désoler mais pourtant ses erreur vienne bien de se code .

Je vous remet une copie du code .

Cordialement

#include "IRremote.h"
#include <Thermocouple.h>
#include <MAX6675_Thermocouple.h>
#include <SmoothThermocouple.h>

#define SCK_PIN 23 // temperature
#define CS_PIN 24  // temperature
#define SO_PIN 22  // temperature

/**
  Smoothing factor of a temperature value.
*/
#define SMOOTHING_FACTOR 5


Thermocouple* thermocouple = NULL;


const int fanPin = 13; // Broche <link category="SCIENCE">PWM</link> pour le ventilateur
const int displayPins[] = {40,41,42,43,44,45,46}; // Broches pour l'afficheur 7 segments (segments A, B, C, D, E, F, G)

const int temperatureThreshold = 25; // Seuil de température pour démarrer le ventilateur
const int minSpeed = 0; // Vitesse minimale du ventilateur (0-255)
const int maxSpeed = 255; // Vitesse maximale du ventilateur (0-255)

IRrecv irReceiver(12); // Broche digitale pour le récepteur infrarouge
decode_results irResults{ // Variable pour stocker les résultats de décodage infrarouge
69,
70,
71,
}

void setup() {

  Serial.begin(9600);

  Thermocouple* originThermocouple = new MAX6675_Thermocouple(SCK_PIN, CS_PIN, SO_PIN);
  thermocouple = new SmoothThermocouple(originThermocouple, SMOOTHING_FACTOR);

  /* OR
    thermocouple = new SmoothThermocouple(
      new MAX6675_Thermocouple(SCK_PIN, CS_PIN, SO_PIN),
      SMOOTHING_FACTOR
    );
  */

  pinMode(fanpin, OUTPUT);
  irReceiver.enableIRIn();
 }
void loop() {
  int temperature = readTemperature();
  
  if (temperature >= temperatureThreshold) {
    int fanSpeed = map(temperature, temperatureThreshold, 50, minSpeed, maxSpeed);
    analogWrite(fanPin, fanSpeed);
  } else {
    analogWrite(fanPin, 0);
  }
  
  if (irReceiver.decode(&irResults)) {
    switch (irResults.value) {
      // Ajouter les cas pour les commandes de la télécommande
    
    case 69 :Serial.print(F("1"));    
    analogWrite(100)
    break;
   
    case 70 :Serial.print(F("2"));    
    analogWrite(180)
    break;
    
    case 71 :Serial.print(F("3"));    
    analogWrite(250)
    break;
    }

   
    irReceiver.resume();
  }
  
  displaySpeed(fanSpeed);
}

int readTemperature() {
  int sensorValue = analogRead(temperaturePin);
  
  // Reads temperature
  const double celsius = thermocouple->readCelsius();
  
  // Output of information
  Serial.print("Temperature: ");
  Serial.print(celsius);
  Serial.print(" C, ");
  
  return temperature;
}

void displaySpeed(int speed) {
  // Faire l'affichage de la vitesse sur l'afficheur 7 segments

//chifre 1//
digitalWrite (A,HIGH);
digitalWrite (B,LOW);
digitalWrite (C,LOW);
digitalWrite (D,HIGH);
digitalWrite (E,HIGH);
digitalWrite (F,HIGH);
digitalWrite (G,HIGH);

//chifre 2//
digitalWrite (A,LOW);
digitalWrite (B,LOW);
digitalWrite (C,HIGH);
digitalWrite (D,LOW);
digitalWrite (E,LOW);
digitalWrite (F,HIGH);
digitalWrite (G,LOW);

//chifre 3//
digitalWrite (A,LOW);
digitalWrite (B,LOW);
digitalWrite (C,LOW);
digitalWrite (D,LOW);
digitalWrite (E,HIGH);
digitalWrite (F,HIGH);
digitalWrite (G,LOW);

}

Bonjour

Comme indiqué dans le premier message d'erreur, il manque un ; après le } juste avant void setup()

Il faut lire la doc de la librairie

Cette manière de coder est obsolète

Voir le lien ci-dessus pour modifier le programme.


Une remarque.

Quelle est la température de l'air à brasser?
Les ventilateurs de PC ne vont pas supporter des chaleurs très élevées

Bossoir,
Merci je lai corriger . pouvez vous m'aider pour le autre erreur ?
Cordialement

Souvent une première erreur génère en cascade une série d'autres erreurs (c'est le cas ici).
Corrige la première erreur, recompile et s'il reste des erreurs que tu ne peux pas corriger, mets les ici.

Bonsoir,

Merci pour l'info je ne le savait pas.

Pour les ventilateur il ne risque rien ,ils on loin de la cheminée (ils on a environ 80 cm ) et il ne vont que aspirer l'air ambiant qui je pence devrait se trouver a plus ou moins 25° .

Et voici le code que j'ai remodifier j’espère correctement .

#include <IRremote.hpp>
#include <Thermocouple.h>
#include <MAX6675_Thermocouple.h>
#include <SmoothThermocouple.h>

#define SCK_PIN 23 // temperature
#define CS_PIN 24  // temperature
#define SO_PIN 22  // temperature

/**
  Smoothing factor of a temperature value.
*/
#define SMOOTHING_FACTOR 5


Thermocouple* thermocouple = NULL;


const int fanPin = 13; // Broche <link category="SCIENCE">PWM</link> pour le ventilateur
const int displayPins[] = {40,41,42,43,44,45,46}; // Broches pour l'afficheur 7 segments (segments A, B, C, D, E, F, G)
const int temperatureThreshold = 25; // Seuil de température pour démarrer le ventilateur
const int minSpeed = 0; // Vitesse minimale du ventilateur (0-255)
const int maxSpeed = 255; // Vitesse maximale du ventilateur (0-255)

#define IR_RECEIVE_PIN 11
decode_results irResults{ // Variable pour stocker les résultats de décodage infrarouge
0xBA45FF00,
0xB946FF00,
0xB847FF00,
};

void setup() {
  
  Serial.begin(9600);

  Thermocouple* originThermocouple = new MAX6675_Thermocouple(SCK_PIN, CS_PIN, SO_PIN);
  thermocouple = new SmoothThermocouple(originThermocouple, SMOOTHING_FACTOR);

  /* OR
    thermocouple = new SmoothThermocouple(
      new MAX6675_Thermocouple(SCK_PIN, CS_PIN, SO_PIN),
      SMOOTHING_FACTOR);
  */

  pinMode(fanpin, OUTPUT);
  irReceiver.enableIRIn();
 }
void loop() {
  int temperature = readTemperature();
  
  if (temperature >= temperatureThreshold) {
    int fanSpeed = map(temperature, temperatureThreshold, 50, minSpeed, maxSpeed);
    analogWrite(fanPin, fanSpeed);
  } else {
    analogWrite(fanPin, 0);
  }
  
  if (IrReceiver.decode()) {
      Serial.println(IrReceiver.decodedIRData.decodedRawData, HEX); // Print "old" raw data
      // USE NEW 3.x FUNCTIONS

      IrReceiver.resume(); // Enable receiving of the next value
    switch (irResults.value) {
      // Ajouter les cas pour les commandes de la télécommande
    
    case 0xBA45FF00 :Serial.print(F("1"));    
    analogWrite(100)
    break;
   
    case 0xB946FF00 :Serial.print(F("2"));    
    analogWrite(180)
    break;
    
    case 0xB847FF00 :Serial.print(F("3"));    
    analogWrite(250)
    break;
    }

  }
  
  displaySpeed(fanSpeed);
}

int readTemperature() {
  int sensorValue = analogRead(temperaturePin);
  
  // Reads temperature
  const double celsius = thermocouple->readCelsius();
  
  // Output of information
  Serial.print("Temperature: ");
  Serial.print(celsius);
  Serial.print(" C, ");
  
  return temperature;
}

void displaySpeed(int speed) {
  // Faire l'affichage de la vitesse sur l'afficheur 7 segments

//chifre 1//
digitalWrite (A,HIGH);
digitalWrite (B,LOW);
digitalWrite (C,LOW);
digitalWrite (D,HIGH);
digitalWrite (E,HIGH);
digitalWrite (F,HIGH);
digitalWrite (G,HIGH);

//chifre 2//
digitalWrite (A,LOW);
digitalWrite (B,LOW);
digitalWrite (C,HIGH);
digitalWrite (D,LOW);
digitalWrite (E,LOW);
digitalWrite (F,HIGH);
digitalWrite (G,LOW);

//chifre 3//
digitalWrite (A,LOW);
digitalWrite (B,LOW);
digitalWrite (C,LOW);
digitalWrite (D,LOW);
digitalWrite (E,HIGH);
digitalWrite (F,HIGH);
digitalWrite (G,LOW);

}

Voici les erreur que j'ai .

C:\Users\Nicolas\Documents\Arduino\cheminée\cheminee\cheminee.ino:30:1: warning: invalid conversion from 'long unsigned int' to 'decode_type_t' [-fpermissive]

C:\Users\Nicolas\Documents\Arduino\cheminée\cheminee\cheminee.ino:30:1: warning: narrowing conversion of '3108437760' from 'long unsigned int' to 'uint16_t {aka unsigned int}' inside { } [-Wnarrowing]

C:\Users\Nicolas\Documents\Arduino\cheminée\cheminee\cheminee.ino:30:1: warning: large integer implicitly truncated to unsigned type [-Woverflow]

C:\Users\Nicolas\Documents\Arduino\cheminée\cheminee\cheminee.ino: In function 'void setup()':

cheminee:45:11: error: 'fanpin' was not declared in this scope

C:\Users\Nicolas\Documents\Arduino\cheminée\cheminee\cheminee.ino:45:11: note: suggested alternative: 'fanPin'

cheminee:46:3: error: 'irReceiver' was not declared in this scope

C:\Users\Nicolas\Documents\Arduino\cheminée\cheminee\cheminee.ino:46:3: note: suggested alternative: 'IrReceiver'

C:\Users\Nicolas\Documents\Arduino\cheminée\cheminee\cheminee.ino: In function 'void loop()':

cheminee:67:20: error: too few arguments to function 'void analogWrite(uint8_t, int)'

In file included from sketch\cheminee.ino.cpp:1:0:

C:\Users\Nicolas\AppData\Local\Arduino15\packages\arduino\hardware\avr\1.8.5\cores\arduino/Arduino.h:139:6: note: declared here

 void analogWrite(uint8_t pin, int val);

      ^~~~~~~~~~~

cheminee:71:20: error: too few arguments to function 'void analogWrite(uint8_t, int)'

In file included from sketch\cheminee.ino.cpp:1:0:

C:\Users\Nicolas\AppData\Local\Arduino15\packages\arduino\hardware\avr\1.8.5\cores\arduino/Arduino.h:139:6: note: declared here

 void analogWrite(uint8_t pin, int val);

      ^~~~~~~~~~~

cheminee:75:20: error: too few arguments to function 'void analogWrite(uint8_t, int)'

In file included from sketch\cheminee.ino.cpp:1:0:

C:\Users\Nicolas\AppData\Local\Arduino15\packages\arduino\hardware\avr\1.8.5\cores\arduino/Arduino.h:139:6: note: declared here

 void analogWrite(uint8_t pin, int val);

      ^~~~~~~~~~~

cheminee:81:16: error: 'fanSpeed' was not declared in this scope

C:\Users\Nicolas\Documents\Arduino\cheminée\cheminee\cheminee.ino:81:16: note: suggested alternative: 'maxSpeed'

C:\Users\Nicolas\Documents\Arduino\cheminée\cheminee\cheminee.ino: In function 'int readTemperature()':

cheminee:85:32: error: 'temperaturePin' was not declared in this scope

cheminee:95:10: error: 'temperature' was not declared in this scope

C:\Users\Nicolas\Documents\Arduino\cheminée\cheminee\cheminee.ino:95:10: note: suggested alternative: 'readTemperature'

C:\Users\Nicolas\Documents\Arduino\cheminée\cheminee\cheminee.ino: In function 'void displaySpeed(int)':

cheminee:102:15: error: 'A' was not declared in this scope

C:\Users\Nicolas\Documents\Arduino\cheminée\cheminee\cheminee.ino:102:15: note: suggested alternative: 'A9'

cheminee:103:15: error: 'B' was not declared in this scope

C:\Users\Nicolas\Documents\Arduino\cheminée\cheminee\cheminee.ino:103:15: note: suggested alternative: 'B1'

cheminee:104:15: error: 'C' was not declared in this scope

cheminee:105:15: error: 'D' was not declared in this scope

cheminee:106:15: error: 'E' was not declared in this scope

C:\Users\Nicolas\Documents\Arduino\cheminée\cheminee\cheminee.ino:106:15: note: suggested alternative: 'SE'

cheminee:107:15: error: 'F' was not declared in this scope

cheminee:108:15: error: 'G' was not declared in this scope

C:\Users\Nicolas\Documents\Arduino\cheminée\cheminee\cheminee.ino:108:15: note: suggested alternative: 'LG'

exit status 1

'fanpin' was not declared in this scope

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.