Bonjour à tous,

Cela fait un (long)moment que j'ai mis de coté la programmation. Et voilà... je reviens avec une idée qui me taraude la tête depuis peu.

Je voudrais faire un suivit de soleil avec un petit panneau photovoltaïque qui alimentera un petit ventilateur en fonction de la température intérieure de mon abris de jardin.

J'ai déjà commandé la partie mécanique qui supportera le panneau. je possède une mega 2560 et j'ai déjà fait un petit sketch arduino pour le capteur LM35. A priori le prog fonctionne mais je voudrais peaufiner la mesure et implémenter un hystérésis.

J'ai eu beau lire et relire des exemples mais je bloque. J'aurais besoin d'un peu d'aide pour intégrer ça dans mon prog.

Merci en attendant...

Georges

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
 
/*
   Code d'exemple pour le capteur LM35 (2°C ~ +110°C) avec une meilleure précision.
*/
#include <LiquidCrystal_I2C.h>        // Include the required Arduino libraries:
LiquidCrystal_I2C LCD(0x27, 16, 2);   // Create a new instance of the LiquidCrystal_I2C class:
 
float Temp = 0;
 
byte Degree[] = {          // Degree symbol:
  B00111,
  B00101,
  B00111,
  B00000,
  B00000,
  B00000,
  B00000,
  B00000,
};
 
byte EAccentAigu[] = {     // e accent aigu
  B00010,
  B00100,
  B01110,
  B10001,
  B11111,
  B10000,
  B01110,
  B00000,
};
 
 
// Fonction setup(), appelée au démarrage de la carte Arduino
void setup() {
 
  // Initialise la communication avec le PC
  Serial.begin(9600);
 
  // Améliore la précision de la mesure en réduisant la plage de mesure
  analogReference(INTERNAL1V1); // Pour Arduino MEGA 2560
  pinMode(13, OUTPUT);       // met la broche numérique en sortie
 
  LCD.init();                     // Start the LCD and turn on the backlight:
  LCD.backlight();
  LCD.createChar(0, Degree);      // Create a custom character:
  LCD.createChar(1, EAccentAigu);
 
}
 
// Fonction loop(), appelée continuellement en boucle tant que la carte Arduino est alimentée
void loop() {
 
  // Mesure la tension sur la broche A11
  int Temp = analogRead(A1);
 
  // Transforme la mesure (nombre entier) en température via un produit en croix
  float temperature_celcius = Temp * (1.1 / 1008.0 * 100.0);
 
  // Envoi la mesure au PC pour affichage et attends 1 seconde
  Serial.println(temperature_celcius);
 
  delay(1000);
  // 
  LCD.setCursor(0, 0);                // Print the temperature on the LCD;
  LCD.print ("Temp");                  // mot Température avec accent aigu
  LCD.write (byte (1));               // affiche le caractère personnalisé EAccentAigu
  LCD.print ("rature:");
 
  LCD. setCursor ( 0, 1 ) ;
  LCD.print ((int)(float) (temperature_celcius));
  LCD.print('.');
  LCD. print ((int)((float)(temperature_celcius - (int)temperature_celcius) * 10 )) ;
  LCD. write(byte (0)) ;             // affiche le caractère personnalisé Degré
  LCD. print ( "C" ) ;
 
if  (temperature_celcius >= 26.5){
    digitalWrite (13, HIGH) ;
  }
  else {
    digitalWrite (13, LOW) ;
  }
 
}