Bonsoir,
Je suis actuellement en Terminale STI2D spé SIN (Systèmes d'Informations et Numériques). Le but de mon projet consiste à réaliser un éclairage intelligent qui prend en charge la lumière extérieure arrivant par les fenêtres de la salle étudiée. Nous appliquons ça sur une maquette.
J'ouvre cette discussion pour que vous me dite ce que vous pensez de mon programme. Car selon mes professeurs, il y aurait "plus simple" et "plus compréhensible". Ne sachant pas m'expliquer correctement, je dois me débrouiller seul.
Donc voici le programme :
Le programme fonctionne et je ne pourrais pas vous montrer le montage désolé.Code:/* Matériel utilisé: -3 transistors. -3 lampes. -3 photorésistances. -Un capteur de présence. -Un afficheur à cristaux liquides. La lampe 1 est au niveau de la porte, la lampe 2 au centre, et la lampe 3 au niveau de la fenêtre. Il y a une photorésistance aux fenêtres pour moduler, et deux autres pour vérifier les résultats en-dessous de la lampe 2 et 1. */ /* L'afficheur à cristaux liquides (Grove-LCD) permet d'afficher la valeur de la photorésistance à la fenêtre. */ #include<Wire.h> #include "rgb_lcd.h" rgb_lcd lcd; // De couleur vert. const int colorR = 0; const int colorG = 128; const int colorB = 64; int lampe1 = 3; // Broche de la lampe 1. int lampe2 = 5; // Broche de la lampe 2. int lampe3 = 6; // Broche de la lampe 3. /* Variables des lampes à 64 soit 25% de cycle de service (pour ne pas avoir une puissance d'éclairement trop important. */ int i1 = 64; // Lampe 1. int i2 = 64; // Lampe 2. int i3 = 64; // Lampe 3. /* A, B et C permettent d'indiquer la valeur de chaque lampe sur le moniteur série. */ float A; // Lampe 1. float B; // Lampe 2. float C; // Lampe 3. // La photorésistance principal (pour moduler). int port1 = A0; int valeur1 = 0; float v1 = 0; // La photorésistance vérifiant la luminosité au centre de la salle. int port2 = A2; int valeur2 = 0; float v2 = 0; // La photorésistance vérifiant la luminosité au niveau de la porte. int port3 = A3; int valeur3 = 0; float v3 = 0; // Le capteur de présence. int analogPin = A1; int p = 0; void setup() { lcd.begin(16,2); lcd.setRGB(colorR,colorG,colorB); Serial.begin(9600); // Les lampes sont configuées en sortie. pinMode(lampe1, OUTPUT); pinMode(lampe2, OUTPUT); pinMode(lampe3, OUTPUT); } void loop() { valeur1 = analogRead(port1); // Lit l’entrée analogique A0. v1 = valeur1 / 4; // La valeur de la photorésistance (0 à 1024) passe de 0 à 255. valeur2 = analogRead(port2); // Lit l’entrée analogique A2. v2 = valeur2 / 4; // La valeur de la photorésistance (0 à 1024) passe de 0 à 255. valeur3 = analogRead(port3); // Lit l’entrée analogique A3. v3 = valeur3 / 4; // La valeur de la photorésistance (0 à 1024) passe de 0 à 255. p = digitalRead(analogPin); // Lit l'entrée analogique A1. if(p = 1) // Si le capteur détecte du mouvement. { /* On module la luminosité des lampes par la Loi en Carré Inverse. La loi en carré inverse est une loi physique postulant qu'une quantité physique (énergie, force, ou autre) est inversement proportionnelle au carré de la distance de l'origine de cette quantité physique. Selon cette loi, la puissance de la lumière sera inversement propor- tionnelle au carré de la distance. Par exemple: Si nous bougeons de 3 mètres de la source lumineuse (3*3=9 donc 1/9), la puissance de la lumière descendra à 1/9 ème de sa puissance de départ. En prenant les fenêtres comme la source de lumière, voici comment la lumière s'affaiblie: -A 3,7 dm (lampe3), la lumière descendra à 1/14. -A 7,7 dm (lampe2), la lumière descendra à 1/59. -A 10,6 dm (lampe1), la lumière descendra à 1/112. La distance doit être en mètre, mais j'ai choisi de mettre les distances mesurées en dm pour ne pas avoir le problème des divisions par 0,... et pour montrer l'écart de puissance de la lumière. */ analogWrite(lampe1,A = i1 - (v1 / 112)); analogWrite(lampe2,B = i2 - (v1 / 59)); analogWrite(lampe3,C = i3 - (v1 / 14)); /* Le but est donc de soustraire l'éclairement de la lumière à celle des lampes. Ce qui nous permet d'avoir toujours le même éclairement réparti dans la pièce. */ } if(p = 0) // Si le capteur ne détecte pas de mouvement. { // Eteindre les lampes. analogWrite(lampe1,A = i1 - 64); analogWrite(lampe2,B = i2 - 64); analogWrite(lampe3,C = i3 - 64); } // Indique la valeur de la photorésistance 1 au niveau de la fenêtre sur l'afficheur. lcd.setCursor(0,0); lcd.print(v1); // Indique la valeur de la photorésistance 2 au centre de la salle. Serial.print("vin2: "); Serial.println(v2); Serial.print(" "); // Indique la valeur de la photorésistance 3 au niveau de la porte. Serial.print("vin3: "); Serial.println(v3); Serial.print(" "); // Indique la valeur de la lampe 1. Serial.print("lampe 1: "); Serial.println(A); Serial.print(" "); // Indique la valeur de la lampe 2. Serial.print("lampe 2: "); Serial.println(B); Serial.print(" "); // Indique la valeur de la lampe 3. Serial.print("lampe 3: "); Serial.println(C); Serial.print(" "); // Indique la présence (1 -> oui, 0 -> non). Serial.print("présence: "); Serial.println(p); }
Merci de vous y intéresser et de me donner votre avis.
-----