Bonjour,
Je cherche à faire un module de commande pour un chauffe-eau en fonction de l'intensité lumineuse. l'idée est que lorsque l'intensité lumineuse est suffisante, cela enclenche le relai qui enclenche le contacteur du chauffe-eau (je fonctionne avec des panneaux solaires).
Por cela, j'ai utilisé un capteur de luminosité BH1750, un relai, une led témoin tout cela branché sur un arduino uno alimenté par USB.
Les branchements électriques fonctionne et je reçois bien des valeurs sur l'arduino mais le programme ne boucle pas et s'arrête au bout d'un moment.
Quelqu'un pourrait-il m'aider pour que le programme boucle et qu'il fonctionne tout le temps ?
/*
Example of BH1750 library usage.
This example initialises the BH1750 object using the default high resolution
continuous mode and then makes a light level reading every second.
Connections
- VCC to 3V3 or 5V
- GND to GND
- SCL to SCL (A5 on Arduino Uno, Leonardo, etc or 21 on Mega and Due, on
esp8266 free selectable)
- SDA to SDA (A4 on Arduino Uno, Leonardo, etc or 20 on Mega and Due, on
esp8266 free selectable)
- ADD to (not connected) or GND
ADD pin is used to set sensor I2C address. If it has voltage greater or equal
to 0.7VCC voltage (e.g. you've connected it to VCC) the sensor address will be
0x5C. In other case (if ADD voltage less than 0.7 * VCC) the sensor address
will be 0x23 (by default).
*/
#include <BH1750.h>
#include <Wire.h>
BH1750 lightMeter;
void setup() {
Serial.begin(9600);
// Initialize the I2C bus (BH1750 library doesn't do this automatically)
Wire.begin();
// On esp8266 you can select SCL and SDA pins using Wire.begin(D4, D3);
// For Wemos / Lolin D1 Mini Pro and the Ambient Light shield use
// Wire.begin(D2, D1);
lightMeter.begin();
Serial.println(F("BH1750 Test begin"));
}
void loop() {
float lux = lightMeter.readLightLevel();
Serial.print("Light: ");
Serial.print(lux);
Serial.println(" lx");
delay(1000);
}
Il peut fonctionner en différents modes :
enum Mode {
// same as Power Down
UNCONFIGURED = 0,
// Measurement at 1 lux resolution. Measurement time is approx 120ms.
CONTINUOUS_HIGH_RES_MODE = 0x10,
// Measurement at 0.5 lux resolution. Measurement time is approx 120ms.
CONTINUOUS_HIGH_RES_MODE_2 = 0x11,
// Measurement at 4 lux resolution. Measurement time is approx 16ms.
CONTINUOUS_LOW_RES_MODE = 0x13,
// Measurement at 1 lux resolution. Measurement time is approx 120ms.
ONE_TIME_HIGH_RES_MODE = 0x20,
// Measurement at 0.5 lux resolution. Measurement time is approx 120ms.
ONE_TIME_HIGH_RES_MODE_2 = 0x21,
// Measurement at 4 lux resolution. Measurement time is approx 16ms.
ONE_TIME_LOW_RES_MODE = 0x23
};
J'ai mis une valeur au hasard pour le seuil déclenchement, à déterminer empiriquement en faisant en sorte que les 2 valeurs soient suffisamment éloignées pour éviter les commutation intempestives.
Bien vu @fdufnews,
Je n'avais pas envisagé le fait que le système pouvait fleurter avec le seuil de déclenchement du relais. J'ai vu uniquement l'aspect programmation alors que dans les faits la lumière ne varie pas forcément brutalement. Il faut donc effectivement fixer des seuils.
Bonne soirée.