Bonjour J'ai monté et programmé l'installation suivante qui fonctionne parfaitement… pendant 10 minutes ! Ensuite la broche qui reçoit la masse du MOC change spontanément de niveau !! Pouvez vous avoir la gentillesse de me dire où j'ai buggé ? Merci.
Le fil pilote du radiateur est commandé par téléphone portable. On capte la tension + du buzzer du téléphone pour allumer une LED / GND du téléphone via une résistance de 270 ohms. Une photorésistance LDR capte le signal lumineux provoqué par chaque sonnerie. Elle est branchée sur l'arduino : +5V / GND via une résistance de 4.7 kO. Ce circuit est séparé de celui du téléphone. La broche analogique A0 mesure la tension de la borne de la photorésistance coté GND. Un phototransistor MOC3041 (+ led de controle // via 3.3 kO) est branchée au +5V et, par la broche 2, à la masse de l'Arduino via 510 Ohms. Sa LED commute la phase du circuit 220V protégé par un disjoncteur de 2A, vers le fil pilote qui ne demande que quelques mA.
Voici le programme :
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 | int baseRadiateur = 2; 8// BaseRadiateur comme un nombre entier lu sur la broche 2 unsigned long heure_debut_sonnerie; const int duree_tot_sonneries = 20000; //stocke la durée totale des sonneries. void setup() { pinMode(baseRadiateur, OUTPUT); // configure la broche 2 en sortie digitalWrite(baseRadiateur, LOW); /* envoie la valeur LOW sur la broche 2 qui est au - de la LED du MOC3041. le MOC3041 devient passant=>fil pilote alimenté 220v,radiateur mode "ECO", LED témoin allumée*/ } void loop() // 1 sonnerie=>mode CONF et > 2 sonneries ou erreur d'appel=>ECO { int valSonnerie = analogRead(A0); // valSonnerie nombre entier lu sur la broche analogique A0 heure_debut_sonnerie = millis(); delay(1000); // pause d'1s dans la boucle pour calmer la loop pour essayer d'éviter que le prog plante après 5 mn if ((valSonnerie) >= 600) { // si téléphone sonne digitalWrite(baseRadiateur, HIGH); //MOC3041 non passant=>fil pilote non alimenté et radiateur commuté sur "CONF" delay(7000); // attente d'une éventuelle 2ème sonnerie while (millis() - heure_debut_sonnerie < duree_tot_sonneries) { //càd<20000 après le début de la 1° sonnerie int valSonnerie = analogRead(A0); if ((valSonnerie) >= 600) { // si le téléphone sonne encore digitalWrite(baseRadiateur, LOW); //MOC3041 passant=>fil pilote alimenté et radiateur commuté sur "ECO" break; // Arrete la boucle while devenue inutile } } delay(14000); // Attente fin de sonnerie après le break } } |
Références : http://eskimon.fr/1582-arduino-501-generalites-sur-les-capteurs www.manuel-esteban.com/arduino-capteur-de-luminosite/ www.sonelec-musique.com/electronique_realisations_detecteur_sonnerie_reveil_002.html