Un sujet déjà visité je pense, mais je voulais le voir sous un nouvel angle. D'autant que je débute sur l'Arduino.
Donc, j'ai un Uno, deux LDR accolés à des résistances de 10K, une diode rouge avec sa résistance de 220 Ohms .
L'idée est de placer les deux LDR dans le frigo et dans le congélateur. Tant que ces LDR détectent de la lumière (donc portes ouvertes) la diode rouge est allumée.
L'ensemble me donne entière satisfaction, c'est la raison pour laquelle je voulais le partager. Merci pour votre retour pour optimiser ce projet.
int monCapteur1=A0;
int monCapteur2=A1;
int monLED1=11;
int sum=0;
float Capteur1value =0;
float Capteur2value =0;
void setup() {
Serial.begin (9600);
while(!Serial);
pinMode(monCapteur1,INPUT);
pinMode(monCapteur2,INPUT);
pinMode(monLED1,OUTPUT);
}
void loop() {
int mapped1Value = map(analogRead (A0),0,1023,0,255);
int mapped2Value = map(analogRead (A1),0,1023,0,255);
Capteur1value = analogRead(A0);
Capteur2value = analogRead(A1);
Serial.println(mapped1Value);
Serial.println(mapped2Value);
delay (500);
sum = (mapped1Value)+(mapped2Value);{
Serial.println(sum);
delay(500);
if (sum>1){
digitalWrite(monLED1,HIGH);
}
else {
digitalWrite (monLED1,LOW);
}
delay(300);
}}
Merci pour ces retours et la pédagogie qu'ils renferment.
Dans l'idée, bien sûr on peu se passer de l'Arduino en posant des commutateurs plafonniers de voitures. Mais l'Arduino, le composant LDR et la LEd viennent s'intégrer sans toucher à la structure existante du meuble frigo/congel.
On peut aussi regretter et se demander pourquoi cet équipement n'est pas inclus dans le produit de base. Ici il s'agît d'un meuble plutôt "haut de gamme". Mais bon, ceci est une autre histoire.
Merci en tous cas pour vos conseils. Si souhaité par la communauté, je pourrai documenter avec une ou deux photos, sans vouloir alourdir le forum.
Bonnes Fêtes !
Bonsoir,
Alors après 3 semaines d'utilisation je dois m'atteler à une extension. Le voyant rouge ne suffit pas. Je vais tenter de compléter avec un buzzer qui me fera une mélodie sympa si le led est allumée depuis plus de x minutes.
J'ai la mélodie générique sur une portée, je planche sur le code et je reviens avec.
Bonne soirée
Je poursuis mon projet. Donc dans un premier temps (après avoir pigé (entre autre) que tout ce qui était Serial.println, n'avait aucun sens dans mon plan et qu'il était aussi très important de chercher les variables les plus "légères" , j'ai donc repris la leçon en y ajoutant la musique.
Cela donne, et c'est très sympa :
#include "pitches.h"
// notes in the melody:
const byte pinCapteurRefrigerateur=A0;
const byte pinCapteurCongelateur=A1;
const byte pinLed=11;
const int BUZZER=8;
const int valeurSeuil=10;
int melody[] = {
NOTE_C5, NOTE_C5, NOTE_G5, NOTE_G5, NOTE_A5, NOTE_A5, NOTE_G5, NOTE_G5, NOTE_F5, NOTE_F5, NOTE_E5, NOTE_E5, NOTE_D5, NOTE_D5, NOTE_C5};
int duration = 50; // durée des notes
void setup() {
pinMode(pinLed,OUTPUT);
pinMode (BUZZER,OUTPUT);
}
void loop() {
for (int thisNote = 0; thisNote < 15; thisNote++) {
int v1 = analogRead (pinCapteurRefrigerateur);
int v2 = analogRead (pinCapteurCongelateur);
if (v1+v2>valeurSeuil){
digitalWrite(pinLed,HIGH);
tone (BUZZER,melody[thisNote], duration);
delay(250); }
else {
digitalWrite (pinLed,LOW);
noTone (BUZZER);
}} }
Mais en ce qui concerne la temporisation (je voudrai installer un délai) la musique doit venir si une des deux portes reste ouverte plus de 3 minutes, alors dans ce cas, j'atteins mes limites de débutant avec ce code que je n'arrive pas à rendre correct :
#include "pitches.h"
// notes de la musique
const byte pinCapteurRefrigerateur = A0;
const byte pinCapteurCongelateur = A1;
const byte pinLed = 11;
const int Buzzer = 8;
const int valeurSeuil = 5;
unsigned long openTime = 0;
int melody[] = {
NOTE_C5, NOTE_C5, NOTE_G5, NOTE_G5, NOTE_A5, NOTE_A5, NOTE_G5, NOTE_G5, NOTE_F5, NOTE_F5, NOTE_E5, NOTE_E5, NOTE_D5, NOTE_D5, NOTE_C5
};
int duration = 50; // durée des notes
void setup() {
pinMode(pinLed, OUTPUT);
pinMode (Buzzer, OUTPUT);
}
void loop() {
for (int thisNote = 0; thisNote < 15; thisNote++)
int v1 = analogRead (pinCapteurRefrigerateur);
int v2 = analogRead (pinCapteurCongelateur);
if (v1+v2>valeurSeuil){
{
digitalWrite(pinLed, HIGH); //une des deux porte est encore ouverte
{
openTime = millis();
}
if (millis() - openTime > 30000) //après 3 minutes la musique arrive
{
digitalWrite(pinLed, HIGH);
tone (Buzzer, melody[thisNote], duration);
delay(250);}
else //portes fermées
{
noTone(buzzer); // la musique s'arrête
digitalWrite(pinLed, LOW); // et la led s'éteint
}}
}
Si vous pouvez m'aiguiller vers la meilleure solution. Merci
Ta boucle principale est celle de la mélodie, ça n'a pas de sens. En fait, le plus efficace serait de faire une machine d'état, @J-M-L a fait un très bon tuto sur le sujet.
L'idée est de surveiller en permanence le changement d'état des capteurs. Supposons pour simplifier qu'il n'y a qu'un seul capteur.
S'il passe de fermé à ouvert, tu détectes une ouverture : tu lances le chrono openTime = millis();
Si le capteur rechange d'état, tu arrêtes le chrono, par exemple en faisant openTime = 0;
Sinon, tu surveilles le chrono : s'il dépasse la durée maximale (3 minutes ? 30 secondes plutôt), tu commences à jouer la musique.
Mais comme il faut pouvoir arrêter la musique si le capteur passe d'ouvert à fermé, c'est là que la machine d'état trouve son intérêt.
Tu prends une variable qui compte les notes thisNote et tu joues cette note.
Puis tu surveilles le chrono : s'il dépasse les 250ms, tu incrémentes thisNote et tu joues la note suivante, etc. Tout ça en surveillant le capteur pour arrêter la musique s'il passe d'ouvert à fermé.
Si tu arrives à la fin de la musique, tu recommences à zéro (avec la fonction modulo : le %).
Est-ce clair ?
La machine d'état est un peu complexe à concevoir, mais une fois que tu l'auras fait, ce sera simple à programmer.
Je viens de voir 'sur le forum) que vous aviez le même soucis il y a quelques années.
Pour info je compte poser le Uno à l'extérieur, alimenté direct en 5v uniquement dans la journée. Le soir, lorsque le dernier ferme les pièces, (communes) toutes le veilleuses sont coupés. Donc le Uno est à l'extérieur et les deux LDR sont positionnés avec des connections plates, à l'intérieur de chacun de portes.
Bon, j'ai réussi le timer délai déclanchement musique, reste la machine à état pour la gestion de la musique. Je reviens bientôt avec un code.
Merci.
Bien sûr, mais d'une part il n'est pas souhaitable qu'un frigo ne soit pas rigoureusement droit sur les trois axes (efficacité du moteur, circulation des fluides, économies d'énergies) mais de plus la partie congélateur est dotée sur mon modèle d'un verrouillage de porte manuel. Je suis comme toi pas du genre à faire le tour du rond point si je vais tout droit, mais là il n'y avait pas d'autre solution !!